diff --git a/.eleventy.js b/.eleventy.js index cc6f53b..a94874d 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,6 +1,16 @@ // Plugin Imports const pluginDirectoryOutput = require("@11ty/eleventy-plugin-directory-output"); const pluginEleventyNavigation = require("@11ty/eleventy-navigation"); +const pluginShopify = require("eleventy-plugin-shopify"); + +// Config Imports +const configShopify = require("./src/config/plugins/shopify"); + +// Filter Imports +const filterGetProductsInCollection = require("./src/config/filters/getProductsInCollection"); + +// Filter Imports +const filterFormatDate = require("./src/config/filters/formatDate"); module.exports = function (eleventyConfig) { /** @@ -17,6 +27,10 @@ module.exports = function (eleventyConfig) { // https://www.11ty.dev/docs/plugins/navigation/ eleventyConfig.addPlugin(pluginEleventyNavigation); + // Queries your Shopify store at build time to expose product and collection data under the `shopify` global object + // https://github.com/dleatherman/eleventy-plugin-shopify + eleventyConfig.addPlugin(pluginShopify, configShopify); + /** * PASSTHROUGH'S * Copy/paste non-template files straight to /public, without any interference from the eleventy engine @@ -28,6 +42,18 @@ module.exports = function (eleventyConfig) { eleventyConfig.addPassthroughCopy("./src/assets/images"); eleventyConfig.addPassthroughCopy("./src/assets/js"); eleventyConfig.addPassthroughCopy("./src/assets/svgs"); + eleventyConfig.addPassthroughCopy("./src/admin"); + + /** + * FILTERS + * Allows modification of data before it is outputted, denoted by {{ contentToPrint | filterName }} + * https://www.11ty.dev/docs/filters/ + */ + + // Turns a date from ISO format to a more human-readable one + eleventyConfig.addFilter("formatDate", filterFormatDate); + + eleventyConfig.addFilter("getProductsInCollection", filterGetProductsInCollection); return { dir: { diff --git a/.env b/.env new file mode 100644 index 0000000..bb35dd0 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +SHOPIFY_STORE_URL=codestitch.myshopify.com +SHOPIFY_ACCESS_TOKEN=3e5d1f3b999bf5d82849f89d66ea2992 +SHOPIFY_API_VERSION=2023-10 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 26311a9..7ec259f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,11 @@ "@11ty/eleventy": "^2.0.1", "@11ty/eleventy-navigation": "^0.3.5", "@11ty/eleventy-plugin-directory-output": "^1.0.1", + "@shopify/buy-button-js": "^2.4.0", "cross-env": "^7.0.3", + "decap-server": "^3.0.1", + "dotenv": "^16.3.1", + "eleventy-plugin-shopify": "^0.1.0", "netlify-plugin-cache": "^1.0.3", "npm-run-all": "^4.1.5" } @@ -184,6 +188,17 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", @@ -197,11 +212,101 @@ "node": ">=6.9.0" } }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "node_modules/@hapi/address": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", + "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "deprecated": "Moved to 'npm install @sideway/address'", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==", + "deprecated": "Moved to 'npm install @sideway/formula'", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/joi": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", + "deprecated": "Switch to 'npm install joi'", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^4.0.1", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" + } + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@iarna/toml": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -234,6 +339,94 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@shopify/buy-button-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@shopify/buy-button-js/-/buy-button-js-2.4.0.tgz", + "integrity": "sha512-JsNgo84mbew3rVrsQ4lPvfovm/i5lnB9Fqq1IvyEFSwkwjPr0xGR+MJFNpOrnsFKha52JW/5EtrQs2oyBrLDhA==", + "dependencies": { + "@babel/runtime": "7.18.9", + "browserify": "16.3.0", + "morphdom": "2.6.1", + "mustache": "3.0.1", + "sass": "1.54.3", + "shopify-buy": "2.20.0", + "uglify-js": "3.16.3" + } + }, + "node_modules/@shopify/buy-button-js/node_modules/morphdom": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.6.1.tgz", + "integrity": "sha512-Y8YRbAEP3eKykroIBWrjcfMw7mmwJfjhqdpSvoqinu8Y702nAwikpXcNFDiIkyvfCLxLM9Wu95RZqo4a9jFBaA==" + }, + "node_modules/@shopify/buy-button-js/node_modules/mustache": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.1.tgz", + "integrity": "sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA==", + "bin": { + "mustache": "bin/mustache" + }, + "engines": { + "npm": ">=1.4.0" + } + }, + "node_modules/@shopify/buy-button-js/node_modules/uglify-js": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@sindresorhus/slugify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", @@ -277,11 +470,28 @@ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "node_modules/a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -293,6 +503,36 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -352,6 +592,11 @@ "node": ">=8" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -401,6 +646,31 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, "node_modules/assert-never": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", @@ -411,6 +681,14 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, + "node_modules/async-mutex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", + "dependencies": { + "tslib": "^2.3.1" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -438,6 +716,43 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/bcp-47": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz", @@ -482,6 +797,65 @@ "node": ">=8" } }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -502,6 +876,289 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" + }, + "node_modules/browserify": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.3.0.tgz", + "integrity": "sha512-BWaaD7alyGZVEBBwSTYx4iJF5DswIGzK17o8ai9w4iKRbYpk3EOiprRHMRRA8DCZFmFeOdx7A385w2XdFvxWmg==", + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" + }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -564,6 +1221,41 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -580,6 +1272,60 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/combine-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -593,6 +1339,25 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, "node_modules/constantinople": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", @@ -602,6 +1367,109 @@ "@babel/types": "^7.6.1" } }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -629,13 +1497,40 @@ "which": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -648,6 +1543,37 @@ } } }, + "node_modules/decap-server": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/decap-server/-/decap-server-3.0.1.tgz", + "integrity": "sha512-djqNHCpKvYU0EqCCKROumK/QT23O1pV+pjqvbg2teCEj+z3mB6ji6GbZk7DXhpK6nHvvvXXdoSz6Ilrll1U9Ug==", + "dependencies": { + "@hapi/joi": "^17.0.2", + "async-mutex": "^0.3.0", + "cors": "^2.8.5", + "dotenv": "^10.0.0", + "express": "^4.18.2", + "morgan": "^1.9.1", + "simple-git": "^3.0.0", + "what-the-diff": "^0.6.0", + "winston": "^3.3.3" + }, + "bin": { + "decap-server": "dist/index.js" + }, + "engines": { + "node": ">=v10.22.1" + } + }, + "node_modules/decap-server/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -677,6 +1603,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -685,6 +1628,55 @@ "node": ">= 0.6.0" } }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", @@ -696,6 +1688,21 @@ "node": ">= 0.8.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -722,6 +1729,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -760,6 +1776,25 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -779,6 +1814,40 @@ "node": ">=0.10.0" } }, + "node_modules/eleventy-plugin-shopify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/eleventy-plugin-shopify/-/eleventy-plugin-shopify-0.1.0.tgz", + "integrity": "sha512-uqXVZxcXkwOPRPLYSom1FcSidNe4MwaqAWH231DMyBPiioRDS5B+wnG0Gas026c8tF0up90yYdc4xhuAjUK/aQ==", + "dependencies": { + "chalk": "^4.1.2", + "node-fetch-cache": "^3.0.3" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -926,6 +1995,110 @@ "node": ">=4" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -952,6 +2125,11 @@ "node": ">=8.6.0" } }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -960,6 +2138,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -1028,6 +2211,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -1036,6 +2224,35 @@ "is-callable": "^1.1.3" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1087,6 +2304,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, "node_modules/get-intrinsic": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", @@ -1215,6 +2437,14 @@ "uglify-js": "^3.1.4" } }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -1278,6 +2508,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -1289,11 +2554,29 @@ "node": ">= 0.4" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", @@ -1320,6 +2603,84 @@ "node": ">= 0.10" } }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1334,6 +2695,42 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/inline-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, "node_modules/internal-slot": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", @@ -1347,6 +2744,14 @@ "node": ">= 0.4" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -1424,6 +2829,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -1574,6 +2984,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -1684,6 +3105,45 @@ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -1717,6 +3177,21 @@ "node": ">=6" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, "node_modules/linkify-it": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", @@ -1771,11 +3246,38 @@ "node": ">=4" } }, + "node_modules/locko": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/locko/-/locko-1.1.0.tgz", + "integrity": "sha512-pYB2dzRY93fJkg2RIl41AMNgTQftEjyTK9vlPrGOJvuGQsOjb267VJBw15BjiN3RBd1oBoKkOu9E2dRdFKIfAA==" + }, "node_modules/lodash.deburr": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==" }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==" + }, + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1856,11 +3358,29 @@ "node": ">=0.10.0" } }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -1869,6 +3389,11 @@ "node": ">= 0.10.0" } }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1877,6 +3402,14 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -1889,6 +3422,23 @@ "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -1900,6 +3450,37 @@ "node": ">=10.0.0" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1930,6 +3511,51 @@ "node": ">=8" } }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -1941,11 +3567,86 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/module-deps/node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dependencies": { + "resolve": "^1.17.0" + } + }, "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/morphdom": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.1.tgz", @@ -1982,6 +3683,14 @@ "mustache": "bin/mustache" } }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -1997,6 +3706,35 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-cache": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/node-fetch-cache/-/node-fetch-cache-3.1.4.tgz", + "integrity": "sha512-pQHOQeW+NJ5Q4/OZwCJNiKRwz6KaVU3uK0oJWIkNOgN1kYWMl46mqAgBBPZfPpz+tfKc8oYYc0HYDESJbqGDNw==", + "dependencies": { + "cacache": "^15.2.0", + "locko": "^1.0.0", + "node-fetch": "2.6.11" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2257,6 +3995,14 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2265,6 +4011,59 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -2290,6 +4089,11 @@ "node": ">= 0.8" } }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2311,6 +4115,14 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -2335,6 +4147,21 @@ "node": ">=4" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2421,6 +4248,19 @@ "node": ">= 4" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -2437,11 +4277,47 @@ "any-promise": "^0.1.0" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", @@ -2554,6 +4430,33 @@ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2573,6 +4476,55 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -2586,6 +4538,38 @@ "node": ">=4" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2613,6 +4597,11 @@ "slash": "^1.0.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", @@ -2665,6 +4654,15 @@ "rimraf": "bin.js" } }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2704,6 +4702,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -2717,6 +4734,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.54.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.3.tgz", + "integrity": "sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -2748,6 +4795,72 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -2775,6 +4888,41 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==", + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2802,6 +4950,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/shopify-buy": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/shopify-buy/-/shopify-buy-2.20.0.tgz", + "integrity": "sha512-xe6VlqJtI/c8BYeH2hhOw7gZSsbHUeGFUwVyAzQOR422Ml4UXTFld0GcbW88tkR/Vgy2tj592EL2paCws2fZzQ==" + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -2815,6 +4968,55 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-git": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz", + "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, "node_modules/slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -2839,6 +5041,14 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -2883,6 +5093,14 @@ "node": ">= 8" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -2891,6 +5109,53 @@ "node": ">= 0.8" } }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string.prototype.padend": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", @@ -2973,6 +5238,14 @@ "node": ">=0.10.0" } }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", + "dependencies": { + "minimist": "^1.1.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2995,6 +5268,85 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3014,11 +5366,57 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/token-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -3080,6 +5478,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -3097,6 +5500,14 @@ "node": ">=0.8.0" } }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "bin": { + "umd": "bin/cli.js" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -3111,6 +5522,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -3119,6 +5561,42 @@ "node": ">= 0.8" } }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -3128,6 +5606,20 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -3136,6 +5628,26 @@ "node": ">=0.10.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/what-the-diff": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/what-the-diff/-/what-the-diff-0.6.0.tgz", + "integrity": "sha512-8BgQ4uo4cxojRXvCIcqDpH4QHaq0Ksn2P3LYfztylC5LDSwZKuGHf0Wf7sAStjPLTcB8eCB8pJJcPQSWfhZlkg==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3183,6 +5695,68 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -3227,6 +5801,14 @@ } } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index bd5a7f1..9982059 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "CodeStitch's Advanced Starter Kit. A kit designed for agency's and freelancers who are knowledgable in HTML, CSS, JS and SSGs, who are wanting to delivery any feature a small to medium business would need", "main": "index.js", "scripts": { + "watch:cms": "npx decap-server", "build:eleventy": "cross-env ELEVENTY_ENV=PROD eleventy", "watch:eleventy": "cross-env ELEVENTY_ENV=DEV eleventy --serve", "start": "run-p watch:*", @@ -23,8 +24,12 @@ "@11ty/eleventy": "^2.0.1", "@11ty/eleventy-navigation": "^0.3.5", "@11ty/eleventy-plugin-directory-output": "^1.0.1", + "@shopify/buy-button-js": "^2.4.0", "cross-env": "^7.0.3", + "decap-server": "^3.0.1", "netlify-plugin-cache": "^1.0.3", + "dotenv": "^16.3.1", + "eleventy-plugin-shopify": "^0.1.0", "npm-run-all": "^4.1.5" } } diff --git a/src/_data/eleventyComputed.js b/src/_data/eleventyComputed.js new file mode 100644 index 0000000..bceeb20 --- /dev/null +++ b/src/_data/eleventyComputed.js @@ -0,0 +1,132 @@ +// Gets the number from a Shopify ID +// gid://shopify/Product/8843402314018 => 8843402314018 +function getIdNumber(id) { + const idLastSlash = id.lastIndexOf("/"); + return id.slice(idLastSlash + 1); +} + +module.exports = { + shopProducts: (data) => { + // Fixes a product price to two decimal places. Uses the Store's preferred money format to append any necessary currency symbols + // "11.0" => "$11.00" + function formatPrice(price) { + if (price === "0.0") { + return null; + } + + const fixedPrice = Number(price).toFixed(2); + + return data.shopify.shop.moneyFormat.replace( + "{{amount}}", + fixedPrice + ); + } + + // Checks product variants to see if there are any intra-product differences in pricing. If there is, prefix price with "From". + // minPrice: 9.0 and maxPrice: 19.99 => simplePrice: "From $9.00" + function getSimplePrice(priceRange) { + const formattedMinPrice = formatPrice( + priceRange.minVariantPrice.amount + ); + + if (!formattedMinPrice) { + return null; + } else if ( + priceRange.minVariantPrice.amount === + priceRange.maxVariantPrice.amount + ) { + return formattedMinPrice; + } else { + return `From ${formattedMinPrice}`; + } + } + + return data.shopify.products.map((product) => { + // Removes the edges/node from the GQL structure + const newImages = []; + product.images.edges.forEach((image) => newImages.push(image.node)); + + // Generates a formatted price for the product and it's min/max variant price values + const price = getSimplePrice(product.priceRange); + product.priceRange.minVariantPrice.price = formatPrice( + product.priceRange.minVariantPrice.amount + ); + product.priceRange.maxVariantPrice.price = formatPrice( + product.priceRange.maxVariantPrice.amount + ); + + // Generates a formatted compareAt price for the product and it's min/max variant compareAt price values + const compareAtPrice = getSimplePrice(product.compareAtPriceRange); + product.compareAtPriceRange.minVariantPrice.price = formatPrice( + product.compareAtPriceRange.minVariantPrice.amount + ); + product.compareAtPriceRange.maxVariantPrice.price = formatPrice( + product.compareAtPriceRange.maxVariantPrice.amount + ); + + // Takes the collection out of the edge/node GQL structure and adds an "idNumber to the entry" + const newCollections = product.collections.edges.map( + (collection) => { + collection.node.idNumber = getIdNumber(collection.node.id); + return collection.node; + } + ); + + // Works out the percentage off price for use in sale tags. Only uses the minimum prices, if multiple variant prices are defined. + const wasPrice = Number( + product.compareAtPriceRange.minVariantPrice.amount + ); + const discountedPrice = Number( + product.priceRange.minVariantPrice.amount + ); + let saleAmount = null; + if (wasPrice !== discountedPrice && wasPrice !== 0) { + saleAmount = ( + ((wasPrice - discountedPrice) / wasPrice) * + 100 + ).toFixed(0); + } + + return { + title: product.title, + id: product.id, + idNumber: getIdNumber(product.id), + handle: product.handle, + description: product.description, + descriptionHtml: product.descriptionHtml, + collections: newCollections, + images: newImages, + tags: product.tags, + compareAtPriceRange: product.compareAtPriceRange, + compareAtPrice, + priceRange: product.priceRange, + price, + saleAmount, + }; + }); + }, + + shopCollections: (data) => { + return data.shopify.collections.map((collection) => { + const collectionProducts = collection.products?.edges.map( + (product) => { + return { + id: getIdNumber(product.node.id), + idLink: product.node.id, + }; + } + ); + + return { + id: collection.id, + idNumber: getIdNumber(collection.id), + title: collection.title, + handle: collection.handle, + description: collection.description, + descriptionHtml: collection.descriptionHtml, + image: collection.image, + products: collectionProducts, + }; + }); + }, +}; diff --git a/src/_data/menu.json b/src/_data/menu.json new file mode 100644 index 0000000..51be694 --- /dev/null +++ b/src/_data/menu.json @@ -0,0 +1,681 @@ +{ + "courses": [ + { + "course_name": "Breakfast", + "course_description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra elit in urna pretium, et facilisis dui faucibus.", + "sections": [ + { + "section_name": "Farm Fresh Eggs", + "section_description": "Served with hash browns or tomatoes (fresh fruit extra) and toast or pancakes", + "items": [ + { + "item_name": "Two Eggs", + "item_description": null, + "item_price": null + }, + { + "item_name": "Two Eggs With Meat", + "item_description": "(Bacon, Sausage Links, Sausage Patties, or Ham)", + "item_price": null + }, + { + "item_name": "Two Eggs With Corned Beef Hash", + "item_description": null, + "item_price": null + } + ] + }, + { + "section_name": "Hearty Skillets", + "section_description": "All Skillets are topped with Two Eggs and served with your choice of toast or Pancakes", + "items": [ + { + "item_name": "Melted Pot Skillet", + "item_description": "Ham, bacon, sausage, onions, and hash browns, topped with American Swiss and cheddar cheeses", + "item_price": null + }, + { + "item_name": "Country Skillet", + "item_description": "Country fried steak, onions, and hash browns, topped with cheddar cheese and smothered in sausage gravy", + "item_price": null + }, + { + "item_name": "Brickyard Skillet", + "item_description": "Skirt steak, onions, green pepper, mushrooms, and hash browns, topped with mozzarella", + "item_price": null + }, + { + "item_name": "Greek Skillet", + "item_description": "Gyros meat, onions, and hash browns, topped with feta cheese", + "item_price": null + }, + { + "item_name": "Chicken Skillet", + "item_description": "Chicken breast, broccoli, green peppers, onions, spinach, tomatoes, and mushrooms", + "item_price": null + } + ] + }, + { + "section_name": "The Lumberjack", + "section_description": null, + "items": [ + { + "item_name": "Choose Your Eggs", + "item_description": "3 Eggs any Style", + "item_price": null + }, + { + "item_name": "Choose Your Meat", + "item_description": "Bacon, Sausage Links, Sausage Patties, or Country Ham", + "item_price": null + }, + { + "item_name": "Choose Your Side #1", + "item_description": "Hash Browns or Fruit", + "item_price": null + }, + { + "item_name": "Choose Your Side #2", + "item_description": "2 Pancakes, 2 French Toast, Waffle, or 2 Slices of Toast (White, Wheat, Rye)", + "item_price": null + }, + { + "item_name": "Choose Your Side #3", + "item_description": "1/2 Biscuits & Gravy, Bowl of Oatmeal", + "item_price": null + } + ] + }, + { + "section_name": "The Breakfast Club", + "section_description": null, + "items": [ + { + "item_name": "2 Pancakes, 2 Eggs, 2 Bacon, 2 Links", + "item_description": null, + "item_price": null + }, + { + "item_name": "1/2 French Toast, 2 Eggs, 2 Bacon, 2 Links", + "item_description": null, + "item_price": null + }, + { + "item_name": "Belgian Waffle, 2 Eggs, 2 Bacon, 2 Links", + "item_description": null, + "item_price": null + }, + { + "item_name": "1/2 Biscuit & Gravy, 2 Eggs, 2 Bacon, 2 Links", + "item_description": null, + "item_price": null + }, + { + "item_name": "Full Biscuits & Gravy, 2 Eggs, 2 Bacon, 2 Links", + "item_description": null, + "item_price": null + } + ] + }, + { + "section_name": "Meat n' Eggs", + "section_description": "2 eggs served with hash browns and toast or pancakes", + "items": [ + { + "item_name": "Skirt Steak", + "item_description": null, + "item_price": null + }, + { + "item_name": "Pork Chops", + "item_description": null, + "item_price": null + }, + { + "item_name": "Country Fried Steak", + "item_description": "Topped with sausage gravy", + "item_price": null + } + ] + }, + { + "section_name": "Omelettes", + "section_description": "Served with hash browns or tomatoes (fresh fruit extra) and toast or pancakes", + "items": [ + { + "item_name": "Tennessee Omelette", + "item_description": "Bacon, sausage, ham, onions, green peppers, and mushrooms smothered in sausage gravy", + "item_price": null + }, + { + "item_name": "Vegetarian Omelette", + "item_description": "Broccoli, green peppers, onions, tomatoes, and mushrooms with cheddar cheese", + "item_price": null + }, + { + "item_name": "Denver Omelette", + "item_description": "Ham, green peppers, onions, and American cheese", + "item_price": null + }, + { + "item_name": "Spinach & Feta Omelette", + "item_description": null, + "item_price": null + }, + { + "item_name": "South of the Border Omelette", + "item_description": "Chorizo and cheddar cheese topped with pico de Gallo and crema drizzle served with a side of salsa", + "item_price": null + }, + { + "item_name": "Meat Lovers Omelette", + "item_description": "Ham, bacon, sausage, onions, and American cheese", + "item_price": null + }, + { + "item_name": "Spartan Omelette", + "item_description": "Gyro, Spinach, onion, tomato, and feta cheese", + "item_price": null + } + ] + }, + { + "section_name": "M&Y Favorites", + "section_description": "Served with Hash Browns (fresh fruit extra)", + "items": [ + { + "item_name": "Greek Burrito", + "item_description": "Gyros meat and onions scrambled in eggs with feta cheese with a side of tzatziki sauce", + "item_price": null + }, + { + "item_name": "Tex-Mex Burrito", + "item_description": "Skirt steak scrambled in eggs with cheddar cheese. Served with pico de Gallo and crema drizzle served with chips and salsa *no potato*", + "item_price": null + }, + { + "item_name": "Country Burrito", + "item_description": "Bacon, sausage, ham, and onions scrambled in eggs with cheddar. Served with a cup of sausage gravy", + "item_price": null + }, + { + "item_name": "Hot Honey Chicken and Waffles", + "item_description": null, + "item_price": null + }, + { + "item_name": "Avocado Toast", + "item_description": "Smashed avocado, cherry tomatoes, everything bagel seasoning, and feta topped with balsamic glaze drizzle", + "item_price": null + }, + { + "item_name": "Eggs Benedict", + "item_description": "English muffin topped with ham, poached eggs, and hollandaise sauce.", + "item_price": null + }, + { + "item_name": "Florentine Benedict", + "item_description": "English muffin, ham, spinach, and poached eggs topped with hollandaise sauce", + "item_price": null + }, + { + "item_name": "Breakfast Panini", + "item_description": "Scrambled eggs, bacon, and American cheese, on grilled sourdough bread", + "item_price": null + }, + { + "item_name": "Ham and Egg Croissant", + "item_description": "Three eggs, sliced ham, and American cheese served on a croissant", + "item_price": null + }, + { + "item_name": "Breakfast Tacos", + "item_description": "Scrambled eggs, chorizo, and cheddar cheese topped with pico de Gallo, and drizzled with crema and served with chips and salsa *no potato*", + "item_price": null + } + ] + }, + { + "section_name": "Penelope’s Pancakes", + "section_description": "Add Fresh Fruit for extra (Strawberries, Blueberry, or Banana)", + "items": [ + { + "item_name": "Triple Berry Pancakes", + "item_description": "Topped with fresh strawberries, blueberries, blackberries, whipped cream, and vanilla drizzle", + "item_price": null + }, + { + "item_name": "Big Stack", + "item_description": null, + "item_price": null + }, + { + "item_name": "Chocolate Chip Pancakes", + "item_description": null, + "item_price": null + }, + { + "item_name": "Pecan Pancakes", + "item_description": null, + "item_price": null + }, + { + "item_name": "Banana Caramel Pecan Pancakes", + "item_description": null, + "item_price": null + }, + { + "item_name": "Oreo Pancakes", + "item_description": null, + "item_price": null + }, + { + "item_name": "Turtle Pancakes", + "item_description": "(3 chocolate chip cakes, topped with pecans and caramel drizzle)", + "item_price": null + } + ] + }, + { + "section_name": "Waffles", + "section_description": null, + "items": [ + { + "item_name": "Belgium Waffle", + "item_description": null, + "item_price": null + }, + { + "item_name": "Pecan Waffle", + "item_description": null, + "item_price": null + }, + { + "item_name": "Banana Royale Waffle", + "item_description": "Topped with banana, ice cream, whipped cream, and chocolate syrup", + "item_price": null + }, + { + "item_name": "Waffle Flight", + "item_description": "3 pearl sugar waffles with a variety of toppings", + "item_price": null + } + ] + }, + { + "section_name": "French Toast", + "section_description": "Add fresh fruit for extra", + "items": [ + { + "item_name": "Very Berry French Toast", + "item_description": "Topped with fresh berries, whipped cream, and vanilla drizzle", + "item_price": null + }, + { + "item_name": "French Toast", + "item_description": null, + "item_price": null + }, + { + "item_name": "Banana Nutella French Toast", + "item_description": null, + "item_price": null + }, + { + "item_name": "Stuffed French Toast", + "item_description": "Stuffed with sweet cream cheese filling", + "item_price": null + }, + { + "item_name": "Strawberries and Cream French toast", + "item_description": "Fresh strawberries with a vanilla cream drizzle", + "item_price": null + } + ] + }, + { + "section_name": "Crêpes", + "section_description": null, + "items": [ + { + "item_name": "Fruit Filled Crêpes", + "item_description": "Choice of Blueberry, Strawberry, or Banana", + "item_price": null + }, + { + "item_name": "Nutella Crêpes", + "item_description": null, + "item_price": null + } + ] + }, + { + "section_name": "Grab 'n' Share", + "section_description": null, + "items": [ + { + "item_name": "French Toast Sticks", + "item_description": "Served with icing dip", + "item_price": null + }, + { + "item_name": "Breakfast Nachos", + "item_description": "Chips, Cheddar, Chorizo, pico de Gallo topped with scrambled egg and crema drizzle, salsa on the side", + "item_price": null + }, + { + "item_name": "Cinnamon Roll", + "item_description": null, + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Sandwiches", + "course_description": "Quisque congue blandit nibh, at cursus leo efficitur at. Nullam vulputate, magna varius interdum dapibus, magna sem pharetra sapien, ac venenatis ipsum metus vel massa.", + "sections": [ + { + "section_name": "All Roll'd Up", + "section_description": "Wraps are served with a bowl of soup, French fries, and a pickle spear.", + "items": [ + { + "item_name": "Turkey Bacon Ranch Wrap", + "item_description": "Turkey, bacon, lettuce, tomato, and ranch dressing wrapped in a flour tortilla.", + "item_price": null + }, + { + "item_name": "Buffalo Chicken Wrap", + "item_description": "Chicken tenders tossed in buffalo sauce with lettuce, tomato, and cheddar cheese, served with ranch or blue cheese dressing.", + "item_price": null + } + ] + }, + { + "section_name": "Hot Off The Press", + "section_description": "Served with soup, French fries, and a pickle spear", + "items": [ + { + "item_name": "Chicken Pom Panini", + "item_description": "Chicken breast and bacon with Swiss cheese and mayo on grilled sourdough", + "item_price": null + }, + { + "item_name": "Club Panini", + "item_description": "Turkey and bacon topped with cheddar and mayo on grilled sourdough", + "item_price": null + }, + { + "item_name": "Da Chicago Panini", + "item_description": "Thin sliced roast beef, American cheese, mayo and onion on grilled sourdough", + "item_price": null + } + ] + }, + { + "section_name": "Feelin’ Brunchy", + "section_description": "Served with soup, French fries, and a pickle spear.", + "items": [ + { + "item_name": "Monte Cristo", + "item_description": "Ham and Swiss cheese dipped in French Toast batter and grilled golden brown", + "item_price": null + }, + { + "item_name": "Steak Sandwich", + "item_description": "Slices of skirt steak with grilled onions, green peppers, and mozzarella cheese on Vienna bread", + "item_price": null + }, + { + "item_name": "Philly Chicken", + "item_description": "Chicken breast with grilled onions, green peppers, mushrooms and mozzarella cheese on Vienna bread", + "item_price": null + }, + { + "item_name": "Italian Beef Sandwich", + "item_description": "Thin slices of prime beef piled on Vienna bread, with a side of giardiniera", + "item_price": null + }, + { + "item_name": "BLT", + "item_description": "Bacon, lettuce, tomato and mayo on toasted bread", + "item_price": null + }, + { + "item_name": "Turkey BLT", + "item_description": "Turkey, bacon, lettuce, tomato and mayo on two slices of toasted bread", + "item_price": null + }, + { + "item_name": "Gyros Sandwich", + "item_description": "Gyros meat, pita and sliced onions served with our homemade tzatziki sauce on the side", + "item_price": null + }, + { + "item_name": "Buffalo Chicken", + "item_description": "Deep fried chicken breast soaked in buffalo sauce", + "item_price": null + }, + { + "item_name": "Chicken Bacon Avo", + "item_description": "Chicken Breast topped with bacon, avocado, and Swiss", + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Burgers", + "course_description": "Cras vulputate lorem et leo fringilla, ac pulvinar nisl mollis. Sed et est est. Vivamus mattis erat ante, vel imperdiet lorem sagittis sed. Suspendisse potenti. Donec sit amet suscipit felis.", + "sections": [ + { + "section_name": "Niko's Burger Bar", + "section_description": "All burgers are hand-smashed and served with soup, French fries, and a pickle spear. Onion Rings available. Options to make it a DOUBLE or add bacon.", + "items": [ + { + "item_name": "The American", + "item_description": "Pure ground beef patty topped with American cheese", + "item_price": null + }, + { + "item_name": "Western Burger", + "item_description": "Ground beef patty topped with cheddar, bacon, onion rings, and BBQ sauce", + "item_price": null + }, + { + "item_name": "Maple & Yolk Burger", + "item_description": "Ground beef patty with bacon, Cheddar Jack cheese, topped with a fried egg", + "item_price": null + }, + { + "item_name": "Patty Melt", + "item_description": "Smashed ground beef patty on grilled marble rye bread with grilled onions and American cheese", + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Salads", + "course_description": "Ut sodales, ex nec tempus euismod, purus libero pulvinar tortor, vel ultrices nunc ipsum sit amet mi. Morbi dignissim convallis diam sed auctor. Maecenas vehicula quam sit amet consequat convallis.", + "sections": [ + { + "section_name": "The Garden", + "section_description": "All salads are served with a bowl of soup and your choice of dressing", + "items": [ + { + "item_name": "Crispy Chicken Avo Salad", + "item_description": "Fresh greens, breaded chicken breast, cucumber, avocado, cherry tomatoes, and cheddar cheese", + "item_price": null + }, + { + "item_name": "Greek Salad", + "item_description": "Fresh greens topped with cucumbers, cherry tomatoes, olives, and feta cheese", + "item_price": null + }, + { + "item_name": "Chef Salad", + "item_description": "Fresh greens topped with ham, turkey, American and Swiss cheese, cucumbers, cherry tomatoes, and a hard-boiled egg", + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Sides", + "course_description": "Phasellus at facilisis nibh, nec pellentesque tellus. Quisque sem mauris, maximus ac ullamcorper a, elementum id tortor. Fusce accumsan placerat ornare.", + "sections": [ + { + "section_name": "Just a lil’ more", + "section_description": null, + "items": [ + { + "item_name": "American Fries", + "item_description": null, + "item_price": null + }, + { + "item_name": "Hash Browns", + "item_description": null, + "item_price": null + }, + { + "item_name": "French Fries", + "item_description": null, + "item_price": null + }, + { + "item_name": "Garden Salad", + "item_description": null, + "item_price": null + }, + { + "item_name": "Soup of the Day – Bowl", + "item_description": null, + "item_price": null + }, + { + "item_name": "Bowl of Oatmeal", + "item_description": "Served with brown sugar and raisins (add fresh berries for extra)", + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Drinks", + "course_description": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus aliquet ac massa sed consequat. Donec sit amet vulputate eros. Integer lorem sapien, vulputate eget lobortis ac, placerat vitae lacus.", + "sections": [ + { + "section_name": "The Bev’s", + "section_description": null, + "items": [ + { + "item_name": "Soft Drinks", + "item_description": null, + "item_price": null + }, + { + "item_name": "Iced Tea", + "item_description": null, + "item_price": null + }, + { + "item_name": "Sweet Tea", + "item_description": null, + "item_price": null + }, + { + "item_name": "Orange or Apple Juice", + "item_description": null, + "item_price": null + }, + { + "item_name": "Regular or Decaf Coffee", + "item_description": null, + "item_price": null + }, + { + "item_name": "Hot Tea", + "item_description": null, + "item_price": null + }, + { + "item_name": "Hot Chocolate", + "item_description": null, + "item_price": null + }, + { + "item_name": "Milk", + "item_description": null, + "item_price": null + }, + { + "item_name": "Chocolate Milk", + "item_description": null, + "item_price": null + }, + { + "item_name": "Latte", + "item_description": "Espresso shot in steamed milk (Plain, French Vanilla, Mocha)", + "item_price": null + }, + { + "item_name": "Espresso Shot", + "item_description": null, + "item_price": null + }, + { + "item_name": "Mimosas", + "item_description": "Original, peach, strawberry", + "item_price": null + } + ] + } + ] + }, + { + "course_name": "Kids", + "course_description": "Proin porttitor ante quis magna sodales mattis. Pellentesque sed consectetur purus, eget sagittis urna. Cras fringilla, ligula at volutpat eleifend, nibh velit elementum felis, quis lobortis turpis nisi vitae augue.", + "sections": [ + { + "section_name": "For our Kiddos", + "section_description": null, + "items": [ + { + "item_name": "Mickey Mouse Pancake", + "item_description": "With 2 bacon or 2 links", + "item_price": null + }, + { + "item_name": "French Toast Sticks", + "item_description": "With icing to dip", + "item_price": null + }, + { + "item_name": "Cheeseburger", + "item_description": "With fries", + "item_price": null + }, + { + "item_name": "Chicken Tenders", + "item_description": "With fries", + "item_price": null + }, + { + "item_name": "Grilled Cheese", + "item_description": "With fries", + "item_price": null + } + ] + } + ] + } + ] +} diff --git a/src/_data/shopAuth.js b/src/_data/shopAuth.js new file mode 100644 index 0000000..dd9b8fa --- /dev/null +++ b/src/_data/shopAuth.js @@ -0,0 +1,6 @@ +// Exposes the public Shopify credentials to be used for the BuyButtonJs library +module.exports = { + store_url: process.env.SHOPIFY_STORE_URL, + access_token: process.env.SHOPIFY_ACCESS_TOKEN, + api_version: process.env.SHOPIFY_API_VERSION, +}; diff --git a/src/_includes/components/featured-post.html b/src/_includes/components/featured-post.html new file mode 100644 index 0000000..fa16b5c --- /dev/null +++ b/src/_includes/components/featured-post.html @@ -0,0 +1,27 @@ + + + + +
+ + + +
\ No newline at end of file diff --git a/src/_includes/components/header.html b/src/_includes/components/header.html index be0ad66..49d016f 100644 --- a/src/_includes/components/header.html +++ b/src/_includes/components/header.html @@ -3,44 +3,11 @@
-
- -
+ -
+ + +
+ - - - icon - -
- Need help? - Visit our subreddit! -
-
-
- + + +
\ No newline at end of file diff --git a/src/_includes/layouts/base.html b/src/_includes/layouts/base.html index 878b2b8..b53dbe9 100644 --- a/src/_includes/layouts/base.html +++ b/src/_includes/layouts/base.html @@ -44,6 +44,17 @@ + + + + {# CS-TODO: Contrary to the Intermediate Kit, all preloads will need to be done manually from the pages head block. This is so responsive preloads can be achieved when using the optimization branch #} {# https://web.dev/articles/preload-responsive-images #} diff --git a/src/_includes/layouts/collection.html b/src/_includes/layouts/collection.html new file mode 100644 index 0000000..a6a7ab6 --- /dev/null +++ b/src/_includes/layouts/collection.html @@ -0,0 +1,61 @@ +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + +
+

{{ shopCollection.title }}

+ + + + + +
+ + + + + +
+
+
+ {% for product in shopProducts | getProductsInCollection(shopCollection.idNumber) %} + {% if product.images | length > 0 %} + + {% endif %} + {% endfor %} + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/src/_includes/layouts/post.html b/src/_includes/layouts/post.html new file mode 100644 index 0000000..326bc56 --- /dev/null +++ b/src/_includes/layouts/post.html @@ -0,0 +1,69 @@ +--- +permalink: '/blog/{{ title | slug }}/index.html' +--- + +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + +
+ + + + + +
+ + + + + +
+ +
+ + + + +
+ + + {{ imageAlt }} + + + +
+

{{ title }}

+
+ + + house + + {{ author }} + + + {{ date | formatDate }} +
+
+
+ {{ content | safe }} +
+
+
+ + + {% include 'components/featured-post.html' %} +
+{% endblock %} \ No newline at end of file diff --git a/src/_includes/layouts/product.html b/src/_includes/layouts/product.html new file mode 100644 index 0000000..e02e09d --- /dev/null +++ b/src/_includes/layouts/product.html @@ -0,0 +1,45 @@ +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + +
+ + + + + +
+ + + + +
+
+ + + + + + sofa product + +
+

{{ shopProduct.title }}

+ {{ shopProduct.price }} + {{ shopProduct.compareAtPrice }} + Local taxes included +

+ {{ shopProduct.descriptionHtml | safe }} +

+ Product Details +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/src/admin/config.yml b/src/admin/config.yml new file mode 100644 index 0000000..fc8d963 --- /dev/null +++ b/src/admin/config.yml @@ -0,0 +1,199 @@ +backend: + name: git-gateway + branch: main + +local_backend: true + +# Change url to a link to the image you want to use, no file paths, must be a URL +logo_url: "https://codestitch.app/frontend/images/logo.png" + +# Where should uploaded files be saved +media_folder: src/assets/images/cms + +# Where should media be served, relative to the base of the built site +public_folder: /assets/images/cms + +collections: + # SETTINGS CONFIG + - label: Settings + name: settings + delete: false + editor: + preview: false + files: + - label: Website Settings + name: website_settings + file: src/_data/client.json + description: Allows a client to update their own contact information, through the default client.json file + fields: + - label: Business Name + name: name + widget: string + summary: Used in browser tab and sharing links + + - label: Email + name: email + widget: string + summary: Main email for customers to contact you + + - label: Unformatted Telephone + name: phoneForTel + widget: string + summary: Used for clickable links to phone. Enter in format xxx-xxx-xxxx + + - label: Formatted Telephone + name: phoneFormatted + widget: string + summary: Used for display on website. Enter in your preferred format + + - label: Address + name: address + widget: object + collapsed: true + fields: + - label: Address Line One + name: lineOne + widget: string + + - label: Address Line Two + name: lineTwo + widget: string + + - label: City + name: city + widget: string + + - label: State + name: state + widget: string + + - label: Zip Code + name: zip + widget: string + + - label: Google Maps Link + name: mapLink + widget: string + summary: Provide a Google Maps share link to guide visitors to your physical locations + + - label: Social Media + name: social + widget: object + collapsed: true + fields: + - label: Facebook + name: facebook + widget: string + + - label: Twitter + name: twitter + widget: string + + - label: Instagram + name: instagram + widget: string + + - label: Youtube + name: youtube + widget: string + + # BLOG CONFIG + - label: Blog + name: blog + folder: src/content/blog + create: true + slug: "{{slug}}" + fields: + - label: Title + name: title + widget: string + + - label: Description + name: description + widget: string + + - label: Author + name: author + widget: string + + - label: Date + name: date + widget: datetime + + - label: Tags + name: tags + widget: list + default: + - post + + - label: Featured Image + name: image + widget: image + + - label: Image Caption + name: imageAlt + widget: string + + - label: Body + name: body + widget: markdown + + # MENU CONFIG + - label: Menu + name: menu + delete: false + editor: + preview: false + files: + - label: Menu Items + name: menu + file: src/_data/menu.json + description: The menu that exists on the /menu page + fields: + - label: Courses + name: courses + label_singular: Course + widget: list + fields: + - label: Course Name + name: course_name + widget: string + hint: '"Breakfast" or "Lunch"' + + - label: Course Description + name: course_description + widget: markdown + + - label: Sections + name: sections + label_singular: Section + widget: list + fields: + - label: Section Name + name: section_name + widget: string + hint: '"Farm Fresh Eggs" or "French Toast"' + + - label: Section Description + name: section_description + widget: markdown + + - label: Items + name: items + label_singular: Item + widget: list + summary: "{{fields.item_name}}" + fields: + - label: Item Name + name: item_name + widget: string + + - label: Item Description + name: item_description + widget: markdown + required: false + + - label: Item Price + name: item_price + widget: number + required: false diff --git a/src/admin/index.html b/src/admin/index.html new file mode 100644 index 0000000..2aa7033 --- /dev/null +++ b/src/admin/index.html @@ -0,0 +1,13 @@ + + + + + + + Content Manager + + + + + + \ No newline at end of file diff --git a/src/assets/css/cms-blog.css b/src/assets/css/cms-blog.css new file mode 100644 index 0000000..d679667 --- /dev/null +++ b/src/assets/css/cms-blog.css @@ -0,0 +1,627 @@ +/*-- -------------------------- --> +<--- Core Styles --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + width: 94%; + max-width: 70em; + margin: auto; + } + .blog-link { + font-size: 1rem; + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 1.5rem; + color: #fff; + background-color: var(--headerColor); + border-radius: 0.25rem; + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; + } + .blog-link:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: 0.25rem; + position: absolute; + top: 0; + left: 0; + z-index: -1; + transition: opacity 0.3s; + } + .blog-link:hover { + color: var(--headerColor); + } + .blog-link:hover:before { + opacity: 1; + } +} +/*-- -------------------------- --> + <--- Header --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #header { + position: relative; + z-index: 1; + } + #header .blog-container { + padding: clamp(100px, 14vw, 200px) 0 clamp(50px, 11vw, 100px); + } + #header .blog-header { + font-size: clamp(24px, 4vw, 48px); + font-weight: 700; + line-height: 1.2em; + text-align: left; + width: 100%; + margin: 0; + color: #fff; + } + #header .blog-bg { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #header .blog-bg:before { + /* color overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + #header .blog-bg img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } +} +/*-- -------------------------- --> + <--- Interior Page Header --> + <--- -------------------------- -*/ +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 16.875rem; + padding-bottom: 5rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + } + #int-hero:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #int-hero picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + } + #int-hero picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #int-hero h1 { + font-size: 2.13333333rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + #int-hero p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } +} +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + } + #int-hero h1 { + font-size: 4rem; + } +} +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} +/*-- -------------------------- --> + <--- Main Content --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + padding: clamp(60px, 7vw, 100px) 0; + } + .main-content-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: 3.125em; + } + .main-content { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: 3.125em; + } +} +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .main-content-wrapper { + flex-direction: row; + align-items: flex-start; + column-gap: 1.25em; + } +} +/*-- -------------------------- --> + <--- Recent Blog Articles --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .recent-articles { + width: 100%; + max-width: 49.6875em; + overflow: hidden; + flex: none; + } + .recent-articles .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + border-radius: 0.5em 0.5em 0 0; + display: block; + position: relative; + overflow: hidden; + } + .recent-articles .blog-mainImage img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + .recent-articles .article-group { + padding: clamp(30px, 5vw, 50px); + border: 1px solid #ebebeb; + border-radius: 0 0 0.5em 0.5em; + } + .recent-articles .blog-author-img { + width: 2em; + height: 2em; + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + } + .recent-articles .blog-author-img img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + .recent-articles .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 0.75rem; + } + .recent-articles .blog-author, + .recent-articles .blog-date { + font-size: 0.875rem; + line-height: 1.5em; + color: var(--bodyTextColor); + } + .recent-articles .blog-dot { + width: 3px; + height: 3px; + background-color: var(--primary); + border-radius: 50%; + display: block; + } + .recent-articles .blog-h1 { + font-size: clamp(20px, 5vw, 32px); + font-weight: 700; + line-height: 1.4em; + margin: 1rem 0; + color: var(--headerColor); + } + .recent-articles .blog-desc { + font-size: 1rem; + line-height: 1.5em; + margin: 1rem 0 2rem; + color: var(--bodyTextColor); + } + .recent-articles .blog-link { + font-size: 1rem; + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 1.5rem; + color: #fff; + background-color: var(--headerColor); + border-radius: 0.25rem; + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; + } + .recent-articles .blog-link:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: 0.25rem; + position: absolute; + top: 0; + left: 0; + z-index: -1; + transition: opacity 0.3s; + } + .recent-articles .blog-link:hover { + color: var(--headerColor); + } + .recent-articles .blog-link:hover:before { + opacity: 1; + } +} +/* Mobile - 1024px */ +@media only screen and (min-width: 64em) { + .recent-articles .blog-h1 { + max-width: 31.25rem; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0em) { + body.dark-mode .recent-articles .blog-h1, + body.dark-mode .recent-articles .blog-desc, + body.dark-mode .recent-articles .blog-author, + body.dark-mode .recent-articles .blog-date { + color: #f7f7f7; + } + body.dark-mode .blog-sidebar .feature-h3, + body.dark-mode .blog-sidebar .feature-date, + body.dark-mode .blog-sidebar .blog-header { + color: #f7f7f7; + } + body.dark-mode .blog-sidebar .blog-header:after { + background: var(--primary); + } + body.dark-mode .blog-article .blog-h1, + body.dark-mode .blog-article .blog-author, + body.dark-mode .blog-article .blog-date { + color: #f7f7f7; + } + body.dark-mode .blog-article #blog-content h1, + body.dark-mode .blog-article #blog-content h2, + body.dark-mode .blog-article #blog-content h3, + body.dark-mode .blog-article #blog-content h4, + body.dark-mode .blog-article #blog-content h5, + body.dark-mode .blog-article #blog-content h6 { + color: #f7f7f7; + } + body.dark-mode .blog-article #blog-content p, + body.dark-mode .blog-article #blog-content li { + color: #f7f7f7; + opacity: 0.8; + } + body.dark-mode .blog-article #blog-content a { + color: #9dafe5; + } +} +/*-- -------------------------- --> + <--- Sidebar --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-sidebar { + width: 100%; + max-width: 49.6875em; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: 3.125em; + } + .blog-sidebar .blog-featured-group { + width: 100%; + padding: 2.1875em 1.875em; + border: 1px solid #ebebeb; + border-radius: 0.5em; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + } + .blog-sidebar .blog-header { + font-size: 1.25em; + font-weight: bold; + text-align: center; + margin-bottom: 1.875rem; + color: var(--headerColor); + display: block; + position: relative; + } + .blog-sidebar .blog-header:after { + content: ""; + width: 3.125rem; + height: 3px; + margin: 1rem auto; + background: var(--headerColor); + border-radius: 0.25rem; + display: block; + position: relative; + } + .blog-sidebar .blog-feature { + text-decoration: none; + width: 100%; + padding: 1.25rem 0; + border-bottom: 1px solid #ebebeb; + display: flex; + justify-content: flex-start; + align-items: center; + column-gap: 1.5em; + } + .blog-sidebar .blog-feature:nth-of-type(1) { + padding-top: 0; + } + .blog-sidebar .blog-feature:last-of-type { + padding-bottom: 0; + border: none; + } + .blog-sidebar .blog-featureImage { + width: 3.75em; + height: 3.75em; + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + flex: none; + } + .blog-sidebar .blog-featureImage img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + .blog-sidebar .feature-h3 { + font-size: 0.9375rem; + font-weight: 700; + line-height: 1.5em; + text-decoration: none; + margin: 0; + margin-bottom: 0.25rem; + color: var(--headerColor); + display: block; + } + .blog-sidebar .feature-date { + font-size: 0.875rem; + line-height: 1.5em; + color: var(--bodyTextColor); + display: block; + } +} +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .blog-sidebar { + max-width: 22.5em; + } +} +/*-- -------------------------- --> + <--- Blog Articles --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-article { + width: 100%; + max-width: 49.6875em; + display: block; + } + .blog-article .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + margin-bottom: 3.125em; + border-radius: 0.5em; + display: block; + position: relative; + overflow: hidden; + } + .blog-article .blog-mainImage img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + .blog-article .blog-author-img { + width: 2em; + height: 2em; + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + } + .blog-article .blog-author-img img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + .blog-article .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 0.75rem; + } + .blog-article .blog-author, + .blog-article .blog-date { + font-size: 0.875rem; + line-height: 1.5em; + color: var(--bodyTextColor); + } + .blog-article .blog-dot { + width: 3px; + height: 3px; + background-color: #fe4f70; + border-radius: 50%; + display: block; + } + .blog-article .blog-h1 { + font-size: clamp(20px, 5vw, 39px); + font-weight: 700; + line-height: 1.4em; + max-width: 34.375rem; + margin: 1rem 0; + color: var(--headerColor); + } + .blog-article #blog-content { + margin-top: 1em; + padding-top: 1.5625em; + border-top: 1px solid #ebebeb; + } + .blog-article #blog-content h1 { + font-size: 2.25rem; + font-weight: 700; + line-height: 1.75em; + margin-bottom: 1rem; + color: var(--headerColor); + } + .blog-article #blog-content h2 { + font-size: 1.75rem; + font-weight: 700; + line-height: 1.5em; + margin-bottom: 1rem; + color: var(--headerColor); + } + .blog-article #blog-content h3 { + font-size: 1.5rem; + font-weight: 700; + line-height: 1.5em; + margin-bottom: 1rem; + color: var(--headerColor); + } + .blog-article #blog-content h4, + .blog-article #blog-content h5, + .blog-article #blog-content h6 { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.5em; + margin-bottom: 1rem; + color: var(--headerColor); + } + .blog-article #blog-content p { + font-size: 1rem; + line-height: 1.6em; + margin: 0; + margin-bottom: 1rem; + color: var(--bodyTextColor); + } + .blog-article #blog-content a { + font-size: inherit; + text-decoration: underline; + color: var(--secondary); + } + .blog-article #blog-content ul, + .blog-article #blog-content ol { + margin: 0; + margin: 1rem 0; + padding-left: 2.5rem; + } + .blog-article #blog-content ul li, + .blog-article #blog-content ol li { + font-size: 1rem; + line-height: 1.6em; + list-style: circle; + margin-bottom: 1rem; + color: var(--bodyTextColor); + } + .blog-article #blog-content img { + width: 100%; + height: auto; + margin: 1rem 0; + border-radius: 0.5rem; + display: block; + } +} diff --git a/src/assets/css/cms-menu.css b/src/assets/css/cms-menu.css new file mode 100644 index 0000000..f59198c --- /dev/null +++ b/src/assets/css/cms-menu.css @@ -0,0 +1,481 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #banner-1018 { + z-index: 1; + position: relative; + background-color: #000; + padding: 0 1rem; + /* 160px - 245px */ + padding-top: 16.875rem; + padding-bottom: 7.5rem; + } + #banner-1018 .cs-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: auto; + max-width: 80rem; + width: 100%; + text-align: center; + } + #banner-1018 .cs-picture { + position: relative; + display: flex; + justify-content: center; + align-items: center; + margin: 0 0 0.75rem; + width: 100%; + gap: 1rem; + } + #banner-1018 .cs-picture:before { + position: relative; + /* left line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: 9.375rem; + width: 50%; + } + #banner-1018 .cs-picture:after { + position: relative; + /* right line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: 9.375rem; + width: 50%; + } + #banner-1018 .cs-icon { + height: auto; + /* 100px - 180px */ + max-width: clamp(6.25rem, 18vw, 11.25rem); + width: 40%; + /* prevents flexbox from squishing it */ + flex: none; + } + #banner-1018 .cs-int-title { + position: relative; + margin: 0 0 1rem 0; + max-width: 43.75rem; + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.5vw, 3.8125rem); + line-height: 1.2em; + font-weight: 900; + color: var(--bodyTextColorWhite); + text-align: center; + } + #banner-1018 .cs-text { + margin: 0; + max-width: 47.8125rem; + width: 100%; + /* 16px - 20px */ + font-size: clamp(1rem, 2vw, 1.25rem); + line-height: 1.5em; + color: var(--bodyTextColorWhite); + text-align: inherit; + } + #banner-1018 .cs-background { + z-index: -1; + position: absolute; + top: 0; + left: 0; + opacity: 0.7; + display: block; + height: 100%; + width: 100%; + } + #banner-1018 .cs-background:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + /* black overlay box */ + content: ""; + opacity: 0.72; + display: block; + background: #000; + height: 100%; + width: 100%; + } + #banner-1018 .cs-background img { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + object-fit: cover; + } +} +/*-- -------------------------- --> +<--- Menu --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + html, + body { + overflow: initial; + /* when you click a menu button and jump to the top of the screen this makes it so it has a smooth transiiton instead of an abrupt movement */ + scroll-behavior: smooth; + } + #cs-menu-group { + height: auto; + padding: var(--sectionPadding); + padding-right: 0; + padding-bottom: 0; + padding-left: 0; + /* remove the font family so the Stitch inherits the fonts from your global stylesheet */ + text-align: center; + } + #cs-menu-group .cs-container { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + margin: auto; + /* changes to 1280px at tablet */ + max-width: 34.375em; + width: 100%; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: var(--sectionPadding); + /* 48px - 64px */ + padding-top: clamp(3em, 5vw, 4em); + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + #cs-menu-group .cs-hidden { + display: none; + } + #cs-menu-group .cs-wrapper { + z-index: 10000; + position: sticky; + /* change based on how tall your navigation is above it. If your navigation is 90px tall, set it to 100px from the top on mobile, and increase the larger value in the clamp to change the desktop value if you need to as well */ + top: 13rem; + display: flex; + flex-wrap: wrap; + grid-template-columns: repeat(12, 1fr); + justify-content: center; + border: 1px solid #b4b2c7; + border-radius: 4.375em; + margin: 0 auto; + background-color: #f3f3f3; + max-width: 56.25rem; + width: 94%; + box-sizing: border-box; + padding: 0; + /* 16px - 28px top & bottom */ + /* 32px - 48px left & right */ + padding: clamp(1em, 3vw, 1.75em) clamp(2em, 4vw, 3em); + box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + column-gap: clamp(0.5rem, 2vw, 1.5rem); + row-gap: 0.5rem; + } + #cs-menu-group .cs-button-group { + z-index: 1000; + margin: 0 0.5rem 0 0; + width: auto; + grid-column: span 6; + /* 24px - 36px */ + column-gap: clamp(1.5rem, 2vw, 2.25rem); + row-gap: 0.75rem; + } + #cs-menu-group .cs-button { + position: relative; + display: flex; + justify-content: center; + align-items: center; + border: none; + background-color: transparent; + width: 100%; + padding: 0.25rem; + font-size: clamp(0.875rem, 1.3vw, 1rem); + line-height: 1.5; + font-weight: 400; + color: #878787; + transition: color 0.3s, font-weight 0.3s, color 0.3s; + } + #cs-menu-group .cs-button:hover { + color: var(--primary); + cursor: pointer; + } + #cs-menu-group .cs-button:after { + position: relative; + /* active state icon */ + content: ""; + opacity: 0; + display: block; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons%2Ffancy-icon.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + /* 16px - 24px */ + height: clamp(1em, 3vw, 1.5em); + width: 0; + transition: width 0.3s, opacity 0.3s, margin-left 0.3s; + } + #cs-menu-group .cs-button.cs-active { + font-weight: 700; + color: var(--headerColor); + } + #cs-menu-group .cs-button.cs-active:after { + opacity: 1; + /* 8px - 16px */ + margin-left: clamp(0.5em, 0.5vw, 1em); + width: clamp(1.5625em, 3vw, 2.25em); + } + #cs-menu-group .cs-menu { + display: flex; + flex-direction: column; + align-items: center; + /* 32px - 64px */ + gap: clamp(2rem, 6vw, 4rem); + } + #cs-menu-group .cs-menu.cs-menu-style2 { + position: relative; + /* changes to desktop at desktop */ + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood2-m.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + } + #cs-menu-group .cs-menu.cs-menu-style2:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + content: ""; + opacity: 0.7; + display: block; + background: #000; + height: 100%; + width: 100%; + } + #cs-menu-group .cs-menu.cs-menu-style2 .cs-title, + #cs-menu-group .cs-menu.cs-menu-style2 .cs-text { + color: var(--bodyTextColorWhite); + } + #cs-menu-group .cs-menu.cs-menu-style2 .cs-name { + color: var(--bodyTextColorWhite); + } + #cs-menu-group .cs-menu.cs-menu-style2 .cs-menu-p { + opacity: 0.8; + color: #fff; + } + #cs-menu-group .cs-menu.cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.7); + } + #cs-menu-group .cs-content { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + width: 100%; + /* set text align to left if content needs to be left aligned */ + text-align: center; + } + #cs-menu-group .cs-title { + position: relative; + margin: 0 0 1rem 0; + max-width: 43.75rem; + font-size: clamp(3.9375rem, 7.9vw, 5.4625rem); + line-height: 1.2em; + color: var(--headerColor); + text-align: inherit; + } + #cs-menu-group .cs-text { + margin: 0; + max-width: 40.625rem; + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } + #cs-menu-group .cs-menu-list { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + padding: 0; + row-gap: 2rem; + } + #cs-menu-group .cs-menu-row { + display: flex; + flex-direction: column; + align-items: stretch; + /* 32px - 60px */ + row-gap: clamp(2rem, 6vw, 3.75rem); + } + #cs-menu-group .cs-menu-item { + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + list-style: none; + text-align: left; + gap: 1rem; + } + #cs-menu-group .cs-h3 { + position: relative; + display: flex; + justify-content: flex-start; + align-items: flex-start; + margin: 0; + width: 100%; + /* 20px - 25px */ + font-size: clamp(1.25rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: 700; + gap: 1rem; + } + #cs-menu-group .cs-h3:after { + /* forces it into the 2nd position */ + order: 2; + position: relative; + /* divider line */ + content: ""; + opacity: 1; + display: block; + margin-top: clamp(1.125rem, 2vw, 1.5rem); + background: #b4b2c7; + height: 1px; + max-width: 12.5rem; + min-width: 1rem; + width: 100%; + } + #cs-menu-group .cs-name { + display: block; + /* 4px - 8px */ + margin: clamp(0.25rem, 0.8vw, 0.625rem) 0 0 0; + margin-right: auto; + max-width: 16ch; + /* prevents flexbox from squishing it */ + flex: none; + } + #cs-menu-group .cs-price { + /* forces it into the 3rd position */ + order: 3; + display: block; + border: 1px solid #b4b2c7; + border-radius: 5rem; + margin: 0; + background-color: #fff; + width: auto; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: 0.5rem 0.75rem; + /* 20px - 25px */ + font-size: clamp(1rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: bold; + color: var(--primary); + /* prevents flexbox from squishing it */ + flex: none; + } + #cs-menu-group .cs-menu-p { + margin: 0; + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #cs-menu-group .cs-container { + max-width: 80rem; + } + #cs-menu-group .cs-menu { + width: 100%; + } + #cs-menu-group .cs-menu.cs-menu-style2 { + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + } + #cs-menu-group .cs-menu-row { + flex-direction: row; + justify-content: stretch; + width: 100%; + /* 32px - 80px */ + gap: clamp(2em, 4vw, 5rem); + } + #cs-menu-group .cs-menu-row.cs-3 .cs-h3 { + gap: 0.5rem; + } + #cs-menu-group .cs-menu-row.cs-3 .cs-h3:after { + display: none; + } + #cs-menu-group .cs-menu-row.cs-3 .cs-name { + max-width: 20ch; + width: 70%; + font-size: clamp(1rem, 2vw, 1.5625rem); + } + #cs-menu-group .cs-menu-row { + display: grid; + grid-template-columns: repeat(12, 1fr); + width: 100%; + } + #cs-menu-group .cs-menu-item { + margin: 0 auto; + max-width: 37.5rem; + grid-column: span 4; + } + #cs-menu-group .cs-name { + max-width: 70%; + width: fit-content; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #cs-menu-group { + background-color: rgba(0, 0, 0, 0.5); + } + body.dark-mode #cs-menu-group .cs-wrapper { + background-color: var(--medium); + } + body.dark-mode #cs-menu-group .cs-button { + color: #fff; + } + body.dark-mode #cs-menu-group .cs-button:hover { + color: var(--secondary); + } + body.dark-mode #cs-menu-group .cs-topper { + color: var(--primaryLight); + } + body.dark-mode #cs-menu-group .cs-title, + body.dark-mode #cs-menu-group .cs-text, + body.dark-mode #cs-menu-group .cs-name, + body.dark-mode #cs-menu-group .cs-menu-p { + color: var(--bodyTextColorWhite); + } + body.dark-mode #cs-menu-group .cs-text, + body.dark-mode #cs-menu-group .cs-menu-p { + opacity: 0.8; + } + body.dark-mode #cs-menu-group .cs-price { + background-color: var(--medium); + color: var(--secondary); + } + body.dark-mode #cs-menu-group .cs-menu-style2 .cs-price { + background-color: #fff; + color: var(--primary); + } + body.dark-mode #cs-menu-group .cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.03); + } +} diff --git a/src/assets/css/cms.css b/src/assets/css/cms.css new file mode 100644 index 0000000..6a4616c --- /dev/null +++ b/src/assets/css/cms.css @@ -0,0 +1,336 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + padding-top: 16.875rem; + padding-bottom: 6.25rem; + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + } + #banner-1400 .cs-container { + text-align: center; + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + #banner-1400 .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + #banner-1400 .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + #banner-1400 .cs-link { + font-size: 1rem; + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + } + #banner-1400 .cs-link:last-of-type { + /* remove the chevron on the last list item */ + } + #banner-1400 .cs-link:last-of-type::after { + display: none; + } + #banner-1400 .cs-link:after { + /* chevron */ + content: ""; + width: 0.4375rem; + height: 0.75rem; + margin: 0 1rem; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + #banner-1400 .cs-link.cs-active { + color: var(--primary); + } + #banner-1400 .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #banner-1400 .cs-background:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + #banner-1400 .cs-background:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#000000), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient(top, #000000 0%, rgba(0, 0, 0, 0) 100%); + background: linear-gradient( + to bottom, + #000000 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + #banner-1400 .cs-background img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 .cs-background:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(#000000), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient(left, #000000 0%, rgba(0, 0, 0, 0) 100%); + background: linear-gradient( + to right, + #000000 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } +} +/*-- -------------------------- --> + <--- Content Page --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #content-page-847 { + padding: var(--sectionPadding); + background-color: #fff; + position: relative; + z-index: 1; + /* clips the wave background from causing overflow issues when it goes off screen */ + overflow: hidden; + } + #content-page-847 .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + position: relative; + } + #content-page-847 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: 39.375rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + } + #content-page-847 h2, + #content-page-847 h3, + #content-page-847 h4, + #content-page-847 h5, + #content-page-847 h6 { + font-weight: 700; + text-align: inherit; + margin: 0 0 1rem 0; + color: var(--headerColor); + } + #content-page-847 h2 { + font-size: 2rem; + margin-top: 2rem; + } + #content-page-847 h3 { + font-size: 1.5rem; + color: var(--primary); + } + #content-page-847 h4, + #content-page-847 h5, + #content-page-847 h6 { + font-size: 1.25rem; + } + #content-page-847 .cs-button-solid { + margin-bottom: 2rem; + } + #content-page-847 .cs-no-margin { + margin: 0; + } + #content-page-847 .cs-color { + color: var(--primary); + } + #content-page-847 p { + font-size: var(--bodyFontSize); + line-height: 1.5em; + text-align: inherit; + width: 100%; + margin: 0 0 1rem 0; + color: var(--bodyTextColor); + } + #content-page-847 p:last-of-type { + margin-bottom: 2rem; + } + #content-page-847 p a { + font-size: inherit; + line-height: inherit; + text-decoration: underline; + color: var(--primary); + } + #content-page-847 ol, + #content-page-847 ul { + margin: 0 0 2rem 0; + padding-left: 1.5rem; + color: var(--bodyTextColor); + display: flex; + flex-direction: column; + gap: 1rem; + } + #content-page-847 ul li { + list-style: none; + color: inherit; + position: relative; + } + #content-page-847 ul li:before { + /* custom list bullet */ + content: ""; + width: 3px; + height: 3px; + background: currentColor; + opacity: 1; + border-radius: 50%; + display: block; + position: absolute; + top: 0.625rem; + left: -0.75rem; + } + #content-page-847 img { + width: 100%; + height: auto; + display: block; + } + #content-page-847 .cs-image-group { + width: 50%; + max-width: 33.875rem; + display: none; + flex-direction: column; + gap: 1.25rem; + position: relative; + } + #content-page-847 .cs-picture { + width: 100%; + /* 300px - 520px */ + height: clamp(18.75rem, 40vw, 32.5rem); + /* prevents border from affecting height and width */ + box-sizing: border-box; + box-shadow: 0px 3.3478px 50.2169px rgba(0, 0, 0, 0.16); + display: block; + position: relative; + /* clips img tag corners */ + overflow: hidden; + } + #content-page-847 .cs-picture img { + width: 100%; + height: 100%; + /* makes it act like a background image */ + object-fit: cover; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #content-page-847 .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: flex-start; + } + #content-page-847 .cs-content { + width: 60%; + flex: none; + } + #content-page-847 .cs-image-group { + display: flex; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #content-page-847 { + background-color: var(--dark); + } + body.dark-mode #content-page-847 .cs-title, + body.dark-mode #content-page-847 .cs-text, + body.dark-mode #content-page-847 h2, + body.dark-mode #content-page-847 h3, + body.dark-mode #content-page-847 h4, + body.dark-mode #content-page-847 h5, + body.dark-mode #content-page-847 h6, + body.dark-mode #content-page-847 li, + body.dark-mode #content-page-847 p { + color: var(--bodyTextColorWhite); + } + body.dark-mode #content-page-847 .cs-color, + body.dark-mode #content-page-847 a { + color: var(--primaryLight); + } + body.dark-mode #content-page-847 p, + body.dark-mode #content-page-847 li { + color: #ebebeb; + } + body.dark-mode #content-page-847 .cs-picture { + background-color: var(--dark); + border-color: var(--dark); + } +} diff --git a/src/assets/css/collection.css b/src/assets/css/collection.css new file mode 100644 index 0000000..2edb586 --- /dev/null +++ b/src/assets/css/collection.css @@ -0,0 +1,227 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 9.375rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + } + #int-hero:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #int-hero picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + } + #int-hero picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #int-hero h1 { + font-size: 2.13333333rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + #int-hero p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } +} +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + } + #int-hero h1 { + font-size: 4rem; + } +} +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} +/*-- -------------------------- --> + <--- Collection --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #collection { + padding: var(--sectionPadding); + } + #collection .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + position: relative; + z-index: 1; + } + #collection .cs-card-group { + width: 100%; + margin: 0; + padding: 0; + display: grid; + justify-items: center; + grid-template-columns: repeat(auto-fit, minmax(19.0625rem, 1fr)); + /* 16px - 20px */ + column-gap: clamp(1rem, 3vw, 1.25rem); + /* 16px - 40px */ + row-gap: clamp(1rem, 3vw, 2.5rem); + position: relative; + transform-style: preserve-3d; + } + #collection .cs-item { + max-width: 18.5rem; + padding: 1rem; + border: 1px solid #e8e8e8; + } + #collection .cs-item:hover .cs-picture img { + transform: scale(1.05); + } + #collection .cs-link { + text-decoration: none; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + #collection .cs-image-group { + width: auto; + height: 18.75rem; + margin-bottom: 1.25rem; + position: relative; + } + #collection .cs-picture { + width: 100%; + height: 100%; + display: block; + overflow: hidden; + } + #collection .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s; + } + #collection .cs-offer { + font-size: 0.8125rem; + font-weight: 700; + line-height: 1.2em; + text-transform: uppercase; + letter-spacing: 1.3px; + padding: 0.375rem; + color: #fff; + background: #ff4747; + position: absolute; + top: 0.75rem; + right: 0.75rem; + } + #collection .cs-product { + /* 20px - 24px */ + font-size: clamp(1.25rem, 3vw, 1.5rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + } + #collection .cs-wrapper { + margin-top: 1.25rem; + display: flex; + justify-content: space-between; + align-items: center; + } + #collection .cs-info { + display: flex; + flex-direction: row; + align-items: center; + } + #collection .cs-price { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + color: var(--primary); + } + #collection .cs-old-price { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #collection .cs-item { + max-width: none; + } + #collection .cs-image-group { + height: clamp(12rem, 23vw, 20rem); + } +} +/* Small Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #collection .cs-card-group { + grid-template-columns: repeat(4, 1fr); + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #collection .cs-offer, + body.dark-mode #collection .cs-product, + body.dark-mode #collection .cs-price, + body.dark-mode #collection .cs-old-price { + color: var(--bodyTextColorWhite); + } + body.dark-mode #collection .cs-item:hover .cs-picture { + background-color: rgba(255, 255, 255, 0.2); + } + body.dark-mode #collection .cs-picture { + background-color: rgba(255, 255, 255, 0.1); + } +} diff --git a/src/assets/css/local.css b/src/assets/css/local.css index 744c0bc..27903ed 100644 --- a/src/assets/css/local.css +++ b/src/assets/css/local.css @@ -25,8 +25,7 @@ gap: clamp(8.75rem, 13vw, 11.25rem); } #hero-1621 .cs-content { - --cornerWidth: 8.75rem; - --cornerHeight: 8.75rem; + width: 100%; max-width: 53.125rem; /* prevents padding from affecting height and width */ @@ -40,82 +39,8 @@ position: relative; z-index: 1; } - #hero-1621 .cs-content:before { - /* top left corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-right: none; - border-bottom: none; - display: block; - position: absolute; - top: 0; - left: 0; - z-index: -1; - } - #hero-1621 .cs-content:after { - /* top right corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-bottom: none; - border-left: none; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - } - #hero-1621 .cs-corners { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: -1; - } - #hero-1621 .cs-corners:before { - /* bottom left corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-top: none; - border-right: none; - display: block; - position: absolute; - bottom: 0; - left: 0; - z-index: -1; - } - #hero-1621 .cs-corners:after { - /* bottom right corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-top: none; - border-left: none; - display: block; - position: absolute; - right: 0; - bottom: 0; - z-index: -1; - } + + #hero-1621 .cs-topper { /* 13px - 16px */ font-size: clamp(0.8125rem, 1.5vw, 1rem); @@ -139,13 +64,38 @@ } #hero-1621 .cs-title { /* 39px - 61px */ - font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-size: clamp(5.4375rem, 8.4vw, 14.8125rem); font-weight: 700; line-height: 1.2em; - text-align: center; + text-align: start; max-width: 51.8125rem; /* 16px - 24px */ - margin: 0 0 2.5rem 0; + margin-top:-200px; + color: #d7b65d; + position: relative; + } + #hero-1621 .cs-title2 { + /* 39px - 61px */ + font-size: clamp(5.4375rem, 8.4vw, 10.8125rem); + font-weight: 700; + line-height: 1.2em; + text-align: start; + max-width: 51.8125rem; + /* 16px - 24px */ + margin-top:-40px; + color: #fff; + position: relative; + } + #hero-1621 .cs-title3 { + /* 39px - 61px */ + font-size:30px; + font-weight: 700; + line-height: 1.2em; + text-align: start; + max-width: 51.8125rem; + /* 16px - 24px */ + margin-top: -100px; + margin-left: 20px; color: #fff; position: relative; } @@ -166,7 +116,7 @@ margin: 0; padding: 0; display: grid; - grid-template-columns: repeat(12, 1fr); + grid-template-columns: repeat(9, 8rem); /* 16px - 20px */ gap: clamp(1rem, 2.3vw, 1.25rem); } @@ -179,7 +129,7 @@ box-sizing: border-box; /* 24px - 32px */ padding: clamp(1.5rem, 3vw, 2rem); - background-color: #fff; + background-color: #192026; box-shadow: 0px 12px 80px 0px rgba(26, 26, 26, 0.08); display: flex; flex-direction: column; @@ -203,7 +153,7 @@ line-height: 1.2em; text-align: inherit; margin: 0 0 1rem 0; - color: var(--headerColor); + color: var(--titleColor); } #hero-1621 .cs-item-text { /* 14px - 16px */ @@ -258,6 +208,33 @@ } /* Large Desktop - 1300px */ @media only screen and (min-width: 81.25rem) { + #hero-1621 .cs-container { + width: 100%; + max-width: 80rem; + + display: flex; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + margin-right: 200px; + gap: clamp(8.75rem, 13vw, 11.25rem); + } + #hero-1621 .cs-content { + + width: 100%; + max-width: 53.125rem; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + /* 112px - 144px top & bottom */ + /* 16px - 48px left & right */ + margin-bottom: 200px; + padding: clamp(7rem, 8vw, 9rem) clamp(1rem, 5vw, 3rem); + display: flex; + flex-direction: column; + align-items: start; + position: relative; + z-index: 1; + } #hero-1621 .cs-item { grid-column: span 3; } @@ -265,6 +242,254 @@ height: 80%; } } + + + +@media only screen and (min-width: 81.25rem) { + + #image-section { + margin-top: 100px; + position: relative; + width: 100%; + height: 600px; /* Adjust as needed */ + overflow: hidden; + background-image: url('../images/road1.avif'); + + background-repeat: no-repeat; + background-position: center; + background-size: cover; + + } + + + /* Container for titles */ + #image-section .titles-container { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 100%; + text-align: center; + padding: 20px; /* Adjust as needed */ + margin-top: 50px; + } + + #image-section .title1 { + margin: 0; + color: #111926; /* Title color */ + font-size: 1.5rem; /* Adjust size as needed */ + font-weight: bold; + } + + #image-section .title2 { + margin: 0; + color: #d7b65d; /* Title color */ + font-size: 6rem; /* Adjust size as needed */ + font-weight: bold; + } + + #image-section .title3 { + margin: 0; + color: #111926; /* Title color */ + font-size: 6rem; /* Adjust size as needed */ + font-weight: bold; + } + + + + +} + +@media only screen and (min-width: 81.25rem) { + + #image2 .overlay-image { + margin-top: 3200px; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 70%; /* Adjust the width as needed */ + height: auto; /* Maintain aspect ratio */ + z-index: 2; /* Ensure it appears above both sections */ + pointer-events: none; /* Allow clicks to pass through */ + } + + /* Container for titles */ + +} + + +@media only screen and (min-width: 81.25rem) { + + #background-seat { + position: relative; /* Ensure that the image is positioned relative to this container */ + } + + #background-seat .overlay-image { + + margin-top: -450px; + position: absolute; + top: 0; + right: 0; /* Align to the right side of the container */ + transform: translateX(0); /* No need to center horizontally */ + width: 45%; /* Adjust the width as needed */ + height: 600px; /* Maintain aspect ratio */ + z-index: 2; /* Ensure it appears above both sections */ + pointer-events: none; /* Allow clicks to pass through */ + } + + /* Container for titles */ + +} + +@media only screen and (min-width: 81.25rem) { + + #black-background { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #111926; + color: #fff; /* Text color */ + padding: 20px; /* Adjust as needed */ + position: relative; /* Ensure positioning context for the image */ + } + + #black-background .content h2 { + margin-top: 300px; + + margin-bottom: 10px; + font-size: 2.5rem; /* Adjust size as needed */ + line-height: 1.2; /* Adjust line height as needed */ + color: #fff; /* Default color for the text */ + } + + #black-background .highlight { + color: #d7b65d; /* Change this to your desired color */ + font-weight: bold; /* Optional: Make it bold */ + } + + #black-background .svg-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 columns */ + grid-template-rows: repeat(2, auto); /* 2 rows */ + gap: 20px; /* Space between items */ + max-width: 40%; /* Ensure grid fits within container */ + padding: 20px; /* Padding around the grid */ + box-sizing: border-box; /* Include padding in width calculation */ + } + + + #black-background .svg-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: transparent; /* Light background for each item */ + border-radius: 10px; + padding: 20px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Subtle shadow */ + box-sizing: border-box; /* Include padding in width calculation */ + } + + + #black-background .svg-icon { + width: 100px; /* Adjust size as needed */ + height: auto; /* Maintain aspect ratio */ + margin-bottom: 10px; /* Space between SVG and title */ + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); + } + + + #black-background .svg-title { + font-size: 1rem; /* Adjust size as needed */ + color: #ffffff; /* Title color */ + text-align: center; /* Center-align the title */ + } + + + + + /* Container for titles */ + +} + + + + + + +@media only screen and (max-width: 81.25rem) { + #image-section { + height: 300px; /* Adjust for mobile */ + background-image: url('../images/road1.avif'); /* Ensure correct path */ + background-size: cover; + } + + #image-section .titles-container { + position: relative; + padding: 10px; /* Adjust as needed */ + margin-top: 20px; + text-align: center; + } + + #image-section .title1, + #image-section .title3 { + font-size: 1.2rem; /* Adjust size as needed for mobile */ + } + + #image-section .title2 { + font-size: 3rem; /* Adjust size as needed for mobile */ + } +} + + +@media only screen and (max-width: 81.25rem) { + #image2 .overlay-image { + margin-top: 100px; /* Adjust top margin for mobile */ + position: relative; /* Adjust positioning */ + width: 100%; /* Adjust width for mobile */ + height: auto; /* Maintain aspect ratio */ + z-index: 1; /* Adjust if needed */ + } +} + +@media only screen and (max-width: 81.25rem) { + #background-seat { + position: relative; /* Adjust if needed */ + } + + #background-seat .overlay-image { + margin-top: 100px; /* Adjust top margin for mobile */ + position: relative; /* Adjust positioning */ + width: 100%; /* Adjust width for mobile */ + height: 300px; /* Adjust height for mobile */ + z-index: 1; /* Adjust if needed */ + } +} + +@media only screen and (max-width: 81.25rem) { + #black-background { + display: block; /* Stack items vertically on mobile */ + background-color: #111926; + color: #fff; /* Text color */ + padding: 20px; /* Adjust as needed */ + } + + #black-background .content h2 { + margin-top: 20px; /* Adjust for mobile */ + margin-bottom: 20px; /* Adjust for mobile */ + font-size: 1.5rem; /* Adjust size as needed for mobile */ + } + + #black-background .highlight { + color: #d7b65d; /* Adjust color if needed */ + font-weight: bold; /* Optional: Make it bold */ + } + + + +} + /* Large Desktop - Parallax Effect - 1600px */ @media only screen and (min-width: 100rem) { #hero-1621 .cs-background { @@ -920,18 +1145,18 @@ align-items: stretch; } #sbsr-1309 .cs-content { - width: 48%; + width: 30%; padding: 3rem 0; align-self: center; /* prevents flexbox from squishing it */ flex: none; } #sbsr-1309 .cs-image-group { - width: 55%; - max-width: 41.875rem; + width: 70%; + max-width: 71.875rem; height: auto; max-height: 100%; - min-height: 41.875rem; + min-height: 11.875rem; margin: 0; /* sends it to the right in the second position */ order: 2; @@ -970,3 +1195,504 @@ background-color: var(--medium); } } + + + +@media only screen and (min-width: 0rem) { + + #gridsection1 { + /* Ensures container adapts to mobile screens */ + overflow: hidden; /* Prevents overflow */ + } + + #gridsection1 .grid-container { + display: grid; + grid-template-columns: 1fr; /* Single column layout for mobile */ + gap: 10px; /* Reduced space between items */ + padding: 10px; + max-width: 100%; /* Ensures container doesn't exceed screen width */ + box-sizing: border-box; /* Includes padding in width calculation */ + } + + #gridsection1 .grid-item { + padding: 10px; + box-sizing: border-box; /* Ensures padding does not cause overflow */ + } + + #gridsection1 .grid-item img { + width: 100%; /* Full width of the grid item */ + height: auto; /* Adjust height to maintain aspect ratio */ + display: block; /* Removes extra space below the image */ + } + + #gridsection1 .item-title { + font-size: 1.25rem; /* Adjust size for mobile */ + margin: 10px 0; /* Adds margin around title */ + } + + #gridsection1 .item-description { + font-size: 0.9rem; /* Adjust size for mobile */ + margin: 0 0 10px; /* Margin below description */ + } + + #gridsection1 .item-button { + font-size: 0.9rem; /* Adjust font size for mobile */ + padding: 8px 16px; /* Adjust padding for mobile */ + display: inline-block; /* Allows for responsive button width */ + } + + #gridsection1 .sub-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 columns on mobile */ + gap: 5px; /* Reduced space between SVG items */ + margin-bottom: 20px; /* Space between sub-grid and button */ + } + + #gridsection1 .sub-grid-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; /* Full width of the sub-grid item */ + height: auto; /* Adjust height to maintain aspect ratio */ + box-sizing: border-box; /* Includes padding in width calculation */ + padding: 10px; /* Padding inside the item */ + } + + #gridsection1 .sub-grid-item img { + width: 60%; /* Adjust size for mobile */ + height: auto; /* Maintain aspect ratio */ + } + + #gridsection1 .svg-title { + font-size: 0.8rem; /* Adjust size for mobile */ + margin-top: 5px; /* Margin above title */ + } + +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + + #gridsection1{ + + + } + + #gridsection1 .grid-container { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 equal columns */ + gap: 20px; /* Space between items */ + padding: 20px; + max-width: 1200px; + margin: 0 auto; /* Center the grid */ + } + + #gridsection1 .grid-item { + background-color: #ffffff; /* Light background for each item */ + border-radius: 10px; + overflow: hidden; + text-align: center; + padding: 20px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + } + + #gridsection1 .grid-item img { + width: 100%; + height: 200px; + border-radius: 10px 10px 0 0; + } + + #gridsection1 .item-title { + font-size: 1.5rem; + margin: 15px 0 10px; + color: #333; + } + + #gridsection1 .item-description { + font-size: 1rem; + color: #666; + margin-bottom: 20px; + } + + #gridsection1 .item-button { + background-color: #dd9528; /* Button color */ + color: #fff; + border: none; + padding: 10px 20px; + font-size: 1rem; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s ease; + } + + #gridsection1 .item-button:hover { + background-color: #cc8522; /* Darker shade on hover */ + } + + #gridsection1 .sub-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 equal columns */ + gap: 10px; /* Space between SVG items */ + margin-bottom: 20px; /* Space between sub-grid and button */ + } + + #gridsection1 .sub-grid-item { + margin-top: 20px; + + border-radius: 1px; + padding: 1px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 60%; /* Ensures the item takes up full grid column space */ + height: 120px; + aspect-ratio: 5 / 5; /* Makes the item a square */ + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Adds a subtle shadow */ + } + + #gridsection1 .sub-grid-item img { + width: 60%; /* Adjusts SVG size */ + height: 40px; + display: block; + margin-bottom: 10px; /* Space between SVG and title */ + } + + #gridsection1 .svg-title { + font-size: 0.9rem; + color: #333; + text-align: center; /* Center-align the title */ + } + + #gridsection1 .filter-color{ + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); + + } + +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #sbsr-1309 .cs-title, + body.dark-mode #sbsr-1309 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbsr-1309 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbsr-1309 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbsr-1309 .cs-box { + background-color: var(--medium); + } +} + + + +@media only screen and (min-width: 0rem) { + #sbsr-13091 { + padding: var(--sectionPadding); + overflow: hidden; + } + #sbsr-13091 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 36.5rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: clamp(3rem, 4vw, 4rem); + } + #sbsr-13091 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: 33.875rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + #sbsr-13091 .cs-text { + margin-bottom: 1rem; + } + #sbsr-13091 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbsr-13091 .cs-image-group { + width: 100%; + max-width: 41.875rem; + height: 100vw; + max-height: 39.375rem; + display: block; + position: relative; + z-index: 1; + } + #sbsr-13091 .cs-picture { + /* big background image */ + width: 93%; + height: 93%; + display: block; + position: absolute; + top: 0; + left: 0; + } + #sbsr-13091 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbsr-13091 .cs-box { + text-align: left; + width: 70%; + max-width: 19rem; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + /* 20px - 40px */ + padding: clamp(1.25rem, 4vw, 2.5rem); + background-color: #1a1a1a; + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 0.5rem; + position: absolute; + right: 0; + bottom: 0; + z-index: 10; + } + #sbsr-13091 .cs-desc { + /* 16px - 31px */ + font-size: clamp(1rem, 2.5vw, 1.9375rem); + font-weight: 700; + line-height: 1.2em; + text-align: inherit; + width: 100%; + color: var(--bodyTextColorWhite); + position: relative; + z-index: 10; + } + #sbsr-13091 .cs-graphic { + width: 150%; + height: auto; + position: absolute; + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbsr-13091 .cs-container { + max-width: 80rem; + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #sbsr-13091 .cs-content { + width: 40%; + padding: 3rem 0; + align-self: center; + /* prevents flexbox from squishing it */ + max-width: 71.875rem; + flex: none; + } + #sbsr-13091 .cs-image-group { + width: 60%; + + height: auto; + max-height: 100%; + min-height: 11.875rem; + margin-top: 100px; + /* sends it to the right in the second position */ + order: 2; + } + #sbsr-13091 .cs-picture { + width: 93%; + height: 94%; + right: 0; + left: auto; + } + #sbsr-13091 .cs-box { + right: auto; + bottom: 0rem; + left: 0; + } + #sbsr-13091 .cs-graphic { + max-width: 44.6875rem; + right: 8.125rem; + left: auto; + transform: translateY(-50%); + } + + #sbsr-13091 .form-container { + background-color: #f3f1f1; + + padding: 90px; + border-radius: 1px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + max-width:71.23rem; + margin: auto; + animation: fadeIn 1s ease-in-out; + } + + #sbsr-13091 .form-content { + display: flex; + flex-direction: column; + } + + #sbsr-13091 .form-group { + margin-bottom: 15px; + animation: slideIn 0.8s ease-in-out; + } + + #sbsr-13091 .form-group label { + margin-bottom: 5px; + font-weight: bold; + color: #e1b656; + } + + #sbsr-13091 .form-group input, + .form-group select { + padding-right: 5px; + padding-left: 5px; + padding-top: 20px; + padding-bottom: 20px; + + border-radius: 2px; + border: 1px solid #ccc; + width: 100%; + transition: border-color 0.3s ease; + } + + #sbsr-13091 .form-group input:focus, + .form-group select:focus { + border-color: #e1b656; + } + + #sbsr-13091 .submit-btn { + padding: 12px; + background-color: #e1b656; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 16px; + width: 400px; + transition: background-color 0.3s ease, transform 0.2s; + } + #sbsr-13091 ::placeholder { + color: #000; + opacity: 1; /* Ensures full opacity */ + } + + #sbsr-13091 .cs-text{ + + font-size: 20px; + text-align: left; + } + + + #sbsr-13091 .svg-wrapper { + position: relative; + width: 100%; /* Adjust if needed */ + height: 50px; /* Adjust height to fit the SVG */ + margin-top: 20px; /* Space above SVG */ + + } + + #sbsr-13091 .svg-icon { + width: 80px; /* Adjust the size as needed */ + height: 80px; + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); +} +#sbsr-13091 .contact { + + margin-top: 20px; + margin-left: 80px; + font-size: 20px; /* Adjust text size as needed */ + color: #e1b656; /* Text color */ +} +#sbsr-13091 .cs-button-solid { + font-size: 1rem; + font-weight: 700; + margin-top: 90px; + /* 46px - 56px */ + line-height: clamp(2.875rem, 5.5vw, 3.5rem); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 3rem; + color: #ffffff; + background-color: var(--primary); + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; +} +#sbsr-13091 .description { + + + font-size: 16px; /* Adjust text size as needed */ + color: #000; /* Text color */ +} + #sbsr-13091 .submit-btn:hover { + background-color: #e1b656; + transform: scale(1.05); + } + + #sbsr-13091 .highlight { + color: #d7b65d; /* Change this to your desired color */ + font-weight: bold; /* Optional: Make it bold */ + } + + + + + + + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } + + @keyframes slideIn { + from { transform: translateY(20px); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #sbsr-1309 .cs-title, + body.dark-mode #sbsr-1309 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbsr-1309 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbsr-1309 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbsr-1309 .cs-box { + background-color: var(--medium); + } +} + + + + + + diff --git a/src/assets/css/product.css b/src/assets/css/product.css new file mode 100644 index 0000000..f9bc548 --- /dev/null +++ b/src/assets/css/product.css @@ -0,0 +1,312 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 9.375rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + } + #int-hero:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #int-hero picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + } + #int-hero picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #int-hero h1 { + font-size: 2.125rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + #int-hero p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } +} +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + } + #int-hero h1 { + font-size: 4rem; + } +} +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} +/*-- -------------------------- --> +<--- Product --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #product { + padding: var(--sectionPadding); + overflow: hidden; + } + #product .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 46.875rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 28px - 64px */ + gap: clamp(1.75rem, 5vw, 4rem); + } + #product .cs-large-image { + width: 100%; + /* 248px - 533px */ + height: clamp(15.5rem, 70vw, 33.3125rem); + display: block; + } + #product .cs-large-image img { + width: 100%; + height: 100%; + /* as we want to show the product in full, contain the image in the img tag. then, use a matching background color for the whitespace. feel free to remove and use object-fit:cover if you'd rather */ + object-fit: contain; + display: block; + } + #product .cs-h3 { + font-size: var(--headerFontSize); + font-weight: 900; + line-height: 1.2em; + margin: 0 0 0.5rem; + color: var(--headerColor); + } + #product .cs-price { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + color: var(--secondary); + display: block; + } + #product .cs-compare-price { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + display: block; + } + #product .cs-taxes { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5em; + color: var(--primary); + display: block; + } + #product .cs-info-text { + font-size: 1rem; + font-weight: 400; + line-height: 1.5em; + /* 12px - 16px */ + margin: clamp(0.75rem, 2vw, 1rem) 0 0.5rem; + color: var(--bodyTextColor); + } + #product .cs-details { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + width: fit-content; + margin-bottom: 1.5rem; + color: var(--bodyTextColor); + /* using a border-bottom instead of text-decoration to give more space between the line and the text */ + border-bottom: 1px solid var(--bodyTextColor); + display: block; + } + #product .cs-option { + font-size: 0.875rem; + font-weight: 700; + line-height: 1.5em; + color: var(--bodyTextColor); + } + #product .cs-dropdown { + width: 100%; + max-width: 15rem; + height: 3rem; + margin-bottom: 1.5rem; + padding: 0 1rem; + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: 6.25rem; + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + cursor: pointer; + } + #product .cs-quantity { + width: 100%; + width: fit-content; + max-width: 15rem; + height: 3rem; + margin-bottom: 1.5rem; + padding: 0 1rem; + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: 6.25rem; + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + cursor: pointer; + } + #product .cs-select-icon { + display: none; + } + #product .cs-quantity-increment { + font-size: 1.5rem; + color: #767676; + background: none; + border: none; + cursor: pointer; + } + #product .cs-quantity-decrement { + font-size: 1.5rem; + color: #767676; + background: none; + border: none; + cursor: pointer; + } + #product .cs-quantity-input { + font-size: 1.25rem; + line-height: 1.5em; + text-align: center; + width: 2rem; + background-color: transparent; + border: none; + display: flex; + justify-content: center; + align-items: center; + } + #product .cs-quantity-input[type="number"] { + margin: 0; + -webkit-appearance: none; + -moz-appearance: textfield; + } + #product .cs-button { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + padding: 1rem; + background: none; + border: none; + display: flex; + justify-content: center; + align-items: center; + flex: 1 0 0; + } + #product .cs-cart { + border: 1px solid #1a1a1a; + } + #product .cs-buy { + color: #fff; + background-color: var(--primary); + cursor: pointer; + } + .visuallyhidden { + white-space: nowrap; + width: 1px; + height: 1px; + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(50%); + } +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #product .cs-container { + max-width: 80rem; + flex-direction: row; + align-items: start; + } + #product .cs-large-image { + height: 100%; + /* dont grow or shrink and set the flex basis to 540px. the large image will stay at this width and the other content will adapt */ + flex: 0 0 33.75rem; + } + #product .cs-product-info { + /* grow to fill the rest of the flex-container */ + flex: 1 0 0; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #product .cs-h3, + body.dark-mode #product .cs-info-text, + body.dark-mode #product .cs-details, + body.dark-mode #product .cs-option, + body.dark-mode #product .cs-option b, + body.dark-mode #product .cs-box, + body.dark-mode #product .cs-quantity, + body.dark-mode #product .cs-cart { + color: var(--bodyTextColorWhite); + } + body.dark-mode #product .cs-price { + color: var(--primaryLight); + } + body.dark-mode #product .cs-taxes { + color: var(--secondaryLight); + } + body.dark-mode #product .cs-info-text { + opacity: 0.8; + } + body.dark-mode #product .cs-box-number, + body.dark-mode #product .cs-quantity, + body.dark-mode #product .cs-cart { + background-color: var(--medium); + border-color: var(--accent); + } +} diff --git a/src/assets/css/root.css b/src/assets/css/root.css index 7a6ae22..ac11eb7 100644 --- a/src/assets/css/root.css +++ b/src/assets/css/root.css @@ -4,21 +4,22 @@ @media only screen and (min-width: 0rem) { :root { /* Add these styles to your global stylesheet, which is used across all site pages. You only need to do this once. All elements in the library derive their variables and base styles from this central sheet, simplifying site-wide edits. For instance, if you want to modify how your h2's appear across the site, you just update it once in the global styles, and the changes apply everywhere. */ - --primary: #ffba19; + --primary: #e1b656; --primaryLight: #ffd675; - --secondary: #001f3f; + --secondary: #e1b656; --secondaryLight: #001f3f; - --headerColor: #1a1a1a; - --bodyTextColor: #4e4b66; + --headerColor: #001f3f; + --titleColor:#e1b656; + --bodyTextColor: #6a6f73; --bodyTextColorWhite: #fafbfc; /* 13px - 16px */ - --topperFontSize: clamp(0.8125rem, 1.6vw, 1rem); + --topperFontSize: clamp(2.8125rem, 1.6vw, 1rem); /* 31px - 49px */ --headerFontSize: clamp(1.9375rem, 3.9vw, 3.0625rem); --bodyFontSize: 1rem; /* 60px - 100px top and bottom */ --sectionPadding: clamp(3.75rem, 7.82vw, 6.25rem) 1rem; - --bodyFontFamily: Arial, Helvetica, sans-serif; + --bodyFontFamily: 'Playfair Display', serif; } body { font-family: var(--bodyFontFamily); @@ -698,9 +699,11 @@ box-sizing: border-box; padding: 0; background-color: #fff; - box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + position: fixed; z-index: 10000; + background: transparent; + position: absolute; } #cs-navigation .cs-top-bar { width: 100%; @@ -841,12 +844,12 @@ #cs-navigation .cs-container { width: 100%; max-width: 80rem; - margin: auto; + /* prevents padding from affectin gheight */ box-sizing: border-box; - padding: 0 1rem; + display: flex; - justify-content: space-between; + justify-content: center; align-items: center; gap: 1.5rem; position: relative; @@ -965,6 +968,9 @@ } /* Larger Desktop - 1200px */ @media only screen and (min-width: 100rem) { + #cs-navigation { + background: transparent; + } #cs-navigation .cs-donate { margin-left: auto; display: flex; diff --git a/src/assets/css/shop.css b/src/assets/css/shop.css new file mode 100644 index 0000000..5764c6a --- /dev/null +++ b/src/assets/css/shop.css @@ -0,0 +1,621 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + /* 190px - 268px */ + padding-top: clamp(11.875rem, 25vw, 16.75rem); + padding-bottom: 6.25rem; + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + } + #banner-1400 .cs-container { + text-align: center; + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + #banner-1400 .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + #banner-1400 .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + #banner-1400 .cs-link { + font-size: 1rem; + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + } + #banner-1400 .cs-link:last-of-type { + /* remove the chevron on the last list item */ + } + #banner-1400 .cs-link:last-of-type::after { + display: none; + } + #banner-1400 .cs-link:after { + /* chevron */ + content: ""; + width: 0.4375rem; + height: 0.75rem; + margin: 0 1rem; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + #banner-1400 .cs-link.cs-active { + color: var(--primary); + } + #banner-1400 .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + #banner-1400 .cs-background:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + #banner-1400 .cs-background:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#000000), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient(top, #000000 0%, rgba(0, 0, 0, 0) 100%); + background: linear-gradient( + to bottom, + #000000 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + #banner-1400 .cs-background img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 .cs-background:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(#000000), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient(left, #000000 0%, rgba(0, 0, 0, 0) 100%); + background: linear-gradient( + to right, + #000000 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } +} +/*-- -------------------------- --> + <--- Side By Side --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-297 { + padding: var(--sectionPadding); + } + #sbs-297 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 34.375rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + #sbs-297 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: center; + width: 100%; + max-width: 32.625rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + } + #sbs-297 .cs-text { + margin-bottom: 1rem; + } + #sbs-297 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbs-297 .cs-link { + font-size: 1.25rem; + font-weight: 700; + text-decoration: none; + color: var(--primary); + } + #sbs-297 .cs-image-group { + width: 100%; + max-width: 34.375rem; + /* 78px - 108px */ + margin: 0 auto clamp(4.875rem, 16.5vw, 6.75rem); + display: block; + position: relative; + /* width divided by height */ + aspect-ratio: 328/363; + } + #sbs-297 .cs-picture { + /* big background image */ + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + } + #sbs-297 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbs-297 .cs-box { + /* 204px - 326px & changes at desktop */ + width: clamp(12.75rem, 50vw, 20.375rem); + height: clamp(12.75rem, 50vw, 20.375rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: absolute; + /* 38px - 60px - wrapped in a calc function to make clamp values negative */ + bottom: calc(clamp(2.375rem, 7.9vw, 3.75rem) * -1); + left: 50%; + z-index: 10; + overflow: hidden; + transform: translateX(-50%); + } + #sbs-297 .cs-box-picture { + /* Background image for cs-box */ + width: 100%; + height: 100%; + background-color: #000; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + /* clips img corners and bg corners */ + overflow: hidden; + } + #sbs-297 .cs-box-picture img { + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0.65; + position: absolute; + top: 0; + left: 0; + } + #sbs-297 .cs-number { + /* 75px - 100px */ + font-size: clamp(4.6875rem, 8vw, 6.25rem); + font-weight: 900; + line-height: 1em; + margin-bottom: 0.5rem; + color: var(--headerColor); + display: block; + z-index: 10; + /* creates the transparent clipping text */ + mix-blend-mode: screen; + } + #sbs-297 .cs-number:before { + /* opaque white box - For mix-blend-mode to work, we need the + white box inside the .cs-number, so we use a pseudo element. + We DON'T add a position to the cs-number so the pseudo positions + itself relative to the .cs-box, which has position relative. This + allows us to center to .cs-number pseudo inside the .cs-box */ + content: ""; + /* 184px - 294px & changes at desktop */ + width: clamp(11.5rem, 45vw, 18.375rem); + height: clamp(11.5rem, 45vw, 18.375rem); + background-color: #fff; + opacity: 1; + display: block; + position: absolute; + /* these next 3 properties are an old school way to center an absolutely + positioned element inside a relative position parent */ + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } + #sbs-297 .cs-desc { + /* 16px - 25px */ + font-size: clamp(1rem, 4vw, 1.5625rem); + font-weight: 700; + line-height: 1.2em; + text-align: center; + text-transform: lowercase; + width: 80%; + color: var(--headerColor); + position: relative; + z-index: 10; + } +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbs-297 { + /* aligns the button */ + text-align: left; + } + #sbs-297 .cs-container { + max-width: 80rem; + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + gap: 10rem; + } + #sbs-297 .cs-content { + text-align: left; + align-items: flex-start; + } + #sbs-297 .cs-image-group { + width: 40vw; + max-width: 32.5625rem; + /* 520px - 672px */ + height: clamp(32.5rem, 51.9vw, 42rem); + margin: 0; + } + #sbs-297 .cs-box { + /* 251px - 325px */ + width: clamp(15.6875rem, 24.5vw, 20.3125rem); + height: clamp(15.6875rem, 24.5vw, 20.3125rem); + /* -52px to -102px */ + right: calc(clamp(3.25rem, 5.5vw + 1.6rem, 6.375rem) * -1); + /* 62px - 80px */ + bottom: clamp(3.875rem, 6.2vw, 5rem); + left: auto; + transform: none; + } + #sbs-297 .cs-number:before { + /* 226px - 293px */ + width: clamp(14.125rem, 22.7vw, 18.3125rem); + height: clamp(14.125rem, 22.7vw, 18.3125rem); + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #sbs-297 .cs-topper { + color: var(--secondaryLight); + } + body.dark-mode #sbs-297 .cs-title, + body.dark-mode #sbs-297 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbs-297 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbs-297 .cs-text { + opacity: 0.8; + } +} +/*-- -------------------------- --> + <--- Stats --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #stats-1642 { + padding: var(--sectionPadding); + } + #stats-1642 .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + #stats-1642 .cs-content { + /* set text align to right if content needs to be right aligned */ + text-align: left; + width: 100%; + display: flex; + flex-direction: column; + /* left aligns content */ + align-items: flex-start; + } + #stats-1642 .cs-title { + max-width: 20ch; + /* 28px - 64px */ + margin: 0 0 clamp(1.75rem, 7vw, 4rem) 0; + } + #stats-1642 .cs-picture { + width: 100%; + height: 95vw; + max-height: 25rem; + display: block; + position: relative; + z-index: 1; + } + #stats-1642 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #stats-1642 .cs-quote { + width: 4.625rem; + height: auto; + opacity: 0.5; + position: relative; + top: 1.5rem; + z-index: -1; + } + #stats-1642 .cs-text { + margin: 0 0 clamp(1.5rem, 3vw, 2rem) 0; + } + #stats-1642 .cs-stats-group { + width: 100%; + display: flex; + flex-direction: column; + /* 28px - 40px */ + } + #stats-1642 .cs-card-group { + width: 100%; + /* 550px - 630px */ + max-width: clamp(34.375rem, 50vw, 39.375rem); + margin: 0; + padding: 0; + display: grid; + align-items: center; + gap: 1.5rem; + } + #stats-1642 .cs-item { + list-style: none; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; + } + #stats-1642 .wrapper { + width: 100%; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 0.625rem; + } + #stats-1642 .cs-item-number { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--primary); + display: flex; + justify-content: flex-start; + align-items: center; + gap: 0.5rem; + } + #stats-1642 .cs-h3 { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + display: flex; + justify-content: flex-start; + align-items: center; + gap: 0.5rem; + } + #stats-1642 .cs-item-text { + font-size: 1rem; + line-height: 1.5em; + margin: 0; + color: var(--bodyTextColor); + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #stats-1642 .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #stats-1642 .cs-content { + justify-content: stretch; + /* sends it to the right in the 2nd position */ + order: 2; + } + #stats-1642 .cs-picture { + height: 100%; + max-height: 100%; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #stats-1642 .cs-title, + body.dark-mode #stats-1642 .cs-text, + body.dark-mode #stats-1642 .cs-item-text, + body.dark-mode #stats-1642 .cs-h3 { + color: var(--bodyTextColorWhite); + } + body.dark-mode #stats-1642 .cs-text, + body.dark-mode #stats-1642 .cs-item-text { + opacity: 0.8; + } +} +/*-- -------------------------- --> + <--- Side By Side --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-1640 { + padding: var(--sectionPadding); + background-color: #111926; + overflow: hidden; + } + #sbs-1640 .cs-container { + width: 100%; + /* changes to 1280px at tablet */ + max-width: 36.5rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + #sbs-1640 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: 39.375rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + #sbs-1640 .cs-title { + margin: 0 0 2.5rem 0; + color: var(--bodyTextColorWhite); + } + #sbs-1640 .cs-text { + margin-bottom: 1rem; + color: var(--bodyTextColorWhite); + opacity: 0.8; + } + #sbs-1640 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbs-1640 .cs-picture { + width: 100%; + height: auto; + min-height: 26.25rem; + display: block; + position: relative; + z-index: 1; + } + #sbs-1640 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbs-1640 .cs-stats-group { + width: 100%; + max-width: 35.625rem; + display: flex; + flex-direction: column; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #sbs-1640 .cs-container { + max-width: 80rem; + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #sbs-1640 .cs-stats-group { + /* 52px - 90px */ + margin-bottom: clamp(3.25rem, 7vw, 5.625rem); + /* 60px - 120px */ + padding-top: clamp(3.75rem, 10vw, 7.5rem); + /* 60px - 80px */ + padding-bottom: clamp(3.75rem, 8vw, 5rem); + position: relative; + z-index: 1; + } + #sbs-1640 .cs-stats-group:before { + content: ""; + width: 200vw; + height: 100%; + background: #fff; + opacity: 1; + display: block; + position: absolute; + top: 100%; + left: -100%; + z-index: -1; + transform: translateX(-50%); + } + #sbs-1640 .cs-picture { + height: 100%; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #sbs-1640 { + background-color: rgba(0, 0, 0, 0.6); + } + body.dark-mode #sbs-1640 .cs-stats-group:before { + background-color: var(--dark); + } +} diff --git a/src/assets/js/shopify.js b/src/assets/js/shopify.js new file mode 100644 index 0000000..c3b8765 --- /dev/null +++ b/src/assets/js/shopify.js @@ -0,0 +1,80 @@ +// CS-TODO: If you're using the optimisation module, you can uncomment the below line to import ShopifyBuy +// via an npm module, and remove the SDK from the "Shopify Scripts" in _includes/base.html +// import ShopifyBuy from '@shopify/buy-button-js' + +window.shopify.client = ShopifyBuy.buildClient({ + domain: window.shopify.auth.store_url, + storefrontAccessToken: window.shopify.auth.access_token, +}); + +window.shopify.ui = ShopifyBuy.UI.init(window.shopify.client); + +window.shopify.productId = + document.querySelector("[data-product-id")?.dataset.productId; +// Automatically uses the CodeStitch --primary color to style the cart toggle and checkout buttons +window.shopify.primaryColor = getComputedStyle( + document.documentElement +).getPropertyValue("--primary"); + +window.shopify.productId && + window.shopify.ui.createComponent("product", { + id: window.shopify.productId, + node: document.getElementById("cs-buy"), + options: { + product: { + iframe: false, + contents: { + img: false, + title: false, + variantTitle: false, + price: false, + options: true, + quantity: true, + quantityIncrement: true, + quantityDecrement: true, + quantityInput: true, + button: true, + description: false, + }, + classes: { + quantity: "cs-quantity", + quantityDecrement: "cs-quantity-decrement", + quantityInput: "cs-quantity-input", + quantityIncrement: "cs-quantity-increment", + buttonWrapper: "cs-button-wrapper", + button: "cs-button cs-buy", + }, + }, + option: { + classes: { + label: "cs-option", + wrapper: "cs-option-wrapper", + selectIcon: "cs-select-icon", + select: "cs-dropdown", + }, + }, + }, + }); + +window.shopify.ui.createComponent("cart", { + options: { + cart: { + popup: false, + styles: { + button: { + "background-color": window.shopify.primaryColor, + }, + }, + }, + toggle: { + styles: { + toggle: { + "background-color": window.shopify.primaryColor, + ":hover": { + "background-color": window.shopify.primaryColor, + }, + }, + }, + }, + }, +}); diff --git a/src/config/eleventy/server.js b/src/config/eleventy/server.js new file mode 100644 index 0000000..41be697 --- /dev/null +++ b/src/config/eleventy/server.js @@ -0,0 +1,3 @@ +module.exports = { + isProduction: process.env.ELEVENTY_ENV === "PROD", +}; diff --git a/src/config/filters/formatDate.js b/src/config/filters/formatDate.js new file mode 100644 index 0000000..826f285 --- /dev/null +++ b/src/config/filters/formatDate.js @@ -0,0 +1,5 @@ +const { DateTime } = require("luxon"); + +module.exports = function (dateObj) { + return DateTime.fromJSDate(dateObj).toLocaleString(DateTime.DATE_MED); +}; diff --git a/src/config/filters/getProductsInCollection.js b/src/config/filters/getProductsInCollection.js new file mode 100644 index 0000000..1d1ba50 --- /dev/null +++ b/src/config/filters/getProductsInCollection.js @@ -0,0 +1,7 @@ +module.exports = function (products, collectionId) { + if (!collectionId) { + return products; + } + + return products.filter((product) => product.collections.some((collection) => collection.idNumber == collectionId)); +}; diff --git a/src/config/plugins/shopify.js b/src/config/plugins/shopify.js new file mode 100644 index 0000000..006c1cc --- /dev/null +++ b/src/config/plugins/shopify.js @@ -0,0 +1,93 @@ +const { SHOPIFY_STORE_URL, SHOPIFY_ACCESS_TOKEN, SHOPIFY_API_VERSION } = + process.env; + +module.exports = { + url: SHOPIFY_STORE_URL, + key: SHOPIFY_ACCESS_TOKEN, + version: SHOPIFY_API_VERSION, + productsQuery: (cursor = null) => ` + query { + products(first: 50, sortKey: CREATED_AT${ + cursor ? `, after: "${cursor}"` : `` + }) { + edges { + cursor + node { + collections(first: 10) { + edges { + node { + id + title + image { + src + altText + } + } + } + } + description + descriptionHtml + handle + id + images(first: 5) { + edges { + node { + altText + src + } + } + } + compareAtPriceRange { + maxVariantPrice { + amount + currencyCode + } + minVariantPrice { + amount + currencyCode + } + } + priceRange { + maxVariantPrice { + amount + currencyCode + } + minVariantPrice { + amount + currencyCode + } + } + tags + title + } + } + } + } + `, + collectionsQuery: (cursor = null) => ` + query { + collections(first:20${cursor ? `, after: "${cursor}"` : ``}) { + edges { + cursor + node { + id + title + handle + description + descriptionHtml + image { + altText + src + } + products(first: 25) { + edges { + node { + id + } + } + } + } + } + } + }`, +}; diff --git a/src/content/blog/acuti-modo.md b/src/content/blog/acuti-modo.md new file mode 100644 index 0000000..839e7dc --- /dev/null +++ b/src/content/blog/acuti-modo.md @@ -0,0 +1,52 @@ +--- +title: Acuti modo +description: Lorem markdownum tardantis unam mitissima dissimulator inposuit corpus sintque tura tremenda, nec coetum. +author: Code Stitch +date: 2023-06-08T15:26:46.705Z +tags: + - post +image: https://csimg.nyc3.cdn.digitaloceanspaces.com/SideBySide/people.jpg +imageAlt: People +--- + +## Lacerans aliter tetigit praeterea rite + +Lorem markdownum tardantis unam mitissima dissimulator inposuit corpus sintque tura tremenda, nec coetum. Est limen Isthmo sagittas patres emerguntque anxia +[defenderet](http://www.morte.com/parvo.html) illi, est. + +- Sua ille submittere viribus verba visa Myconon +- Qvem nec +- Frena prior rauco iaculum enim +- Modo referat +- Tibi mihi sumit bibit censuque licentia consistite +- Sumptis Iunonis muneris quiete haec tori + +## Aut pedum tendit ut raptae + +Est vicinia, est herba ut et [duro](http://pars.net/iamcum), agnosse dicitur spectator gracili aquarum. **Amore adfer metam** queri quartus cunctas ego. + +Tectis Iovemque moriens fraternaeque Gorgonei equosque Oceanumque, huius corporis, contigerant metu vecta patietur versasse. Et undis superbus? Cura cortice +saepe admisitque tamen iuvenum, vivere Lemnicolae est vidi dilapsa ianua gelidum, Ismenus. Est dic lacertos regnum quippe certo, ut vultus tollere. + +## Iacentes temptabat + +Novissima adfixa declinat Labros et librat herbida se sacro amplectitur moenia: parcite nam quoque pugnat non quam tot. Sole et enim inundet? Ecce urbesque +_obliquis_, non patietur fuga fixa feros horruit [ferox tui](http://www.postquam.org/gravatumiphis.html), de. + +1. Argentea ait exstabant trames +2. Nocti liquidum Minervae Cerberus quas +3. Neque removente + +## Respondere prior si ingemit bellare + +Cadme tetigit in luctus minor mulcebunt tempora, utque sua semper essem cultrosque **enses** praecipitem hunc **vestris**. Restantem iussit poena; quod vendit +electarumque mendacem nec sedens quidem Iovi torta cruribus, et? Venit alvum _anima_! Manibusque idem _Aconteus ducat_ multamque et tibi Siphnon; mitissima +devenit aut poscitur flumina nymphas revocare obstitit Lyciaeque Meleagros fors. + +Orbem dolendi corpore hic [flamma vertere recurvas](http://paruit.com/sineloqui.html), da pedes calido unus armis relinquunt, +[flores Minervae formam](http://alumnaesibi.com/unda). Caelo [inposuit](http://invirginibus.org/trahuntur) viribus semper, vesci excipit facta putes. Patitur +attonitos acutior dum liquefacta nostra habebat. Duabus victus me suae viscera natorum ferox contulerat, de tuus Pasiphaeia ruunt protinus? + +_Multis soror_, mundi paruerit quietem in, temeraria velantque guttura temerarius candens prostravit vera operatus, ut fecimus. Gyaros quaesiti in, a frustra, +iacentia hosti. Suae iamque. Sustinet crimen toris, oves hanc est causa tum paravi phocen in natas, crudelis infra erat minimo? Inquit et **loqui studiisque +Alpheos** venti spectata velocior [fida](http://www.animiquetantaque.net/atulterius.aspx) Iove habet Cometen rediit; tulisset! diff --git a/src/content/blog/blog.json b/src/content/blog/blog.json new file mode 100644 index 0000000..ff94ef1 --- /dev/null +++ b/src/content/blog/blog.json @@ -0,0 +1,4 @@ +{ + "layout": "layouts/post.html", + "tags": "post" +} diff --git a/src/content/blog/canitiem-saxa.md b/src/content/blog/canitiem-saxa.md new file mode 100644 index 0000000..c0f213d --- /dev/null +++ b/src/content/blog/canitiem-saxa.md @@ -0,0 +1,54 @@ +--- +title: Canitiem Saxa +description: Lorem markdownum trabeati dicere deus. +author: Code Stitch +date: 2023-06-08T15:28:08.486Z +tags: + - post + - featured +image: https://csimg.nyc3.cdn.digitaloceanspaces.com/Images/People/meeting7.jpg +imageAlt: People +--- + +## Aut inter Petraeum + +Lorem markdownum trabeati dicere [deus](http://www.aetatis.org/pugnacem.html) traxit certus Scythiam certum, illi mulces. Et nihil dolores? Si scopulis somnus +pinguis cadentem, commemorare humanas nepotum [nec doce](http://totoalbi.com/suisfactis), Aiax ipsum! Gente conatur committere esse _efficiens_ fuerat, armis +male simulasse, Libys polo. + +> Cuperet factus translucet imbres in est templa sua tulit post degener, et quas regia tantus credas graves. Nunc recusat tum moenia per utque deprendi +> auxiliare quamvis maius tepidae nervos, ultima laqueo! Facto matris, pars saepe loco meosque cuspide. + +Equos quod edendo haud, exclamant sum mortale deseret meminisse signat umente. Non fovi lacrimosa mendaci. In ursi, sed removere sequar tamque. + +Fera vident; me que adfixa ama mota venabula fertur pectore totoque perculit meosque; placidissime Pergama in. Coeunt _monstri_; dixit sic poma tela, tam eandem +flamma auras Rhodopen ultorem in mensae novis numeri. Scelerataque nec decorem modo _silvis medio spoliata_ index **nec chaos Iuno**. Et velis tamquam +vulnificus studiisque petunt, expulsumque ille iuncturas ferre feliciter resoluta Euboicam sine, Bellona quem. + +1. Bidentum relatus ilice +2. Pes sibila +3. Tamen in est +4. Studiosus foret +5. Sub facit prohibente mihi est + +## Portibus Quirino + +Enim altam tamen cur magis admiratur [tegebat](http://nepotum-sequantur.org/) Iuppiter forma _perdere possit_. Aniles illum deos longoque, quae si venit +tetigit. Huc ferae **refugit**, proles, suggerit videt reliquit, et. + +- Dixit videt sustineat +- Deduxit et genu +- Uti contentus sub pater habet arboribus ut +- Dixit facibusque illas sigillis petitus + +Ubi aequoreae, vult huic, transibant dederat, liceret: vidi sacra o securi turaque. Superat hebeti, contortam honoris, di tibi. Vertex exsiluere. + +Et patriaeque cum differt tenet [cupies](http://contendere.net/datque.html) contra sic et locuta Aegides opusque. Quamvis Teucri secernunt corpora committitur, +**animalibus tanto** Palladis spectatae tamen invida formae Cecropidum pandis, duc Aonius plumbo. Poplitibus stipite fugiebant et rapuere missa iaculabile +adunco. Fui caerula territa; latus non reddita, si tecum placet, sepulcrum. Anaxaretes terga patet, figit aulaea nunc quaerentes equo Oebalio Triptolemus +exilium tamen preces, vidi alma domestica. + +Aere mater potuisse, et _tendit_ alter ferre deseruere _apulus_. Suis _ignis undas_ inops decus scrutantur nymphe, facite latis, si Onetor **ibi**, deme +[succincta tinnitibus](http://www.patriae.org/quorumaberant). + +Pennis mens restabat sublime iuvenis, _non pariter_ armis. Umbras sed traxit dei latoque petit [triplici ultima](http://etplenum.net/), corpore. diff --git a/src/content/blog/sucos-creati.md b/src/content/blog/sucos-creati.md new file mode 100644 index 0000000..d056263 --- /dev/null +++ b/src/content/blog/sucos-creati.md @@ -0,0 +1,53 @@ +--- +title: Sucos Creati +description: Lorem markdownum Talia. Carinae equis. +author: Code Stitch +date: 2023-06-08T15:27:34.591Z +tags: + - post +image: https://csimg.nyc3.cdn.digitaloceanspaces.com/Images/People/meeting-2.jpeg +imageAlt: People +--- + +## Hospes meus + +Lorem markdownum Talia. [Carinae equis](http://lapsasaturnia.com/inducitest). + +Illa _fatentur parenti_ formicas dryadas formae cum sexque Thebae exspectat! Turaque lacrimabile patriam aristis. Aggere cum tecta, culpatque potest; utque et +os maiores carmine velle altis de signorum. Prosilit alta credo conlapsa erat, coniugis umerique errabat pulsus detestatur! Te dubitat cursu? + +Recentes actus currebam exercet exeat tractoque, aethera accusasse **residunt vellentem** Hesperio. Tacitaque lumina _totumque neptis_, mihi genitoris totoque +nec vigili. + +## Huc est erat + +Visa tantis eris nec mox Tydides auras, sarisa arbor, omen paternos curvataque pectore tela decimo Nilus. Postquam _capiat_ Cyllenius unde redditur +[inmensum](http://noletiacet.net/aquas-moles) pedibus. Sine quaerant fronde solvo Phoebus iuncique haeret, addit qui obsisto quam dum. + +## Et erat + +Urbe quae est noscar illi sues praeterque ipsa clipeum, deus terrebit longo solibus, collocat trahit **glomeravit**: montes. Petisses silvas ut, leve +[est mei serpit](http://nubespetitis.org/) referuntur nostri, esse tellus Cernis Periphanta belli, hoc sunt. + +Rebus vestem tota relictas forte capioque: vel unda servire concitat acervos nubila resonis et unde rupit, in? Ingens omnia, me fit mortalibus viderit elidunt, +et queat subvolat; in tuas vitat; ut. + +1. Dum et hanc honore ponto parias undam +2. Iuvenci toros nigro numquamque demittitur pro funeribus +3. Dolet fluitque + +## Sequitur cortice teneo + +Lapsus flammae. Relatus ille irascitur silet querella tacito: misisset! Tamen arduus et, capitis quae, trepidus insequitur illa pactaeque. + +- Se metu +- Videntur in Stygia tellure +- Concordare spatiosum +- Iove progenuit + +Praeter vos: nubibus ceu **medio** qui corpore hoc in quid hanc, inpia meae prior Hecabesque illa. Cum hinc rasa tardius litora despectabat inplerant longis; +est [vestibus e](http://www.offensa-vana.com/sororibus). Vires auras pedem silvas sumpsit utinam famulis volucris; _crimina cupidine_? + +Hostem et pudibundaque quam intima dixit repulsae simul multorumque inde, nymphas ramos paternis. Coepit [Hodites](http://manus.io/cum-scythicis.aspx) ab suae +remisso prius cingentibus iussos vincla concordare! Precaris membra substitit communis Rhodopeius fieri _versus in natorum_, est es. Vident paribus an ipse +illis, [amplexo](http://nisi.com/) ramaliaque Iovis, potes **simque** omnia. diff --git a/src/content/pages/cms-blog.html b/src/content/pages/cms-blog.html new file mode 100644 index 0000000..39f56c8 --- /dev/null +++ b/src/content/pages/cms-blog.html @@ -0,0 +1,87 @@ +--- +title: "CMS Blog" +description: "The classic CodeStitch blog, controlled by Decap CMS. Lists all blog posts and provides an option to 'feature' posts to a sidebar" +permalink: 'blog/' +eleventyNavigation: + key: 'Blog' + order: '100' + parent: 'CMS' +--- +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + +
+

Blog

+ + + + + +
+ + + + + +
+ +
+ + + + + {% if collections.post | length == 0 %} +

No Recent Posts

+ {% else %} + {%- for post in collections.post | reverse -%} +
+ + + {{ post.data.imageAlt }} + + +
+
+ + + house + + {{ post.data.author }} + + + {{ post.date | formatDate }} +
+

+ {{ post.data.title }} +

+

+ {{ post.data.description }} +

+ Continue Reading +
+
+ {%- endfor -%} + {% endif %} +
+ + {% include 'components/featured-post.html' %} +
+{% endblock %} \ No newline at end of file diff --git a/src/content/pages/cms-menu.html b/src/content/pages/cms-menu.html new file mode 100644 index 0000000..fb8b713 --- /dev/null +++ b/src/content/pages/cms-menu.html @@ -0,0 +1,169 @@ +--- +title: "Menu" +description: "A menu controllable by the content management system. Scales based on what sections and menu items you provide" +permalink: 'menu/' +eleventyNavigation: + key: 'Menu' + order: '200' + parent: 'CMS' +--- + +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + + + + + + + + + + +
+ {# Rendering the buttons #} +
+ {% for course in menu.courses %} +
+ +
+ {% endfor %} +
+ + {# Rendering the courses #} + {% for course in menu.courses %} +
+ {% for section in course.sections %} +
+
+
+

{{ section.section_name }}

+

{{ section.section_description }}

+
+
    + + {# Rendering the buttons #} + {% for row in section.items | batch(3) %} +
    + {% for item in row %} +
  • +

    + {% if item.item_name %} + {{ item.item_name }} + {% endif %} + + {% if item.item_price %} + {{ item.item_price }} + {% endif %} +

    + + {% if item.item_description %} +

    {{ item.item_description }}

    + {% endif %} +
  • + {% endfor %} +
    + {% endfor %} +
+
+
+ + {% endfor %} +
+ {% endfor %} +
+ + +{% endblock %} \ No newline at end of file diff --git a/src/content/pages/cms.html b/src/content/pages/cms.html new file mode 100644 index 0000000..cd4fb73 --- /dev/null +++ b/src/content/pages/cms.html @@ -0,0 +1,95 @@ +--- +title: "The CMS Branch" +description: "The CMS branch of the advanced starter kit. Demonstrates the full capabilities of Decap CMS by supplying some common small-business use cases." +permalink: 'cms/' +eleventyNavigation: + key: 'CMS' + order: '400' +--- + +{% extends "layouts/base.html" %} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + + + + + + + +
+
+
+

Giving Clients Freedom to Make Changes and Manage Content

+

The CMS Branch sets up Decap CMS to be used within the project. This has been chosen for it's ease of installation, minimal backend requirement, and only requiring one config.yaml file to set up. While we have provided a couple of configurations for you, we highly advise reviewing the + Decap CMS documentation + on how to extend the CMS beyond what we've done for you. +

+

Content can take the form of a folder of .md files, or a single configuration file. This is then manageable via the /admin path of the website, which can be authenticated via Netlify. Please see the README for this branch for instructions when it comes to deployment.

+

We have provided a number of collections, as listed below. Each section has it's own page, file/folder (as defined in the config.yaml), and set of styles. This means you can pick-and-choose what kind of content needs to be managed, adjust accordingly and deploy.

+

Website Settings

+

We've hooked up the _data/client.json file to the kit, allowing clients to change their business information. This allows a client to change their contact information and social media links of their own accord. The client domain has been left out, as this is used in some critical parts of the project that could negatively affect SEO if not correct.

+

Blog

+

The same as the Intermediate Kit, and an example of how folder collections work. Clients can create new posts, modify existing posts, and have them converted to .md files behind the scenes. The data is then saved in content/blog.

+

The + Eleventy Data Cascade + is then used to pull data from different sources to create the file. In short, data can be defined in different places, with each place taking priority in a different way. In this example, the data cascade works in two steps: +

+
    +
  1. + The markdown files supply the post-specific data (title, date, post body, etc.). The title and description defined here is pulled up to base.html and is what's used here, instead of the page frontmatter like the files in content/pages. This has the higher priority. +
  2. +
  3. + The blog.json directory data file tells all the markdown files to use the post layout. This is so the layout isn't exposed in the CMS via the .md files. Additionally, the "post" tag is defined in the blog.json, allowing all blog posts to be collected via "collections.post". This has the lower priority. +
  4. +
+

The cascade then has a benefit. By default, all posts a client creates contains the "post" tag, which is exposed in the .md frontmatter. They can optionally add the "featured" tag for the post to show in the sidebar. If the client happens to remove the "post" tag, the post will still be tagged for collection use via the blog.json. Inheritance!

+

Menu

+

As another demonstration of file-based collections, we've converted a menu stitch to be used within the CMS. This collection is made of a single file where different menu courses ("sections") can be added, with different meals added within these sections.

+

The menu is then dynamically rendered, by section, with each section containing it's appropriate meals. The data controlled by the client lives in _data/menu.json. This data is iterated over using Nunjucks to be rendered

+
+
+ + + + + + + + + + + + + + + + +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/src/content/pages/collection.html b/src/content/pages/collection.html new file mode 100644 index 0000000..e2845fd --- /dev/null +++ b/src/content/pages/collection.html @@ -0,0 +1,36 @@ +---js +{ + "pagination": { + "data": "collections.all", + "size": 1, + "alias": "shopCollection", + "addAllPagesToCollections": true, + before: function(paginationData, fullData) { + return paginationData[0].data.shopCollections + } + }, + "eleventyComputed": { + "title": "{{ shopCollection.title }}", + "description": "{{ shopCollection.description }}", + "permalink": "/collection/{{ shopCollection.handle }}/index.html", + "eleventyNavigation": { + "key": "{{ shopCollection.title }}", + "parent": "Shop" + } + } +} +--- + +{% extends "layouts/collection.html" %} + +{# + +As the kit uses an eleventyComputed.js file to transform the data into something +a little more developer friendly, and eleventy doesn't allow computed data to be used +in pagination keys, we have to use a hacky workaround in the `before` callback to access +our shopCollections. + +More info in the below GitHub issue: +https://github.com/11ty/eleventy/issues/2365 + +#} \ No newline at end of file diff --git a/src/content/pages/product.html b/src/content/pages/product.html new file mode 100644 index 0000000..87a3907 --- /dev/null +++ b/src/content/pages/product.html @@ -0,0 +1,20 @@ +---js +{ + "pagination": { + "data": "collections.all", + "size": 1, + "alias": "shopProduct", + "addAllPagesToCollections": true, + before: function(paginationData, fullData) { + return paginationData[0].data.shopProducts + } + }, + "eleventyComputed": { + "title": "{{ shopProduct.title }}", + "description": "{{ shopProduct.description }}", + "permalink": "/shop/{{ shopProduct.handle }}/index.html", + } +} +--- + +{% extends "layouts/product.html" %} \ No newline at end of file diff --git a/src/content/pages/shop.html b/src/content/pages/shop.html new file mode 100644 index 0000000..fe203e0 --- /dev/null +++ b/src/content/pages/shop.html @@ -0,0 +1,181 @@ +--- +title: "The Shopify Branch" +description: "The Shopify branch of the advanced starter kit. Statically build a basic frontend for a Shopify store, +fulfilling the needs of a small business with the fastest possible store." +permalink: "shop/" +eleventyNavigation: + key: "Shop" + order: "500" +--- + +{% extends 'layouts/base.html' %} + +{# + CS-TODO: If you want /shop to display a listing of all products, change this page to extend from + 'layouts/collection.html' above and remove all other content below this comment +#} + +{% block head %} + +{% endblock %} + +{% block body %} + + + + + + + + + + +
+
+ +
+ +
+ 100+ + The Fastest Stores Possible + + + + + + +
+ + + + + + +
+ +
+ Statically Generated Stores +

eCommerce Without the Bloat

+

+ Separating the Storefront from the eCommerce platform allows for full developmental freedom when it comes to building web shops. The Advanced Kit has found a way to link Shopify and Eleventy to deliver lightning-fast stores that are dynamic to a merchant's Shopify backend. +

+

+ The Kit takes advantage of Eleventy's Computed Data to modify the incoming Shopify data just before the page is rendered, providing product and collection data under the global "shopProducts" and "shopCollections" data variables. +

+

+ While a lot of the heavy lifting is done for you, we still strongly advise having a basic level of familiarity with the Shopify ecosystem. As a developer, you will be responsible for setting up the Shopify Store, answering questions around it, and performing any maintainence tasks that appear. +

+

+ There are also some limitations to this kit. To ensure full synchronisation between Shopify and the website, a rebuild will be triggered everytime a product is created, updated or deleted. Additionally, any custom functionality (search, user authentication, reviews) will need to be built yourself, as Shopify Apps won't work here. +

+

+ However, for smaller clients with a limited range of products and fewer needs, the performance benefits of this headless system provide a edge in an otherwise competitive industry. +

+ Learn More +
+
+
+ + + + + +
+
+
+ Getting Started +

3 Steps to Success

+ + + + + + people + +
+
+ + +

+ If you haven't already, we advise managing your clients through a Shopify Partners account. This will allow you to manage all clients from one account, as well as providing financial benefits to stores you create for your clients. From the Partners admin page, follow the below steps. +

+
    +
  • +
    + 01 +

    Create the Store

    +
    +

    + From the "Stores" page, click "Add store" to create a new development store. Follow the wizard to create a new store for a client. +

    +
  • +
  • +
    + 02 +

    Set up the Custom App

    +
    +

    + When signed into the client's development store, go to Settings | Apps and sales channels | Develop Apps and create a new App. Give it a name, and configure the store to have access to all areas of the Storefront API. +

    +
  • +
  • +
    + 03 +

    Link to the Project

    +
    +

    + From the API Credentials tab, you can find a Storefront API access token. Use this in the .env file of the project. You will also need to replace the Store URL, which can be found in the top-left corner of the settings popover in Shopify. +

    +
  • +
+
+
+
+ + + + + +
+
+
+ Extending beyond the defaul +

Using Shopify Data, Carts and Checkouts

+ + + + + + people + +
+
+

+ You can access the simplified data that we've modified with shopProducts and shopCollections. The raw data, direct from the Storefront API, can be accessed with shopify.products and shopify.collections. The "dump" filter may be useful here to output the full data tree onto the page. +

+

+ Cart and checkout functionality is provided by the BuyButtonJS library. A product page can be set up by defining an element containing a data-product-id attribute, with the product idNumber as a value. The buy button, variant toggle, and quantity button will then appear in a div with an id of cs-buy. +

+

+ More detailed guidance on how to set up an eCommerce store can be found in the project README. +

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/src/index.html b/src/index.html index dbccd52..735126d 100644 --- a/src/index.html +++ b/src/index.html @@ -22,55 +22,49 @@
- For any small business need +

- The CodeStitch Advanced Starter Kit - Main Branch + Limousine

+

+ Travel Well +

+

+ We make limousine nice and easy +

Call to Action -

+
- - - + Image hero
@@ -78,38 +72,158 @@

CMS

-
+
+ +
+ + + + + + + + +
+
- How it works -

What makes this kit special

-

- Behind the kit is careful management of the file structure, such that all shared code lives in the "main" branch. Each feature then lives on a separate branch, allowing you to choose what capabilities the project requires. -

-

- Some files, namely "package.json", "package-lock.json", ".eleventy.js", and "_includes/base.html", require additions to them when merging new branches. Cloning the repo from a template loses all commit history, so conflicts will arise in these files. These can be resolved by ensuring all unique code is merged into the project. -

-

- As such, a basic knowledge of Git is required before using this kit, with a solid grasp of how to resolve merge conflicts strongly advisable. You are welcome to merge in feature branches at a later date, after building the project up, but this may result in more complicated merges. + Luxury Cars +

for Maximum Satisfaction

+

Nullam sed ultricies erat, nec euismod metus. Morbi porttitor sapien vitae leo scelerisque. Nullam sed ultricies erat. +

- Read More + + Learn More
-
- - - - - - - - - - - - +
+
+ + +
+
+
+ Image 1 +

Mercedes

+

Description

+
+
+ SVG 1 +

Seats

+
+
+ SVG 2 +

Diesel

+
+
+ SVG 3 +

Auto

+
+ +
+ + +
+ Image 2 +

More Mercedes

+

Description

+
+
+ SVG 1 +

Seats

+
+ SVG 2 +

Petrol

+
+
+ SVG 3 +

Auto

+
+
+ +
+ + +
+ Image 3 +

Mercedes everywhere

+

Description

+
+
+ SVG 1 +

Seats

+
+
+ SVG 2 +

Petrol

+
+
+ SVG 3 +

Auto

+
+
+ +
+
+
+ + + +
+
+

We value the time and quality of travel for each of our clients

+

Incredible

+

comfort

+
+
+
+ Overlay Image +
+ + +
+
+

We make sure that your every trip
is comfortable

+
+
+ Description of SVG 1 +
Luxury Limousine Selection
+
+
+ Description of SVG 2 +
27/7 Order Available
+
+
+ Description of SVG 3 +
Fast Car Delivery Service
+
+
+ Description of SVG 4 +
High Safety and Nurity
+
+
+ Description of SVG 5 +
Fixed Price & Bonus System
+
+
+ Description of SVG 6 +
Professional Car Drivers
+
+
+
+
+
+ Overlay Image2 +
+ + + + + + + @@ -169,6 +283,92 @@

4. Get Developing!

+ +
+
+ +
+ +

Use our quick booking form
to get a limousine

+ +

Aliquam erat volutpat. Integer malesuada turpis id fringilla suscipit. Maecenas ultrices, orci vitae convallis mattis, quam nulla vehicula felis, eu cursus sem tellus. + +

+ +

Call for book an order:

+
+ + SVG Icon + XXX-XXXX-XXXX + +
+ See our Garage + + +
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+
@@ -223,32 +423,6 @@

Your favourite CSS syntaxes - all under one roof

-
-
- -
- -
- Building a better website, together -
- - - - - - -
- -
- Help & Support -

Guidance every step of the way

-

Outside of a cool new feature, each branch comes with an introductory landing page (just like this one) and a branch-specific README. The landing page gives you a quick overview of the branch, with the README providing more technical details should you wish to expand.

-

Additionally, all project-critical actions that need to be taken have a comment containing "CS-TODO". After merging in your branches, you can search the codebase for "CS-TODO", find the most important changes that need to be made, and action them effortlessly.

-

Finally, if you are still stuck or find a bug in the kit, you can use the CTAs in the header to get directly in touch with the kit creators, or reach out to a community of hundreds of other developers.

-

The kit continues to be supported going forward, with a complete set of tutorial videos and additional feature branches planned in the very near future. Follow our subreddit to stay up to date!

- Learn More -
-
-
+ {% endblock %} \ No newline at end of file diff --git a/starter-styles/less/cms-blog.less b/starter-styles/less/cms-blog.less new file mode 100644 index 0000000..8b76b1a --- /dev/null +++ b/starter-styles/less/cms-blog.less @@ -0,0 +1,722 @@ +/*-- -------------------------- --> +<--- Core Styles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + width: 94%; + max-width: (1120/16em); + margin: auto; + } + + .blog-link { + font-size: (16/16rem); + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: (150/16rem); + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 (24/16rem); + color: #fff; + background-color: var(--headerColor); + border-radius: (4/16rem); + display: inline-block; + position: relative; + z-index: 1; + z-index: 1; + transition: color 0.3s; + + &:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: (4/16rem); + position: absolute; + top: 0; + left: 0; + z-index: -1; + z-index: -1; + transition: opacity 0.3s; + } + + &:hover { + color: var(--headerColor); + &:before { + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Header --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #header { + position: relative; + z-index: 1; + + .blog-container { + padding: clamp(100px, 14vw, 200px) 0 clamp(50px, 11vw, 100px); + } + + .blog-header { + font-size: clamp(24px, 4vw, 48px); + font-weight: 700; + line-height: 1.2em; + text-align: left; + width: 100%; + margin: 0; + color: #fff; + } + + .blog-bg { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* color overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: (270/16rem); + padding-bottom: (80/16rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: (64/30rem); + text-align: center; + width: 96%; + max-width: (500/16rem); + margin: 0 auto; + margin-top: (70/16rem); + margin-bottom: (30/16rem); + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: (400/16rem); + margin: auto; + margin-bottom: (30/16rem); + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: (64/16rem); + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: (300/16rem); + padding-top: (180/16rem); + background-attachment: fixed; + padding-block-end: (100/16rem); + } +} + +/*-- -------------------------- --> +<--- Main Content --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + padding: clamp(60px, 7vw, 100px) 0; + } + + .main-content-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: (50/16em); + } + + .main-content { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: (50/16em); + } +} + +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .main-content-wrapper { + flex-direction: row; + align-items: flex-start; + column-gap: (20/16em); + } +} + +/*-- -------------------------- --> +<--- Recent Blog Articles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .recent-articles { + width: 100%; + max-width: (795/16em); + overflow: hidden; + flex: none; + + .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + border-radius: (8/16em) (8/16em) 0 0; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .article-group { + padding: clamp(30px, 5vw, 50px); + border: 1px solid #ebebeb; + border-radius: 0 0 (8/16em) (8/16em); + } + + .blog-author-img { + width: (32/16em); + height: (32/16em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: (12/16rem); + } + + .blog-author, + .blog-date { + font-size: (14/16rem); + line-height: 1.5em; + color: var(--bodyTextColor); + } + + .blog-dot { + width: 3px; + height: 3px; + background-color: var(--primary); + border-radius: 50%; + display: block; + } + + .blog-h1 { + font-size: clamp(20px, 5vw, 32px); + font-weight: 700; + line-height: 1.4em; + margin: (16/16rem) 0; + color: var(--headerColor); + } + + .blog-desc { + font-size: (16/16rem); + line-height: 1.5em; + margin: (16/16rem) 0 (32/16rem); + color: var(--bodyTextColor); + } + + .blog-link { + font-size: (16/16rem); + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: (150/16rem); + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 (24/16rem); + color: #fff; + background-color: var(--headerColor); + border-radius: (4/16rem); + display: inline-block; + position: relative; + z-index: 1; + z-index: 1; + transition: color 0.3s; + + &:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: (4/16rem); + position: absolute; + top: 0; + left: 0; + z-index: -1; + z-index: -1; + transition: opacity 0.3s; + } + + &:hover { + color: var(--headerColor); + &:before { + opacity: 1; + } + } + } + } +} + +/* Mobile - 1024px */ +@media only screen and (min-width: 64em) { + .recent-articles { + .blog-h1 { + max-width: (500/16rem); + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0em) { + body.dark-mode { + .recent-articles { + .blog-h1, + .blog-desc, + .blog-author, + .blog-date { + color: #f7f7f7; + } + } + + .blog-sidebar { + .feature-h3, + .feature-date, + .blog-header { + color: #f7f7f7; + } + .blog-header { + &:after { + background: var(--primary); + } + } + } + + .blog-article { + .blog-h1, + .blog-author, + .blog-date { + color: #f7f7f7; + } + + #blog-content { + h1, + h2, + h3, + h4, + h5, + h6 { + color: #f7f7f7; + } + p, + li { + color: #f7f7f7; + opacity: 0.8; + } + a { + color: #9dafe5; + } + } + } + } +} + +/*-- -------------------------- --> +<--- Sidebar --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-sidebar { + width: 100%; + max-width: (795/16em); + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: (50/16em); + + .blog-featured-group { + width: 100%; + padding: (35/16em) (30/16em); + border: 1px solid #ebebeb; + border-radius: (8/16em); + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + } + + .blog-header { + font-size: (20/16em); + font-weight: bold; + text-align: center; + margin-bottom: (30/16rem); + color: var(--headerColor); + display: block; + position: relative; + + &:after { + content: ""; + width: (50/16rem); + height: 3px; + margin: (16/16rem) auto; + background: var(--headerColor); + border-radius: (4/16rem); + display: block; + position: relative; + } + } + + .blog-feature { + text-decoration: none; + width: 100%; + padding: (20/16rem) 0; + border-bottom: 1px solid #ebebeb; + display: flex; + justify-content: flex-start; + align-items: center; + column-gap: (24/16em); + + &:nth-of-type(1) { + padding-top: 0; + } + + &:last-of-type { + padding-bottom: 0; + border: none; + } + } + + .blog-featureImage { + width: (60/16em); + height: (60/16em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + flex: none; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .feature-h3 { + font-size: (15/16rem); + font-weight: 700; + line-height: 1.5em; + text-decoration: none; + margin: 0; + margin-bottom: (4/16rem); + color: var(--headerColor); + display: block; + } + + .feature-date { + font-size: (14/16rem); + line-height: 1.5em; + color: var(--bodyTextColor); + display: block; + } + } +} + +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .blog-sidebar { + max-width: (360/16em); + } +} + +/*-- -------------------------- --> +<--- Blog Articles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-article { + width: 100%; + max-width: (795/16em); + display: block; + .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + margin-bottom: (50/16em); + border-radius: (8/16em); + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-author-img { + width: (32/16em); + height: (32/16em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: (12/16rem); + } + + .blog-author, + .blog-date { + font-size: (14/16rem); + line-height: 1.5em; + color: var(--bodyTextColor); + } + + .blog-dot { + width: 3px; + height: 3px; + background-color: #fe4f70; + border-radius: 50%; + display: block; + } + + .blog-h1 { + font-size: clamp(20px, 5vw, 39px); + font-weight: 700; + line-height: 1.4em; + max-width: (550/16rem); + margin: (16/16rem) 0; + color: var(--headerColor); + } + + #blog-content { + margin-top: (16/16em); + padding-top: (25/16em); + border-top: 1px solid #ebebeb; + + h1 { + font-size: 2.25rem; + font-weight: 700; + line-height: 1.75em; + margin-bottom: 1rem; + color: var(--headerColor); + } + + h2 { + font-size: (28/16rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: (16/16rem); + color: var(--headerColor); + } + + h3 { + font-size: (24/16rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: (16/16rem); + color: var(--headerColor); + } + + h4, + h5, + h6 { + font-size: (20/16rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: (16/16rem); + color: var(--headerColor); + } + + p { + font-size: (16/16rem); + line-height: 1.6em; + margin: 0; + margin-bottom: (16/16rem); + color: var(--bodyTextColor); + } + + a { + font-size: inherit; + text-decoration: underline; + color: var(--secondary); + } + + ul, + ol { + margin: 0; + margin: (16/16rem) 0; + padding-left: (40/16rem); + + li { + font-size: (16/16rem); + line-height: 1.6em; + list-style: circle; + margin-bottom: (16/16rem); + color: var(--bodyTextColor); + } + } + + img { + width: 100%; + height: auto; + margin: (16/16rem) 0; + border-radius: (8/16rem); + display: block; + } + } + } +} diff --git a/starter-styles/less/cms-menu.less b/starter-styles/less/cms-menu.less new file mode 100644 index 0000000..8fde64c --- /dev/null +++ b/starter-styles/less/cms-menu.less @@ -0,0 +1,538 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #banner-1018 { + z-index: 1; + position: relative; + background-color: #000; + padding: 0 (16/16rem); + /* 160px - 245px */ + padding-top: (270/16rem); + padding-bottom: (120/16rem); + + .cs-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: auto; + max-width: (1280/16rem); + width: 100%; + text-align: center; + } + + .cs-picture { + position: relative; + display: flex; + justify-content: center; + align-items: center; + margin: 0 0 (12/16rem); + width: 100%; + gap: (16/16rem); + + &:before { + position: relative; + /* left line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: (150/16rem); + width: 50%; + } + + &:after { + position: relative; + /* right line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: (150/16rem); + width: 50%; + } + } + + .cs-icon { + height: auto; + /* 100px - 180px */ + max-width: clamp(6.25rem, 18vw, 11.25rem); + width: 40%; + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-int-title { + position: relative; + margin: 0 0 (16/16rem) 0; + max-width: (700/16rem); + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.5vw, 3.8125rem); + line-height: 1.2em; + font-weight: 900; + color: var(--bodyTextColorWhite); + text-align: center; + } + + .cs-text { + margin: 0; + max-width: (765/16rem); + width: 100%; + /* 16px - 20px */ + font-size: clamp(1rem, 2vw, 1.25rem); + line-height: 1.5em; + color: var(--bodyTextColorWhite); + text-align: inherit; + } + + .cs-background { + z-index: -1; + position: absolute; + top: 0; + left: 0; + opacity: 0.7; + display: block; + height: 100%; + width: 100%; + + &:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + /* black overlay box */ + content: ""; + opacity: 0.72; + display: block; + background: #000; + height: 100%; + width: 100%; + } + + img { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + object-fit: cover; + } + } + } +} + +/*-- -------------------------- --> +<--- Menu --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + html, + body { + overflow: initial; + /* when you click a menu button and jump to the top of the screen this makes it so it has a smooth transiiton instead of an abrupt movement */ + scroll-behavior: smooth; + } + + #cs-menu-group { + height: auto; + padding: var(--sectionPadding); + padding-right: 0; + padding-bottom: 0; + padding-left: 0; + /* remove the font family so the Stitch inherits the fonts from your global stylesheet */ + + text-align: center; + + .cs-container { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + margin: auto; + /* changes to 1280px at tablet */ + max-width: (550/16em); + width: 100%; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: var(--sectionPadding); + /* 48px - 64px */ + padding-top: clamp(3em, 5vw, 4em); + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-hidden { + display: none; + } + + .cs-wrapper { + z-index: 10000; + position: sticky; + /* change based on how tall your navigation is above it. If your navigation is 90px tall, set it to 100px from the top on mobile, and increase the larger value in the clamp to change the desktop value if you need to as well */ + top: (208/16rem); + display: flex; + flex-wrap: wrap; + grid-template-columns: repeat(12, 1fr); + justify-content: center; + border: 1px solid #b4b2c7; + border-radius: (70/16em); + margin: 0 auto; + background-color: #f3f3f3; + max-width: (900/16rem); + width: 94%; + box-sizing: border-box; + padding: 0; + /* 16px - 28px top & bottom */ + /* 32px - 48px left & right */ + padding: clamp(1em, 3vw, 1.75em) clamp(2em, 4vw, 3em); + box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + column-gap: clamp(0.5rem, 2vw, 1.5rem); + row-gap: (8/16rem); + } + + .cs-button-group { + z-index: 1000; + margin: 0 (8/16rem) 0 0; + width: auto; + grid-column: span 6; + /* 24px - 36px */ + column-gap: clamp(1.5rem, 2vw, 2.25rem); + row-gap: (12/16rem); + } + + .cs-button { + position: relative; + display: flex; + justify-content: center; + align-items: center; + border: none; + background-color: transparent; + width: 100%; + padding: (4/16rem); + font-size: clamp(0.875rem, 1.3vw, 1rem); + line-height: 1.5; + font-weight: 400; + color: #878787; + transition: color 0.3s, font-weight 0.3s, color 0.3s; + + &:hover { + color: var(--primary); + cursor: pointer; + } + + &:after { + position: relative; + /* active state icon */ + content: ""; + opacity: 0; + display: block; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons%2Ffancy-icon.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + /* 16px - 24px */ + height: clamp(1em, 3vw, 1.5em); + width: 0; + transition: width 0.3s, opacity 0.3s, margin-left 0.3s; + } + + &.cs-active { + font-weight: 700; + color: var(--headerColor); + &:after { + opacity: 1; + /* 8px - 16px */ + margin-left: clamp(0.5em, 0.5vw, 1em); + width: clamp(1.5625em, 3vw, 2.25em); + } + } + } + + .cs-menu { + display: flex; + flex-direction: column; + align-items: center; + /* 32px - 64px */ + gap: clamp(2rem, 6vw, 4rem); + + &.cs-menu-style2 { + position: relative; + /* changes to desktop at desktop */ + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood2-m.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + &:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + content: ""; + opacity: 0.7; + display: block; + background: #000; + height: 100%; + width: 100%; + } + + .cs-title, + .cs-text { + color: var(--bodyTextColorWhite); + } + + .cs-name { + color: var(--bodyTextColorWhite); + } + + .cs-menu-p { + opacity: 0.8; + color: #fff; + } + } + + &.cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.7); + } + } + + .cs-content { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + width: 100%; + /* set text align to left if content needs to be left aligned */ + text-align: center; + } + + .cs-title { + position: relative; + margin: 0 0 (16/16rem) 0; + max-width: (700/16rem); + font-size: clamp(3.9375rem, 7.9vw, 5.4625rem); + line-height: 1.2em; + color: var(--headerColor); + text-align: inherit; + } + + .cs-text { + margin: 0; + max-width: (650/16rem); + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } + + .cs-menu-list { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + padding: 0; + row-gap: (32/16rem); + } + + .cs-menu-row { + display: flex; + flex-direction: column; + align-items: stretch; + /* 32px - 60px */ + row-gap: clamp(2rem, 6vw, 3.75rem); + } + + .cs-menu-item { + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + list-style: none; + text-align: left; + gap: (16/16rem); + } + + .cs-h3 { + position: relative; + display: flex; + justify-content: flex-start; + align-items: flex-start; + margin: 0; + width: 100%; + /* 20px - 25px */ + font-size: clamp(1.25rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: 700; + gap: (16/16rem); + + &:after { + /* forces it into the 2nd position */ + order: 2; + position: relative; + /* divider line */ + content: ""; + opacity: 1; + display: block; + margin-top: clamp(1.125rem, 2vw, 1.5rem); + background: #b4b2c7; + height: 1px; + max-width: (200/16rem); + min-width: (16/16rem); + width: 100%; + } + } + + .cs-name { + display: block; + /* 4px - 8px */ + margin: clamp(0.25rem, 0.8vw, 0.625rem) 0 0 0; + margin-right: auto; + max-width: 16ch; + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-price { + /* forces it into the 3rd position */ + order: 3; + display: block; + border: 1px solid #b4b2c7; + border-radius: (80/16rem); + margin: 0; + background-color: #fff; + width: auto; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: (8/16rem) (12/16rem); + /* 20px - 25px */ + font-size: clamp(1rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: bold; + color: var(--primary); + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-menu-p { + margin: 0; + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #cs-menu-group { + .cs-container { + max-width: (1280/16rem); + } + + .cs-menu { + width: 100%; + &.cs-menu-style2 { + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + } + } + + .cs-menu-row { + flex-direction: row; + justify-content: stretch; + width: 100%; + /* 32px - 80px */ + gap: clamp(2em, 4vw, 5rem); + + &.cs-3 { + .cs-h3 { + gap: (8/16rem); + &:after { + display: none; + } + } + .cs-name { + max-width: 20ch; + width: 70%; + font-size: clamp(1rem, 2vw, 1.5625rem); + } + } + } + + .cs-menu-row { + display: grid; + grid-template-columns: repeat(12, 1fr); + width: 100%; + } + + .cs-menu-item { + margin: 0 auto; + max-width: (600/16rem); + grid-column: span 4; + } + + .cs-name { + max-width: 70%; + width: fit-content; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #cs-menu-group { + background-color: rgba(0, 0, 0, 0.5); + + .cs-wrapper { + background-color: var(--medium); + } + + .cs-button { + color: #fff; + &:hover { + color: var(--secondary); + } + } + .cs-topper { + color: var(--primaryLight); + } + .cs-title, + .cs-text, + .cs-name, + .cs-menu-p { + color: var(--bodyTextColorWhite); + } + .cs-text, + .cs-menu-p { + opacity: 0.8; + } + .cs-price { + background-color: var(--medium); + color: var(--secondary); + } + .cs-menu-style2 .cs-price { + background-color: #fff; + color: var(--primary); + } + + .cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.03); + } + } + } +} diff --git a/starter-styles/less/cms.less b/starter-styles/less/cms.less new file mode 100644 index 0000000..6781280 --- /dev/null +++ b/starter-styles/less/cms.less @@ -0,0 +1,394 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + padding-top: (270/16rem); + padding-bottom: (100/16rem); + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + + .cs-container { + text-align: center; + width: 100%; + max-width: (1280/16rem); + margin: auto; + display: flex; + flex-direction: column; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + + .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + + .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + + .cs-link { + font-size: (16/16rem); + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + + &:last-of-type { + /* remove the chevron on the last list item */ + &::after { + display: none; + } + } + + &:after { + /* chevron */ + content: ""; + width: (7/16rem); + height: (12/16rem); + margin: 0 (16/16rem); + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + + &.cs-active { + color: var(--primary); + } + } + + .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + &:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + top, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to bottom, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + + img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 { + .cs-background { + &:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + left, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to right, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Content Page --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #content-page-847 { + padding: var(--sectionPadding); + background-color: #fff; + position: relative; + z-index: 1; + /* clips the wave background from causing overflow issues when it goes off screen */ + overflow: hidden; + + .cs-container { + width: 100%; + max-width: (1280/16rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + position: relative; + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: (630/16rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + } + h2, + h3, + h4, + h5, + h6 { + font-weight: 700; + text-align: inherit; + margin: 0 0 (16/16rem) 0; + color: var(--headerColor); + } + + h2 { + font-size: (32/16rem); + margin-top: (32/16rem); + } + + h3 { + font-size: (24/16rem); + color: var(--primary); + } + + h4, + h5, + h6 { + font-size: (20/16rem); + } + + .cs-button-solid { + margin-bottom: (32/16rem); + } + + .cs-no-margin { + margin: 0; + } + + .cs-color { + color: var(--primary); + } + + p { + font-size: var(--bodyFontSize); + line-height: 1.5em; + text-align: inherit; + width: 100%; + margin: 0 0 (16/16rem) 0; + color: var(--bodyTextColor); + &:last-of-type { + margin-bottom: (32/16rem); + } + + a { + font-size: inherit; + line-height: inherit; + text-decoration: underline; + color: var(--primary); + } + } + + ol, + ul { + margin: 0 0 (32/16rem) 0; + padding-left: (24/16rem); + color: var(--bodyTextColor); + display: flex; + flex-direction: column; + gap: (16/16rem); + } + + ul { + li { + list-style: none; + color: inherit; + position: relative; + + &:before { + /* custom list bullet */ + content: ""; + width: 3px; + height: 3px; + background: currentColor; + opacity: 1; + border-radius: 50%; + display: block; + position: absolute; + top: (10/16rem); + left: (-12/16rem); + } + } + } + + img { + width: 100%; + height: auto; + display: block; + } + + .cs-image-group { + width: 50%; + max-width: (542/16rem); + display: none; + flex-direction: column; + gap: (20/16rem); + position: relative; + } + + .cs-picture { + width: 100%; + /* 300px - 520px */ + height: clamp(18.75rem, 40vw, 32.5rem); + /* prevents border from affecting height and width */ + box-sizing: border-box; + box-shadow: 0px 3.3478px 50.2169px rgba(0, 0, 0, 0.16); + display: block; + position: relative; + /* clips img tag corners */ + overflow: hidden; + + img { + width: 100%; + height: 100%; + /* makes it act like a background image */ + object-fit: cover; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #content-page-847 { + .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: flex-start; + } + + .cs-content { + width: 60%; + flex: none; + } + + .cs-image-group { + display: flex; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #content-page-847 { + background-color: var(--dark); + + .cs-title, + .cs-text, + h2, + h3, + h4, + h5, + h6, + li, + p { + color: var(--bodyTextColorWhite); + } + .cs-color, + a { + color: var(--primaryLight); + } + + p, + li { + color: #ebebeb; + } + + .cs-picture { + background-color: var(--dark); + border-color: var(--dark); + } + } + } +} diff --git a/starter-styles/less/collection.less b/starter-styles/less/collection.less new file mode 100644 index 0000000..8f08773 --- /dev/null +++ b/starter-styles/less/collection.less @@ -0,0 +1,266 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 9.375rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: 2.13333333rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: 4rem; + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} + +/*-- -------------------------- --> +<--- Collection --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #collection { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + max-width: (1280/16rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + position: relative; + z-index: 1; + } + + .cs-card-group { + width: 100%; + margin: 0; + padding: 0; + display: grid; + justify-items: center; + grid-template-columns: repeat(auto-fit, minmax(19.0625rem, 1fr)); + /* 16px - 20px */ + column-gap: clamp(1rem, 3vw, 1.25rem); + /* 16px - 40px */ + row-gap: clamp(1rem, 3vw, 2.5rem); + position: relative; + transform-style: preserve-3d; + } + + .cs-item { + max-width: (296/16rem); + padding: (16/16rem); + border: 1px solid #e8e8e8; + + &:hover .cs-picture img { + transform: scale(1.05); + } + } + + .cs-link { + text-decoration: none; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + + .cs-image-group { + width: auto; + height: (300/16rem); + margin-bottom: (20/16rem); + position: relative; + } + + .cs-picture { + width: 100%; + height: 100%; + display: block; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s; + } + } + + .cs-offer { + font-size: (13/16rem); + font-weight: 700; + line-height: 1.2em; + text-transform: uppercase; + letter-spacing: 1.3px; + padding: (6/16rem); + color: #fff; + background: #ff4747; + position: absolute; + top: (12/16rem); + right: (12/16rem); + } + + .cs-product { + /* 20px - 24px */ + font-size: clamp(1.25rem, 3vw, 1.5rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + } + + .cs-wrapper { + margin-top: (20/16rem); + display: flex; + justify-content: space-between; + align-items: center; + } + + .cs-info { + display: flex; + flex-direction: row; + align-items: center; + } + + .cs-price { + font-size: (20/16rem); + font-weight: 700; + line-height: 1.2em; + color: var(--primary); + } + + .cs-old-price { + font-size: (16/16rem); + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #collection { + .cs-item { + max-width: none; + } + + .cs-image-group { + height: clamp(12rem, 23vw, 20rem); + } + } +} +/* Small Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #collection { + .cs-card-group { + grid-template-columns: repeat(4, 1fr); + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #collection { + .cs-offer, + .cs-product, + .cs-price, + .cs-old-price { + color: var(--bodyTextColorWhite); + } + + .cs-item { + &:hover .cs-picture { + background-color: rgba(255, 255, 255, 0.2); + } + } + + .cs-picture { + background-color: rgba(255, 255, 255, 0.1); + } + } + } +} diff --git a/starter-styles/less/product.less b/starter-styles/less/product.less new file mode 100644 index 0000000..eeec179 --- /dev/null +++ b/starter-styles/less/product.less @@ -0,0 +1,357 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: (150/16rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: (34/16rem); + text-align: center; + width: 96%; + max-width: (500/16rem); + margin: 0 auto; + margin-top: (70/16rem); + margin-bottom: (30/16rem); + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: (400/16rem); + margin: auto; + margin-bottom: (30/16rem); + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: 4rem; + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: (300/16rem); + padding-top: (180/16rem); + background-attachment: fixed; + padding-block-end: (100/16rem); + } +} + +/*-- -------------------------- --> +<--- Product --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #product { + padding: var(--sectionPadding); + overflow: hidden; + + .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: (750/16rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 28px - 64px */ + gap: clamp(1.75rem, 5vw, 4rem); + } + + .cs-large-image { + width: 100%; + /* 248px - 533px */ + height: clamp(15.5rem, 70vw, 33.3125rem); + display: block; + + img { + width: 100%; + height: 100%; + /* as we want to show the product in full, contain the image in the img tag. then, use a matching background color for the whitespace. feel free to remove and use object-fit:cover if you'd rather */ + object-fit: contain; + display: block; + } + } + + .cs-h3 { + font-size: var(--headerFontSize); + font-weight: 900; + line-height: 1.2em; + margin: 0 0 (8/16rem); + color: var(--headerColor); + } + + .cs-price { + font-size: (20/16rem); + font-weight: 700; + line-height: 1.2em; + color: var(--secondary); + display: block; + } + + .cs-compare-price { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + display: block; + } + + .cs-taxes { + font-size: (14/16rem); + font-weight: 400; + line-height: 1.5em; + color: var(--primary); + display: block; + } + + .cs-info-text { + font-size: (16/16rem); + font-weight: 400; + line-height: 1.5em; + /* 12px - 16px */ + margin: clamp(0.75rem, 2vw, 1rem) 0 (8/16rem); + color: var(--bodyTextColor); + } + + .cs-details { + font-size: (16/16rem); + font-weight: 700; + line-height: 1.2em; + width: fit-content; + margin-bottom: (24/16rem); + color: var(--bodyTextColor); + /* using a border-bottom instead of text-decoration to give more space between the line and the text */ + border-bottom: 1px solid var(--bodyTextColor); + display: block; + } + + .cs-option { + font-size: (14/16rem); + font-weight: 700; + line-height: 1.5em; + color: var(--bodyTextColor); + } + + .cs-dropdown { + width: 100%; + max-width: (240/16rem); + height: (48/16rem); + margin-bottom: (24/16rem); + padding: 0 (16/16rem); + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: (100/16rem); + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: (16/16rem); + cursor: pointer; + } + + .cs-quantity { + width: 100%; + width: fit-content; + max-width: (240/16rem); + height: (48/16rem); + margin-bottom: (24/16rem); + padding: 0 (16/16rem); + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: (100/16rem); + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: (16/16rem); + cursor: pointer; + } + + .cs-select-icon { + display: none; + } + + .cs-quantity-increment { + font-size: (24/16rem); + color: #767676; + background: none; + border: none; + cursor: pointer; + } + + .cs-quantity-decrement { + font-size: (24/16rem); + color: #767676; + background: none; + border: none; + cursor: pointer; + } + + .cs-quantity-input { + font-size: (20/16rem); + line-height: 1.5em; + text-align: center; + width: (32/16rem); + background-color: transparent; + border: none; + display: flex; + justify-content: center; + align-items: center; + } + + .cs-quantity-input[type="number"] { + margin: 0; + -webkit-appearance: none; + -moz-appearance: textfield; + } + + .cs-button { + font-size: (16/16rem); + font-weight: 700; + line-height: 1.2em; + padding: (16/16rem); + background: none; + border: none; + display: flex; + justify-content: center; + align-items: center; + flex: 1 0 0; + } + + .cs-cart { + border: 1px solid #1a1a1a; + } + + .cs-buy { + color: #fff; + background-color: var(--primary); + cursor: pointer; + } + } + + .visuallyhidden { + white-space: nowrap; + width: 1px; + height: 1px; + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(50%); + } +} + +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #product { + .cs-container { + max-width: (1280/16rem); + flex-direction: row; + align-items: start; + } + + .cs-large-image { + height: 100%; + /* dont grow or shrink and set the flex basis to 540px. the large image will stay at this width and the other content will adapt */ + flex: 0 0 (540/16rem); + } + + .cs-product-info { + /* grow to fill the rest of the flex-container */ + flex: 1 0 0; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #product { + .cs-h3, + .cs-info-text, + .cs-details, + .cs-option, + .cs-option b, + .cs-box, + .cs-quantity, + .cs-cart { + color: var(--bodyTextColorWhite); + } + + .cs-price { + color: var(--primaryLight); + } + + .cs-taxes { + color: var(--secondaryLight); + } + + .cs-info-text { + opacity: 0.8; + } + + .cs-box-number, + .cs-quantity, + .cs-cart { + background-color: var(--medium); + border-color: var(--accent); + } + } + } +} diff --git a/starter-styles/less/shop.less b/starter-styles/less/shop.less new file mode 100644 index 0000000..14d03a2 --- /dev/null +++ b/starter-styles/less/shop.less @@ -0,0 +1,724 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + /* 190px - 268px */ + padding-top: clamp(11.875rem, 25vw, 16.75rem); + padding-bottom: (100/16rem); + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + + .cs-container { + text-align: center; + width: 100%; + max-width: (1280/16rem); + margin: auto; + display: flex; + flex-direction: column; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + + .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + + .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + + .cs-link { + font-size: (16/16rem); + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + + &:last-of-type { + /* remove the chevron on the last list item */ + &::after { + display: none; + } + } + + &:after { + /* chevron */ + content: ""; + width: (7/16rem); + height: (12/16rem); + margin: 0 (16/16rem); + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + + &.cs-active { + color: var(--primary); + } + } + + .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + &:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + top, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to bottom, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + + img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 { + .cs-background { + &:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + left, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to right, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Side By Side --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-297 { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: (550/16rem); + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: center; + width: 100%; + max-width: (522/16rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + } + + .cs-text { + margin-bottom: (16/16rem); + &:last-of-type { + margin-bottom: (32/16rem); + } + } + + .cs-link { + font-size: (20/16rem); + font-weight: 700; + text-decoration: none; + color: var(--primary); + } + + .cs-image-group { + width: 100%; + max-width: (550/16rem); + /* 78px - 108px */ + margin: 0 auto clamp(4.875rem, 16.5vw, 6.75rem); + display: block; + position: relative; + /* width divided by height */ + aspect-ratio: 328/363; + } + + .cs-picture { + /* big background image */ + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-box { + /* 204px - 326px & changes at desktop */ + width: clamp(12.75rem, 50vw, 20.375rem); + height: clamp(12.75rem, 50vw, 20.375rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: absolute; + /* 38px - 60px - wrapped in a calc function to make clamp values negative */ + bottom: ~"calc(clamp(2.375rem, 7.9vw, 3.75rem) *-1)"; + left: 50%; + z-index: 10; + overflow: hidden; + transform: translateX(-50%); + } + + .cs-box-picture { + /* Background image for cs-box */ + width: 100%; + height: 100%; + background-color: #000; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + /* clips img corners and bg corners */ + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0.65; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-number { + /* 75px - 100px */ + font-size: clamp(4.6875rem, 8vw, 6.25rem); + font-weight: 900; + line-height: 1em; + margin-bottom: (8/16rem); + color: var(--headerColor); + display: block; + z-index: 10; + /* creates the transparent clipping text */ + mix-blend-mode: screen; + + &:before { + /* opaque white box - For mix-blend-mode to work, we need the + white box inside the .cs-number, so we use a pseudo element. + We DON'T add a position to the cs-number so the pseudo positions + itself relative to the .cs-box, which has position relative. This + allows us to center to .cs-number pseudo inside the .cs-box */ + content: ""; + /* 184px - 294px & changes at desktop */ + width: clamp(11.5rem, 45vw, 18.375rem); + height: clamp(11.5rem, 45vw, 18.375rem); + background-color: #fff; + opacity: 1; + display: block; + position: absolute; + /* these next 3 properties are an old school way to center an absolutely + positioned element inside a relative position parent */ + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } + } + + .cs-desc { + /* 16px - 25px */ + font-size: clamp(1rem, 4vw, 1.5625rem); + font-weight: 700; + line-height: 1.2em; + text-align: center; + text-transform: lowercase; + width: 80%; + color: var(--headerColor); + position: relative; + z-index: 10; + } + } +} + +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbs-297 { + /* aligns the button */ + text-align: left; + .cs-container { + max-width: (1280/16rem); + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + gap: (160/16rem); + } + + .cs-content { + text-align: left; + align-items: flex-start; + } + + .cs-image-group { + width: 40vw; + max-width: (521/16rem); + /* 520px - 672px */ + height: clamp(32.5rem, 51.9vw, 42rem); + margin: 0; + } + + .cs-box { + /* 251px - 325px */ + width: clamp(15.6875rem, 24.5vw, 20.3125rem); + height: clamp(15.6875rem, 24.5vw, 20.3125rem); + /* -52px to -102px */ + right: ~"calc(clamp(3.25rem, 5.5vw + 1.6rem, 6.375rem) *-1)"; + /* 62px - 80px */ + bottom: clamp(3.875rem, 6.2vw, 5rem); + left: auto; + transform: none; + } + + .cs-number { + &:before { + /* 226px - 293px */ + width: clamp(14.125rem, 22.7vw, 18.3125rem); + height: clamp(14.125rem, 22.7vw, 18.3125rem); + } + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #sbs-297 { + .cs-topper { + color: var(--secondaryLight); + } + + .cs-title, + .cs-text { + color: var(--bodyTextColorWhite); + } + + .cs-link { + color: var(--secondaryLight); + } + + .cs-text { + opacity: 0.8; + } + } + } +} + +/*-- -------------------------- --> +<--- Stats --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #stats-1642 { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + max-width: (1280/16rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-content { + /* set text align to right if content needs to be right aligned */ + text-align: left; + width: 100%; + display: flex; + flex-direction: column; + /* left aligns content */ + align-items: flex-start; + } + + .cs-title { + max-width: 20ch; + /* 28px - 64px */ + margin: 0 0 clamp(1.75rem, 7vw, 4rem) 0; + } + + .cs-picture { + width: 100%; + height: 95vw; + max-height: (400/16rem); + display: block; + position: relative; + z-index: 1; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-quote { + width: (74/16rem); + height: auto; + opacity: 0.5; + position: relative; + top: (24/16rem); + z-index: -1; + } + + .cs-text { + margin: 0 0 clamp(1.5rem, 3vw, 2rem) 0; + } + + .cs-stats-group { + width: 100%; + display: flex; + flex-direction: column; + /* 28px - 40px */ + } + + .cs-card-group { + width: 100%; + /* 550px - 630px */ + max-width: clamp(34.375rem, 50vw, 39.375rem); + margin: 0; + padding: 0; + display: grid; + align-items: center; + gap: (24/16rem); + } + + .cs-item { + list-style: none; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: (8/16rem); + } + + .wrapper { + width: 100%; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: (10/16rem); + } + + .cs-item-number { + font-size: (20/16rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--primary); + display: flex; + justify-content: flex-start; + align-items: center; + gap: (8/16rem); + } + + .cs-h3 { + font-size: (20/16rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + display: flex; + justify-content: flex-start; + align-items: center; + gap: (8/16rem); + } + + .cs-item-text { + font-size: (16/16rem); + line-height: 1.5em; + margin: 0; + color: var(--bodyTextColor); + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #stats-1642 { + .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + + .cs-content { + justify-content: stretch; + /* sends it to the right in the 2nd position */ + order: 2; + } + + .cs-picture { + height: 100%; + max-height: 100%; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #stats-1642 { + .cs-title, + .cs-text, + .cs-item-text, + .cs-h3 { + color: var(--bodyTextColorWhite); + } + .cs-text, + .cs-item-text { + opacity: 0.8; + } + } + } +} + +/*-- -------------------------- --> +<--- Side By Side --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-1640 { + padding: var(--sectionPadding); + background-color: #111926; + overflow: hidden; + + .cs-container { + width: 100%; + /* changes to 1280px at tablet */ + max-width: (584/16rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: (630/16rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + + .cs-title { + margin: 0 0 (40/16rem) 0; + color: var(--bodyTextColorWhite); + } + + .cs-text { + margin-bottom: (16/16rem); + color: var(--bodyTextColorWhite); + opacity: 0.8; + + &:last-of-type { + margin-bottom: (32/16rem); + } + } + + .cs-picture { + width: 100%; + height: auto; + min-height: (420/16rem); + display: block; + position: relative; + z-index: 1; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-stats-group { + width: 100%; + max-width: (570/16rem); + display: flex; + flex-direction: column; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #sbs-1640 { + .cs-container { + max-width: (1280/16rem); + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + + .cs-stats-group { + /* 52px - 90px */ + margin-bottom: clamp(3.25rem, 7vw, 5.625rem); + /* 60px - 120px */ + padding-top: clamp(3.75rem, 10vw, 7.5rem); + /* 60px - 80px */ + padding-bottom: clamp(3.75rem, 8vw, 5rem); + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 200vw; + height: 100%; + background: #fff; + opacity: 1; + display: block; + position: absolute; + top: 100%; + left: -100%; + z-index: -1; + transform: translateX(-50%); + } + } + + .cs-picture { + height: 100%; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #sbs-1640 { + background-color: rgba(0, 0, 0, 0.6); + + .cs-stats-group { + &:before { + background-color: var(--dark); + } + } + } + } +} diff --git a/starter-styles/sass/cms-blog.scss b/starter-styles/sass/cms-blog.scss new file mode 100644 index 0000000..0e8ccf8 --- /dev/null +++ b/starter-styles/sass/cms-blog.scss @@ -0,0 +1,722 @@ +/*-- -------------------------- --> +<--- Core Styles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + width: 94%; + max-width: calc(1120 / 16 * 1em); + margin: auto; + } + + .blog-link { + font-size: calc(16 / 16 * 1rem); + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: calc(150 / 16 * 1rem); + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 calc(24 / 16 * 1rem); + color: #fff; + background-color: var(--headerColor); + border-radius: calc(4 / 16 * 1rem); + display: inline-block; + position: relative; + z-index: 1; + z-index: 1; + transition: color 0.3s; + + &:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: calc(4 / 16 * 1rem); + position: absolute; + top: 0; + left: 0; + z-index: -1; + z-index: -1; + transition: opacity 0.3s; + } + + &:hover { + color: var(--headerColor); + &:before { + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Header --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #header { + position: relative; + z-index: 1; + + .blog-container { + padding: clamp(100px, 14vw, 200px) 0 clamp(50px, 11vw, 100px); + } + + .blog-header { + font-size: clamp(24px, 4vw, 48px); + font-weight: 700; + line-height: 1.2em; + text-align: left; + width: 100%; + margin: 0; + color: #fff; + } + + .blog-bg { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* color overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: calc(270 / 16 * 1rem); + padding-bottom: calc(80 / 16 * 1rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: calc(64 / 30 * 1rem); + text-align: center; + width: 96%; + max-width: calc(500 / 16 * 1rem); + margin: 0 auto; + margin-top: calc(70 / 16 * 1rem); + margin-bottom: calc(30 / 16 * 1rem); + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: calc(400 / 16 * 1rem); + margin: auto; + margin-bottom: calc(30 / 16 * 1rem); + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: calc(64 / 16 * 1rem); + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: calc(300 / 16 * 1rem); + padding-top: calc(180 / 16 * 1rem); + background-attachment: fixed; + padding-block-end: calc(100 / 16 * 1rem); + } +} + +/*-- -------------------------- --> +<--- Main Content --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-container { + padding: clamp(60px, 7vw, 100px) 0; + } + + .main-content-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: calc(50 / 16 * 1em); + } + + .main-content { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: calc(50 / 16 * 1em); + } +} + +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .main-content-wrapper { + flex-direction: row; + align-items: flex-start; + column-gap: calc(20 / 16 * 1em); + } +} + +/*-- -------------------------- --> +<--- Recent Blog Articles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .recent-articles { + width: 100%; + max-width: calc(795 / 16 * 1em); + overflow: hidden; + flex: none; + + .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + border-radius: calc(8 / 16 * 1em) calc(8 / 16 * 1em) 0 0; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .article-group { + padding: clamp(30px, 5vw, 50px); + border: 1px solid #ebebeb; + border-radius: 0 0 calc(8 / 16 * 1em) calc(8 / 16 * 1em); + } + + .blog-author-img { + width: calc(32 / 16 * 1em); + height: calc(32 / 16 * 1em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: calc(12 / 16 * 1rem); + } + + .blog-author, + .blog-date { + font-size: calc(14 / 16 * 1rem); + line-height: 1.5em; + color: var(--bodyTextColor); + } + + .blog-dot { + width: 3px; + height: 3px; + background-color: var(--primary); + border-radius: 50%; + display: block; + } + + .blog-h1 { + font-size: clamp(20px, 5vw, 32px); + font-weight: 700; + line-height: 1.4em; + margin: calc(16 / 16 * 1rem) 0; + color: var(--headerColor); + } + + .blog-desc { + font-size: calc(16 / 16 * 1rem); + line-height: 1.5em; + margin: calc(16 / 16 * 1rem) 0 calc(32 / 16 * 1rem); + color: var(--bodyTextColor); + } + + .blog-link { + font-size: calc(16 / 16 * 1rem); + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875em, 5.5vw, 3.5em); + text-align: center; + text-decoration: none; + min-width: calc(150 / 16 * 1rem); + margin: auto; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 calc(24 / 16 * 1rem); + color: #fff; + background-color: var(--headerColor); + border-radius: calc(4 / 16 * 1rem); + display: inline-block; + position: relative; + z-index: 1; + z-index: 1; + transition: color 0.3s; + + &:before { + content: ""; + width: 100%; + height: 100%; + box-sizing: border-box; + background: #fff; + opacity: 0; + border: 1px solid var(--headerColor); + border-radius: calc(4 / 16 * 1rem); + position: absolute; + top: 0; + left: 0; + z-index: -1; + z-index: -1; + transition: opacity 0.3s; + } + + &:hover { + color: var(--headerColor); + &:before { + opacity: 1; + } + } + } + } +} + +/* Mobile - 1024px */ +@media only screen and (min-width: 64em) { + .recent-articles { + .blog-h1 { + max-width: calc(500 / 16 * 1rem); + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0em) { + body.dark-mode { + .recent-articles { + .blog-h1, + .blog-desc, + .blog-author, + .blog-date { + color: #f7f7f7; + } + } + + .blog-sidebar { + .feature-h3, + .feature-date, + .blog-header { + color: #f7f7f7; + } + .blog-header { + &:after { + background: var(--primary); + } + } + } + + .blog-article { + .blog-h1, + .blog-author, + .blog-date { + color: #f7f7f7; + } + + #blog-content { + h1, + h2, + h3, + h4, + h5, + h6 { + color: #f7f7f7; + } + p, + li { + color: #f7f7f7; + opacity: 0.8; + } + a { + color: #9dafe5; + } + } + } + } +} + +/*-- -------------------------- --> +<--- Sidebar --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-sidebar { + width: 100%; + max-width: calc(795 / 16 * 1em); + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + row-gap: calc(50 / 16 * 1em); + + .blog-featured-group { + width: 100%; + padding: calc(35 / 16 * 1em) calc(30 / 16 * 1em); + border: 1px solid #ebebeb; + border-radius: calc(8 / 16 * 1em); + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + } + + .blog-header { + font-size: calc(20 / 16 * 1em); + font-weight: bold; + text-align: center; + margin-bottom: calc(30 / 16 * 1rem); + color: var(--headerColor); + display: block; + position: relative; + + &:after { + content: ""; + width: calc(50 / 16 * 1rem); + height: 3px; + margin: calc(16 / 16 * 1rem) auto; + background: var(--headerColor); + border-radius: calc(4 / 16 * 1rem); + display: block; + position: relative; + } + } + + .blog-feature { + text-decoration: none; + width: 100%; + padding: calc(20 / 16 * 1rem) 0; + border-bottom: 1px solid #ebebeb; + display: flex; + justify-content: flex-start; + align-items: center; + column-gap: calc(24 / 16 * 1em); + + &:nth-of-type(1) { + padding-top: 0; + } + + &:last-of-type { + padding-bottom: 0; + border: none; + } + } + + .blog-featureImage { + width: calc(60 / 16 * 1em); + height: calc(60 / 16 * 1em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + flex: none; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .feature-h3 { + font-size: calc(15 / 16 * 1rem); + font-weight: 700; + line-height: 1.5em; + text-decoration: none; + margin: 0; + margin-bottom: calc(4 / 16 * 1rem); + color: var(--headerColor); + display: block; + } + + .feature-date { + font-size: calc(14 / 16 * 1rem); + line-height: 1.5em; + color: var(--bodyTextColor); + display: block; + } + } +} + +/* Tablet - 1024px */ +@media only screen and (min-width: 64em) { + .blog-sidebar { + max-width: calc(360 / 16 * 1em); + } +} + +/*-- -------------------------- --> +<--- Blog Articles --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + .blog-article { + width: 100%; + max-width: calc(795 / 16 * 1em); + display: block; + .blog-mainImage { + width: 100%; + height: clamp(200px, 30vw, 400px); + margin-bottom: calc(50 / 16 * 1em); + border-radius: calc(8 / 16 * 1em); + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-author-img { + width: calc(32 / 16 * 1em); + height: calc(32 / 16 * 1em); + border-radius: 50%; + display: block; + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .blog-authorGroup { + display: flex; + justify-content: flex-start; + align-items: center; + gap: calc(12 / 16 * 1rem); + } + + .blog-author, + .blog-date { + font-size: calc(14 / 16 * 1rem); + line-height: 1.5em; + color: var(--bodyTextColor); + } + + .blog-dot { + width: 3px; + height: 3px; + background-color: #fe4f70; + border-radius: 50%; + display: block; + } + + .blog-h1 { + font-size: clamp(20px, 5vw, 39px); + font-weight: 700; + line-height: 1.4em; + max-width: calc(550 / 16 * 1rem); + margin: calc(16 / 16 * 1rem) 0; + color: var(--headerColor); + } + + #blog-content { + margin-top: calc(16 / 16 * 1em); + padding-top: calc(25 / 16 * 1em); + border-top: 1px solid #ebebeb; + + h1 { + font-size: 2.25rem; + font-weight: 700; + line-height: 1.75em; + margin-bottom: 1rem; + color: var(--headerColor); + } + + h2 { + font-size: calc(28 / 16 * 1rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: calc(16 / 16 * 1rem); + color: var(--headerColor); + } + + h3 { + font-size: calc(24 / 16 * 1rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: calc(16 / 16 * 1rem); + color: var(--headerColor); + } + + h4, + h5, + h6 { + font-size: calc(20 / 16 * 1rem); + font-weight: 700; + line-height: 1.5em; + margin-bottom: calc(16 / 16 * 1rem); + color: var(--headerColor); + } + + p { + font-size: calc(16 / 16 * 1rem); + line-height: 1.6em; + margin: 0; + margin-bottom: calc(16 / 16 * 1rem); + color: var(--bodyTextColor); + } + + a { + font-size: inherit; + text-decoration: underline; + color: var(--secondary); + } + + ul, + ol { + margin: 0; + margin: calc(16 / 16 * 1rem) 0; + padding-left: calc(40 / 16 * 1rem); + + li { + font-size: calc(16 / 16 * 1rem); + line-height: 1.6em; + list-style: circle; + margin-bottom: calc(16 / 16 * 1rem); + color: var(--bodyTextColor); + } + } + + img { + width: 100%; + height: auto; + margin: calc(16 / 16 * 1rem) 0; + border-radius: calc(8 / 16 * 1rem); + display: block; + } + } + } +} diff --git a/starter-styles/sass/cms-menu.scss b/starter-styles/sass/cms-menu.scss new file mode 100644 index 0000000..133e880 --- /dev/null +++ b/starter-styles/sass/cms-menu.scss @@ -0,0 +1,538 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0em) { + #banner-1018 { + z-index: 1; + position: relative; + background-color: #000; + padding: 0 calc(16 / 16 * 1rem); + /* 160px - 245px */ + padding-top: calc(270 / 16 * 1rem); + padding-bottom: calc(120 / 16 * 1rem); + + .cs-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: auto; + max-width: calc(1280 / 16 * 1rem); + width: 100%; + text-align: center; + } + + .cs-picture { + position: relative; + display: flex; + justify-content: center; + align-items: center; + margin: 0 0 calc(12 / 16 * 1rem); + width: 100%; + gap: calc(16 / 16 * 1rem); + + &:before { + position: relative; + /* left line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: calc(150 / 16 * 1rem); + width: 50%; + } + + &:after { + position: relative; + /* right line */ + content: ""; + opacity: 1; + display: block; + background: #b4b2c7; + height: 1px; + max-width: calc(150 / 16 * 1rem); + width: 50%; + } + } + + .cs-icon { + height: auto; + /* 100px - 180px */ + max-width: clamp(6.25rem, 18vw, 11.25rem); + width: 40%; + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-int-title { + position: relative; + margin: 0 0 calc(16 / 16 * 1rem) 0; + max-width: calc(700 / 16 * 1rem); + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.5vw, 3.8125rem); + line-height: 1.2em; + font-weight: 900; + color: var(--bodyTextColorWhite); + text-align: center; + } + + .cs-text { + margin: 0; + max-width: calc(765 / 16 * 1rem); + width: 100%; + /* 16px - 20px */ + font-size: clamp(1rem, 2vw, 1.25rem); + line-height: 1.5em; + color: var(--bodyTextColorWhite); + text-align: inherit; + } + + .cs-background { + z-index: -1; + position: absolute; + top: 0; + left: 0; + opacity: 0.7; + display: block; + height: 100%; + width: 100%; + + &:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + /* black overlay box */ + content: ""; + opacity: 0.72; + display: block; + background: #000; + height: 100%; + width: 100%; + } + + img { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + object-fit: cover; + } + } + } +} + +/*-- -------------------------- --> +<--- Menu --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + html, + body { + overflow: initial; + /* when you click a menu button and jump to the top of the screen this makes it so it has a smooth transiiton instead of an abrupt movement */ + scroll-behavior: smooth; + } + + #cs-menu-group { + height: auto; + padding: var(--sectionPadding); + padding-right: 0; + padding-bottom: 0; + padding-left: 0; + /* remove the font family so the Stitch inherits the fonts from your global stylesheet */ + + text-align: center; + + .cs-container { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + margin: auto; + /* changes to 1280px at tablet */ + max-width: calc(550 / 16 * 1em); + width: 100%; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: var(--sectionPadding); + /* 48px - 64px */ + padding-top: clamp(3em, 5vw, 4em); + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-hidden { + display: none; + } + + .cs-wrapper { + z-index: 10000; + position: sticky; + /* change based on how tall your navigation is above it. If your navigation is 90px tall, set it to 100px from the top on mobile, and increase the larger value in the clamp to change the desktop value if you need to as well */ + top: calc(208 / 16 * 1rem); + display: flex; + flex-wrap: wrap; + grid-template-columns: repeat(12, 1fr); + justify-content: center; + border: 1px solid #b4b2c7; + border-radius: calc(70 / 16 * 1em); + margin: 0 auto; + background-color: #f3f3f3; + max-width: calc(900 / 16 * 1rem); + width: 94%; + box-sizing: border-box; + padding: 0; + /* 16px - 28px top & bottom */ + /* 32px - 48px left & right */ + padding: clamp(1em, 3vw, 1.75em) clamp(2em, 4vw, 3em); + box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + column-gap: clamp(0.5rem, 2vw, 1.5rem); + row-gap: calc(8 / 16 * 1rem); + } + + .cs-button-group { + z-index: 1000; + margin: 0 calc(8 / 16 * 1rem) 0 0; + width: auto; + grid-column: span 6; + /* 24px - 36px */ + column-gap: clamp(1.5rem, 2vw, 2.25rem); + row-gap: calc(12 / 16 * 1rem); + } + + .cs-button { + position: relative; + display: flex; + justify-content: center; + align-items: center; + border: none; + background-color: transparent; + width: 100%; + padding: calc(4 / 16 * 1rem); + font-size: clamp(0.875rem, 1.3vw, 1rem); + line-height: 1.5; + font-weight: 400; + color: #878787; + transition: color 0.3s, font-weight 0.3s, color 0.3s; + + &:hover { + color: var(--primary); + cursor: pointer; + } + + &:after { + position: relative; + /* active state icon */ + content: ""; + opacity: 0; + display: block; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons%2Ffancy-icon.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + /* 16px - 24px */ + height: clamp(1em, 3vw, 1.5em); + width: 0; + transition: width 0.3s, opacity 0.3s, margin-left 0.3s; + } + + &.cs-active { + font-weight: 700; + color: var(--headerColor); + &:after { + opacity: 1; + /* 8px - 16px */ + margin-left: clamp(0.5em, 0.5vw, 1em); + width: clamp(1.5625em, 3vw, 2.25em); + } + } + } + + .cs-menu { + display: flex; + flex-direction: column; + align-items: center; + /* 32px - 64px */ + gap: clamp(2rem, 6vw, 4rem); + + &.cs-menu-style2 { + position: relative; + /* changes to desktop at desktop */ + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood2-m.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + &:before { + z-index: 1; + position: absolute; + top: 0; + left: 0; + content: ""; + opacity: 0.7; + display: block; + background: #000; + height: 100%; + width: 100%; + } + + .cs-title, + .cs-text { + color: var(--bodyTextColorWhite); + } + + .cs-name { + color: var(--bodyTextColorWhite); + } + + .cs-menu-p { + opacity: 0.8; + color: #fff; + } + } + + &.cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.7); + } + } + + .cs-content { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + width: 100%; + /* set text align to left if content needs to be left aligned */ + text-align: center; + } + + .cs-title { + position: relative; + margin: 0 0 calc(16 / 16 * 1rem) 0; + max-width: calc(700 / 16 * 1rem); + font-size: clamp(3.9375rem, 7.9vw, 5.4625rem); + line-height: 1.2em; + color: var(--headerColor); + text-align: inherit; + } + + .cs-text { + margin: 0; + max-width: calc(650 / 16 * 1rem); + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } + + .cs-menu-list { + z-index: 20; + position: relative; + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + padding: 0; + row-gap: calc(32 / 16 * 1rem); + } + + .cs-menu-row { + display: flex; + flex-direction: column; + align-items: stretch; + /* 32px - 60px */ + row-gap: clamp(2rem, 6vw, 3.75rem); + } + + .cs-menu-item { + display: flex; + flex-direction: column; + margin: 0; + width: 100%; + list-style: none; + text-align: left; + gap: calc(16 / 16 * 1rem); + } + + .cs-h3 { + position: relative; + display: flex; + justify-content: flex-start; + align-items: flex-start; + margin: 0; + width: 100%; + /* 20px - 25px */ + font-size: clamp(1.25rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: 700; + gap: calc(16 / 16 * 1rem); + + &:after { + /* forces it into the 2nd position */ + order: 2; + position: relative; + /* divider line */ + content: ""; + opacity: 1; + display: block; + margin-top: clamp(1.125rem, 2vw, 1.5rem); + background: #b4b2c7; + height: 1px; + max-width: calc(200 / 16 * 1rem); + min-width: calc(16 / 16 * 1rem); + width: 100%; + } + } + + .cs-name { + display: block; + /* 4px - 8px */ + margin: clamp(0.25rem, 0.8vw, 0.625rem) 0 0 0; + margin-right: auto; + max-width: 16ch; + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-price { + /* forces it into the 3rd position */ + order: 3; + display: block; + border: 1px solid #b4b2c7; + border-radius: calc(80 / 16 * 1rem); + margin: 0; + background-color: #fff; + width: auto; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + padding: calc(8 / 16 * 1rem) calc(12 / 16 * 1rem); + /* 20px - 25px */ + font-size: clamp(1rem, 2vw, 1.5625rem); + line-height: 1.2em; + font-weight: bold; + color: var(--primary); + /* prevents flexbox from squishing it */ + flex: none; + } + + .cs-menu-p { + margin: 0; + width: 100%; + font-size: var(--bodyFontSize); + line-height: 1.5em; + color: var(--bodyTextColor); + text-align: inherit; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #cs-menu-group { + .cs-container { + max-width: calc(1280 / 16 * 1rem); + } + + .cs-menu { + width: 100%; + &.cs-menu-style2 { + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images%2FMISC%2Fwood.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + } + } + + .cs-menu-row { + flex-direction: row; + justify-content: stretch; + width: 100%; + /* 32px - 80px */ + gap: clamp(2em, 4vw, 5rem); + + &.cs-3 { + .cs-h3 { + gap: calc(8 / 16 * 1rem); + &:after { + display: none; + } + } + .cs-name { + max-width: 20ch; + width: 70%; + font-size: clamp(1rem, 2vw, 1.5625rem); + } + } + } + + .cs-menu-row { + display: grid; + grid-template-columns: repeat(12, 1fr); + width: 100%; + } + + .cs-menu-item { + margin: 0 auto; + max-width: calc(600 / 16 * 1rem); + grid-column: span 4; + } + + .cs-name { + max-width: 70%; + width: fit-content; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #cs-menu-group { + background-color: rgba(0, 0, 0, 0.5); + + .cs-wrapper { + background-color: var(--medium); + } + + .cs-button { + color: #fff; + &:hover { + color: var(--secondary); + } + } + .cs-topper { + color: var(--primaryLight); + } + .cs-title, + .cs-text, + .cs-name, + .cs-menu-p { + color: var(--bodyTextColorWhite); + } + .cs-text, + .cs-menu-p { + opacity: 0.8; + } + .cs-price { + background-color: var(--medium); + color: var(--secondary); + } + .cs-menu-style2 .cs-price { + background-color: #fff; + color: var(--primary); + } + + .cs-menu-style3 { + background-color: rgba(255, 255, 255, 0.03); + } + } + } +} diff --git a/starter-styles/sass/cms.scss b/starter-styles/sass/cms.scss new file mode 100644 index 0000000..2870c43 --- /dev/null +++ b/starter-styles/sass/cms.scss @@ -0,0 +1,394 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + padding-top: calc(270 / 16 * 1rem); + padding-bottom: calc(100 / 16 * 1rem); + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + + .cs-container { + text-align: center; + width: 100%; + max-width: calc(1280 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + + .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + + .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + + .cs-link { + font-size: calc(16 / 16 * 1rem); + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + + &:last-of-type { + /* remove the chevron on the last list item */ + &::after { + display: none; + } + } + + &:after { + /* chevron */ + content: ""; + width: calc(7 / 16 * 1rem); + height: calc(12 / 16 * 1rem); + margin: 0 calc(16 / 16 * 1rem); + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + + &.cs-active { + color: var(--primary); + } + } + + .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + &:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + top, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to bottom, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + + img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 { + .cs-background { + &:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + left, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to right, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Content Page --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #content-page-847 { + padding: var(--sectionPadding); + background-color: #fff; + position: relative; + z-index: 1; + /* clips the wave background from causing overflow issues when it goes off screen */ + overflow: hidden; + + .cs-container { + width: 100%; + max-width: calc(1280 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + position: relative; + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: calc(630 / 16 * 1rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + } + h2, + h3, + h4, + h5, + h6 { + font-weight: 700; + text-align: inherit; + margin: 0 0 calc(16 / 16 * 1rem) 0; + color: var(--headerColor); + } + + h2 { + font-size: calc(32 / 16 * 1rem); + margin-top: calc(32 / 16 * 1rem); + } + + h3 { + font-size: calc(24 / 16 * 1rem); + color: var(--primary); + } + + h4, + h5, + h6 { + font-size: calc(20 / 16 * 1rem); + } + + .cs-button-solid { + margin-bottom: calc(32 / 16 * 1rem); + } + + .cs-no-margin { + margin: 0; + } + + .cs-color { + color: var(--primary); + } + + p { + font-size: var(--bodyFontSize); + line-height: 1.5em; + text-align: inherit; + width: 100%; + margin: 0 0 calc(16 / 16 * 1rem) 0; + color: var(--bodyTextColor); + &:last-of-type { + margin-bottom: calc(32 / 16 * 1rem); + } + + a { + font-size: inherit; + line-height: inherit; + text-decoration: underline; + color: var(--primary); + } + } + + ol, + ul { + margin: 0 0 calc(32 / 16 * 1rem) 0; + padding-left: calc(24 / 16 * 1rem); + color: var(--bodyTextColor); + display: flex; + flex-direction: column; + gap: calc(16 / 16 * 1rem); + } + + ul { + li { + list-style: none; + color: inherit; + position: relative; + + &:before { + /* custom list bullet */ + content: ""; + width: 3px; + height: 3px; + background: currentColor; + opacity: 1; + border-radius: 50%; + display: block; + position: absolute; + top: calc(10 / 16 * 1rem); + left: calc(-12 / 16 * 1rem); + } + } + } + + img { + width: 100%; + height: auto; + display: block; + } + + .cs-image-group { + width: 50%; + max-width: calc(542 / 16 * 1rem); + display: none; + flex-direction: column; + gap: calc(20 / 16 * 1rem); + position: relative; + } + + .cs-picture { + width: 100%; + /* 300px - 520px */ + height: clamp(18.75rem, 40vw, 32.5rem); + /* prevents border from affecting height and width */ + box-sizing: border-box; + box-shadow: 0px 3.3478px 50.2169px rgba(0, 0, 0, 0.16); + display: block; + position: relative; + /* clips img tag corners */ + overflow: hidden; + + img { + width: 100%; + height: 100%; + /* makes it act like a background image */ + object-fit: cover; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #content-page-847 { + .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: flex-start; + } + + .cs-content { + width: 60%; + flex: none; + } + + .cs-image-group { + display: flex; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #content-page-847 { + background-color: var(--dark); + + .cs-title, + .cs-text, + h2, + h3, + h4, + h5, + h6, + li, + p { + color: var(--bodyTextColorWhite); + } + .cs-color, + a { + color: var(--primaryLight); + } + + p, + li { + color: #ebebeb; + } + + .cs-picture { + background-color: var(--dark); + border-color: var(--dark); + } + } + } +} diff --git a/starter-styles/sass/collection.scss b/starter-styles/sass/collection.scss new file mode 100644 index 0000000..b0f4128 --- /dev/null +++ b/starter-styles/sass/collection.scss @@ -0,0 +1,276 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 9.375rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: 2.13333333rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: 4rem; + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} + +/*-- -------------------------- --> +<--- Collection --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #collection { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + gap: clamp(3rem, 6vw, 4rem); + position: relative; + z-index: 1; + } + + .cs-card-group { + width: 100%; + margin: 0; + padding: 0; + display: grid; + justify-items: center; + grid-template-columns: repeat(auto-fit, minmax(19.0625rem, 1fr)); + column-gap: clamp(1rem, 3vw, 1.25rem); + row-gap: clamp(1rem, 3vw, 2.5rem); + position: relative; + transform-style: preserve-3d; + } + + .cs-item { + max-width: 18.5rem; + padding: 1rem; + border: 1px solid #e8e8e8; + &:hover { + .cs-picture { + img { + transform: scale(1.05); + } + } + } + } + + .cs-link { + text-decoration: none; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + + .cs-image-group { + width: auto; + height: 18.75rem; + margin-bottom: 1.25rem; + position: relative; + } + + .cs-picture { + width: 100%; + height: 100%; + display: block; + overflow: hidden; + img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s; + } + } + + .cs-offer { + font-size: 0.8125rem; + font-weight: 700; + line-height: 1.2em; + text-transform: uppercase; + letter-spacing: 1.3px; + padding: 0.375rem; + color: #fff; + background: #ff4747; + position: absolute; + top: 0.75rem; + right: 0.75rem; + } + + .cs-product { + font-size: clamp(1.25rem, 3vw, 1.5rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + } + + .cs-wrapper { + margin-top: 1.25rem; + display: flex; + justify-content: space-between; + align-items: center; + } + + .cs-info { + display: flex; + flex-direction: row; + align-items: center; + } + + .cs-price { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + color: var(--primary); + } + + .cs-old-price { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #collection { + .cs-item { + max-width: none; + } + + .cs-image-group { + height: clamp(12rem, 23vw, 20rem); + } + } +} + +/* Small Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #collection { + .cs-card-group { + grid-template-columns: repeat(4, 1fr); + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #collection { + .cs-offer { + color: var(--bodyTextColorWhite); + } + + .cs-product { + color: var(--bodyTextColorWhite); + } + + .cs-price { + color: var(--bodyTextColorWhite); + } + + .cs-old-price { + color: var(--bodyTextColorWhite); + } + + .cs-item { + &:hover { + .cs-picture { + background-color: rgba(255, 255, 255, 0.2); + } + } + } + + .cs-picture { + background-color: rgba(255, 255, 255, 0.1); + } + } + } +} diff --git a/starter-styles/sass/local.scss b/starter-styles/sass/local.scss index 67d7962..27903ed 100644 --- a/starter-styles/sass/local.scss +++ b/starter-styles/sass/local.scss @@ -1,530 +1,680 @@ /*-- -------------------------- --> <--- Hero --> <--- -------------------------- -*/ - /* Mobile - 360px */ @media only screen and (min-width: 0rem) { #hero-1621 { /* 296px - 364px - top leaving extra space for the navigation */ /* 60px - 100px bottom */ - padding: clamp(18.5rem, 25.95vw, 22.75rem) calc(16 / 16 * 1rem) + padding: clamp(18.5rem, 25.95vw, 22.75rem) 1rem clamp(3.75rem, 7.82vw, 6.25rem); position: relative; z-index: 1; /* prevents the topper line from causing an overflow */ overflow: hidden; + } + #hero-1621 .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + /* 140px - 180px */ + gap: clamp(8.75rem, 13vw, 11.25rem); + } + #hero-1621 .cs-content { + + width: 100%; + max-width: 53.125rem; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + /* 112px - 144px top & bottom */ + /* 16px - 48px left & right */ + padding: clamp(7rem, 8vw, 9rem) clamp(1rem, 5vw, 3rem); + display: flex; + flex-direction: column; + align-items: center; + position: relative; + z-index: 1; + } + + + #hero-1621 .cs-topper { + /* 13px - 16px */ + font-size: clamp(0.8125rem, 1.5vw, 1rem); + font-weight: 700; + line-height: 1.2em; + text-align: center; + text-transform: uppercase; + letter-spacing: 0.1em; + margin-bottom: 0.25rem; + color: var(--primary); + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; + position: relative; + } + #hero-1621 .cs-chevron { + --chevronColor: var(--primary); + width: 3rem; + height: auto; + } + #hero-1621 .cs-title { + /* 39px - 61px */ + font-size: clamp(5.4375rem, 8.4vw, 14.8125rem); + font-weight: 700; + line-height: 1.2em; + text-align: start; + max-width: 51.8125rem; + /* 16px - 24px */ + margin-top:-200px; + color: #d7b65d; + position: relative; + } + #hero-1621 .cs-title2 { + /* 39px - 61px */ + font-size: clamp(5.4375rem, 8.4vw, 10.8125rem); + font-weight: 700; + line-height: 1.2em; + text-align: start; + max-width: 51.8125rem; + /* 16px - 24px */ + margin-top:-40px; + color: #fff; + position: relative; + } + #hero-1621 .cs-title3 { + /* 39px - 61px */ + font-size:30px; + font-weight: 700; + line-height: 1.2em; + text-align: start; + max-width: 51.8125rem; + /* 16px - 24px */ + margin-top: -100px; + margin-left: 20px; + color: #fff; + position: relative; + } + #hero-1621 .cs-text { + /* 16px - 20px */ + font-size: clamp(1rem, 1.95vw, 1.25rem); + line-height: 1.5em; + text-align: center; + width: 100%; + /* 464px - 622px */ + max-width: clamp(29rem, 60vw, 38.785rem); + margin: 0 auto 0; + margin-bottom: 2rem; + color: #fff; + } + #hero-1621 .cs-card-group { + width: 100%; + margin: 0; + padding: 0; + display: grid; + grid-template-columns: repeat(9, 8rem); + /* 16px - 20px */ + gap: clamp(1rem, 2.3vw, 1.25rem); + } + #hero-1621 .cs-item { + text-align: left; + list-style: none; + width: 100%; + margin: 0; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + /* 24px - 32px */ + padding: clamp(1.5rem, 3vw, 2rem); + background-color: #192026; + box-shadow: 0px 12px 80px 0px rgba(26, 26, 26, 0.08); + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + grid-column: span 12; + grid-row: span 1; + position: relative; + z-index: 1; + } + #hero-1621 .cs-icon { + width: 3rem; + height: auto; + margin: 0 0 auto 0; + padding: 0 0 1.5rem 0; + } + #hero-1621 .cs-h3 { + /* 20px - 25px */ + font-size: clamp(1.25rem, 2.5vw, 1.5625rem); + font-weight: bold; + line-height: 1.2em; + text-align: inherit; + margin: 0 0 1rem 0; + color: var(--titleColor); + } + #hero-1621 .cs-item-text { + /* 14px - 16px */ + font-size: clamp(0.875rem, 1.5vw, 1rem); + line-height: 1.5em; + max-width: 28.125rem; + margin: 0; + padding: 0; + color: var(--bodyTextColor); + } + #hero-1621 .cs-background { + width: 100%; + height: 55%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -2; + } + #hero-1621 .cs-background:before { + /* Overlay */ + content: ""; + width: 100%; + height: 100%; + background: #111926; + opacity: 0.8; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + /* prevents the cursor from interacting with it */ + pointer-events: none; + } + #hero-1621 .cs-background img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #hero-1621 .cs-item { + grid-column: span 6; + } + #hero-1621 .cs-background { + height: 70%; + } +} +/* Large Desktop - 1300px */ +@media only screen and (min-width: 81.25rem) { + #hero-1621 .cs-container { + width: 100%; + max-width: 80rem; + + display: flex; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + margin-right: 200px; + gap: clamp(8.75rem, 13vw, 11.25rem); + } + #hero-1621 .cs-content { + + width: 100%; + max-width: 53.125rem; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + /* 112px - 144px top & bottom */ + /* 16px - 48px left & right */ + margin-bottom: 200px; + padding: clamp(7rem, 8vw, 9rem) clamp(1rem, 5vw, 3rem); + display: flex; + flex-direction: column; + align-items: start; + position: relative; + z-index: 1; + } + #hero-1621 .cs-item { + grid-column: span 3; + } + #hero-1621 .cs-background { + height: 80%; + } +} - .cs-container { - width: 100%; - max-width: calc(1280 / 16 * 1rem); - margin: auto; - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; - /* 140px - 180px */ - gap: clamp(8.75rem, 13vw, 11.25rem); - } - .cs-content { - --cornerWidth: 8.75rem; - --cornerHeight: 8.75rem; - - width: 100%; - max-width: calc(850 / 16 * 1rem); - /* prevents padding from affecting height and width */ - box-sizing: border-box; - /* 112px - 144px top & bottom */ - /* 16px - 48px left & right */ - padding: clamp(7rem, 8vw, 9rem) clamp(1rem, 5vw, 3rem); - display: flex; - flex-direction: column; - align-items: center; - position: relative; - z-index: 1; - - &:before { - /* top left corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-right: none; - border-bottom: none; - display: block; - position: absolute; - top: 0; - left: 0; - z-index: -1; - } - - &:after { - /* top right corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-bottom: none; - border-left: none; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - } - } - .cs-corners { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: -1; - - &:before { - /* bottom left corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-top: none; - border-right: none; - display: block; - position: absolute; - bottom: 0; - left: 0; - z-index: -1; - } - - &:after { - /* bottom right corner */ - content: ""; - width: 35vw; - max-width: var(--cornerWidth); - height: 35vw; - max-height: var(--cornerHeight); - opacity: 1; - border: 2px solid #fff; - border-top: none; - border-left: none; - display: block; - position: absolute; - right: 0; - bottom: 0; - z-index: -1; - } - } +@media only screen and (min-width: 81.25rem) { - .cs-topper { - /* 13px - 16px */ - font-size: clamp(0.8125rem, 1.5vw, 1rem); - font-weight: 700; - line-height: 1.2em; - text-align: center; - text-transform: uppercase; - letter-spacing: 0.1em; - margin-bottom: calc(4 / 16 * 1rem); - color: var(--primary); - display: flex; - justify-content: center; - align-items: center; - gap: calc(8 / 16 * 1rem); - position: relative; - } + #image-section { + margin-top: 100px; + position: relative; + width: 100%; + height: 600px; /* Adjust as needed */ + overflow: hidden; + background-image: url('../images/road1.avif'); - .cs-chevron { - --chevronColor: var(--primary); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + + } + + + /* Container for titles */ + #image-section .titles-container { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 100%; + text-align: center; + padding: 20px; /* Adjust as needed */ + margin-top: 50px; + } + + #image-section .title1 { + margin: 0; + color: #111926; /* Title color */ + font-size: 1.5rem; /* Adjust size as needed */ + font-weight: bold; + } - width: calc(48 / 16 * 1rem); - height: auto; - } + #image-section .title2 { + margin: 0; + color: #d7b65d; /* Title color */ + font-size: 6rem; /* Adjust size as needed */ + font-weight: bold; + } - .cs-title { - /* 39px - 61px */ - font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); - font-weight: 700; - line-height: 1.2em; - text-align: center; - max-width: calc(829 / 16 * 1rem); - /* 16px - 24px */ - margin: 0 0 calc(40 / 16 * 1rem) 0; - color: #fff; - position: relative; - } + #image-section .title3 { + margin: 0; + color: #111926; /* Title color */ + font-size: 6rem; /* Adjust size as needed */ + font-weight: bold; + } - .cs-text { - /* 16px - 20px */ - font-size: clamp(1rem, 1.95vw, 1.25rem); - line-height: 1.5em; - text-align: center; - width: 100%; - /* 464px - 622px */ - max-width: clamp(29rem, 60vw, 38.785rem); - margin: 0 auto 0; - margin-bottom: calc(32 / 16 * 1rem); - color: #fff; - } + + - .cs-card-group { - width: 100%; - margin: 0; - padding: 0; - display: grid; - grid-template-columns: repeat(12, 1fr); - /* 16px - 20px */ - gap: clamp(1rem, 2.3vw, 1.25rem); - } +} - .cs-item { - text-align: left; - list-style: none; - width: 100%; - margin: 0; - /* prevents padding from affecting height and width */ - box-sizing: border-box; - /* 24px - 32px */ - padding: clamp(1.5rem, 3vw, 2rem); - background-color: #fff; - box-shadow: 0px 12px 80px 0px rgba(26, 26, 26, 0.08); - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - grid-column: span 12; - grid-row: span 1; - position: relative; - z-index: 1; - } +@media only screen and (min-width: 81.25rem) { - .cs-icon { - width: calc(48 / 16 * 1rem); - height: auto; - margin: 0 0 auto 0; - padding: 0 0 calc(24 / 16 * 1rem) 0; - } + #image2 .overlay-image { + margin-top: 3200px; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 70%; /* Adjust the width as needed */ + height: auto; /* Maintain aspect ratio */ + z-index: 2; /* Ensure it appears above both sections */ + pointer-events: none; /* Allow clicks to pass through */ + } + + /* Container for titles */ + +} - .cs-h3 { - /* 20px - 25px */ - font-size: clamp(1.25rem, 2.5vw, 1.5625rem); - font-weight: bold; - line-height: 1.2em; - text-align: inherit; - margin: 0 0 calc(16 / 16 * 1rem) 0; - color: var(--headerColor); - } - .cs-item-text { - /* 14px - 16px */ - font-size: clamp(0.875rem, 1.5vw, 1rem); - line-height: 1.5em; - max-width: calc(450 / 16 * 1rem); - margin: 0; - padding: 0; - color: var(--bodyTextColor); - } +@media only screen and (min-width: 81.25rem) { - .cs-background { - width: 100%; - height: 55%; - display: block; - position: absolute; - top: 0; - left: 0; - z-index: -2; - - &:before { - /* Overlay */ - content: ""; - width: 100%; - height: 100%; - background: #111926; - opacity: 0.8; - display: block; - position: absolute; - top: 0; - left: 0; - z-index: 1; - /* prevents the cursor from interacting with it */ - pointer-events: none; - } - - img { - width: 100%; - height: 100%; - object-fit: cover; - position: absolute; - top: 0; - left: 0; - } - } + #background-seat { + position: relative; /* Ensure that the image is positioned relative to this container */ } + + #background-seat .overlay-image { + + margin-top: -450px; + position: absolute; + top: 0; + right: 0; /* Align to the right side of the container */ + transform: translateX(0); /* No need to center horizontally */ + width: 45%; /* Adjust the width as needed */ + height: 600px; /* Maintain aspect ratio */ + z-index: 2; /* Ensure it appears above both sections */ + pointer-events: none; /* Allow clicks to pass through */ + } + + /* Container for titles */ + } -/* Tablet - 768px */ -@media only screen and (min-width: 48rem) { - #hero-1621 { - .cs-item { - grid-column: span 6; - } +@media only screen and (min-width: 81.25rem) { - .cs-background { - height: 70%; - } + #black-background { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #111926; + color: #fff; /* Text color */ + padding: 20px; /* Adjust as needed */ + position: relative; /* Ensure positioning context for the image */ + } + + #black-background .content h2 { + margin-top: 300px; + + margin-bottom: 10px; + font-size: 2.5rem; /* Adjust size as needed */ + line-height: 1.2; /* Adjust line height as needed */ + color: #fff; /* Default color for the text */ + } + + #black-background .highlight { + color: #d7b65d; /* Change this to your desired color */ + font-weight: bold; /* Optional: Make it bold */ + } + + #black-background .svg-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 columns */ + grid-template-rows: repeat(2, auto); /* 2 rows */ + gap: 20px; /* Space between items */ + max-width: 40%; /* Ensure grid fits within container */ + padding: 20px; /* Padding around the grid */ + box-sizing: border-box; /* Include padding in width calculation */ + } + + + #black-background .svg-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: transparent; /* Light background for each item */ + border-radius: 10px; + padding: 20px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Subtle shadow */ + box-sizing: border-box; /* Include padding in width calculation */ + } + + + #black-background .svg-icon { + width: 100px; /* Adjust size as needed */ + height: auto; /* Maintain aspect ratio */ + margin-bottom: 10px; /* Space between SVG and title */ + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); } + + + #black-background .svg-title { + font-size: 1rem; /* Adjust size as needed */ + color: #ffffff; /* Title color */ + text-align: center; /* Center-align the title */ + } + + + + + /* Container for titles */ + } -/* Large Desktop - 1300px */ -@media only screen and (min-width: 81.25rem) { - #hero-1621 { - .cs-item { - grid-column: span 3; - } - .cs-background { - height: 80%; - } + + + + +@media only screen and (max-width: 81.25rem) { + #image-section { + height: 300px; /* Adjust for mobile */ + background-image: url('../images/road1.avif'); /* Ensure correct path */ + background-size: cover; + } + + #image-section .titles-container { + position: relative; + padding: 10px; /* Adjust as needed */ + margin-top: 20px; + text-align: center; + } + + #image-section .title1, + #image-section .title3 { + font-size: 1.2rem; /* Adjust size as needed for mobile */ + } + + #image-section .title2 { + font-size: 3rem; /* Adjust size as needed for mobile */ } } + +@media only screen and (max-width: 81.25rem) { + #image2 .overlay-image { + margin-top: 100px; /* Adjust top margin for mobile */ + position: relative; /* Adjust positioning */ + width: 100%; /* Adjust width for mobile */ + height: auto; /* Maintain aspect ratio */ + z-index: 1; /* Adjust if needed */ + } +} + +@media only screen and (max-width: 81.25rem) { + #background-seat { + position: relative; /* Adjust if needed */ + } + + #background-seat .overlay-image { + margin-top: 100px; /* Adjust top margin for mobile */ + position: relative; /* Adjust positioning */ + width: 100%; /* Adjust width for mobile */ + height: 300px; /* Adjust height for mobile */ + z-index: 1; /* Adjust if needed */ + } +} + +@media only screen and (max-width: 81.25rem) { + #black-background { + display: block; /* Stack items vertically on mobile */ + background-color: #111926; + color: #fff; /* Text color */ + padding: 20px; /* Adjust as needed */ + } + + #black-background .content h2 { + margin-top: 20px; /* Adjust for mobile */ + margin-bottom: 20px; /* Adjust for mobile */ + font-size: 1.5rem; /* Adjust size as needed for mobile */ + } + + #black-background .highlight { + color: #d7b65d; /* Adjust color if needed */ + font-weight: bold; /* Optional: Make it bold */ + } + + + +} + /* Large Desktop - Parallax Effect - 1600px */ @media only screen and (min-width: 100rem) { - #hero-1621 { - .cs-background { - background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images/People/meeting-2.jpeg"); - background-position: center; - background-size: cover; - background-repeat: no-repeat; - background-attachment: fixed; - img { - display: none; - } - } + #hero-1621 .cs-background { + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Images/People/meeting-2.jpeg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + background-attachment: fixed; + } + #hero-1621 .cs-background img { + display: none; } } - /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #hero-1621 { - .cs-item { - background-color: var(--medium); - } - - .cs-icon { - filter: brightness(0) invert(1); - } - - .cs-h3, - .cs-item-text { - color: var(--bodyTextColorWhite); - } - - .cs-item-text { - opacity: 0.8; - } - - .cs-background { - &:before { - opacity: 0.9; - } - } - } + body.dark-mode #hero-1621 .cs-item { + background-color: var(--medium); + } + body.dark-mode #hero-1621 .cs-icon { + filter: brightness(0) invert(1); + } + body.dark-mode #hero-1621 .cs-h3, + body.dark-mode #hero-1621 .cs-item-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #hero-1621 .cs-item-text { + opacity: 0.8; + } + body.dark-mode #hero-1621 .cs-background:before { + opacity: 0.9; } } - /*-- -------------------------- --> -<--- Side By Side --> -<--- -------------------------- -*/ - + <--- Side By Side --> + <--- -------------------------- -*/ /* Mobile - 360px */ @media only screen and (min-width: 0rem) { #sbs-523 { padding: var(--sectionPadding); - - @keyframes floatAnimation { - 0% { - transform: translateY(0); - } - 50% { - transform: translateY(-0.6em); - } - 100% { - transform: translateY(0); - } - } - - @keyframes floatAnimation2 { - 0% { - transform: translateY(0); - } - 50% { - transform: translateY(-1em); - } - 100% { - transform: translateY(0); - } - } - - .cs-container { - width: 100%; - /* changes to 1280px at desktop */ - max-width: calc(550 / 16 * 1rem); - margin: auto; - display: flex; - flex-direction: column; - align-items: center; - /* 48px - 64px */ - gap: clamp(3rem, 6vw, 4rem); - } - - .cs-content { - /* set text align to left if content needs to be left aligned */ - text-align: left; - width: 100%; - display: flex; - flex-direction: column; - /* centers content horizontally, set to flex-start to left align */ - align-items: flex-start; - } - - .cs-color { - color: var(--secondary); + } + @keyframes floatAnimation { + 0% { + transform: translateY(0); } - - .cs-text { - margin-bottom: calc(16 / 16 * 1rem); - &:last-of-type { - margin-bottom: calc(32 / 16 * 1rem); - } + 50% { + transform: translateY(-0.6em); } - - .cs-image-group { - /* this is how we can scale entire groups using ems. Font size is tied to the view width, so as the screen gets bigger, so does the font size, and this scales up and down the elements with em values. Then it stops growing once the font size reaches the defined value of 1em (16px which is default on the html element). Font size changes at desktop */ - font-size: min(2.3vw, 0.875em); - /* all values are done in ems, not rems, so we can scale the group with a font size min/max equation */ - width: calc(630 / 16 * 1em); - height: calc(817 / 16 * 1em); - /* pushes it to the top in the first position */ - order: -1; - position: relative; - - &:before { - content: ""; - width: calc(186 / 16 * 1em); - height: calc(161 / 16 * 1em); - background: var(--primary); - opacity: 1; - display: block; - position: absolute; - top: calc(0 / 16 * 1em); - left: calc(0 / 16 * 1em); - animation-name: floatAnimation; - animation-duration: 6s; - animation-timing-function: ease-in-out; - animation-iteration-count: infinite; - animation-fill-mode: forwards; - } + 100% { + transform: translateY(0); } - - .cs-picture { - display: block; - position: absolute; - - img { - width: 100%; - height: 100%; - /* makes it act like a background image */ - object-fit: cover; - position: absolute; - top: 0; - left: 0; - } + } + @keyframes floatAnimation2 { + 0% { + transform: translateY(0); } - - .cs-picture-large { - width: calc(476 / 16 * 1em); - height: calc(677 / 16 * 1em); - top: calc(70 / 16 * 1em); - left: calc(62 / 16 * 1em); + 50% { + transform: translateY(-1em); } - - .cs-picture-small { - width: calc(260 / 16 * 1em); - height: calc(225 / 16 * 1em); - background-color: #fff; - border: calc(10 / 16 * 1em) solid #fff; - right: 0; - bottom: 0; - animation-name: floatAnimation2; - animation-duration: 20s; - animation-timing-function: ease-in-out; - animation-iteration-count: infinite; - animation-fill-mode: forwards; + 100% { + transform: translateY(0); } } + #sbs-523 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 34.375rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + #sbs-523 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + } + #sbs-523 .cs-color { + color: var(--secondary); + } + #sbs-523 .cs-text { + margin-bottom: 1rem; + } + #sbs-523 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbs-523 .cs-image-group { + /* this is how we can scale entire groups using ems. Font size is tied to the view width, so as the screen gets bigger, so does the font size, and this scales up and down the elements with em values. Then it stops growing once the font size reaches the defined value of 1em (16px which is default on the html element). Font size changes at desktop */ + font-size: min(2.3vw, 0.875em); + /* all values are done in ems, not rems, so we can scale the group with a font size min/max equation */ + width: 39.375em; + height: 51.0625em; + /* pushes it to the top in the first position */ + order: -1; + position: relative; + } + #sbs-523 .cs-image-group:before { + content: ""; + width: 11.625em; + height: 10.0625em; + background: var(--primary); + opacity: 1; + display: block; + position: absolute; + top: 0em; + left: 0em; + animation-name: floatAnimation; + animation-duration: 6s; + animation-timing-function: ease-in-out; + animation-iteration-count: infinite; + animation-fill-mode: forwards; + } + #sbs-523 .cs-picture { + display: block; + position: absolute; + } + #sbs-523 .cs-picture img { + width: 100%; + height: 100%; + /* makes it act like a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbs-523 .cs-picture-large { + width: 29.75em; + height: 42.3125em; + top: 4.375em; + left: 3.875em; + } + #sbs-523 .cs-picture-small { + width: 16.25em; + height: 14.0625em; + background-color: #fff; + border: 0.625em solid #fff; + right: 0; + bottom: 0; + animation-name: floatAnimation2; + animation-duration: 20s; + animation-timing-function: ease-in-out; + animation-iteration-count: infinite; + animation-fill-mode: forwards; + } } - /* Small Desktop - 1024px */ @media only screen and (min-width: 64rem) { - #sbs-523 { - .cs-container { - max-width: calc(1280 / 16 * 1rem); - flex-direction: row; - justify-content: space-between; - } - - .cs-content { - width: 51%; - max-width: calc(550 / 16 * 1rem); - } - - .cs-image-group { - font-size: min(1.1vw, 1em); - } + #sbs-523 .cs-container { + max-width: 80rem; + flex-direction: row; + justify-content: space-between; + } + #sbs-523 .cs-content { + width: 51%; + max-width: 34.375rem; + } + #sbs-523 .cs-image-group { + font-size: min(1.1vw, 1em); } } - /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #sbs-523 { - .cs-title, - .cs-text { - color: var(--bodyTextColorWhite); - } - - .cs-text { - opacity: 0.8; - } - - .cs-image-group { - &:before { - background-color: var(--secondary); - opacity: 0.3; - } - } - - .cs-picture-small { - border-color: var(--dark); - } - } + body.dark-mode #sbs-523 .cs-title, + body.dark-mode #sbs-523 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbs-523 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbs-523 .cs-image-group:before { + background-color: var(--secondary); + opacity: 0.3; + } + body.dark-mode #sbs-523 .cs-picture-small { + border-color: var(--dark); } } - /*-- -------------------------- --> -<--- Steps --> -<--- -------------------------- -*/ - + <--- Steps --> + <--- -------------------------- -*/ /* Mobile - 360px */ @media only screen and (min-width: 0rem) { #steps-1172 { @@ -532,206 +682,161 @@ position: relative; z-index: 1; overflow: hidden; - - .cs-container { - width: 100%; - /* changes to 1280px at desktop */ - max-width: calc(704 / 16 * 1rem); - margin: auto; - display: flex; - flex-direction: column; - align-items: center; - /* 48px - 64px */ - gap: clamp(3rem, 6vw, 4rem); - } - - .cs-content { - /* set text align to left if content needs to be left aligned */ - text-align: center; - width: 100%; - display: flex; - flex-direction: column; - /* centers content horizontally, set to flex-start to left align */ - align-items: center; - } - - .cs-text { - font-size: var(--bodyFontSize); - line-height: 1.5em; - text-align: inherit; - width: 100%; - max-width: calc(650 / 16 * 1rem); - margin: 0; - color: var(--bodyTextColor); - } - - .cs-card-group { - width: 100%; - margin: 0; - padding: 0; - display: grid; - grid-template-columns: repeat(12, 1fr); - gap: calc(20 / 16 * 1rem); - } - - .cs-item { - text-align: center; - list-style: none; - display: flex; - flex-direction: column; - align-items: center; - grid-column: span 12; - position: relative; - - &:last-of-type { - &:after { - display: none; - } - } - - &:nth-of-type(even) { - &:after { - /* scaleX -1 flips it horizontally */ - transform: rotate(-135deg) scaleX(-1); - } - } - - &:after { - content: ""; - /* 54px - 84px */ - width: clamp(3.375rem, 6vw, 5.25rem); - height: clamp(3.375rem, 6vw, 5.25rem); - margin-top: calc(20 / 16 * 1rem); - background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/curved-arrow-light.svg"); - background-position: center; - background-size: contain; - background-repeat: no-repeat; - opacity: 1; - display: block; - position: relative; - transform: rotate(135deg); - } - } - - .cs-picture { - width: calc(88 / 16 * 1rem); - height: calc(88 / 16 * 1rem); - margin-bottom: calc(24 / 16 * 1rem); - border: 1px solid #858585; - border-radius: 50%; - display: flex; - justify-content: center; - align-items: center; - } - - .cs-icon { - width: calc(40 / 16 * 1rem); - height: auto; - display: block; - } - - .cs-h3 { - font-size: calc(20 / 16 * 1rem); - line-height: 1.2em; - text-align: inherit; - margin: 0 0 calc(12 / 16 * 1rem) 0; - color: var(--headerColor); - } - - .cs-item-text { - font-size: calc(16 / 16 * 1rem); - line-height: 1.5em; - text-align: inherit; - max-width: calc(342 / 16 * 1rem); - margin: 0; - color: var(--bodyTextColor); - } + } + #steps-1172 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 44rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + #steps-1172 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: center; + width: 100%; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + } + #steps-1172 .cs-text { + font-size: var(--bodyFontSize); + line-height: 1.5em; + text-align: inherit; + width: 100%; + max-width: 40.625rem; + margin: 0; + color: var(--bodyTextColor); + } + #steps-1172 .cs-card-group { + width: 100%; + margin: 0; + padding: 0; + display: grid; + grid-template-columns: repeat(12, 1fr); + gap: 1.25rem; + } + #steps-1172 .cs-item { + text-align: center; + list-style: none; + display: flex; + flex-direction: column; + align-items: center; + grid-column: span 12; + position: relative; + } + #steps-1172 .cs-item:last-of-type:after { + display: none; + } + #steps-1172 .cs-item:nth-of-type(even):after { + /* scaleX -1 flips it horizontally */ + transform: rotate(-135deg) scaleX(-1); + } + #steps-1172 .cs-item:after { + content: ""; + /* 54px - 84px */ + width: clamp(3.375rem, 6vw, 5.25rem); + height: clamp(3.375rem, 6vw, 5.25rem); + margin-top: 1.25rem; + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/curved-arrow-light.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + opacity: 1; + display: block; + position: relative; + transform: rotate(135deg); + } + #steps-1172 .cs-picture { + width: 5.5rem; + height: 5.5rem; + margin-bottom: 1.5rem; + border: 1px solid #858585; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + } + #steps-1172 .cs-icon { + width: 2.5rem; + height: auto; + display: block; + } + #steps-1172 .cs-h3 { + font-size: 1.25rem; + line-height: 1.2em; + text-align: inherit; + margin: 0 0 0.75rem 0; + color: var(--headerColor); + } + #steps-1172 .cs-item-text { + font-size: 1rem; + line-height: 1.5em; + text-align: inherit; + max-width: 21.375rem; + margin: 0; + color: var(--bodyTextColor); } } - /* Tablet - 768px */ @media only screen and (min-width: 48rem) { - #steps-1172 { - .cs-item { - grid-column: span 6; - - &:nth-of-type(2) { - &:after { - display: none; - } - } - - &:nth-of-type(1) { - &:after { - transform: rotate(135deg) scaleX(-1); - } - } - - &:after { - margin: 0; - position: absolute; - top: 0; - right: calc(-40 / 16 * 1rem); - transform: rotate(45deg); - } - } + #steps-1172 .cs-item { + grid-column: span 6; + } + #steps-1172 .cs-item:nth-of-type(2):after { + display: none; + } + #steps-1172 .cs-item:nth-of-type(1):after { + transform: rotate(135deg) scaleX(-1); + } + #steps-1172 .cs-item:after { + margin: 0; + position: absolute; + top: 0; + right: -2.5rem; + transform: rotate(45deg); } } - /* Desktop - 1024px */ @media only screen and (min-width: 64rem) { - #steps-1172 { - .cs-container { - max-width: calc(1280 / 16 * 1rem); - } - - .cs-item { - grid-column: span 3; - - &:nth-of-type(2) { - &:after { - display: block; - transform: rotate(45deg); - } - } - - &:nth-of-type(3) { - &:after { - display: block; - transform: rotate(135deg) scaleX(-1); - } - } - - &:after { - right: calc(-48 / 16 * 1rem); - } - } + #steps-1172 .cs-container { + max-width: 80rem; + } + #steps-1172 .cs-item { + grid-column: span 3; + } + #steps-1172 .cs-item:nth-of-type(2):after { + display: block; + transform: rotate(45deg); + } + #steps-1172 .cs-item:nth-of-type(3):after { + display: block; + transform: rotate(135deg) scaleX(-1); + } + #steps-1172 .cs-item:after { + right: -3rem; } } - /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #steps-1172 { - .cs-title, - .cs-text, - .cs-item-text, - .cs-h3 { - color: var(--bodyTextColorWhite); - } - - .cs-text, - .cs-item-text { - opacity: 0.8; - } - } + body.dark-mode #steps-1172 .cs-title, + body.dark-mode #steps-1172 .cs-text, + body.dark-mode #steps-1172 .cs-item-text, + body.dark-mode #steps-1172 .cs-h3 { + color: var(--bodyTextColorWhite); + } + body.dark-mode #steps-1172 .cs-text, + body.dark-mode #steps-1172 .cs-item-text { + opacity: 0.8; } } - /*-- -------------------------- --> -<--- Why Choose Us --> -<--- -------------------------- -*/ - + <--- Why Choose Us --> + <--- -------------------------- -*/ /* Mobile - 360px */ @media only screen and (min-width: 0rem) { #why-choose-1657 { @@ -740,411 +845,854 @@ position: relative; z-index: 1; overflow: hidden; + } + #why-choose-1657 .cs-container { + width: 100%; + /* changes to 1280px at tablet */ + max-width: 36.5rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 100px */ + gap: clamp(3rem, 10vw, 6.25rem); + } + #why-choose-1657 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + } + #why-choose-1657 .cs-flex { + max-width: 38.5rem; + } + #why-choose-1657 .cs-title { + max-width: 20ch; + margin-bottom: 1.5rem; + } + #why-choose-1657 .cs-ul { + width: 100%; + max-width: 32.625rem; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + /* 28px - 32px */ + gap: clamp(1.75rem, 3vw, 2rem); + } + #why-choose-1657 .cs-li { + list-style: none; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 1rem; + } + #why-choose-1657 .cs-number { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--primary); + display: block; + } + #why-choose-1657 .cs-li-text { + /* 14px - 16px */ + font-size: clamp(0.875rem, 1.5vw, 1rem); + line-height: 1.5em; + margin: 0; + color: var(--bodyTextColor); + } + #why-choose-1657 .cs-wrapper { + width: 100%; + display: flex; + flex-direction: column; + /* 40px - 64px */ + gap: clamp(2.5rem, 6vw, 4rem); + position: relative; + z-index: 1; + } + #why-choose-1657 .cs-wrapper:before { + /* white background */ + content: ""; + width: 100vw; + height: 500%; + background: #fff; + opacity: 1; + display: block; + position: absolute; + /* 40px - 140px */ + top: clamp(2.5rem, 10vw, 8.75rem); + left: 50%; + z-index: -1; + transform: translateX(-50%); + } + #why-choose-1657 .cs-picture { + width: 100%; + height: 70vw; + max-height: 25rem; + display: block; + position: relative; + z-index: 1; + } + #why-choose-1657 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #why-choose-1657 .cs-quote { + /* 62px - 100px */ + width: clamp(3.875rem, 7vw, 6.25rem); + height: auto; + margin-bottom: -1.75rem; + opacity: 0.4; + position: relative; + z-index: -1; + } + #why-choose-1657 .cs-review { + --quoteColor: var(--primary); + /* 20px - 25px */ + font-size: clamp(1.25rem, 3vw, 1.5625rem); + font-weight: 700; + line-height: 1.2em; + width: 100%; + max-width: 32.625rem; + margin: 0; + color: var(--headerColor); + display: flex; + flex-direction: column; + align-items: flex-start; + } +} +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #why-choose-1657 .cs-container { + max-width: 80rem; + gap: 0; + } + #why-choose-1657 .cs-content { + padding-bottom: 6.25rem; + flex-direction: row; + justify-content: space-between; + align-items: flex-start; + } + #why-choose-1657 .cs-flex { + text-align: left; + width: 40vw; + max-width: 39.375rem; + flex: none; + } + #why-choose-1657 .cs-title { + margin: 0; + } + #why-choose-1657 .cs-wrapper { + /* -60px to -140px */ + margin-top: calc(clamp(3.75rem, 10vw, 8.75rem) * -1); + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #why-choose-1657 .cs-picture { + width: 43vw; + max-width: 39.375rem; + height: auto; + max-height: 100%; + /* 252px - 414px */ + min-height: clamp(15.75rem, 30vw, 25.875rem); + /* prevents flexbox from squishing it */ + flex: none; + } + #why-choose-1657 .cs-review { + /* 100px - 235px */ + /* pushes up against the container so there's always that gap between the top of the review and the container */ + margin-top: clamp(6.25rem, 20vw, 14.5rem); + align-self: flex-end; + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #why-choose-1657 { + background-color: rgba(0, 0, 0, 0.3); + } + body.dark-mode #why-choose-1657 .cs-title, + body.dark-mode #why-choose-1657 .cs-li-text, + body.dark-mode #why-choose-1657 .cs-review { + color: var(--bodyTextColorWhite); + } + body.dark-mode #why-choose-1657 .cs-li-text { + opacity: 0.8; + } + body.dark-mode #why-choose-1657 .cs-wrapper:before { + background-color: var(--dark); + } +} +/*-- -------------------------- --> + <--- Side By Side Reverse --> + <--- -------------------------- -*/ +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbsr-1309 { + padding: var(--sectionPadding); + overflow: hidden; + } + #sbsr-1309 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 36.5rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: clamp(3rem, 4vw, 4rem); + } + #sbsr-1309 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: 33.875rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + #sbsr-1309 .cs-text { + margin-bottom: 1rem; + } + #sbsr-1309 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbsr-1309 .cs-image-group { + width: 100%; + max-width: 41.875rem; + height: 100vw; + max-height: 39.375rem; + display: block; + position: relative; + z-index: 1; + } + #sbsr-1309 .cs-picture { + /* big background image */ + width: 93%; + height: 93%; + display: block; + position: absolute; + top: 0; + left: 0; + } + #sbsr-1309 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbsr-1309 .cs-box { + text-align: left; + width: 70%; + max-width: 19rem; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + /* 20px - 40px */ + padding: clamp(1.25rem, 4vw, 2.5rem); + background-color: #1a1a1a; + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 0.5rem; + position: absolute; + right: 0; + bottom: 0; + z-index: 10; + } + #sbsr-1309 .cs-desc { + /* 16px - 31px */ + font-size: clamp(1rem, 2.5vw, 1.9375rem); + font-weight: 700; + line-height: 1.2em; + text-align: inherit; + width: 100%; + color: var(--bodyTextColorWhite); + position: relative; + z-index: 10; + } + #sbsr-1309 .cs-graphic { + width: 150%; + height: auto; + position: absolute; + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbsr-1309 .cs-container { + max-width: 80rem; + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #sbsr-1309 .cs-content { + width: 30%; + padding: 3rem 0; + align-self: center; + /* prevents flexbox from squishing it */ + flex: none; + } + #sbsr-1309 .cs-image-group { + width: 70%; + max-width: 71.875rem; + height: auto; + max-height: 100%; + min-height: 11.875rem; + margin: 0; + /* sends it to the right in the second position */ + order: 2; + } + #sbsr-1309 .cs-picture { + width: 93%; + height: 94%; + right: 0; + left: auto; + } + #sbsr-1309 .cs-box { + right: auto; + bottom: 0rem; + left: 0; + } + #sbsr-1309 .cs-graphic { + max-width: 44.6875rem; + right: 8.125rem; + left: auto; + transform: translateY(-50%); + } +} +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode #sbsr-1309 .cs-title, + body.dark-mode #sbsr-1309 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbsr-1309 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbsr-1309 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbsr-1309 .cs-box { + background-color: var(--medium); + } +} - .cs-container { - width: 100%; - /* changes to 1280px at tablet */ - max-width: calc(584 / 16 * 1rem); - margin: auto; - display: flex; - flex-direction: column; - align-items: center; - /* 48px - 100px */ - gap: clamp(3rem, 10vw, 6.25rem); - } - .cs-content { - /* set text align to left if content needs to be left aligned */ - text-align: left; - width: 100%; - display: flex; - flex-direction: column; - /* centers content horizontally, set to flex-start to left align */ - align-items: flex-start; - } - .cs-flex { - max-width: calc(616 / 16 * 1rem); - } +@media only screen and (min-width: 0rem) { - .cs-title { - max-width: 20ch; - margin-bottom: calc(24 / 16 * 1rem); - } + #gridsection1 { + /* Ensures container adapts to mobile screens */ + overflow: hidden; /* Prevents overflow */ + } - .cs-ul { - width: 100%; - max-width: calc(522 / 16 * 1rem); - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - /* 28px - 32px */ - gap: clamp(1.75rem, 3vw, 2rem); - } + #gridsection1 .grid-container { + display: grid; + grid-template-columns: 1fr; /* Single column layout for mobile */ + gap: 10px; /* Reduced space between items */ + padding: 10px; + max-width: 100%; /* Ensures container doesn't exceed screen width */ + box-sizing: border-box; /* Includes padding in width calculation */ + } - .cs-li { - list-style: none; - display: flex; - flex-direction: row; - align-items: flex-start; - gap: calc(16 / 16 * 1rem); - } + #gridsection1 .grid-item { + padding: 10px; + box-sizing: border-box; /* Ensures padding does not cause overflow */ + } - .cs-number { - font-size: calc(20 / 16 * 1rem); - font-weight: 700; - line-height: 1.2em; - margin: 0; - color: var(--primary); - display: block; - } + #gridsection1 .grid-item img { + width: 100%; /* Full width of the grid item */ + height: auto; /* Adjust height to maintain aspect ratio */ + display: block; /* Removes extra space below the image */ + } - .cs-li-text { - /* 14px - 16px */ - font-size: clamp(0.875rem, 1.5vw, 1rem); - line-height: 1.5em; - margin: 0; - color: var(--bodyTextColor); - } + #gridsection1 .item-title { + font-size: 1.25rem; /* Adjust size for mobile */ + margin: 10px 0; /* Adds margin around title */ + } - .cs-wrapper { - width: 100%; - display: flex; - flex-direction: column; - /* 40px - 64px */ - gap: clamp(2.5rem, 6vw, 4rem); - position: relative; - z-index: 1; - - &:before { - /* white background */ - content: ""; - width: 100vw; - height: 500%; - background: #fff; - opacity: 1; - display: block; - position: absolute; - /* 40px - 140px */ - top: clamp(2.5rem, 10vw, 8.75rem); - left: 50%; - z-index: -1; - transform: translateX(-50%); - } - } + #gridsection1 .item-description { + font-size: 0.9rem; /* Adjust size for mobile */ + margin: 0 0 10px; /* Margin below description */ + } - .cs-picture { - width: 100%; - height: 70vw; - max-height: calc(400 / 16 * 1rem); - display: block; - position: relative; - z-index: 1; - - img { - width: 100%; - height: 100%; - object-fit: cover; - position: absolute; - top: 0; - left: 0; - } - } + #gridsection1 .item-button { + font-size: 0.9rem; /* Adjust font size for mobile */ + padding: 8px 16px; /* Adjust padding for mobile */ + display: inline-block; /* Allows for responsive button width */ + } - .cs-quote { - /* 62px - 100px */ - width: clamp(3.875rem, 7vw, 6.25rem); - height: auto; - margin-bottom: calc(-28 / 16 * 1rem); - opacity: 0.4; - position: relative; - z-index: -1; - } + #gridsection1 .sub-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 columns on mobile */ + gap: 5px; /* Reduced space between SVG items */ + margin-bottom: 20px; /* Space between sub-grid and button */ + } - .cs-review { - --quoteColor: var(--primary); - - /* 20px - 25px */ - font-size: clamp(1.25rem, 3vw, 1.5625rem); - font-weight: 700; - line-height: 1.2em; - width: 100%; - max-width: calc(522 / 16 * 1rem); - margin: 0; - color: var(--headerColor); - display: flex; - flex-direction: column; - align-items: flex-start; - } + #gridsection1 .sub-grid-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; /* Full width of the sub-grid item */ + height: auto; /* Adjust height to maintain aspect ratio */ + box-sizing: border-box; /* Includes padding in width calculation */ + padding: 10px; /* Padding inside the item */ + } + + #gridsection1 .sub-grid-item img { + width: 60%; /* Adjust size for mobile */ + height: auto; /* Maintain aspect ratio */ } + + #gridsection1 .svg-title { + font-size: 0.8rem; /* Adjust size for mobile */ + margin-top: 5px; /* Margin above title */ + } + } +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { -/* Tablet - 768px */ -@media only screen and (min-width: 48rem) { - #why-choose-1657 { - .cs-container { - max-width: calc(1280 / 16 * 1rem); - gap: 0; - } + #gridsection1{ - .cs-content { - padding-bottom: calc(100 / 16 * 1rem); - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - } - .cs-flex { - text-align: left; - width: 40vw; - max-width: calc(630 / 16 * 1rem); - flex: none; - } + } - .cs-title { - margin: 0; - } + #gridsection1 .grid-container { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 equal columns */ + gap: 20px; /* Space between items */ + padding: 20px; + max-width: 1200px; + margin: 0 auto; /* Center the grid */ + } + + #gridsection1 .grid-item { + background-color: #ffffff; /* Light background for each item */ + border-radius: 10px; + overflow: hidden; + text-align: center; + padding: 20px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + } + + #gridsection1 .grid-item img { + width: 100%; + height: 200px; + border-radius: 10px 10px 0 0; + } + + #gridsection1 .item-title { + font-size: 1.5rem; + margin: 15px 0 10px; + color: #333; + } + + #gridsection1 .item-description { + font-size: 1rem; + color: #666; + margin-bottom: 20px; + } + + #gridsection1 .item-button { + background-color: #dd9528; /* Button color */ + color: #fff; + border: none; + padding: 10px 20px; + font-size: 1rem; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s ease; + } + + #gridsection1 .item-button:hover { + background-color: #cc8522; /* Darker shade on hover */ + } - .cs-wrapper { - /* -60px to -140px */ - margin-top: calc(clamp(3.75rem, 10vw, 8.75rem) * -1); - flex-direction: row; - justify-content: space-between; - align-items: stretch; - } + #gridsection1 .sub-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); /* 3 equal columns */ + gap: 10px; /* Space between SVG items */ + margin-bottom: 20px; /* Space between sub-grid and button */ + } + + #gridsection1 .sub-grid-item { + margin-top: 20px; + + border-radius: 1px; + padding: 1px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 60%; /* Ensures the item takes up full grid column space */ + height: 120px; + aspect-ratio: 5 / 5; /* Makes the item a square */ + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Adds a subtle shadow */ + } + + #gridsection1 .sub-grid-item img { + width: 60%; /* Adjusts SVG size */ + height: 40px; + display: block; + margin-bottom: 10px; /* Space between SVG and title */ + } + + #gridsection1 .svg-title { + font-size: 0.9rem; + color: #333; + text-align: center; /* Center-align the title */ + } - .cs-picture { - width: 43vw; - max-width: calc(630 / 16 * 1rem); - height: auto; - max-height: 100%; - /* 252px - 414px */ - min-height: clamp(15.75rem, 30vw, 25.875rem); - /* prevents flexbox from squishing it */ - flex: none; - } + #gridsection1 .filter-color{ + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); - .cs-review { - /* 100px - 235px */ - /* pushes up against the container so there's always that gap between the top of the review and the container */ - margin-top: clamp(6.25rem, 20vw, 14.5rem); - align-self: flex-end; - } } + } - /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #why-choose-1657 { - background-color: rgba(0, 0, 0, 0.3); - - .cs-title, - .cs-li-text, - .cs-review { - color: var(--bodyTextColorWhite); - } - - .cs-li-text { - opacity: 0.8; - } - - .cs-wrapper { - &:before { - background-color: var(--dark); - } - } - } + body.dark-mode #sbsr-1309 .cs-title, + body.dark-mode #sbsr-1309 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbsr-1309 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbsr-1309 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbsr-1309 .cs-box { + background-color: var(--medium); } } -/*-- -------------------------- --> -<--- Side By Side Reverse --> -<--- -------------------------- -*/ -/* Mobile - 360px */ + @media only screen and (min-width: 0rem) { - #sbsr-1309 { + #sbsr-13091 { padding: var(--sectionPadding); overflow: hidden; + } + #sbsr-13091 .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: 36.5rem; + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: clamp(3rem, 4vw, 4rem); + } + #sbsr-13091 .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: 33.875rem; + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + #sbsr-13091 .cs-text { + margin-bottom: 1rem; + } + #sbsr-13091 .cs-text:last-of-type { + margin-bottom: 2rem; + } + #sbsr-13091 .cs-image-group { + width: 100%; + max-width: 41.875rem; + height: 100vw; + max-height: 39.375rem; + display: block; + position: relative; + z-index: 1; + } + #sbsr-13091 .cs-picture { + /* big background image */ + width: 93%; + height: 93%; + display: block; + position: absolute; + top: 0; + left: 0; + } + #sbsr-13091 .cs-picture img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + #sbsr-13091 .cs-box { + text-align: left; + width: 70%; + max-width: 19rem; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + /* 20px - 40px */ + padding: clamp(1.25rem, 4vw, 2.5rem); + background-color: #1a1a1a; + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 0.5rem; + position: absolute; + right: 0; + bottom: 0; + z-index: 10; + } + #sbsr-13091 .cs-desc { + /* 16px - 31px */ + font-size: clamp(1rem, 2.5vw, 1.9375rem); + font-weight: 700; + line-height: 1.2em; + text-align: inherit; + width: 100%; + color: var(--bodyTextColorWhite); + position: relative; + z-index: 10; + } + #sbsr-13091 .cs-graphic { + width: 150%; + height: auto; + position: absolute; + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } +} +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbsr-13091 .cs-container { + max-width: 80rem; + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + #sbsr-13091 .cs-content { + width: 40%; + padding: 3rem 0; + align-self: center; + /* prevents flexbox from squishing it */ + max-width: 71.875rem; + flex: none; + } + #sbsr-13091 .cs-image-group { + width: 60%; + + height: auto; + max-height: 100%; + min-height: 11.875rem; + margin-top: 100px; + /* sends it to the right in the second position */ + order: 2; + } + #sbsr-13091 .cs-picture { + width: 93%; + height: 94%; + right: 0; + left: auto; + } + #sbsr-13091 .cs-box { + right: auto; + bottom: 0rem; + left: 0; + } + #sbsr-13091 .cs-graphic { + max-width: 44.6875rem; + right: 8.125rem; + left: auto; + transform: translateY(-50%); + } - .cs-container { - width: 100%; - /* changes to 1280px at desktop */ - max-width: calc(584 / 16 * 1rem); - margin: auto; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: clamp(3rem, 4vw, 4rem); - } + #sbsr-13091 .form-container { + background-color: #f3f1f1; + + padding: 90px; + border-radius: 1px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + max-width:71.23rem; + margin: auto; + animation: fadeIn 1s ease-in-out; + } - .cs-content { - /* set text align to left if content needs to be left aligned */ - text-align: left; - width: 100%; - max-width: calc(542 / 16 * 1rem); - display: flex; - flex-direction: column; - /* centers content horizontally, set to flex-start to left align */ - align-items: flex-start; - position: relative; - z-index: 10; - } + #sbsr-13091 .form-content { + display: flex; + flex-direction: column; + } - .cs-text { - margin-bottom: calc(16 / 16 * 1rem); - &:last-of-type { - margin-bottom: calc(32 / 16 * 1rem); - } - } + #sbsr-13091 .form-group { + margin-bottom: 15px; + animation: slideIn 0.8s ease-in-out; + } - .cs-image-group { - width: 100%; - max-width: calc(670 / 16 * 1rem); - height: 100vw; - max-height: calc(630 / 16 * 1rem); - display: block; - position: relative; - z-index: 1; - } + #sbsr-13091 .form-group label { + margin-bottom: 5px; + font-weight: bold; + color: #e1b656; + } - .cs-picture { - /* big background image */ - width: 93%; - height: 93%; - display: block; - position: absolute; - top: 0; - left: 0; - img { - width: 100%; - height: 100%; - object-fit: cover; - position: absolute; - top: 0; - left: 0; - } - } + #sbsr-13091 .form-group input, + .form-group select { + padding-right: 5px; + padding-left: 5px; + padding-top: 20px; + padding-bottom: 20px; + + border-radius: 2px; + border: 1px solid #ccc; + width: 100%; + transition: border-color 0.3s ease; + } - .cs-box { - text-align: left; - width: 70%; - max-width: calc(304 / 16 * 1rem); - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - /* 20px - 40px */ - padding: clamp(1.25rem, 4vw, 2.5rem); - background-color: #1a1a1a; - display: inline-flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - gap: calc(8 / 16 * 1rem); - position: absolute; - right: 0; - bottom: 0; - z-index: 10; - } + #sbsr-13091 .form-group input:focus, + .form-group select:focus { + border-color: #e1b656; + } - .cs-desc { - /* 16px - 31px */ - font-size: clamp(1rem, 2.5vw, 1.9375rem); - font-weight: 700; - line-height: 1.2em; - text-align: inherit; - width: 100%; - color: var(--bodyTextColorWhite); - position: relative; - z-index: 10; - } + #sbsr-13091 .submit-btn { + padding: 12px; + background-color: #e1b656; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 16px; + width: 400px; + transition: background-color 0.3s ease, transform 0.2s; + } + #sbsr-13091 ::placeholder { + color: #000; + opacity: 1; /* Ensures full opacity */ + } + + #sbsr-13091 .cs-text{ - .cs-graphic { - width: 150%; - height: auto; - position: absolute; - top: 50%; - left: 50%; - z-index: -1; - transform: translate(-50%, -50%); - } + font-size: 20px; + text-align: left; } + + + #sbsr-13091 .svg-wrapper { + position: relative; + width: 100%; /* Adjust if needed */ + height: 50px; /* Adjust height to fit the SVG */ + margin-top: 20px; /* Space above SVG */ + + } + + #sbsr-13091 .svg-icon { + width: 80px; /* Adjust the size as needed */ + height: 80px; + filter: invert(71%) sepia(72%) saturate(334%) hue-rotate(359deg) brightness(93%) contrast(91%); } +#sbsr-13091 .contact { -/* Desktop - 1024px */ -@media only screen and (min-width: 64rem) { - #sbsr-1309 { - .cs-container { - max-width: calc(1280 / 16 * 1rem); - /* set to horizontal arrangement */ - flex-direction: row; - justify-content: space-between; - align-items: stretch; - } + margin-top: 20px; + margin-left: 80px; + font-size: 20px; /* Adjust text size as needed */ + color: #e1b656; /* Text color */ +} +#sbsr-13091 .cs-button-solid { + font-size: 1rem; + font-weight: 700; + margin-top: 90px; + /* 46px - 56px */ + line-height: clamp(2.875rem, 5.5vw, 3.5rem); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 3rem; + color: #ffffff; + background-color: var(--primary); + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; +} +#sbsr-13091 .description { - .cs-content { - width: 48%; - padding: calc(48 / 16 * 1rem) 0; - align-self: center; - /* prevents flexbox from squishing it */ - flex: none; - } + + font-size: 16px; /* Adjust text size as needed */ + color: #000; /* Text color */ +} + #sbsr-13091 .submit-btn:hover { + background-color: #e1b656; + transform: scale(1.05); + } - .cs-image-group { - width: 55%; - max-width: calc(670 / 16 * 1rem); - height: auto; - max-height: 100%; - min-height: calc(670 / 16 * 1rem); - margin: 0; - /* sends it to the right in the second position */ - order: 2; - } + #sbsr-13091 .highlight { + color: #d7b65d; /* Change this to your desired color */ + font-weight: bold; /* Optional: Make it bold */ + } + + - .cs-picture { - width: 93%; - height: 94%; - right: 0; - left: auto; - } - .cs-box { - right: auto; - bottom: calc(0 / 16 * 1rem); - left: 0; - } - .cs-graphic { - max-width: calc(715 / 16 * 1rem); - right: calc(130 / 16 * 1rem); - left: auto; - transform: translateY(-50%); - } + + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } } -} + @keyframes slideIn { + from { transform: translateY(20px); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } +} /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #sbsr-1309 { - .cs-title, - .cs-text { - color: var(--bodyTextColorWhite); - } - - .cs-link { - color: var(--secondaryLight); - } - - .cs-text { - opacity: 0.8; - } - - .cs-box { - background-color: var(--medium); - } - } + body.dark-mode #sbsr-1309 .cs-title, + body.dark-mode #sbsr-1309 .cs-text { + color: var(--bodyTextColorWhite); + } + body.dark-mode #sbsr-1309 .cs-link { + color: var(--secondaryLight); + } + body.dark-mode #sbsr-1309 .cs-text { + opacity: 0.8; + } + body.dark-mode #sbsr-1309 .cs-box { + background-color: var(--medium); } } + + + + + + diff --git a/starter-styles/sass/product.scss b/starter-styles/sass/product.scss new file mode 100644 index 0000000..6f4be4f --- /dev/null +++ b/starter-styles/sass/product.scss @@ -0,0 +1,367 @@ +/*-- -------------------------- --> +<--- Interior Page Header --> +<--- -------------------------- -*/ + +/* Mobile */ +@media only screen and (min-width: 0em) { + #int-hero { + min-height: 30vh; + padding-top: 9.375rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.7; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + picture { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -2; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + h1 { + font-size: 2.13333333rem; + text-align: center; + width: 96%; + max-width: 31.25rem; + margin: 0 auto; + margin-top: 4.375rem; + margin-bottom: 1.875rem; + color: #fff; + position: relative; + } + + p { + text-align: center; + width: 96%; + max-width: 25rem; + margin: auto; + margin-bottom: 1.875rem; + color: #fff; + display: block; + } + } +} + +/* Tablet */ +@media only screen and (min-width: 48em) { + #int-hero { + font-size: 100%; + + h1 { + font-size: 4rem; + } + } +} + +/* Small Desktop */ +@media only screen and (min-width: 64em) { + #int-hero { + font-size: inherit; + height: auto; + min-height: 18.75rem; + padding-top: 11.25rem; + background-attachment: fixed; + padding-block-end: 6.25rem; + } +} + +/*-- -------------------------- --> +<--- Product --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #product { + padding: var(--sectionPadding); + overflow: hidden; + + .cs-container { + width: 100%; + max-width: 46.875rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + gap: clamp(1.75rem, 5vw, 4rem); + } + + .cs-large-image { + width: 100%; + height: clamp(15.5rem, 70vw, 33.3125rem); + display: block; + img { + width: 100%; + height: 100%; + object-fit: contain; + background-color: #f7f7f7; + display: block; + } + } + + .cs-h3 { + font-size: var(--headerFontSize); + font-weight: 900; + line-height: 1.2em; + margin: 0 0 0.5rem; + color: var(--headerColor); + } + + .cs-price { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + color: var(--secondary); + display: block; + } + + .cs-compare-price { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + text-decoration: line-through; + color: #767676; + display: block; + } + + .cs-taxes { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5em; + color: var(--primary); + display: block; + } + + .cs-info-text { + font-size: 1rem; + font-weight: 400; + line-height: 1.5em; + margin: clamp(0.75rem, 2vw, 1rem) 0 0.5rem; + color: var(--bodyTextColor); + } + + .cs-details { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + width: fit-content; + margin-bottom: 1.5rem; + color: var(--bodyTextColor); + border-bottom: 1px solid var(--bodyTextColor); + display: block; + } + + .cs-option { + font-size: 1.275rem; + font-weight: 700; + line-height: 0.875em; + margin-bottom: 1.5rem; + color: var(--bodyTextColor); + display: block; + } + + .cs-dropdown { + width: 100%; + max-width: 15rem; + height: 3rem; + margin-bottom: 1.5rem; + padding: 0 1rem; + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: 6.25rem; + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + cursor: pointer; + } + + .cs-quantity { + width: 100%; + width: fit-content; + max-width: 15rem; + height: 3rem; + margin-bottom: 1.5rem; + padding: 0 1rem; + background: #f7f7f7; + border: 1px solid #e8e8e8; + border-radius: 6.25rem; + outline: none; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + cursor: pointer; + } + + .cs-select-icon { + display: none; + } + + .cs-quantity-increment { + font-size: 1.5rem; + color: #767676; + background: none; + border: none; + cursor: pointer; + } + + .cs-quantity-decrement { + font-size: 1.5rem; + color: #767676; + background: none; + border: none; + cursor: pointer; + } + + .cs-quantity-input { + font-size: 1.25rem; + line-height: 1.5em; + text-align: center; + width: 2rem; + background-color: transparent; + border: none; + display: flex; + justify-content: center; + align-items: center; + } + + .cs-quantity-input[type="number"] { + margin: 0; + -webkit-appearance: none; + -moz-appearance: textfield; + } + + .cs-button { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + padding: 1rem; + background: none; + border: none; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + flex: 1 0 0; + } + + .cs-buy { + color: #fff; + background-color: var(--primary); + cursor: pointer; + } + } + + .visuallyhidden { + white-space: nowrap; + width: 1px; + height: 1px; + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(50%); + } +} + +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #product { + .cs-container { + max-width: 80rem; + flex-direction: row; + align-items: start; + } + + .cs-large-image { + height: 100%; + flex: 0 0 33.75rem; + } + + .cs-product-info { + flex: 1 0 0; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #product { + .cs-h3 { + color: var(--bodyTextColorWhite); + } + + .cs-info-text { + color: var(--bodyTextColorWhite); + opacity: 0.8; + } + + .cs-details { + color: var(--bodyTextColorWhite); + } + + .cs-option { + color: var(--bodyTextColorWhite); + b { + color: var(--bodyTextColorWhite); + } + } + + .cs-box { + color: var(--bodyTextColorWhite); + } + + .cs-quantity { + color: var(--bodyTextColorWhite); + background-color: var(--medium); + border-color: var(--accent); + } + + .cs-cart { + color: var(--bodyTextColorWhite); + background-color: var(--medium); + border-color: var(--accent); + } + + .cs-price { + color: var(--primaryLight); + } + + .cs-taxes { + color: var(--secondaryLight); + } + + .cs-box-number { + background-color: var(--medium); + border-color: var(--accent); + } + } + } +} diff --git a/starter-styles/sass/root.scss b/starter-styles/sass/root.scss index efc47dd..ac11eb7 100644 --- a/starter-styles/sass/root.scss +++ b/starter-styles/sass/root.scss @@ -2,34 +2,30 @@ <--- Core Styles --> <--- -------------------------- -*/ @media only screen and (min-width: 0rem) { - // CS-TODO: Adjust core styles to your liking. It may also be worth adding additional fonts for the header and changing the body font below. - // This kit has also removed all instances of .cs-button outside of the root sheet, meaning you can change for any of the content flair buttons in one place. :root { /* Add these styles to your global stylesheet, which is used across all site pages. You only need to do this once. All elements in the library derive their variables and base styles from this central sheet, simplifying site-wide edits. For instance, if you want to modify how your h2's appear across the site, you just update it once in the global styles, and the changes apply everywhere. */ - --primary: #ffba19; + --primary: #e1b656; --primaryLight: #ffd675; - --secondary: #001f3f; + --secondary: #e1b656; --secondaryLight: #001f3f; - --headerColor: #1a1a1a; - --bodyTextColor: #4e4b66; + --headerColor: #001f3f; + --titleColor:#e1b656; + --bodyTextColor: #6a6f73; --bodyTextColorWhite: #fafbfc; /* 13px - 16px */ - --topperFontSize: clamp(0.8125rem, 1.6vw, 1rem); + --topperFontSize: clamp(2.8125rem, 1.6vw, 1rem); /* 31px - 49px */ --headerFontSize: clamp(1.9375rem, 3.9vw, 3.0625rem); --bodyFontSize: 1rem; /* 60px - 100px top and bottom */ --sectionPadding: clamp(3.75rem, 7.82vw, 6.25rem) 1rem; - - --bodyFontFamily: Arial, Helvetica, sans-serif; + --bodyFontFamily: 'Playfair Display', serif; } - body { font-family: var(--bodyFontFamily); margin: 0; padding: 0; } - *, *:before, *:after { @@ -47,7 +43,6 @@ color: var(--primary); display: block; } - .cs-title { font-size: var(--headerFontSize); font-weight: 900; @@ -58,7 +53,6 @@ color: var(--headerColor); position: relative; } - .cs-text { font-size: var(--bodyFontSize); line-height: 1.5em; @@ -68,74 +62,61 @@ margin: 0; color: var(--bodyTextColor); } - .cs-button-solid { - font-size: calc(16 / 16 * 1rem); + font-size: 1rem; font-weight: 700; /* 46px - 56px */ line-height: clamp(2.875rem, 5.5vw, 3.5rem); text-align: center; text-decoration: none; - min-width: calc(150 / 16 * 1rem); + min-width: 9.375rem; margin: 0; /* prevents padding from adding to the width */ box-sizing: border-box; - padding: 0 calc(24 / 16 * 1rem); + padding: 0 1.5rem; color: #1a1a1a; background-color: var(--primary); display: inline-block; position: relative; z-index: 1; transition: color 0.3s; - - &:before { - content: ""; - width: 0%; - height: 100%; - background: #000; - opacity: 1; - position: absolute; - top: 0; - left: 0; - z-index: -1; - transition: width 0.3s; - } - - &:hover { - color: #fff; - &:before { - width: 100%; - } - } + } + .cs-button-solid:before { + content: ""; + width: 0%; + height: 100%; + background: #000; + opacity: 1; + position: absolute; + top: 0; + left: 0; + z-index: -1; + transition: width 0.3s; + } + .cs-button-solid:hover { + color: #fff; + } + .cs-button-solid:hover:before { + width: 100%; } } - /*-- -------------------------- --> -<--- Mobile Navigation --> -<--- -------------------------- -*/ + <--- Mobile Navigation --> + <--- -------------------------- -*/ /* Mobile - 1023px */ @media only screen and (max-width: 63.9375rem) { - body { - &.cs-open { - overflow: hidden; - } - - &.scroll { - #cs-navigation { - .cs-top-container { - gap: 0; - } - - .cs-top-social { - height: 0; - opacity: 0; - visibility: hidden; - overflow: hidden; - } - } - } - } - + body.cs-open { + overflow: hidden; + } + body.scroll #cs-navigation .cs-top-container { + gap: 0; + } + body.scroll #cs-navigation .cs-top-social { + height: 0; + opacity: 0; + visibility: hidden; + overflow: hidden; + } #cs-navigation { width: 100%; /* prevents padding and border from affecting height and width */ @@ -144,664 +125,572 @@ box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; position: fixed; z-index: 10000; - - &:before { - content: ""; - width: 100%; - height: 0vh; - background: rgba(0, 0, 0, 0.6); - opacity: 0; - display: block; - position: absolute; - top: 100%; - right: 0; - z-index: -1100; - transition: height 0.5s, opacity 0.5s; - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - } - - &.cs-active { - &:before { - height: 150vh; - opacity: 1; - } - .cs-ul-wrapper { - opacity: 1; - transform: scaleY(1); - transition-delay: 0.15s; - } - - .cs-li { - opacity: 1; - transform: translateY(0); - } - } - - .cs-top-bar { - width: 100%; - display: flex; - justify-content: center; - align-items: center; - } - - .cs-top-container { - width: 100%; - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - /* 16px - 20px */ - padding: clamp(1rem, 2.5vw, 1.25rem) calc(16 / 16 * 1rem); - display: flex; - justify-content: space-between; - align-items: center; - gap: calc(16 / 16 * 1rem); - } - - .cs-contact-group { - display: flex; - justify-content: flex-start; - align-items: center; - flex-wrap: wrap; - /* sends it to the right in the 2nd position */ - order: 2; - gap: calc(40 / 16 * 1rem); - } - - .cs-contact-link { - display: none; - } - - .cs-container { - width: 100%; - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - /* 16px - 20px */ - padding: clamp(1rem, 2.5vw, 1.25rem) calc(16 / 16 * 1rem); - background-color: #1a1a1a; - display: flex; - justify-content: space-between; - align-items: center; - position: relative; - } - - .cs-logo { - width: auto; - /* 24px - 32px */ - height: clamp(1.5rem, 3vw, 2rem); - margin: 0 auto 0 0; - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - order: 1; - z-index: 10; - - img { - width: auto; - height: 100%; - /* ensures the image never overflows the container. It stays contained within it's width and height and expands to fill it then stops once it reaches an edge */ - object-fit: contain; - } - } - - .cs-nav { - order: 2; - } - - .cs-toggle { - /* 48px - 56px */ - width: clamp(3rem, 7.2vw, 3.5rem); - height: clamp(3rem, 7.2vw, 3.5rem); - margin: 0 0 0 auto; - background-color: #484848; - border: none; - display: flex; - justify-content: center; - align-items: center; - transition: transform 0.6s; - - &.cs-active { - transform: rotate(180deg); - } - } - - .cs-active { - .cs-line1 { - top: 50%; - transform: translate(-50%, -50%) rotate(225deg); - } - - .cs-line2 { - top: 50%; - transform: translate(-50%, -50%) translateY(0) rotate(-225deg); - transform-origin: center; - } - - .cs-line3 { - opacity: 0; - bottom: 100%; - } - } - - .cs-box { - /* 24px - 28px */ - width: clamp(1.5rem, 2vw, 1.75rem); - height: calc(16 / 16 * 1rem); - position: relative; - } - - .cs-line { - width: 100%; - height: 2px; - background-color: #fafbfc; - border-radius: 2px; - position: absolute; - left: 50%; - transform: translateX(-50%); - } - - .cs-line1 { - top: 0; - transition: transform 0.5s, top 0.3s, left 0.3s; - animation-duration: 0.7s; - animation-timing-function: ease; - animation-direction: normal; - animation-fill-mode: forwards; - transform-origin: center; - } - - .cs-line2 { - top: 50%; - transform: translateX(-50%) translateY(-50%); - transition: top 0.3s, left 0.3s, transform 0.5s; - animation-duration: 0.7s; - animation-timing-function: ease; - animation-direction: normal; - animation-fill-mode: forwards; - } - - .cs-line3 { - bottom: 0; - transition: bottom 0.3s, opacity 0.3s; - } - - .cs-ul-wrapper { - width: 100%; - height: auto; - padding-bottom: calc(48 / 16 * 1rem); - background-color: #fff; - box-shadow: inset rgba(0, 0, 0, 0.2) 0px 8px 24px; - opacity: 0; - position: absolute; - top: 100%; - left: 0; - z-index: -1; - overflow: hidden; - transform: scaleY(0); - transition: transform 0.4s, opacity 0.3s; - transform-origin: top; - } - - .cs-ul { - width: 100%; - height: auto; - max-height: 65vh; - margin: 0; - padding: calc(48 / 16 * 1rem) 0 0 0; - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - gap: calc(20 / 16 * 1rem); - overflow: scroll; - } - - .cs-li { - text-align: center; - list-style: none; - width: 100%; - margin-right: 0; - opacity: 0; - /* transition from these values */ - transform: translateY(-4.375rem); - transition: transform 0.6s, opacity 0.9s; - - &:nth-of-type(1) { - transition-delay: 0.05s; - } - &:nth-of-type(2) { - transition-delay: 0.1s; - } - &:nth-of-type(3) { - transition-delay: 0.15s; - } - &:nth-of-type(4) { - transition-delay: 0.2s; - } - &:nth-of-type(5) { - transition-delay: 0.25s; - } - &:nth-of-type(6) { - transition-delay: 0.3s; - } - &:nth-of-type(7) { - transition-delay: 0.35s; - } - &:nth-of-type(8) { - transition-delay: 0.4s; - } - &:nth-of-type(9) { - transition-delay: 0.45s; - } - &:nth-of-type(10) { - transition-delay: 0.5s; - } - &:nth-of-type(11) { - transition-delay: 0.55s; - } - &:nth-of-type(12) { - transition-delay: 0.6s; - } - &:nth-of-type(13) { - transition-delay: 0.65s; - } - } - - .cs-li-link { - /* 16px - 24px */ - font-size: clamp(1rem, 2.5vw, 1.5rem); - line-height: 1.2em; - text-decoration: none; - margin: 0; - color: var(--headerColor); - display: inline-block; - position: relative; - - &.cs-active { - color: var(--primary); - } - - &:hover { - color: var(--primary); - } - } - - .cs-button-solid { - font-size: calc(16 / 16 * 1rem); - font-weight: 700; - /* 46px - 56px */ - line-height: clamp(2.875rem, 5.5vw, 3.5rem); - text-align: center; - text-decoration: none; - min-width: calc(150 / 16 * 1rem); - margin: 0; - /* prevents padding from adding to the width */ - box-sizing: border-box; - padding: 0 calc(24 / 16 * 1rem); - color: #1a1a1a; - background-color: var(--primary); - display: inline-block; - position: relative; - z-index: 1; - transition: color 0.3s; - - &:before { - content: ""; - width: 0%; - height: 100%; - background: #000; - opacity: 1; - position: absolute; - top: 0; - left: 0; - z-index: -1; - transition: width 0.3s; - } - - &:hover { - color: #fff; - &:before { - width: 100%; - } - } - } - - .cs-button-solid { - margin: 0; - display: none; - } - - .cs-call { - text-decoration: none; - display: flex; - justify-content: flex-start; - align-items: center; - gap: calc(16 / 16 * 1rem); - position: relative; - - &:before { - /* light green circle that animates on hover */ - content: ""; - width: calc(48 / 16 * 1rem); - height: calc(48 / 16 * 1rem); - background: #eff1f0; - opacity: 1; - border-radius: calc(24 / 16 * 1rem); - display: block; - position: absolute; - top: 50%; - left: 0; - z-index: -1; - transform: translateY(-50%); - transition: width 0.3s, height 0.3s, border-radius 0.3s; - } - - .cs-wrapper { - width: calc(56 / 16 * 1rem); - height: calc(56 / 16 * 1rem); - background-color: var(--primary); - display: flex; - justify-content: center; - align-items: center; - transition: transform 0.3s; - /* prevents flexbox from squishing it */ - flex: none; - } - - .cs-icon { - width: calc(24 / 16 * 1rem); - height: auto; - display: block; - transition: transform 0.3s; - } - - .cs-info { - display: flex; - flex-direction: column; - align-items: flex-start; - } - - .cs-header { - font-size: calc(14 / 16 * 1rem); - font-weight: 400; - line-height: 1.2em; - margin: 0; - color: var(--bodyTextColorWhite); - display: block; - } - - .cs-link-content { - font-size: calc(20 / 16 * 1rem); - font-weight: 700; - line-height: 1.2em; - margin: 0; - color: var(--bodyTextColorWhite); - display: block; - } - } + } + #cs-navigation:before { + content: ""; + width: 100%; + height: 0vh; + background: rgba(0, 0, 0, 0.6); + opacity: 0; + display: block; + position: absolute; + top: 100%; + right: 0; + z-index: -1100; + transition: height 0.5s, opacity 0.5s; + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + } + #cs-navigation.cs-active:before { + height: 150vh; + opacity: 1; + } + #cs-navigation.cs-active .cs-ul-wrapper { + opacity: 1; + transform: scaleY(1); + transition-delay: 0.15s; + } + #cs-navigation.cs-active .cs-li { + opacity: 1; + transform: translateY(0); + } + #cs-navigation .cs-top-bar { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + } + #cs-navigation .cs-top-container { + width: 100%; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + /* 16px - 20px */ + padding: clamp(1rem, 2.5vw, 1.25rem) 1rem; + display: flex; + justify-content: space-between; + align-items: center; + gap: 1rem; + } + #cs-navigation .cs-contact-group { + display: flex; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + /* sends it to the right in the 2nd position */ + order: 2; + gap: 2.5rem; + } + #cs-navigation .cs-contact-link { + display: none; + } + #cs-navigation .cs-container { + width: 100%; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + /* 16px - 20px */ + padding: clamp(1rem, 2.5vw, 1.25rem) 1rem; + background-color: #1a1a1a; + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + } + #cs-navigation .cs-logo { + width: auto; + /* 24px - 32px */ + height: clamp(1.5rem, 3vw, 2rem); + margin: 0 auto 0 0; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + order: 1; + z-index: 10; + } + #cs-navigation .cs-logo img { + width: auto; + height: 100%; + /* ensures the image never overflows the container. It stays contained within it's width and height and expands to fill it then stops once it reaches an edge */ + object-fit: contain; + } + #cs-navigation .cs-nav { + order: 2; + } + #cs-navigation .cs-toggle { + /* 48px - 56px */ + width: clamp(3rem, 7.2vw, 3.5rem); + height: clamp(3rem, 7.2vw, 3.5rem); + margin: 0 0 0 auto; + background-color: #484848; + border: none; + display: flex; + justify-content: center; + align-items: center; + transition: transform 0.6s; + } + #cs-navigation .cs-toggle.cs-active { + transform: rotate(180deg); + } + #cs-navigation .cs-active .cs-line1 { + top: 50%; + transform: translate(-50%, -50%) rotate(225deg); + } + #cs-navigation .cs-active .cs-line2 { + top: 50%; + transform: translate(-50%, -50%) translateY(0) rotate(-225deg); + transform-origin: center; + } + #cs-navigation .cs-active .cs-line3 { + opacity: 0; + bottom: 100%; + } + #cs-navigation .cs-box { + /* 24px - 28px */ + width: clamp(1.5rem, 2vw, 1.75rem); + height: 1rem; + position: relative; + } + #cs-navigation .cs-line { + width: 100%; + height: 2px; + background-color: #fafbfc; + border-radius: 2px; + position: absolute; + left: 50%; + transform: translateX(-50%); + } + #cs-navigation .cs-line1 { + top: 0; + transition: transform 0.5s, top 0.3s, left 0.3s; + animation-duration: 0.7s; + animation-timing-function: ease; + animation-direction: normal; + animation-fill-mode: forwards; + transform-origin: center; + } + #cs-navigation .cs-line2 { + top: 50%; + transform: translateX(-50%) translateY(-50%); + transition: top 0.3s, left 0.3s, transform 0.5s; + animation-duration: 0.7s; + animation-timing-function: ease; + animation-direction: normal; + animation-fill-mode: forwards; + } + #cs-navigation .cs-line3 { + bottom: 0; + transition: bottom 0.3s, opacity 0.3s; + } + #cs-navigation .cs-ul-wrapper { + width: 100%; + height: auto; + padding-bottom: 3rem; + background-color: #fff; + box-shadow: inset rgba(0, 0, 0, 0.2) 0px 8px 24px; + opacity: 0; + position: absolute; + top: 100%; + left: 0; + z-index: -1; + overflow: hidden; + transform: scaleY(0); + transition: transform 0.4s, opacity 0.3s; + transform-origin: top; + } + #cs-navigation .cs-ul { + width: 100%; + height: auto; + max-height: 65vh; + margin: 0; + padding: 3rem 0 0 0; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + gap: 1.25rem; + overflow: scroll; + } + #cs-navigation .cs-li { + text-align: center; + list-style: none; + width: 100%; + margin-right: 0; + opacity: 0; + /* transition from these values */ + transform: translateY(-4.375rem); + transition: transform 0.6s, opacity 0.9s; + } + #cs-navigation .cs-li:nth-of-type(1) { + transition-delay: 0.05s; + } + #cs-navigation .cs-li:nth-of-type(2) { + transition-delay: 0.1s; + } + #cs-navigation .cs-li:nth-of-type(3) { + transition-delay: 0.15s; + } + #cs-navigation .cs-li:nth-of-type(4) { + transition-delay: 0.2s; + } + #cs-navigation .cs-li:nth-of-type(5) { + transition-delay: 0.25s; + } + #cs-navigation .cs-li:nth-of-type(6) { + transition-delay: 0.3s; + } + #cs-navigation .cs-li:nth-of-type(7) { + transition-delay: 0.35s; + } + #cs-navigation .cs-li:nth-of-type(8) { + transition-delay: 0.4s; + } + #cs-navigation .cs-li:nth-of-type(9) { + transition-delay: 0.45s; + } + #cs-navigation .cs-li:nth-of-type(10) { + transition-delay: 0.5s; + } + #cs-navigation .cs-li:nth-of-type(11) { + transition-delay: 0.55s; + } + #cs-navigation .cs-li:nth-of-type(12) { + transition-delay: 0.6s; + } + #cs-navigation .cs-li:nth-of-type(13) { + transition-delay: 0.65s; + } + #cs-navigation .cs-li-link { + /* 16px - 24px */ + font-size: clamp(1rem, 2.5vw, 1.5rem); + line-height: 1.2em; + text-decoration: none; + margin: 0; + color: var(--headerColor); + display: inline-block; + position: relative; + } + #cs-navigation .cs-li-link.cs-active { + color: var(--primary); + } + #cs-navigation .cs-li-link:hover { + color: var(--primary); + } + #cs-navigation .cs-button-solid { + font-size: 1rem; + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875rem, 5.5vw, 3.5rem); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + margin: 0; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 1.5rem; + color: #1a1a1a; + background-color: var(--primary); + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; + } + #cs-navigation .cs-button-solid:before { + content: ""; + width: 0%; + height: 100%; + background: #000; + opacity: 1; + position: absolute; + top: 0; + left: 0; + z-index: -1; + transition: width 0.3s; + } + #cs-navigation .cs-button-solid:hover { + color: #fff; + } + #cs-navigation .cs-button-solid:hover:before { + width: 100%; + } + #cs-navigation .cs-button-solid { + margin: 0; + display: none; + } + #cs-navigation .cs-call { + text-decoration: none; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 1rem; + position: relative; + } + #cs-navigation .cs-call:before { + /* light green circle that animates on hover */ + content: ""; + width: 3rem; + height: 3rem; + background: #eff1f0; + opacity: 1; + border-radius: 1.5rem; + display: block; + position: absolute; + top: 50%; + left: 0; + z-index: -1; + transform: translateY(-50%); + transition: width 0.3s, height 0.3s, border-radius 0.3s; + } + #cs-navigation .cs-call .cs-wrapper { + width: 3.5rem; + height: 3.5rem; + background-color: var(--primary); + display: flex; + justify-content: center; + align-items: center; + transition: transform 0.3s; + /* prevents flexbox from squishing it */ + flex: none; + } + #cs-navigation .cs-call .cs-icon { + width: 1.5rem; + height: auto; + display: block; + transition: transform 0.3s; + } + #cs-navigation .cs-call .cs-info { + display: flex; + flex-direction: column; + align-items: flex-start; + } + #cs-navigation .cs-call .cs-header { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.2em; + margin: 0; + color: var(--bodyTextColorWhite); + display: block; + } + #cs-navigation .cs-call .cs-link-content { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--bodyTextColorWhite); + display: block; } } - /* Tablet - 768px */ @media only screen and (min-width: 48rem) { - #cs-navigation { - .cs-button-solid { - display: block; - } + #cs-navigation .cs-button-solid { + display: block; } } - /* Dark Mode */ @media only screen and (max-width: 63.9375rem) { - body.dark-mode { - #cs-navigation { - background-color: var(--dark); - - .cs-logo { - /* makes it white */ - filter: grayscale(1) brightness(1000%); - } - - .cs-ul-wrapper { - background-color: var(--dark); - } - - .cs-li-link { - color: var(--bodyTextColorWhite); - } - - .cs-container { - background-color: rgba(0, 0, 0, 0.5); - } - } + body.dark-mode #cs-navigation { + background-color: var(--dark); + } + body.dark-mode #cs-navigation .cs-logo { + /* makes it white */ + filter: grayscale(1) brightness(1000%); + } + body.dark-mode #cs-navigation .cs-ul-wrapper { + background-color: var(--dark); + } + body.dark-mode #cs-navigation .cs-li-link { + color: var(--bodyTextColorWhite); + } + body.dark-mode #cs-navigation .cs-container { + background-color: rgba(0, 0, 0, 0.5); } } - /*-- -------------------------- --> -<--- Navigation Dropdown --> -<--- -------------------------- -*/ + <--- Navigation Dropdown --> + <--- -------------------------- -*/ /* Mobile - 1023px */ @media only screen and (max-width: 63.9375rem) { - #cs-navigation { - .cs-li { - text-align: center; - width: 100%; - display: block; - } - - .cs-dropdown { - color: var(--bodyTextColorWhite); - position: relative; - - &.cs-active { - .cs-drop-ul { - height: auto; - margin: calc(12 / 16 * 1rem) 0 0 0; - padding: calc(12 / 16 * 1rem) 0; - opacity: 1; - visibility: visible; - } - - .cs-drop-link { - opacity: 1; - } - } - - .cs-li-link { - position: relative; - transition: opacity 0.3s; - } - } - - .cs-drop-icon { - width: calc(15 / 16 * 1rem); - height: auto; - position: absolute; - top: 50%; - right: calc(-20 / 16 * 1rem); - transform: translateY(-50%); - } - - .cs-drop-ul { - width: 100%; - height: 100%; - margin: calc(16 / 16 * 1rem) 0 0 0; - padding: 0; - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - gap: calc(12 / 16 * 1rem); - overflow: hidden; - } - - .cs-drop-li { - list-style: none; - } - - .cs-li-link { - &.cs-drop-link { - color: var(--headerColor); - } - } + #cs-navigation .cs-li { + text-align: center; + width: 100%; + display: block; + } + #cs-navigation .cs-dropdown { + color: var(--bodyTextColorWhite); + position: relative; + } + #cs-navigation .cs-dropdown.cs-active .cs-drop-ul { + height: auto; + margin: 0.75rem 0 0 0; + padding: 0.75rem 0; + opacity: 1; + visibility: visible; + } + #cs-navigation .cs-dropdown.cs-active .cs-drop-link { + opacity: 1; + } + #cs-navigation .cs-dropdown .cs-li-link { + position: relative; + transition: opacity 0.3s; + } + #cs-navigation .cs-drop-icon { + width: 0.9375rem; + height: auto; + position: absolute; + top: 50%; + right: -1.25rem; + transform: translateY(-50%); + } + #cs-navigation .cs-drop-ul { + width: 100%; + height: 100%; + margin: 1rem 0 0 0; + padding: 0; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + gap: 0.75rem; + overflow: hidden; + } + #cs-navigation .cs-drop-li { + list-style: none; + } + #cs-navigation .cs-li-link.cs-drop-link { + color: var(--headerColor); } } - /* Desktop - 1024px */ @media only screen and (min-width: 64rem) { - #cs-navigation { - .cs-dropdown { - position: relative; - &:hover { - cursor: pointer; - .cs-drop-ul { - opacity: 1; - visibility: visible; - transform: scaleY(1); - } - - .cs-drop-li { - opacity: 1; - transform: translateY(0); - } - } - } - - .cs-drop-icon { - width: calc(15 / 16 * 1rem); - height: auto; - display: inline-block; - } - - .cs-drop-ul { - min-width: calc(200 / 16 * 1rem); - margin: 0; - padding: 0; - background-color: #fff; - box-shadow: rgba(149, 157, 165, 0.2) 0px 10px 16px; - opacity: 0; - border-bottom: 5px solid var(--primary); - visibility: hidden; - /* if you have 8 or more links in your dropdown nav, uncomment the columns property to make the list into 2 even columns. Change it to 3 or 4 if you need extra columns. Then remove the transition delays on the cs-drop-li so they don't have weird scattered animations */ - // columns: 2; - position: absolute; - top: 100%; - z-index: -100; - overflow: hidden; - transform: scaleY(0); - transition: transform 0.3s, visibility 0.3s, opacity 0.3s; - transform-origin: top; - } - - .cs-drop-li { - font-size: calc(16 / 16 * 1rem); - text-decoration: none; - list-style: none; - width: 100%; - height: auto; - opacity: 0; - display: block; - transform: translateY(-0.625rem); - transition: opacity 0.6s, transform 0.6s; - - &:nth-of-type(1) { - transition-delay: 0.05s; - } - &:nth-of-type(2) { - transition-delay: 0.1s; - } - &:nth-of-type(3) { - transition-delay: 0.15s; - } - &:nth-of-type(4) { - transition-delay: 0.2s; - } - &:nth-of-type(5) { - transition-delay: 0.25s; - } - &:nth-of-type(6) { - transition-delay: 0.3s; - } - &:nth-of-type(7) { - transition-delay: 0.35s; - } - &:nth-of-type(8) { - transition-delay: 0.4s; - } - &:nth-of-type(9) { - transition-delay: 0.45s; - } - &:nth-of-type(10) { - transition-delay: 0.5s; - } - &:nth-of-type(11) { - transition-delay: 0.55s; - } - &:nth-of-type(12) { - transition-delay: 0.6s; - } - &:nth-of-type(13) { - transition-delay: 0.65s; - } - } - - .cs-li-link { - &.cs-drop-link { - font-size: calc(16 / 16 * 1rem); - line-height: 1.5em; - text-transform: capitalize; - text-decoration: none; - white-space: nowrap; - width: 100%; - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - padding: calc(12 / 16 * 1rem); - color: var(--bodyTextColor); - display: block; - transition: color 0.3s, background-color 0.3s; - - &:hover { - color: var(--primary); - background-color: #f7f7f7; - } - - &:before { - display: none; - } - } - } + #cs-navigation .cs-dropdown { + position: relative; + } + #cs-navigation .cs-dropdown:hover { + cursor: pointer; + } + #cs-navigation .cs-dropdown:hover .cs-drop-ul { + opacity: 1; + visibility: visible; + transform: scaleY(1); + } + #cs-navigation .cs-dropdown:hover .cs-drop-li { + opacity: 1; + transform: translateY(0); + } + #cs-navigation .cs-drop-icon { + width: 0.9375rem; + height: auto; + display: inline-block; + } + #cs-navigation .cs-drop-ul { + min-width: 12.5rem; + margin: 0; + padding: 0; + background-color: #fff; + box-shadow: rgba(149, 157, 165, 0.2) 0px 10px 16px; + opacity: 0; + border-bottom: 5px solid var(--primary); + visibility: hidden; + /* if you have 8 or more links in your dropdown nav, uncomment the columns property to make the list into 2 even columns. Change it to 3 or 4 if you need extra columns. Then remove the transition delays on the cs-drop-li so they don't have weird scattered animations */ + position: absolute; + top: 100%; + z-index: -100; + overflow: hidden; + transform: scaleY(0); + transition: transform 0.3s, visibility 0.3s, opacity 0.3s; + transform-origin: top; + } + #cs-navigation .cs-drop-li { + font-size: 1rem; + text-decoration: none; + list-style: none; + width: 100%; + height: auto; + opacity: 0; + display: block; + transform: translateY(-0.625rem); + transition: opacity 0.6s, transform 0.6s; + } + #cs-navigation .cs-drop-li:nth-of-type(1) { + transition-delay: 0.05s; + } + #cs-navigation .cs-drop-li:nth-of-type(2) { + transition-delay: 0.1s; + } + #cs-navigation .cs-drop-li:nth-of-type(3) { + transition-delay: 0.15s; + } + #cs-navigation .cs-drop-li:nth-of-type(4) { + transition-delay: 0.2s; + } + #cs-navigation .cs-drop-li:nth-of-type(5) { + transition-delay: 0.25s; + } + #cs-navigation .cs-drop-li:nth-of-type(6) { + transition-delay: 0.3s; + } + #cs-navigation .cs-drop-li:nth-of-type(7) { + transition-delay: 0.35s; + } + #cs-navigation .cs-drop-li:nth-of-type(8) { + transition-delay: 0.4s; + } + #cs-navigation .cs-drop-li:nth-of-type(9) { + transition-delay: 0.45s; + } + #cs-navigation .cs-drop-li:nth-of-type(10) { + transition-delay: 0.5s; + } + #cs-navigation .cs-drop-li:nth-of-type(11) { + transition-delay: 0.55s; + } + #cs-navigation .cs-drop-li:nth-of-type(12) { + transition-delay: 0.6s; + } + #cs-navigation .cs-drop-li:nth-of-type(13) { + transition-delay: 0.65s; + } + #cs-navigation .cs-li-link.cs-drop-link { + font-size: 1rem; + line-height: 1.5em; + text-transform: capitalize; + text-decoration: none; + white-space: nowrap; + width: 100%; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + padding: 0.75rem; + color: var(--bodyTextColor); + display: block; + transition: color 0.3s, background-color 0.3s; + } + #cs-navigation .cs-li-link.cs-drop-link:hover { + color: var(--primary); + background-color: #f7f7f7; + } + #cs-navigation .cs-li-link.cs-drop-link:before { + display: none; } } - /* Dark Mode */ @media only screen and (min-width: 64rem) { - body.dark-mode { - #cs-navigation { - .cs-drop-ul { - background-color: var(--dark); - } - - .cs-li-link { - &.cs-drop-link { - color: var(--bodyTextColorWhite); - &:hover { - background-color: rgba(255, 255, 255, 0.2); - } - - &:before { - display: none; - } - } - } - } + body.dark-mode #cs-navigation .cs-drop-ul { + background-color: var(--dark); + } + body.dark-mode #cs-navigation .cs-li-link.cs-drop-link { + color: var(--bodyTextColorWhite); + } + body.dark-mode #cs-navigation .cs-li-link.cs-drop-link:hover { + background-color: rgba(255, 255, 255, 0.2); + } + body.dark-mode #cs-navigation .cs-li-link.cs-drop-link:before { + display: none; } } - /*-- -------------------------- --> -<--- Desktop Navigation --> -<--- -------------------------- -*/ + <--- Desktop Navigation --> + <--- -------------------------- -*/ /* Small Desktop - 1024px */ @media only screen and (min-width: 64rem) { #cs-navigation { @@ -810,377 +699,319 @@ box-sizing: border-box; padding: 0; background-color: #fff; - box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + position: fixed; z-index: 10000; - - .cs-top-bar { - width: 100%; - display: flex; - justify-content: center; - align-items: center; - } - - .cs-top-container { - width: 100%; - max-width: calc(1280 / 16 * 1rem); - /* prevents padding and border from affecting height and width */ - box-sizing: border-box; - padding: calc(16 / 16 * 1rem); - display: flex; - justify-content: space-between; - align-items: center; - gap: calc(24 / 16 * 1rem); - } - - .cs-contact-group { - display: flex; - justify-content: flex-end; - align-items: center; - gap: calc(24 / 16 * 1rem); - } - - .cs-contact-link { - text-decoration: none; - padding-right: calc(30 / 16 * 1rem); - display: flex; - justify-content: flex-start; - align-items: center; - gap: calc(16 / 16 * 1rem); - position: relative; - transform-style: preserve-3d; - perspective: 200px; - - &:nth-of-type(2) { - display: none; - } - - &:hover { - .cs-wrapper { - transform: rotateY(180deg); - } - } - } - - .cs-wrapper { - width: calc(56 / 16 * 1rem); - height: calc(56 / 16 * 1rem); - display: flex; - justify-content: center; - align-items: center; - position: relative; - z-index: 1; - transition: transform 0.6s; - /* prevents flexbox from squishing it */ - flex: none; - - &:before { - /* backgorund color in pseudo so we can use the primary color variable and use opacity */ - content: ""; - width: 100%; - height: 100%; - background-color: var(--primary); - opacity: 0.1; - display: block; - position: absolute; - top: 0; - left: 0; - } - } - - .cs-icon { - width: calc(24 / 16 * 1rem); - height: auto; - display: block; - transition: transform 0.3s; - } - - .cs-info { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: calc(4 / 16 * 1rem); - } - - .cs-header { - font-size: calc(16 / 16 * 1rem); - font-weight: 700; - line-height: 1.2em; - margin: 0; - color: var(--headerColor); - display: block; - } - - .cs-link-content { - font-size: calc(14 / 16 * 1rem); - font-weight: 400; - line-height: 1.2em; - margin: 0; - color: var(--bodyTextColor); - display: block; - } - - .cs-button-solid { - font-size: calc(16 / 16 * 1rem); - font-weight: 700; - /* 46px - 56px */ - line-height: clamp(2.875rem, 5.5vw, 3.5rem); - text-align: center; - text-decoration: none; - min-width: calc(150 / 16 * 1rem); - margin: 0; - /* prevents padding from adding to the width */ - box-sizing: border-box; - padding: 0 calc(48 / 16 * 1rem); - color: #1a1a1a; - background-color: var(--primary); - display: inline-block; - position: relative; - z-index: 1; - transition: color 0.3s; - - &:before { - content: ""; - width: 0%; - height: 100%; - background: #000; - opacity: 1; - position: absolute; - top: 0; - left: 0; - z-index: -1; - transition: width 0.3s; - } - - &:hover { - color: #fff; - &:before { - width: 100%; - } - } - } - - .cs-bottom-bar { - width: 100%; - background-color: #1a1a1a; - display: flex; - justify-content: center; - align-items: center; - } - - .cs-container { - width: 100%; - max-width: calc(1280 / 16 * 1rem); - margin: auto; - /* prevents padding from affectin gheight */ - box-sizing: border-box; - padding: 0 calc(16 / 16 * 1rem); - display: flex; - justify-content: space-between; - align-items: center; - gap: calc(24 / 16 * 1rem); - position: relative; - } - - .cs-toggle { - display: none; - } - - .cs-logo { - width: 18.4%; - max-width: calc(197 / 16 * 1rem); - height: calc(60 / 16 * 1rem); - /* margin-right auto pushes everything away from it to the right */ - margin: 0 auto 0 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - z-index: 100; - - img { - width: 100%; - height: 100%; - /* ensures the image never overflows the container. It stays contained within it's width and height and expands to fill it then stops once it reaches an edge */ - object-fit: contain; - } - } - - .cs-ul { - width: 100%; - margin: 0; - padding: 0; - display: flex; - justify-content: flex-start; - align-items: center; - gap: calc(36 / 16 * 1rem); - } - - .cs-li { - list-style: none; - padding: calc(36 / 16 * 1rem) 0; - /* prevent flexbox from squishing it */ - flex: none; - } - - .cs-li-link { - font-size: calc(16 / 16 * 1rem); - line-height: 1.5em; - text-transform: uppercase; - text-decoration: none; - margin: 0; - color: var(--bodyTextColorWhite); - display: block; - position: relative; - transition: color 0.3s; - - &:hover { - color: var(--primary); - } - - &.cs-active { - font-weight: 700; - color: var(--primary); - } - } - - .cs-call { - text-decoration: none; - display: flex; - justify-content: flex-start; - align-items: center; - gap: calc(16 / 16 * 1rem); - position: relative; - transform-style: preserve-3d; - perspective: 200px; - - &:hover { - &:hover { - .cs-wrapper { - transform: rotateY(180deg); - } - } - } - - .cs-wrapper { - width: calc(56 / 16 * 1rem); - height: calc(56 / 16 * 1rem); - background-color: var(--primary); - display: flex; - justify-content: center; - align-items: center; - transition: transform 0.6s; - /* prevents flexbox from squishing it */ - flex: none; - } - - .cs-icon { - width: calc(24 / 16 * 1rem); - height: auto; - display: block; - transition: transform 0.3s; - } - - .cs-info { - display: flex; - flex-direction: column; - align-items: flex-start; - } - - .cs-header { - font-size: calc(14 / 16 * 1rem); - font-weight: 400; - line-height: 1.2em; - margin: 0; - color: var(--bodyTextColorWhite); - display: block; - } - - .cs-link-content { - font-size: calc(20 / 16 * 1rem); - font-weight: 700; - line-height: 1.2em; - margin: 0; - color: var(--bodyTextColorWhite); - display: block; - } - } + background: transparent; + position: absolute; + } + #cs-navigation .cs-top-bar { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + } + #cs-navigation .cs-top-container { + width: 100%; + max-width: 80rem; + /* prevents padding and border from affecting height and width */ + box-sizing: border-box; + padding: 1rem; + display: flex; + justify-content: space-between; + align-items: center; + gap: 1.5rem; + } + #cs-navigation .cs-contact-group { + display: flex; + justify-content: flex-end; + align-items: center; + gap: 1.5rem; + } + #cs-navigation .cs-contact-link { + text-decoration: none; + padding-right: 1.875rem; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 1rem; + position: relative; + transform-style: preserve-3d; + perspective: 200px; + } + #cs-navigation .cs-contact-link:nth-of-type(2) { + display: none; + } + #cs-navigation .cs-contact-link:hover .cs-wrapper { + transform: rotateY(180deg); + } + #cs-navigation .cs-wrapper { + width: 3.5rem; + height: 3.5rem; + display: flex; + justify-content: center; + align-items: center; + position: relative; + z-index: 1; + transition: transform 0.6s; + /* prevents flexbox from squishing it */ + flex: none; + } + #cs-navigation .cs-wrapper:before { + /* backgorund color in pseudo so we can use the primary color variable and use opacity */ + content: ""; + width: 100%; + height: 100%; + background-color: var(--primary); + opacity: 0.1; + display: block; + position: absolute; + top: 0; + left: 0; + } + #cs-navigation .cs-icon { + width: 1.5rem; + height: auto; + display: block; + transition: transform 0.3s; + } + #cs-navigation .cs-info { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.25rem; + } + #cs-navigation .cs-header { + font-size: 1rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + display: block; + } + #cs-navigation .cs-link-content { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.2em; + margin: 0; + color: var(--bodyTextColor); + display: block; + } + #cs-navigation .cs-button-solid { + font-size: 1rem; + font-weight: 700; + /* 46px - 56px */ + line-height: clamp(2.875rem, 5.5vw, 3.5rem); + text-align: center; + text-decoration: none; + min-width: 9.375rem; + margin: 0; + /* prevents padding from adding to the width */ + box-sizing: border-box; + padding: 0 3rem; + color: #1a1a1a; + background-color: var(--primary); + display: inline-block; + position: relative; + z-index: 1; + transition: color 0.3s; + } + #cs-navigation .cs-button-solid:before { + content: ""; + width: 0%; + height: 100%; + background: #000; + opacity: 1; + position: absolute; + top: 0; + left: 0; + z-index: -1; + transition: width 0.3s; + } + #cs-navigation .cs-button-solid:hover { + color: #fff; + } + #cs-navigation .cs-button-solid:hover:before { + width: 100%; + } + #cs-navigation .cs-bottom-bar { + width: 100%; + background-color: #1a1a1a; + display: flex; + justify-content: center; + align-items: center; + } + #cs-navigation .cs-container { + width: 100%; + max-width: 80rem; + + /* prevents padding from affectin gheight */ + box-sizing: border-box; + + display: flex; + justify-content: center; + align-items: center; + gap: 1.5rem; + position: relative; + } + #cs-navigation .cs-toggle { + display: none; + } + #cs-navigation .cs-logo { + width: 18.4%; + max-width: 12.3125rem; + height: 3.75rem; + /* margin-right auto pushes everything away from it to the right */ + margin: 0 auto 0 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + z-index: 100; + } + #cs-navigation .cs-logo img { + width: 100%; + height: 100%; + /* ensures the image never overflows the container. It stays contained within it's width and height and expands to fill it then stops once it reaches an edge */ + object-fit: contain; + } + #cs-navigation .cs-ul { + width: 100%; + margin: 0; + padding: 0; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 2.25rem; + } + #cs-navigation .cs-li { + list-style: none; + padding: 2.25rem 0; + /* prevent flexbox from squishing it */ + flex: none; + } + #cs-navigation .cs-li-link { + font-size: 1rem; + line-height: 1.5em; + text-transform: uppercase; + text-decoration: none; + margin: 0; + color: var(--bodyTextColorWhite); + display: block; + position: relative; + transition: color 0.3s; + } + #cs-navigation .cs-li-link:hover { + color: var(--primary); + } + #cs-navigation .cs-li-link.cs-active { + font-weight: 700; + color: var(--primary); + } + #cs-navigation .cs-call { + text-decoration: none; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 1rem; + position: relative; + transform-style: preserve-3d; + perspective: 200px; + } + #cs-navigation .cs-call:hover:hover .cs-wrapper { + transform: rotateY(180deg); + } + #cs-navigation .cs-call .cs-wrapper { + width: 3.5rem; + height: 3.5rem; + background-color: var(--primary); + display: flex; + justify-content: center; + align-items: center; + transition: transform 0.6s; + /* prevents flexbox from squishing it */ + flex: none; + } + #cs-navigation .cs-call .cs-icon { + width: 1.5rem; + height: auto; + display: block; + transition: transform 0.3s; + } + #cs-navigation .cs-call .cs-info { + display: flex; + flex-direction: column; + align-items: flex-start; + } + #cs-navigation .cs-call .cs-header { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.2em; + margin: 0; + color: var(--bodyTextColorWhite); + display: block; + } + #cs-navigation .cs-call .cs-link-content { + font-size: 1.25rem; + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--bodyTextColorWhite); + display: block; } } - /* Large Desktop - 1300px */ @media only screen and (min-width: 75rem) { - #cs-navigation { - .cs-contact-link { - &:nth-of-type(2) { - display: flex; - } - } + #cs-navigation .cs-contact-link:nth-of-type(2) { + display: flex; } } - /* Larger Desktop - 1200px */ @media only screen and (min-width: 100rem) { #cs-navigation { - .cs-donate { - margin-left: auto; - display: flex; - } - - .cs-nav-button { - margin: 0; - } + background: transparent; + } + #cs-navigation .cs-donate { + margin-left: auto; + display: flex; + } + #cs-navigation .cs-nav-button { + margin: 0; } } - /* Dark Mode */ @media only screen and (min-width: 64rem) { - body.dark-mode { - #cs-navigation { - background-color: var(--dark); - - .cs-header, - .cs-link-content { - color: var(--bodyTextColorWhite); - } - - .cs-wrapper { - &:before { - background-color: #fff; - } - } - - .cs-call { - .cs-header { - opacity: 0.8; - } - - .cs-link-content { - opacity: 1; - } - } - - .cs-link-content { - opacity: 0.8; - } - - .cs-bottom-bar { - background-color: rgba(0, 0, 0, 0.4); - } - - .cs-logo, - .cs-link-icon { - /* turns it white */ - filter: grayscale(1) brightness(1000%); - } - } + body.dark-mode #cs-navigation { + background-color: var(--dark); + } + body.dark-mode #cs-navigation .cs-header, + body.dark-mode #cs-navigation .cs-link-content { + color: var(--bodyTextColorWhite); + } + body.dark-mode #cs-navigation .cs-wrapper:before { + background-color: #fff; + } + body.dark-mode #cs-navigation .cs-call .cs-header { + opacity: 0.8; + } + body.dark-mode #cs-navigation .cs-call .cs-link-content { + opacity: 1; + } + body.dark-mode #cs-navigation .cs-link-content { + opacity: 0.8; + } + body.dark-mode #cs-navigation .cs-bottom-bar { + background-color: rgba(0, 0, 0, 0.4); + } + body.dark-mode #cs-navigation .cs-logo, + body.dark-mode #cs-navigation .cs-link-icon { + /* turns it white */ + filter: grayscale(1) brightness(1000%); } } - /*-- -------------------------- --> -<--- Footer --> -<--- -------------------------- -*/ - + <--- Footer --> + <--- -------------------------- -*/ /* Mobile - 360px */ @media only screen and (min-width: 0rem) { #footer-1390 { @@ -1188,177 +1019,151 @@ background-color: #1a1a1a; position: relative; z-index: 1; - - .cs-container { - width: 100%; - max-width: calc(1280 / 16 * 1rem); - margin: auto; - display: flex; - flex-direction: column; - align-items: center; - } - - .cs-top { - width: 100%; - margin-bottom: calc(40 / 16 * 1rem); - /* 24px - 64px */ - padding-bottom: clamp(1.5rem, 5vw, 4rem); - border-bottom: 1px solid #484848; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - /* 24px - 40px */ - gap: clamp(1.25rem, 4vw, 2.5rem); - } - - .cs-ul { - margin: 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; - /* 24px - 36px */ - column-gap: clamp(1.5rem, 4vw, 2.25rem); - row-gap: calc(8 / 16 * 1rem); - } - - .cs-li { - list-style: none; - } - - .cs-link { - /* 14px - 16px */ - font-size: clamp(0.875rem, 1.5vw, 1rem); - line-height: 1.5em; - text-decoration: none; - margin: 0; - color: #bababa; - display: block; - transition: color 0.3s; - - &:hover { - color: var(--primary); - } - } - - .cs-logo { - width: 100%; - max-width: calc(209 / 16 * 1rem); - height: auto; - display: block; - } - - .cs-logo-img { - width: 100%; - height: auto; - display: block; - } - - .cs-bottom { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - gap: calc(16 / 16 * 1rem); - } - - .cs-social { - margin: 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - gap: calc(8 / 16 * 1rem); - } - - .cs-social-li { - list-style: none; - } - - .cs-social-link { - width: calc(32 / 16 * 1rem); - height: calc(32 / 16 * 1rem); - background-color: #484848; - border-radius: 50%; - display: flex; - justify-content: center; - align-items: center; - transition: background-color 0.3s; - &:hover { - background-color: var(--primary); - - .cs-social-icon { - opacity: 1; - filter: grayscale(1) brightness(1000%); - } - } - } - - .cs-social-icon { - width: calc(12 / 16 * 1rem); - height: auto; - opacity: 0.6; - display: block; - transition: opacity 0.3s; - } - - .cs-copyright { - font-size: calc(16 / 16 * 1rem); - line-height: 1.5em; - margin: 0; - color: #bababa; - display: block; - } - - .cs-copyright-link, - .cs-separater { - font-size: calc(16 / 16 * 1rem); - text-decoration: none; - color: #bababa; - transition: color 0.3s; - - &:hover { - color: var(--primary); - } - } - - .cs-separater { - margin: 0 calc(16 / 16 * 1rem); - display: inline-block; - } + } + #footer-1390 .cs-container { + width: 100%; + max-width: 80rem; + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + } + #footer-1390 .cs-top { + width: 100%; + margin-bottom: 2.5rem; + /* 24px - 64px */ + padding-bottom: clamp(1.5rem, 5vw, 4rem); + border-bottom: 1px solid #484848; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + /* 24px - 40px */ + gap: clamp(1.25rem, 4vw, 2.5rem); + } + #footer-1390 .cs-ul { + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + /* 24px - 36px */ + column-gap: clamp(1.5rem, 4vw, 2.25rem); + row-gap: 0.5rem; + } + #footer-1390 .cs-li { + list-style: none; + } + #footer-1390 .cs-link { + /* 14px - 16px */ + font-size: clamp(0.875rem, 1.5vw, 1rem); + line-height: 1.5em; + text-decoration: none; + margin: 0; + color: #bababa; + display: block; + transition: color 0.3s; + } + #footer-1390 .cs-link:hover { + color: var(--primary); + } + #footer-1390 .cs-logo { + width: 100%; + max-width: 13.0625rem; + height: auto; + display: block; + } + #footer-1390 .cs-logo-img { + width: 100%; + height: auto; + display: block; + } + #footer-1390 .cs-bottom { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + } + #footer-1390 .cs-social { + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; + } + #footer-1390 .cs-social-li { + list-style: none; + } + #footer-1390 .cs-social-link { + width: 2rem; + height: 2rem; + background-color: #484848; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + transition: background-color 0.3s; + } + #footer-1390 .cs-social-link:hover { + background-color: var(--primary); + } + #footer-1390 .cs-social-link:hover .cs-social-icon { + opacity: 1; + filter: grayscale(1) brightness(1000%); + } + #footer-1390 .cs-social-icon { + width: 0.75rem; + height: auto; + opacity: 0.6; + display: block; + transition: opacity 0.3s; + } + #footer-1390 .cs-copyright { + font-size: 1rem; + line-height: 1.5em; + margin: 0; + color: #bababa; + display: block; + } + #footer-1390 .cs-copyright-link, + #footer-1390 .cs-separater { + font-size: 1rem; + text-decoration: none; + color: #bababa; + transition: color 0.3s; + } + #footer-1390 .cs-copyright-link:hover, + #footer-1390 .cs-separater:hover { + color: var(--primary); + } + #footer-1390 .cs-separater { + margin: 0 1rem; + display: inline-block; } } - /* Tablet - 768px */ @media only screen and (min-width: 48rem) { - #footer-1390 { - .cs-top { - align-items: flex-start; - } - - .cs-bottom { - flex-direction: row; - justify-content: center; - } - - .cs-flex { - margin: 0 auto; - } - - .cs-social { - /* sends it to the right in the 3rd position */ - order: 3; - } + #footer-1390 .cs-top { + align-items: flex-start; + } + #footer-1390 .cs-bottom { + flex-direction: row; + justify-content: center; + } + #footer-1390 .cs-flex { + margin: 0 auto; + } + #footer-1390 .cs-social { + /* sends it to the right in the 3rd position */ + order: 3; } } - /* Dark Mode */ @media only screen and (min-width: 0rem) { - body.dark-mode { - #footer-1390 { - background-color: rgba(0, 0, 0, 0.6); - } + body.dark-mode #footer-1390 { + background-color: rgba(0, 0, 0, 0.6); } } diff --git a/starter-styles/sass/shop.scss b/starter-styles/sass/shop.scss new file mode 100644 index 0000000..43e58e3 --- /dev/null +++ b/starter-styles/sass/shop.scss @@ -0,0 +1,724 @@ +/*-- -------------------------- --> +<--- Banner --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #banner-1400 { + padding: var(--sectionPadding); + /* 190px - 268px */ + padding-top: calc(270 / 16 * 1rem); + padding-bottom: calc(100 / 16 * 1rem); + position: relative; + z-index: 1; + /* clips the line from causing overflow issues for going off screen */ + overflow: hidden; + + .cs-container { + text-align: center; + width: 100%; + max-width: calc(1280 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + flex-direction: column; + justify-content: center; + align-items: flex-start; + /* 8px - 12px */ + gap: clamp(0.5rem, 1vw, 0.75rem); + } + + .cs-int-title { + /* 39px - 61px */ + font-size: clamp(2.4375rem, 6.4vw, 3.8125rem); + font-weight: 900; + line-height: 1.2em; + text-align: inherit; + margin: 0; + color: var(--bodyTextColorWhite); + position: relative; + } + + .cs-breadcrumbs { + display: flex; + justify-content: center; + align-items: center; + } + + .cs-link { + font-size: calc(16 / 16 * 1rem); + line-height: 1.2em; + text-decoration: none; + color: var(--bodyTextColorWhite); + display: flex; + justify-content: center; + align-items: center; + position: relative; + + &:last-of-type { + /* remove the chevron on the last list item */ + &::after { + display: none; + } + } + + &:after { + /* chevron */ + content: ""; + width: calc(7 / 16 * 1rem); + height: calc(12 / 16 * 1rem); + margin: 0 calc(16 / 16 * 1rem); + background: url("https://csimg.nyc3.cdn.digitaloceanspaces.com/Icons/white-chev.svg"); + background-position: center; + background-size: contain; + background-repeat: no-repeat; + display: block; + position: relative; + } + + &.cs-active { + color: var(--primary); + } + } + + .cs-background { + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + &:before { + /* gradient overlay */ + content: ""; + width: 100%; + height: 100%; + background: #000; + opacity: 0.4; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 1; + } + + &:after { + /* gradient overlay */ + content: ""; + width: 100%; + height: 40%; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + top, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to bottom, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + display: block; + position: absolute; + top: 0; + left: 0; + z-index: 2; + } + + img { + width: 100%; + height: 100%; + /* Makes img tag act as a background image */ + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #banner-1400 { + .cs-background { + &:before { + width: 50%; + height: 100%; + background: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 1)), + to(rgba(0, 0, 0, 0)) + ); + background: -o-linear-gradient( + left, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + background: linear-gradient( + to right, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0) 100% + ); + opacity: 1; + } + } + } +} + +/*-- -------------------------- --> +<--- Side By Side --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-297 { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + /* changes to 1280px at desktop */ + max-width: calc(550 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: center; + width: 100%; + max-width: calc(522 / 16 * 1rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: center; + } + + .cs-text { + margin-bottom: calc(16 / 16 * 1rem); + &:last-of-type { + margin-bottom: calc(32 / 16 * 1rem); + } + } + + .cs-link { + font-size: calc(20 / 16 * 1rem); + font-weight: 700; + text-decoration: none; + color: var(--primary); + } + + .cs-image-group { + width: 100%; + max-width: calc(550 / 16 * 1rem); + /* 78px - 108px */ + margin: 0 auto clamp(4.875rem, 16.5vw, 6.75rem); + display: block; + position: relative; + /* width divided by height */ + aspect-ratio: 328/363; + } + + .cs-picture { + /* big background image */ + width: 100%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-box { + /* 204px - 326px & changes at desktop */ + width: clamp(12.75rem, 50vw, 20.375rem); + height: clamp(12.75rem, 50vw, 20.375rem); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: absolute; + /* 38px - 60px - wrapped in a calc function to make clamp values negative */ + bottom: calc(clamp(2.375rem, 7.9vw, 3.75rem) * -1); + left: 50%; + z-index: 10; + overflow: hidden; + transform: translateX(-50%); + } + + .cs-box-picture { + /* Background image for cs-box */ + width: 100%; + height: 100%; + background-color: #000; + display: block; + position: absolute; + top: 0; + left: 0; + z-index: -1; + /* clips img corners and bg corners */ + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0.65; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-number { + /* 75px - 100px */ + font-size: clamp(4.6875rem, 8vw, 6.25rem); + font-weight: 900; + line-height: 1em; + margin-bottom: calc(8 / 16 * 1rem); + color: var(--headerColor); + display: block; + z-index: 10; + /* creates the transparent clipping text */ + mix-blend-mode: screen; + + &:before { + /* opaque white box - For mix-blend-mode to work, we need the + white box inside the .cs-number, so we use a pseudo element. + We DON'T add a position to the cs-number so the pseudo positions + itself relative to the .cs-box, which has position relative. This + allows us to center to .cs-number pseudo inside the .cs-box */ + content: ""; + /* 184px - 294px & changes at desktop */ + width: clamp(11.5rem, 45vw, 18.375rem); + height: clamp(11.5rem, 45vw, 18.375rem); + background-color: #fff; + opacity: 1; + display: block; + position: absolute; + /* these next 3 properties are an old school way to center an absolutely + positioned element inside a relative position parent */ + top: 50%; + left: 50%; + z-index: -1; + transform: translate(-50%, -50%); + } + } + + .cs-desc { + /* 16px - 25px */ + font-size: clamp(1rem, 4vw, 1.5625rem); + font-weight: 700; + line-height: 1.2em; + text-align: center; + text-transform: lowercase; + width: 80%; + color: var(--headerColor); + position: relative; + z-index: 10; + } + } +} + +/* Desktop - 1024px */ +@media only screen and (min-width: 64rem) { + #sbs-297 { + /* aligns the button */ + text-align: left; + .cs-container { + max-width: calc(1280 / 16 * 1rem); + /* set to horizontal arrangement */ + flex-direction: row; + justify-content: space-between; + gap: calc(160 / 16 * 1rem); + } + + .cs-content { + text-align: left; + align-items: flex-start; + } + + .cs-image-group { + width: 40vw; + max-width: calc(521 / 16 * 1rem); + /* 520px - 672px */ + height: clamp(32.5rem, 51.9vw, 42rem); + margin: 0; + } + + .cs-box { + /* 251px - 325px */ + width: clamp(15.6875rem, 24.5vw, 20.3125rem); + height: clamp(15.6875rem, 24.5vw, 20.3125rem); + /* -52px to -102px */ + right: calc(clamp(3.25rem, 5.5vw + 1.6rem, 6.375rem) * -1); + /* 62px - 80px */ + bottom: clamp(3.875rem, 6.2vw, 5rem); + left: auto; + transform: none; + } + + .cs-number { + &:before { + /* 226px - 293px */ + width: clamp(14.125rem, 22.7vw, 18.3125rem); + height: clamp(14.125rem, 22.7vw, 18.3125rem); + } + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #sbs-297 { + .cs-topper { + color: var(--secondaryLight); + } + + .cs-title, + .cs-text { + color: var(--bodyTextColorWhite); + } + + .cs-link { + color: var(--secondaryLight); + } + + .cs-text { + opacity: 0.8; + } + } + } +} + +/*-- -------------------------- --> +<--- Stats --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #stats-1642 { + padding: var(--sectionPadding); + + .cs-container { + width: 100%; + max-width: calc(1280 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-content { + /* set text align to right if content needs to be right aligned */ + text-align: left; + width: 100%; + display: flex; + flex-direction: column; + /* left aligns content */ + align-items: flex-start; + } + + .cs-title { + max-width: 20ch; + /* 28px - 64px */ + margin: 0 0 clamp(1.75rem, 7vw, 4rem) 0; + } + + .cs-picture { + width: 100%; + height: 95vw; + max-height: calc(400 / 16 * 1rem); + display: block; + position: relative; + z-index: 1; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-quote { + width: calc(74 / 16 * 1rem); + height: auto; + opacity: 0.5; + position: relative; + top: calc(24 / 16 * 1rem); + z-index: -1; + } + + .cs-text { + margin: 0 0 clamp(1.5rem, 3vw, 2rem) 0; + } + + .cs-stats-group { + width: 100%; + display: flex; + flex-direction: column; + /* 28px - 40px */ + } + + .cs-card-group { + width: 100%; + /* 550px - 630px */ + max-width: clamp(34.375rem, 50vw, 39.375rem); + margin: 0; + padding: 0; + display: grid; + align-items: center; + gap: calc(24 / 16 * 1rem); + } + + .cs-item { + list-style: none; + /* prevents padding from affecting height and width */ + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: calc(8 / 16 * 1rem); + } + + .wrapper { + width: 100%; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: calc(10 / 16 * 1rem); + } + + .cs-item-number { + font-size: calc(20 / 16 * 1rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--primary); + display: flex; + justify-content: flex-start; + align-items: center; + gap: calc(8 / 16 * 1rem); + } + + .cs-h3 { + font-size: calc(20 / 16 * 1rem); + font-weight: 700; + line-height: 1.2em; + margin: 0; + color: var(--headerColor); + display: flex; + justify-content: flex-start; + align-items: center; + gap: calc(8 / 16 * 1rem); + } + + .cs-item-text { + font-size: calc(16 / 16 * 1rem); + line-height: 1.5em; + margin: 0; + color: var(--bodyTextColor); + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #stats-1642 { + .cs-container { + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + + .cs-content { + justify-content: stretch; + /* sends it to the right in the 2nd position */ + order: 2; + } + + .cs-picture { + height: 100%; + max-height: 100%; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #stats-1642 { + .cs-title, + .cs-text, + .cs-item-text, + .cs-h3 { + color: var(--bodyTextColorWhite); + } + .cs-text, + .cs-item-text { + opacity: 0.8; + } + } + } +} + +/*-- -------------------------- --> +<--- Side By Side --> +<--- -------------------------- -*/ + +/* Mobile - 360px */ +@media only screen and (min-width: 0rem) { + #sbs-1640 { + padding: var(--sectionPadding); + background-color: #111926; + overflow: hidden; + + .cs-container { + width: 100%; + /* changes to 1280px at tablet */ + max-width: calc(584 / 16 * 1rem); + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + /* 48px - 64px */ + gap: clamp(3rem, 6vw, 4rem); + } + + .cs-content { + /* set text align to left if content needs to be left aligned */ + text-align: left; + width: 100%; + max-width: calc(630 / 16 * 1rem); + display: flex; + flex-direction: column; + /* centers content horizontally, set to flex-start to left align */ + align-items: flex-start; + position: relative; + z-index: 10; + } + + .cs-title { + margin: 0 0 calc(40 / 16 * 1rem) 0; + color: var(--bodyTextColorWhite); + } + + .cs-text { + margin-bottom: calc(16 / 16 * 1rem); + color: var(--bodyTextColorWhite); + opacity: 0.8; + + &:last-of-type { + margin-bottom: calc(32 / 16 * 1rem); + } + } + + .cs-picture { + width: 100%; + height: auto; + min-height: calc(420 / 16 * 1rem); + display: block; + position: relative; + z-index: 1; + + img { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + } + } + + .cs-stats-group { + width: 100%; + max-width: calc(570 / 16 * 1rem); + display: flex; + flex-direction: column; + } + } +} + +/* Tablet - 768px */ +@media only screen and (min-width: 48rem) { + #sbs-1640 { + .cs-container { + max-width: calc(1280 / 16 * 1rem); + flex-direction: row; + justify-content: space-between; + align-items: stretch; + } + + .cs-stats-group { + /* 52px - 90px */ + margin-bottom: clamp(3.25rem, 7vw, 5.625rem); + /* 60px - 120px */ + padding-top: clamp(3.75rem, 10vw, 7.5rem); + /* 60px - 80px */ + padding-bottom: clamp(3.75rem, 8vw, 5rem); + position: relative; + z-index: 1; + + &:before { + content: ""; + width: 200vw; + height: 100%; + background: #fff; + opacity: 1; + display: block; + position: absolute; + top: 100%; + left: -100%; + z-index: -1; + transform: translateX(-50%); + } + } + + .cs-picture { + height: 100%; + } + } +} + +/* Dark Mode */ +@media only screen and (min-width: 0rem) { + body.dark-mode { + #sbs-1640 { + background-color: rgba(0, 0, 0, 0.6); + + .cs-stats-group { + &:before { + background-color: var(--dark); + } + } + } + } +}