diff --git a/gatsby-browser.js b/gatsby-browser.js index c57d5a7..d0d3fdd 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -1,7 +1,7 @@ import wrapPageElementWithLayout from './src/helpers/wrapPageElement' // Global styles -import './src/styles/global.scss' +import './src/styles/global.css' // IntersectionObserver polyfill for gatsby-image (Safari, IE) if (typeof window !== 'undefined' && !window.IntersectionObserver) { diff --git a/gatsby-config.js b/gatsby-config.js index 069e22f..2cad5ed 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -36,12 +36,6 @@ module.exports = { path: path.join(__dirname, 'src', 'images') } }, - { - resolve: 'gatsby-plugin-sass', - options: { - includePaths: [`${__dirname}/node_modules`, `${__dirname}/src/styles`] - } - }, { resolve: 'gatsby-plugin-svgr', options: { diff --git a/package-lock.json b/package-lock.json index bee6571..55f41f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2944,12 +2944,6 @@ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -3038,12 +3032,6 @@ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", @@ -3352,12 +3340,6 @@ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -4101,15 +4083,6 @@ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -8980,29 +8953,6 @@ } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -9594,15 +9544,6 @@ "@babel/runtime": "^7.7.6" } }, - "gatsby-plugin-sass": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sass/-/gatsby-plugin-sass-2.1.29.tgz", - "integrity": "sha512-/t0NioasjZnCm+vICI7LQH3Ge/oc1NVMfTR4v+8LwjQGIUR+Tgd7k0soiVeyVXCNl7zV/oYTVkzPcjxkIYrDxQ==", - "requires": { - "@babel/runtime": "^7.7.6", - "sass-loader": "^7.3.1" - } - }, "gatsby-plugin-sharp": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.5.tgz", @@ -9916,15 +9857,6 @@ } } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -10142,17 +10074,6 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, - "globule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", - "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, "gonzales-pe": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz", @@ -11093,12 +11014,6 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -14520,54 +14435,6 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - } - } - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -14660,87 +14527,6 @@ } } }, - "node-sass": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", - "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.15", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - } - } - }, "noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", @@ -14778,15 +14564,6 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -15200,12 +14977,6 @@ "arch": "^2.1.0" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-locale": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", @@ -15237,16 +15008,6 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -19447,270 +19208,6 @@ } } }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "sass-loader": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", - "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.0.1", - "neo-async": "^2.5.0", - "pify": "^4.0.1", - "semver": "^6.3.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -19753,27 +19250,6 @@ "invariant": "^2.2.4" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "seek-bzip": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", @@ -20797,15 +20273,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", diff --git a/package.json b/package.json index 91a9dd9..ca69332 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "gatsby-plugin-matomo": "^0.8.1", "gatsby-plugin-offline": "^3.0.35", "gatsby-plugin-react-helmet": "^3.1.22", - "gatsby-plugin-sass": "^2.1.29", "gatsby-plugin-sharp": "^2.4.5", "gatsby-plugin-sitemap": "^2.2.27", "gatsby-plugin-svgr": "^2.0.2", @@ -84,7 +83,6 @@ "jest": "^25.1.0", "jest-canvas-mock": "^2.2.0", "js-yaml": "^3.13.1", - "node-sass": "^4.13.1", "ora": "^4.0.3", "prepend": "^1.0.2", "prettier": "^1.19.1", diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx index f28e7f0..37dcc48 100644 --- a/src/components/Layout.jsx +++ b/src/components/Layout.jsx @@ -7,7 +7,7 @@ import Typekit from './atoms/Typekit' import HostnameCheck from './atoms/HostnameCheck' import Header from './organisms/Header' import Footer from './organisms/Footer' -import styles from './Layout.module.scss' +import styles from './Layout.module.css' import { useMeta } from '../hooks/use-meta' // https://github.com/welldone-software/why-did-you-render diff --git a/src/components/Layout.module.css b/src/components/Layout.module.css new file mode 100644 index 0000000..b350cd2 --- /dev/null +++ b/src/components/Layout.module.css @@ -0,0 +1,15 @@ +.screen { + margin-top: calc(var(--spacer) * var(--line-height)); +} + +.screen > article { + display: grid; + grid-template-columns: + [full-start] minmax(var(--spacer), 1fr) + [main-start] minmax(0, 38rem) [main-end] + minmax(var(--spacer), 1fr) [full-end]; +} + +.screen > article > * { + grid-column: main; +} diff --git a/src/components/Layout.module.scss b/src/components/Layout.module.scss deleted file mode 100644 index 76aa6c0..0000000 --- a/src/components/Layout.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import 'variables'; - -.screen { - margin-top: $spacer * $line-height; - - > article { - display: grid; - grid-template-columns: - [full-start] minmax($spacer, 1fr) - [main-start] minmax(0, 38rem) [main-end] - minmax($spacer, 1fr) [full-end]; - - > * { - grid-column: main; - } - } -} diff --git a/src/components/atoms/Button.jsx b/src/components/atoms/Button.jsx index 1f0f1ea..4272412 100644 --- a/src/components/atoms/Button.jsx +++ b/src/components/atoms/Button.jsx @@ -1,6 +1,6 @@ import React from 'react' import PropTypes from 'prop-types' -import styles from './Button.module.scss' +import styles from './Button.module.css' const Button = props => ( diff --git a/src/components/atoms/Button.module.css b/src/components/atoms/Button.module.css new file mode 100644 index 0000000..57be23c --- /dev/null +++ b/src/components/atoms/Button.module.css @@ -0,0 +1,42 @@ +.button { + display: block; + width: 100%; + color: var(--brand-cyan); + text-align: center; + border-radius: var(--border-radius); + padding: calc(var(--spacer) / 4) calc(var(--spacer) / 2); + transition-property: all; + background: var(--box-background-color); + border: 0.05rem solid var(--brand-cyan); + font-size: var(--font-size-small); + text-transform: uppercase; + cursor: pointer; +} + +@media (min-width: 30rem) { + .button { + display: inline-block; + width: auto; + } +} + +.button svg { + margin-right: calc(var(--spacer) / 4); + transition: 0.2s var(--easing); + margin-bottom: -0.1rem; + width: var(--font-size-small); + height: var(--font-size-small); +} + +.button:hover, +.button:focus { + color: #5ebeb1; + border-color: #5ebeb1; + transform: translate3d(0, -0.1rem, 0); + box-shadow: var(--box-shadow); +} + +.button:active { + transition: none; + background: var(--box-background-color); +} diff --git a/src/components/atoms/Button.module.scss b/src/components/atoms/Button.module.scss deleted file mode 100644 index af60cc0..0000000 --- a/src/components/atoms/Button.module.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import 'variables'; - -.button { - display: block; - width: 100%; - color: $brand-cyan; - text-align: center; - border-radius: $border-radius; - padding: $spacer / 4 $spacer / 2; - transition-property: all; - background: rgba(#fff, 0.15); - border: 0.05rem solid rgba($brand-cyan, 0.75); - font-size: $font-size-small; - text-transform: uppercase; - cursor: pointer; - - @media (min-width: 30rem) { - display: inline-block; - width: auto; - } - - svg { - margin-right: $spacer / 4; - transition: 0.2s $easing; - margin-bottom: -0.1rem; - width: $font-size-small; - height: $font-size-small; - } - - &:hover, - &:focus { - color: lighten($brand-cyan, 10%); - border-color: rgba(lighten($brand-cyan, 10%), 0.75); - transform: translate3d(0, -0.1rem, 0); - box-shadow: 0 6px 10px rgba($brand-main, 0.1), - 0 10px 25px rgba($brand-main, 0.05); - } - - &:active { - transition: none; - background: rgba(#fff, 0.15); - } - - :global(.dark) & { - background: darken($body-background-color--dark, 1%); - - &:hover, - &:focus { - box-shadow: 0 6px 10px rgba(darken($brand-main, 20%), 0.1), - 0 10px 25px rgba(darken($brand-main, 20%), 0.2); - } - } -} diff --git a/src/components/atoms/FullWidth.jsx b/src/components/atoms/FullWidth.jsx index a6ffe4c..d6aa12c 100644 --- a/src/components/atoms/FullWidth.jsx +++ b/src/components/atoms/FullWidth.jsx @@ -1,6 +1,6 @@ import React from 'react' import PropTypes from 'prop-types' -import styles from './FullWidth.module.scss' +import styles from './FullWidth.module.css' const FullWidth = ({ children }) => (
{children}
diff --git a/src/components/atoms/FullWidth.module.scss b/src/components/atoms/FullWidth.module.css similarity index 69% rename from src/components/atoms/FullWidth.module.scss rename to src/components/atoms/FullWidth.module.css index 5756399..b54f6a8 100644 --- a/src/components/atoms/FullWidth.module.scss +++ b/src/components/atoms/FullWidth.module.css @@ -1,5 +1,3 @@ -@import 'variables'; - .fullWidth { grid-column: full !important; } diff --git a/src/components/atoms/HostnameCheck.jsx b/src/components/atoms/HostnameCheck.jsx index 53ec546..2656ee7 100644 --- a/src/components/atoms/HostnameCheck.jsx +++ b/src/components/atoms/HostnameCheck.jsx @@ -1,7 +1,7 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' import Helmet from 'react-helmet' -import styles from './HostnameCheck.module.scss' +import styles from './HostnameCheck.module.css' export default class HostnameCheck extends PureComponent { static propTypes = { diff --git a/src/components/atoms/HostnameCheck.module.css b/src/components/atoms/HostnameCheck.module.css new file mode 100644 index 0000000..3142e6c --- /dev/null +++ b/src/components/atoms/HostnameCheck.module.css @@ -0,0 +1,16 @@ +.hostnameInfo { + position: sticky; + top: 0; + z-index: 99; + padding: calc(var(--spacer) / 3); + font-size: var(--font-size-small); + font-weight: bold; + background: var(--brand-light); +} + +.hostnameInfo p { + margin: auto; + margin-bottom: 0; + max-width: 70em; + text-align: center; +} diff --git a/src/components/atoms/HostnameCheck.module.scss b/src/components/atoms/HostnameCheck.module.scss deleted file mode 100644 index 94557d4..0000000 --- a/src/components/atoms/HostnameCheck.module.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import 'variables'; - -.hostnameInfo { - position: sticky; - top: 0; - z-index: 99; - padding: $spacer / 3; - font-size: $font-size-small; - font-weight: bold; - background: rgba($brand-light, 0.8); - - :global(.dark) & { - background: rgba($body-background-color--dark, 0.8); - } - - p { - margin: auto; - margin-bottom: 0; - max-width: $screen-lg; - text-align: center; - } -} diff --git a/src/components/atoms/Icon.jsx b/src/components/atoms/Icon.jsx index e61eedb..d178c45 100644 --- a/src/components/atoms/Icon.jsx +++ b/src/components/atoms/Icon.jsx @@ -25,7 +25,7 @@ import { Info } from 'react-feather' import { ReactComponent as Dribbble } from '../../images/dribbble.svg' -import styles from './Icon.module.scss' +import styles from './Icon.module.css' const Icon = memo(({ name, ...props }) => { const components = { diff --git a/src/components/atoms/Icon.module.scss b/src/components/atoms/Icon.module.css similarity index 67% rename from src/components/atoms/Icon.module.scss rename to src/components/atoms/Icon.module.css index 0a3b81c..a9bdcc1 100644 --- a/src/components/atoms/Icon.module.scss +++ b/src/components/atoms/Icon.module.css @@ -1,8 +1,6 @@ -@import 'variables'; - .icon { - width: $font-size-base; - height: $font-size-base; + width: var(--font-size-base); + height: var(--font-size-base); stroke: currentColor; stroke-width: 0.1rem; stroke-linecap: round; diff --git a/src/components/atoms/ProjectImage.jsx b/src/components/atoms/ProjectImage.jsx index 50ee341..dc85774 100644 --- a/src/components/atoms/ProjectImage.jsx +++ b/src/components/atoms/ProjectImage.jsx @@ -2,7 +2,7 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' import { graphql } from 'gatsby' import Img from 'gatsby-image' -import styles from './ProjectImage.module.scss' +import styles from './ProjectImage.module.css' export default class ProjectImage extends PureComponent { static propTypes = { diff --git a/src/components/atoms/ProjectImage.module.css b/src/components/atoms/ProjectImage.module.css new file mode 100644 index 0000000..ae521b4 --- /dev/null +++ b/src/components/atoms/ProjectImage.module.css @@ -0,0 +1,18 @@ +.projectImage { + margin-left: auto; + margin-right: auto; + display: block; + border-radius: var(--border-radius); + overflow: hidden; + box-shadow: var(--box-shadow); +} + +@media (min-width: 1200px) { + .projectImage { + max-width: var(--projectImageMaxWidth); + } +} + +.projectImage img { + display: block; +} diff --git a/src/components/atoms/ProjectImage.module.scss b/src/components/atoms/ProjectImage.module.scss deleted file mode 100644 index f0a1fc1..0000000 --- a/src/components/atoms/ProjectImage.module.scss +++ /dev/null @@ -1,24 +0,0 @@ -@import 'variables'; - -.projectImage { - margin-left: auto; - margin-right: auto; - display: block; - border-radius: $border-radius; - overflow: hidden; - box-shadow: 0 3px 5px rgba($brand-main, 0.15), - 0 5px 16px rgba($brand-main, 0.15); - - @media (min-width: $projectImageMaxWidth) { - max-width: $projectImageMaxWidth; - } - - :global(.dark) & { - box-shadow: 0 3px 5px rgba(darken($brand-main, 20%), 0.15), - 0 5px 16px rgba(darken($brand-main, 20%), 0.15); - } - - img { - display: block; - } -} diff --git a/src/components/molecules/Availability.jsx b/src/components/molecules/Availability.jsx index a7671c5..308a247 100644 --- a/src/components/molecules/Availability.jsx +++ b/src/components/molecules/Availability.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import posed from 'react-pose' import { fadeIn } from '../atoms/Transitions' import { useMeta } from '../../hooks/use-meta' -import styles from './Availability.module.scss' +import styles from './Availability.module.css' const Animation = posed.aside(fadeIn) diff --git a/src/components/molecules/Availability.module.css b/src/components/molecules/Availability.module.css new file mode 100644 index 0000000..e768e2d --- /dev/null +++ b/src/components/molecules/Availability.module.css @@ -0,0 +1,21 @@ +.availability { + border-radius: var(--border-radius); + color: var(--text-color-light); + z-index: 2; + padding: calc(var(--spacer) / 2); + display: block; + margin-top: auto; +} + +.availability p { + margin-bottom: 0; +} + +.available { + background: var(--body-background-color); + color: var(--brand-main); + position: fixed; + bottom: var(--spacer); + left: 50%; + transform: translateX(-50%); +} diff --git a/src/components/molecules/Availability.module.scss b/src/components/molecules/Availability.module.scss deleted file mode 100644 index b2148c3..0000000 --- a/src/components/molecules/Availability.module.scss +++ /dev/null @@ -1,36 +0,0 @@ -@import 'variables'; - -.availability { - border-radius: $border-radius; - color: $text-color-light; - z-index: 2; - padding: $spacer / 2; - display: block; - margin-top: auto; - - :global(.dark) & { - color: $text-color-light--dark; - } - - p { - margin-bottom: 0; - } - - a { - border-bottom: 1px solid rgba($brand-cyan, 0.4); - } -} - -.available { - background: rgba($brand-light, 0.8); - color: $brand-main; - position: fixed; - bottom: $spacer; - left: 50%; - transform: translateX(-50%); - - :global(.dark) & { - background: rgba($body-background-color--dark, 0.8); - color: $brand-light; - } -} diff --git a/src/components/molecules/LogoUnit.jsx b/src/components/molecules/LogoUnit.jsx index ba50b2a..ca29941 100644 --- a/src/components/molecules/LogoUnit.jsx +++ b/src/components/molecules/LogoUnit.jsx @@ -4,7 +4,7 @@ import { Link } from 'gatsby' import posed from 'react-pose' import { moveInBottom } from '../atoms/Transitions' import { ReactComponent as Logo } from '../../images/logo.svg' -import styles from './LogoUnit.module.scss' +import styles from './LogoUnit.module.css' import { useResume } from '../../hooks/use-resume' LogoUnit.propTypes = { diff --git a/src/components/molecules/LogoUnit.module.css b/src/components/molecules/LogoUnit.module.css new file mode 100644 index 0000000..89d6505 --- /dev/null +++ b/src/components/molecules/LogoUnit.module.css @@ -0,0 +1,68 @@ +.logounit { + pointer-events: none; + display: block; + width: 100%; +} + +.logo { + display: block; + width: 1.5rem; + height: 1.5rem; + fill: var(--text-color-light); + margin-bottom: calc(var(--spacer) / 2); + margin-left: auto; + margin-right: auto; +} + +.title, +.description { + display: inline-block; + margin-bottom: 0; +} + +.title { + font-size: var(--font-size-h3); + margin-right: calc(var(--spacer) / 4); + line-height: var(--line-height); +} + +.description { + font-size: var(--font-size-h4); + color: var(--text-color); +} + +.description::before, +.description::after { + opacity: 0.4; +} + +.description::before { + content: '{ '; +} + +.description::after { + content: ' }'; +} + +.minimal { + composes: logounit; + pointer-events: all; +} + +.minimal, +.minimal:hover, +.minimal:focus { + transform: scale(0.7); + transform-origin: top center; + transform-box: border-box; +} + +.minimal .title, +.minimal .description { + color: var(--text-color-light); +} + +.minimal .logo { + margin-bottom: calc(var(--spacer) / 3); + opacity: 0.5; +} diff --git a/src/components/molecules/LogoUnit.module.scss b/src/components/molecules/LogoUnit.module.scss deleted file mode 100644 index 5d80fdf..0000000 --- a/src/components/molecules/LogoUnit.module.scss +++ /dev/null @@ -1,75 +0,0 @@ -@import 'variables'; - -.logounit { - pointer-events: none; - display: block; - width: 100%; -} - -.logo { - display: block; - width: 1.5rem; - height: 1.5rem; - fill: $brand-grey-light; - margin-bottom: $spacer / 2; - margin-left: auto; - margin-right: auto; -} - -.title, -.description { - display: inline-block; - margin-bottom: 0; -} - -.title { - font-size: $font-size-h3; - margin-right: $spacer / 4; - color: $brand-main; - line-height: $line-height; -} - -.description { - font-size: $font-size-h4; - color: $brand-grey-light; - - &::before, - &::after { - opacity: 0.4; - } - - &::before { - content: '{ '; - } - - &::after { - content: ' }'; - } -} - -.minimal { - composes: logounit; - pointer-events: all; - - &, - &:hover, - &:focus { - transform: scale(0.7); - transform-origin: top center; - transform-box: border-box; - } - - .title, - .description { - color: $text-color-light; - - :global(.dark) & { - color: $text-color-light--dark; - } - } - - .logo { - margin-bottom: $spacer / 3; - opacity: 0.5; - } -} diff --git a/src/components/molecules/Networks.jsx b/src/components/molecules/Networks.jsx index 8a5946d..f2c0cdf 100644 --- a/src/components/molecules/Networks.jsx +++ b/src/components/molecules/Networks.jsx @@ -4,7 +4,7 @@ import posed from 'react-pose' import { moveInTop } from '../atoms/Transitions' import Icon from '../atoms/Icon' import { useResume } from '../../hooks/use-resume' -import styles from './Networks.module.scss' +import styles from './Networks.module.css' const linkClasses = key => key === 'Mail' ? `u-email ${styles.link}` : `u-url ${styles.link}` diff --git a/src/components/molecules/Networks.module.css b/src/components/molecules/Networks.module.css new file mode 100644 index 0000000..2a7b0f8 --- /dev/null +++ b/src/components/molecules/Networks.module.css @@ -0,0 +1,68 @@ +.networks { + margin-top: calc(var(--spacer) * var(--line-height)); + margin-left: auto; + margin-right: auto; + width: 100%; + text-align: center; + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.title { + display: block; + font-size: var(--font-size-mini); + color: var(--brand-grey-light); + opacity: 0; + transform: translate3d(0, 0.5rem, 0); + transition: 0.2s var(--easing); +} + +.link { + margin-left: calc(var(--spacer) / var(--line-height)); + margin-right: calc(var(--spacer) / var(--line-height)); + margin-bottom: calc(var(--spacer) / 2); + text-align: center; + display: inline-block; + flex: 0 1; + min-width: 2.5rem; +} + +.link, +.link svg { + transition: 0.2s var(--easing); +} + +.link svg { + stroke: var(--brand-grey-light); + width: 24px; + height: 24px; +} + +.link:hover svg, +.link:focus svg { + stroke: var(--brand-cyan); +} + +.link:hover .title, +.link:focus .title { + opacity: 1; + transform: translate3d(0, 0, 0); +} + +.small { + composes: networks; +} + +.small .link { + padding: calc(var(--spacer) / 4); + margin-left: calc(var(--spacer) / 7); + margin-right: calc(var(--spacer) / 7); + margin-bottom: calc(var(--spacer) / 4); +} + +.small svg { + width: var(--font-size-base); + height: var(--font-size-base); + opacity: 0.8; +} diff --git a/src/components/molecules/Networks.module.scss b/src/components/molecules/Networks.module.scss deleted file mode 100644 index 1a679be..0000000 --- a/src/components/molecules/Networks.module.scss +++ /dev/null @@ -1,71 +0,0 @@ -@import 'variables'; - -.networks { - margin-top: $spacer * $line-height; - margin-left: auto; - margin-right: auto; - width: 100%; - text-align: center; - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -.title { - display: block; - font-size: $font-size-mini; - color: $brand-grey-light; - opacity: 0; - transform: translate3d(0, 0.5rem, 0); - transition: 0.2s $easing; -} - -.link { - margin-left: $spacer / $line-height; - margin-right: $spacer / $line-height; - margin-bottom: $spacer / 2; - text-align: center; - display: inline-block; - flex: 0 1; - min-width: 2.5rem; - - &, - svg { - transition: 0.2s $easing; - } - - svg { - stroke: $brand-grey-light; - width: 24px; - height: 24px; - } - - &:hover, - &:focus { - svg { - stroke: $brand-cyan; - } - - .title { - opacity: 1; - transform: translate3d(0, 0, 0); - } - } -} - -.small { - composes: networks; - - .link { - padding: $spacer / 4; - margin-left: $spacer / 7; - margin-right: $spacer / 7; - margin-bottom: $spacer / 4; - } - - svg { - width: $font-size-base; - height: $font-size-base; - opacity: 0.8; - } -} diff --git a/src/components/molecules/ProjectLinks.jsx b/src/components/molecules/ProjectLinks.jsx index 362a39d..cf76c58 100644 --- a/src/components/molecules/ProjectLinks.jsx +++ b/src/components/molecules/ProjectLinks.jsx @@ -2,7 +2,7 @@ import React from 'react' import PropTypes from 'prop-types' import Button from '../atoms/Button' import Icon from '../atoms/Icon' -import styles from './ProjectLinks.module.scss' +import styles from './ProjectLinks.module.css' ProjectLinks.propTypes = { links: PropTypes.array diff --git a/src/components/molecules/ProjectLinks.module.css b/src/components/molecules/ProjectLinks.module.css new file mode 100644 index 0000000..16faaa6 --- /dev/null +++ b/src/components/molecules/ProjectLinks.module.css @@ -0,0 +1,27 @@ +.projectLinks ul { + padding: 0; +} + +.projectLinks li { + display: flex; + align-items: center; + white-space: nowrap; + margin-bottom: calc(var(--spacer) / 2.1); +} + +.projectLinks a { + display: block; + width: 100%; + text-transform: none; + text-align: left; +} + +.projectLinks svg { + stroke: var(--text-color-light); + width: var(--font-size-small); + height: var(--font-size-small); +} + +.title { + composes: metatitle from '../templates/Project.module.css'; +} diff --git a/src/components/molecules/ProjectLinks.module.scss b/src/components/molecules/ProjectLinks.module.scss deleted file mode 100644 index 6880f23..0000000 --- a/src/components/molecules/ProjectLinks.module.scss +++ /dev/null @@ -1,31 +0,0 @@ -@import 'variables'; - -.projectLinks { - ul { - padding: 0; - } - - li { - display: flex; - align-items: center; - white-space: nowrap; - margin-bottom: $spacer / 2.1; - } - - a { - display: block; - width: 100%; - text-transform: none; - text-align: left; - } - - svg { - stroke: $brand-grey-light; - width: $font-size-small; - height: $font-size-small; - } -} - -.title { - composes: metatitle from '../templates/Project.module.scss'; -} diff --git a/src/components/molecules/ProjectNav.jsx b/src/components/molecules/ProjectNav.jsx index 69d9a24..5a1fde0 100644 --- a/src/components/molecules/ProjectNav.jsx +++ b/src/components/molecules/ProjectNav.jsx @@ -1,9 +1,9 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' import { Link, graphql, StaticQuery } from 'gatsby' -import Img from 'gatsby-image' import shortid from 'shortid' -import styles from './ProjectNav.module.scss' +import ProjectImage from '../atoms/ProjectImage' +import styles from './ProjectNav.module.css' const query = graphql` query { @@ -28,7 +28,7 @@ const query = graphql` const Project = ({ node, refCurrentItem }) => (
- {node.title} (
diff --git a/src/components/molecules/ProjectTechstack.module.css b/src/components/molecules/ProjectTechstack.module.css new file mode 100644 index 0000000..b43f68d --- /dev/null +++ b/src/components/molecules/ProjectTechstack.module.css @@ -0,0 +1,23 @@ +.projectTechstack ul { + padding: 0; + display: grid; + grid-template-columns: 1fr 1fr; + gap: calc(var(--spacer) / 2); +} + +.projectTechstack li { + display: flex; + align-items: center; + justify-content: center; + padding: calc(var(--spacer) / 4); + text-align: center; + background: var(--box-background-color); + border-radius: var(--border-radius); + border: 0.05rem solid transparent; + color: var(--text-color-light); + font-size: var(--font-size-small); +} + +.title { + composes: metatitle from '../templates/Project.module.css'; +} diff --git a/src/components/molecules/ProjectTechstack.module.scss b/src/components/molecules/ProjectTechstack.module.scss deleted file mode 100644 index 99f6890..0000000 --- a/src/components/molecules/ProjectTechstack.module.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import 'variables'; - -.projectTechstack { - ul { - padding: 0; - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: $spacer / 2; - } - - li { - display: flex; - align-items: center; - justify-content: center; - padding: $spacer / 4; - text-align: center; - background: rgba(#fff, 0.15); - border-radius: $border-radius; - border: 0.05rem solid transparent; - color: $brand-grey-light; - font-size: $font-size-small; - - :global(.dark) & { - background: darken($body-background-color--dark, 1%); - color: $text-color--dark; - } - } -} - -.title { - composes: metatitle from '../templates/Project.module.scss'; -} diff --git a/src/components/molecules/Repository.jsx b/src/components/molecules/Repository.jsx index 03d6d87..907f276 100644 --- a/src/components/molecules/Repository.jsx +++ b/src/components/molecules/Repository.jsx @@ -1,7 +1,7 @@ import React from 'react' import PropTypes from 'prop-types' import Icon from '../atoms/Icon' -import styles from './Repository.module.scss' +import styles from './Repository.module.css' export default function Repository({ repo }) { const { diff --git a/src/components/molecules/Repository.module.css b/src/components/molecules/Repository.module.css new file mode 100644 index 0000000..f23c504 --- /dev/null +++ b/src/components/molecules/Repository.module.css @@ -0,0 +1,51 @@ +.repo { + padding: var(--spacer); + border-radius: var(--border-radius); + background: var(--box-background-color); + display: flex; + flex-wrap: wrap; + align-items: flex-start; + box-shadow: var(--box-shadow); +} + +.repo > * { + width: 100%; +} + +.repo p { + font-size: var(--font-size-small); +} + +.repo p:last-child { + margin: 0; +} + +.repoTitle { + font-size: var(--font-size-h4); + margin-bottom: calc(var(--spacer) / 2); +} + +.meta { + font-size: var(--font-size-small); + align-self: flex-end; + display: flex; + justify-content: space-between; +} + +.meta a { + display: inline-block; + color: var(--text-color-light); + font-variant-numeric: lining-nums; +} + +.meta a:hover, +.meta a:focus { + color: var(--brand-cyan); +} + +.meta svg { + width: var(--font-size-small); + height: var(--font-size-small); + margin-right: calc(var(--spacer) / 12); + margin-bottom: -0.1rem; +} diff --git a/src/components/molecules/Repository.module.scss b/src/components/molecules/Repository.module.scss deleted file mode 100644 index 3a1d170..0000000 --- a/src/components/molecules/Repository.module.scss +++ /dev/null @@ -1,60 +0,0 @@ -@import 'variables'; - -.repo { - padding: $spacer; - border-radius: $border-radius; - background: rgba(#fff, 0.15); - box-shadow: 0 3px 5px rgba($brand-main, 0.1), - 0 5px 16px rgba($brand-main, 0.1); - display: flex; - flex-wrap: wrap; - align-items: flex-start; - - :global(.dark) & { - background: darken($body-background-color--dark, 1%); - box-shadow: 0 3px 5px rgba(darken($brand-main, 20%), 0.1), - 0 5px 16px rgba(darken($brand-main, 20%), 0.1); - } - - > * { - width: 100%; - } - - p { - font-size: $font-size-small; - } - - p:last-child { - margin: 0; - } -} - -.repoTitle { - font-size: $font-size-h4; - margin-bottom: $spacer / 2; -} - -.meta { - font-size: $font-size-small; - align-self: flex-end; - display: flex; - justify-content: space-between; - - a { - display: inline-block; - color: $brand-grey-light; - font-variant-numeric: lining-nums; - - &:hover, - &:focus { - color: $brand-cyan; - } - } - - svg { - width: $font-size-small; - height: $font-size-small; - margin-right: $spacer / 12; - margin-bottom: -($spacer / 12); - } -} diff --git a/src/components/molecules/ThemeSwitch.jsx b/src/components/molecules/ThemeSwitch.jsx index ccb65df..38416dd 100644 --- a/src/components/molecules/ThemeSwitch.jsx +++ b/src/components/molecules/ThemeSwitch.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import Helmet from 'react-helmet' import useDarkMode from 'use-dark-mode' import Icon from '../atoms/Icon' -import styles from './ThemeSwitch.module.scss' +import styles from './ThemeSwitch.module.css' const ThemeToggle = memo(({ dark }) => ( @@ -49,7 +49,7 @@ const HeadItems = ({ bodyClass, themeColor }) => ( ) HeadItems.propTypes = { - bodyClass: PropTypes.string.isRequired, + bodyClass: PropTypes.string, themeColor: PropTypes.string.isRequired } diff --git a/src/components/molecules/ThemeSwitch.module.css b/src/components/molecules/ThemeSwitch.module.css new file mode 100644 index 0000000..2cf1142 --- /dev/null +++ b/src/components/molecules/ThemeSwitch.module.css @@ -0,0 +1,77 @@ +.themeSwitch { + position: absolute; + top: calc(var(--spacer) / 2); + right: var(--spacer); + z-index: 10; +} + +.themeSwitch svg { + stroke: var(--brand-grey-light); + width: var(--font-size-base); + height: var(--font-size-base); + margin-top: -0.05rem; +} + +.themeSwitch svg:last-child { + width: calc(var(--font-size-base) * 0.9); + height: calc(var(--font-size-base) * 0.9); +} + +@media print { + .themeSwitch { + display: none; + } +} + +.checkboxContainer { + display: flex; + align-items: center; +} + +.checkboxFake { + --knob-size: 7px; + --knob-space: 1px; + + display: block; + position: relative; + width: calc((var(--knob-size) + var(--knob-space) * 2) * 2); + height: calc(var(--knob-size) + var(--knob-space) * 4); + border: 1px solid var(--brand-grey-light); + border-radius: 15rem; + margin-left: calc(var(--spacer) / 3); + margin-right: calc(var(--spacer) / 3); +} + +.checkboxFake::after { + content: ''; + position: absolute; + top: var(--knob-space); + left: var(--knob-space); + width: var(--knob-size); + height: var(--knob-size); + background-color: var(--brand-grey-light); + border-radius: 15rem; + transition: transform 0.2s var(--easing); + transform: translate3d(0, 0, 0); +} + +.checkbox { + position: relative; + cursor: pointer; +} + +.checkbox [type='checkbox'], +.checkbox .label { + width: 1px; + height: 1px; + border: 0; + clip: rect(0 0 0 0); + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; +} + +.checkbox [type='checkbox']:checked + .checkboxContainer .checkboxFake::after { + transform: translate3d(100%, 0, 0); +} diff --git a/src/components/molecules/ThemeSwitch.module.scss b/src/components/molecules/ThemeSwitch.module.scss deleted file mode 100644 index 88db239..0000000 --- a/src/components/molecules/ThemeSwitch.module.scss +++ /dev/null @@ -1,85 +0,0 @@ -@import 'variables'; - -.themeSwitch { - position: absolute; - top: $spacer / 2; - right: $spacer; - z-index: 10; - - svg { - stroke: $brand-grey-light; - width: $font-size-base; - height: $font-size-base; - margin-top: -0.05rem; - - &:last-child { - width: $font-size-base * 0.9; - height: $font-size-base * 0.9; - } - } - - @media print { - display: none; - } -} - -.checkboxContainer { - display: flex; - align-items: center; -} - -$knob-size: 7px; -$knob-space: 1px; - -.checkboxFake { - display: block; - position: relative; - width: ($knob-size + ($knob-space * 2)) * 2; - height: $knob-size + ($knob-space * 4); - border: 1px solid $brand-grey-light; - border-radius: 15rem; - margin-left: $spacer / 3; - margin-right: $spacer / 3; - - &::after { - content: ''; - position: absolute; - top: $knob-space; - left: $knob-space; - width: $knob-size; - height: $knob-size; - background-color: $brand-grey-light; - border-radius: 15rem; - transition: transform 0.2s $easing; - transform: translate3d(0, 0, 0); - } -} - -.checkbox { - position: relative; - cursor: pointer; - - [type='checkbox'], - .label { - width: 1px; - height: 1px; - border: 0; - clip: rect(0 0 0 0); - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - } - - [type='checkbox'] { - &:checked { - + .checkboxContainer { - .checkboxFake { - &::after { - transform: translate3d(100%, 0, 0); - } - } - } - } - } -} diff --git a/src/components/organisms/Footer.jsx b/src/components/organisms/Footer.jsx index 23ca5de..00db1ac 100644 --- a/src/components/organisms/Footer.jsx +++ b/src/components/organisms/Footer.jsx @@ -4,7 +4,7 @@ import { graphql, useStaticQuery } from 'gatsby' import loadable from '@loadable/component' import LogoUnit from '../molecules/LogoUnit' import Networks from '../molecules/Networks' -import styles from './Footer.module.scss' +import styles from './Footer.module.css' import { useMeta } from '../../hooks/use-meta' const LazyVcard = loadable(() => import('../atoms/Vcard')) diff --git a/src/components/organisms/Footer.module.css b/src/components/organisms/Footer.module.css new file mode 100644 index 0000000..2e81827 --- /dev/null +++ b/src/components/organisms/Footer.module.css @@ -0,0 +1,30 @@ +.footer { + padding: var(--spacer); + padding-top: calc(var(--spacer) * 4); + text-align: center; + color: var(--text-color-light); +} + +.footer, +.footer small { + font-size: var(--font-size-mini); +} + +.footer > aside { + margin-top: 0; + margin-bottom: calc(var(--spacer) * 2); +} + +.actions a { + display: inline-block; + padding: 0 calc(var(--spacer) / 4); + font-size: var(--font-size-small); + margin-left: calc(var(--spacer) / 2); + margin-right: calc(var(--spacer) / 2); + margin-bottom: calc(var(--spacer) / 2); + color: var(--text-color-light); +} + +.copyright a { + color: inherit; +} diff --git a/src/components/organisms/Footer.module.scss b/src/components/organisms/Footer.module.scss deleted file mode 100644 index c405643..0000000 --- a/src/components/organisms/Footer.module.scss +++ /dev/null @@ -1,44 +0,0 @@ -@import 'variables'; - -.footer { - padding: $spacer; - padding-top: $spacer * 4; - text-align: center; - color: $text-color-light; - - &, - small { - font-size: $font-size-mini; - } - - > aside { - margin-top: 0; - margin-bottom: $spacer * 2; - } - - :global(.dark) & { - color: $text-color-light--dark; - } -} - -.actions { - a { - display: inline-block; - padding: 0 $spacer / 4; - font-size: $font-size-small; - margin-left: $spacer / 2; - margin-right: $spacer / 2; - margin-bottom: $spacer / 2; - color: $text-color-light; - - :global(.dark) & { - color: $text-color-light--dark; - } - } -} - -.copyright { - a { - color: inherit; - } -} diff --git a/src/components/organisms/Header.jsx b/src/components/organisms/Header.jsx index 06cace0..604f7fb 100644 --- a/src/components/organisms/Header.jsx +++ b/src/components/organisms/Header.jsx @@ -4,7 +4,7 @@ import Networks from '../molecules/Networks' import Availability from '../molecules/Availability' import ThemeSwitch from '../molecules/ThemeSwitch' import LogoUnit from '../molecules/LogoUnit' -import styles from './Header.module.scss' +import styles from './Header.module.css' import { useMeta } from '../../hooks/use-meta' Header.propTypes = { diff --git a/src/components/organisms/Header.module.scss b/src/components/organisms/Header.module.css similarity index 69% rename from src/components/organisms/Header.module.scss rename to src/components/organisms/Header.module.css index 795bc11..d4a9164 100644 --- a/src/components/organisms/Header.module.scss +++ b/src/components/organisms/Header.module.css @@ -1,10 +1,8 @@ -@import 'variables'; - .header { position: relative; - padding: $spacer; + padding: var(--spacer); padding-top: 30vh; - min-height: calc(100vh - #{$spacer}); + min-height: calc(100vh - var(--spacer)); max-height: 1000px; text-align: center; display: flex; @@ -15,6 +13,6 @@ .minimal { composes: header; min-height: 0; - padding-top: $spacer * 2; + padding-top: calc(var(--spacer) * 2); padding-bottom: 0; } diff --git a/src/components/organisms/Repositories.jsx b/src/components/organisms/Repositories.jsx index e41d5ef..fc22299 100644 --- a/src/components/organisms/Repositories.jsx +++ b/src/components/organisms/Repositories.jsx @@ -2,7 +2,7 @@ import React, { memo } from 'react' import PropTypes from 'prop-types' import Repository from '../molecules/Repository' -import styles from './Repositories.module.scss' +import styles from './Repositories.module.css' Repositories.propTypes = { repos: PropTypes.array diff --git a/src/components/organisms/Repositories.module.css b/src/components/organisms/Repositories.module.css new file mode 100644 index 0000000..791e030 --- /dev/null +++ b/src/components/organisms/Repositories.module.css @@ -0,0 +1,25 @@ +.section { + margin: calc(var(--spacer) * 3) auto 0 auto; + padding-left: var(--spacer); + padding-right: var(--spacer); +} + +.sectionTitle { + font-size: var(--font-size-h3); + margin-bottom: calc(var(--spacer) * 2); + text-align: center; +} + +.repos { + display: grid; + grid-template-columns: 1fr; + gap: calc(var(--spacer) * 3); + margin: 0 auto; + max-width: calc(var(--projectImageMaxWidth) + var(--spacer) * 2); +} + +@media (min-width: 15rem) { + .repos { + grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr)); + } +} diff --git a/src/components/organisms/Repositories.module.scss b/src/components/organisms/Repositories.module.scss deleted file mode 100644 index e733182..0000000 --- a/src/components/organisms/Repositories.module.scss +++ /dev/null @@ -1,29 +0,0 @@ -@import 'variables'; - -.section { - max-width: calc(#{$projectImageMaxWidth} - #{$spacer * 2}); - margin: $spacer * 3 auto 0 auto; - padding-left: $spacer; - padding-right: $spacer; -} - -.sectionTitle { - font-size: $font-size-h3; - margin-bottom: $spacer * 2; - text-align: center; -} - -.repos { - display: grid; - grid-template-columns: 1fr; - grid-gap: $spacer * 2; - - @media (min-width: $screen-sm) { - grid-template-columns: 1fr 1fr; - grid-gap: $spacer * 2; - } - - @media (min-width: $screen-md) { - grid-gap: $spacer * 3; - } -} diff --git a/src/components/templates/Project.jsx b/src/components/templates/Project.jsx index f653054..fd500a5 100644 --- a/src/components/templates/Project.jsx +++ b/src/components/templates/Project.jsx @@ -7,7 +7,7 @@ import ProjectTechstack from '../molecules/ProjectTechstack' import ProjectLinks from '../molecules/ProjectLinks' import ProjectNav from '../molecules/ProjectNav' import SEO from '../atoms/SEO' -import styles from './Project.module.scss' +import styles from './Project.module.css' class ProjectMeta extends PureComponent { static propTypes = { diff --git a/src/components/templates/Project.module.css b/src/components/templates/Project.module.css new file mode 100644 index 0000000..7571ecb --- /dev/null +++ b/src/components/templates/Project.module.css @@ -0,0 +1,50 @@ +.imageWrap { + margin-bottom: calc(var(--spacer) * 3); +} + +.title { + font-size: var(--font-size-h2); +} + +@media (min-width: 30em) { + .imageWrap { + margin-bottom: calc(var(--spacer) * 6); + } + + .title { + font-size: var(--font-size-h1); + } +} + +.description { + font-size: var(--font-size-base); + margin-bottom: calc(var(--spacer) * 2); +} + +.meta { + margin-top: -2rem; + margin-bottom: calc(var(--spacer) * 5); + display: grid; + grid-template-columns: 1fr; + gap: calc(var(--spacer) * 2); +} + +@media (min-width: 40em) { + .meta { + grid-template-columns: 2fr 3fr; + gap: calc(var(--spacer) * 2); + } +} + +.metatitle { + font-size: var(--font-size-h3); + margin-bottom: calc(var(--spacer) * 1.5); +} + +.metatitle span { + display: block; + margin-top: calc(var(--spacer) / 3); + font-size: var(--font-size-base); + font-family: var(--font-family-base); + color: var(--brand-grey-light); +} diff --git a/src/components/templates/Project.module.scss b/src/components/templates/Project.module.scss deleted file mode 100644 index 7f8feab..0000000 --- a/src/components/templates/Project.module.scss +++ /dev/null @@ -1,49 +0,0 @@ -@import 'variables'; -@import '../components/atoms/ProjectImage.module'; - -.imageWrap { - margin-bottom: $spacer * 3; - - @media (min-width: $screen-xs) { - margin-bottom: $spacer * 6; - } -} - -.title { - font-size: $font-size-h2; - - @media (min-width: $screen-xs) { - font-size: $font-size-h1; - } -} - -.description { - font-size: $font-size-base; - margin-bottom: $spacer * 2; -} - -.meta { - margin-top: -($spacer); - margin-bottom: $spacer * 5; - display: grid; - grid-template-columns: 1fr; - grid-gap: $spacer * 2; - - @media (min-width: $screen-sm) { - grid-template-columns: 2fr 3fr; - grid-gap: $spacer * 2; - } -} - -.metatitle { - font-size: $font-size-h3; - margin-bottom: $spacer * 1.5; - - span { - display: block; - margin-top: $spacer / 3; - font-size: $font-size-base; - font-family: $font-family-base; - color: $brand-grey-light; - } -} diff --git a/src/components/templates/Project.test.jsx b/src/components/templates/Project.test.jsx index 06dc588..edd5669 100644 --- a/src/components/templates/Project.test.jsx +++ b/src/components/templates/Project.test.jsx @@ -2,7 +2,7 @@ import React from 'react' import { render } from '@testing-library/react' import { createHistory, createMemorySource } from '@reach/router' import Project from './Project' -import project from '../../jest/__fixtures__/project.json' +import project from '../../../jest/__fixtures__/project.json' describe('Project', () => { const history = createHistory(createMemorySource('/oceanprotocol')) diff --git a/src/pages/404.jsx b/src/pages/404.jsx index 3a380e0..eec5f7d 100644 --- a/src/pages/404.jsx +++ b/src/pages/404.jsx @@ -4,7 +4,7 @@ import { Link } from 'gatsby' import giphyAPI from 'giphy-js-sdk-core' import SEO from '../components/atoms/SEO' import Button from '../components/atoms/Button' -import styles from './404.module.scss' +import styles from './404.module.css' // Famous last words: // "It's just the 404 page so why not expose the dev API key" diff --git a/src/pages/404.module.css b/src/pages/404.module.css new file mode 100644 index 0000000..d73b148 --- /dev/null +++ b/src/pages/404.module.css @@ -0,0 +1,16 @@ +.content { + text-align: center; + height: 100%; + max-width: 35rem; + margin-left: auto; + margin-right: auto; +} + +.content video { + display: block; + width: auto; + height: 300px; + box-shadow: 0 3px 5px rgba(var(--brand-main), 0.15), + 0 5px 16px rgba(var(--brand-main), 0.15); + margin: calc(var(--spacer) / 4) auto calc(var(--spacer) / 2) auto; +} diff --git a/src/pages/404.module.scss b/src/pages/404.module.scss deleted file mode 100644 index ef42c21..0000000 --- a/src/pages/404.module.scss +++ /dev/null @@ -1,18 +0,0 @@ -@import 'variables'; - -.content { - text-align: center; - height: 100%; - max-width: 35rem; - margin-left: auto; - margin-right: auto; - - video { - display: block; - width: auto; - height: 300px; - box-shadow: 0 3px 5px rgba($brand-main, 0.15), - 0 5px 16px rgba($brand-main, 0.15); - margin: $spacer / 4 auto $spacer / 2 auto; - } -} diff --git a/src/pages/index.jsx b/src/pages/index.jsx index d520d4e..e477a6c 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -4,7 +4,7 @@ import { Link, graphql } from 'gatsby' import shortid from 'shortid' import SEO from '../components/atoms/SEO' import ProjectImage from '../components/atoms/ProjectImage' -import styles from './index.module.scss' +import styles from './index.module.css' import Repositories from '../components/organisms/Repositories' import Icon from '../components/atoms/Icon' diff --git a/src/pages/index.module.css b/src/pages/index.module.css new file mode 100644 index 0000000..291d43d --- /dev/null +++ b/src/pages/index.module.css @@ -0,0 +1,79 @@ +.projects { + display: grid; + grid-template-columns: 1fr; + gap: calc(var(--spacer) * 3); + max-width: calc(var(--projectImageMaxWidth) + var(--spacer) * 2); + margin: 0 auto; +} + +@media (min-width: 15rem) { + .projects { + grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr)); + } +} + +.title { + font-size: var(--font-size-h4); + opacity: 0; + position: absolute; + top: 15%; + left: 0; + margin: 0; + z-index: 2; + padding: calc(var(--spacer) / 3) var(--spacer); + color: #fff !important; + background: var(--brand-cyan); + transform: translate3d(0, -1rem, 0); + transition: transform 0.2s ease-out; +} + +.project { + position: relative; +} + +.project a { + display: block; + position: relative; +} + +.project a::after { + content: ''; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 1; + background: transparent; + transition: background 0.2s ease-out; +} + +.project a:hover::after, +.project a:focus::after { + background: rgba(var(--brand-cyan), 0.05); +} + +.project a:hover .title, +.project a:focus .title, +.project a:hover .imageCount, +.project a:focus .imageCount { + opacity: 1; + transform: translate3d(0, 0, 0); +} + +.imageCount { + position: absolute; + bottom: 5%; + right: 2%; + color: var(--brand-cyan); + font-size: var(--font-size-small); + z-index: 10; + opacity: 0; + transform: translate3d(0, calc(var(--spacer) / 2), 0); + transition: transform 0.25s ease-out; +} + +.imageCount svg { + width: var(--font-size-base); + height: var(--font-size-base); +} diff --git a/src/pages/index.module.scss b/src/pages/index.module.scss deleted file mode 100644 index 75fbff6..0000000 --- a/src/pages/index.module.scss +++ /dev/null @@ -1,84 +0,0 @@ -@import 'variables'; - -.projects { - display: grid; - grid-template-columns: 1fr; - grid-gap: $spacer * 3; - - @media (min-width: $screen-md) { - grid-template-columns: 1fr 1fr; - max-width: calc(#{$projectImageMaxWidth} + #{$spacer * 2}); - margin: 0 auto; - padding: $spacer $spacer * 3; - } -} - -.title { - font-size: $font-size-h4; - opacity: 0; - position: absolute; - top: 15%; - left: 0; - margin: 0; - z-index: 2; - padding: $spacer / 3 $spacer; - background: rgba($brand-cyan, 0.9); - transform: translate3d(0, -1rem, 0); - transition: transform 0.2s ease-out; -} - -.project { - position: relative; - - a { - display: block; - position: relative; - - &::after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; - background: transparent; - transition: background 0.2s ease-out; - } - - &:hover, - &:focus { - &::after { - background: rgba($brand-cyan, 0.05); - } - - .title { - opacity: 1; - color: #fff; - transform: translate3d(0, 0, 0); - } - - .imageCount { - opacity: 1; - transform: translate3d(0, 0, 0); - } - } - } -} - -.imageCount { - position: absolute; - bottom: 5%; - right: 2%; - color: $brand-cyan; - font-size: $font-size-small; - z-index: 10; - opacity: 0; - transform: translate3d(0, $spacer / 2, 0); - transition: transform 0.25s ease-out; - - svg { - width: $font-size-base; - height: $font-size-base; - } -} diff --git a/src/pages/resume/Header.jsx b/src/pages/resume/Header.jsx index 6a4add2..a91da96 100644 --- a/src/pages/resume/Header.jsx +++ b/src/pages/resume/Header.jsx @@ -2,7 +2,7 @@ import React from 'react' import shortid from 'shortid' import { useResume } from '../../hooks/use-resume' import Icon from '../../components/atoms/Icon' -import styles from './Header.module.scss' +import styles from './Header.module.css' export default function Header() { const { basics, languages } = useResume() diff --git a/src/pages/resume/Header.module.css b/src/pages/resume/Header.module.css new file mode 100644 index 0000000..868aebc --- /dev/null +++ b/src/pages/resume/Header.module.css @@ -0,0 +1,69 @@ +.title { + font-size: var(--font-size-h2); + margin-bottom: calc(var(--spacer) / 4); +} + +@media print { + .title { + margin-bottom: 0; + } +} + +.label { + font-size: var(--font-size-h3); + color: var(--brand-grey-light); + margin-bottom: 0; +} + +:global(.dark) .label { + color: var(--brand-grey-dimmed); +} + +.contact { + list-style: none; + padding: 0; +} + +.contact li, +.contact p { + margin-bottom: calc(var(--spacer) / 4); +} + +.contact svg { + stroke: var(--brand-grey-light); + margin-right: calc(var(--spacer) / 4); + margin-bottom: -0.1rem; +} + +:global(.dark) .contact svg { + stroke: var(--brand-grey); +} + +@media (min-width: 60em) { + .contact { + margin-top: calc(var(--spacer) * 2.25); + } +} + +.languages svg { + display: inline-block; +} + +.languages p { + margin-left: calc(var(--spacer) / 1.1); +} + +.languages p:first-of-type { + margin-left: 0; + display: inline-block; +} + +.languages span { + font-size: var(--font-size-small); + margin-left: calc(var(--spacer) / 4); + color: var(--brand-grey-light); +} + +:global(.dark) .languages span { + color: var(--brand-grey); +} diff --git a/src/pages/resume/Header.module.scss b/src/pages/resume/Header.module.scss deleted file mode 100644 index 6da5569..0000000 --- a/src/pages/resume/Header.module.scss +++ /dev/null @@ -1,69 +0,0 @@ -@import 'variables'; - -.title { - font-size: $font-size-h2; - margin-bottom: $spacer / 4; - - @media print { - margin-bottom: 0; - } -} - -.label { - font-size: $font-size-h3; - color: $brand-grey-light; - margin-bottom: 0; - - :global(.dark) & { - color: $brand-grey-dimmed; - } -} - -.contact { - list-style: none; - padding: 0; - - li, - p { - margin-bottom: $spacer / 4; - } - - svg { - stroke: $brand-grey-light; - margin-right: $spacer / 4; - margin-bottom: -0.1rem; - - :global(.dark) & { - stroke: $brand-grey; - } - } - - @media (min-width: $screen-md) { - margin-top: $spacer * 2.25; - } -} - -.languages { - svg { - display: inline-block; - } - - p { - margin-left: $spacer / 1.1; - - &:first-of-type { - margin-left: 0; - display: inline-block; - } - } - - span { - font-size: $font-size-small; - margin-left: $spacer / 4; - color: $brand-grey-light; - - :global(.dark) & { - color: $brand-grey; - } - } -} diff --git a/src/pages/resume/ResumeItem.jsx b/src/pages/resume/ResumeItem.jsx index 71f863e..72f5974 100644 --- a/src/pages/resume/ResumeItem.jsx +++ b/src/pages/resume/ResumeItem.jsx @@ -5,7 +5,7 @@ import remark2react from 'remark-react' import parse from 'remark-parse' import html from 'remark-html' import breaks from 'remark-breaks' -import styles from './ResumeItem.module.scss' +import styles from './ResumeItem.module.css' const markdownOutput = text => remark() diff --git a/src/pages/resume/ResumeItem.module.css b/src/pages/resume/ResumeItem.module.css new file mode 100644 index 0000000..060cd32 --- /dev/null +++ b/src/pages/resume/ResumeItem.module.css @@ -0,0 +1,72 @@ +.resumeItem { + padding-bottom: calc(var(--spacer) * 3); + padding-left: var(--spacer); + position: relative; + border-left: 0.1rem solid rgba(var(--brand-grey-light), 0.25); +} + +.resumeItem::before { + content: ''; + display: block; + width: var(--font-size-mini); + height: var(--font-size-mini); + border-radius: 50%; + background: var(--body-background-color); + border: 0.1rem solid var(--color-headings); + position: absolute; + left: -(calc(var(--font-size-mini) / 1.8)); + top: 0.15rem; +} + +.resumeItem:last-child { + border: none; +} + +.resumeItem p:last-child { + margin-bottom: 0; +} + +.title { + margin-bottom: calc(var(--spacer) / 3); + font-size: var(--font-size-h4); + position: relative; + top: -(calc(var(--spacer) / 6)); +} + +.subTitle { + color: var(--brand-grey-light); + font-size: var(--font-size-h5); +} + +:global(.dark) .subTitle { + color: var(--brand-grey-dimmed); +} + +.time { + display: block; + margin-bottom: calc(var(--spacer) / 2); + white-space: nowrap; + font-style: italic; +} + +@media (min-width: 60em) { + .time { + text-align: right; + position: absolute; + top: -0.3rem; + right: 105%; + } +} + +@media print { + .resumeItem { + padding-bottom: calc(var(--spacer) * 2); + } + + .time { + text-align: left; + position: relative; + top: auto; + right: auto; + } +} diff --git a/src/pages/resume/ResumeItem.module.scss b/src/pages/resume/ResumeItem.module.scss deleted file mode 100644 index bcc6f83..0000000 --- a/src/pages/resume/ResumeItem.module.scss +++ /dev/null @@ -1,77 +0,0 @@ -@import 'variables'; - -.resumeItem { - padding-bottom: $spacer * 3; - padding-left: $spacer; - position: relative; - border-left: 0.1rem solid rgba($brand-grey-light, 0.25); - - &::before { - content: ''; - display: block; - width: $font-size-mini; - height: $font-size-mini; - border-radius: 50%; - background: $body-background-color; - border: 0.1rem solid $color-headings; - position: absolute; - left: -($font-size-mini / 1.8); - top: 0.15rem; - - :global(.dark) & { - background: $body-background-color--dark; - border-color: $color-headings--dark; - } - } - - p:last-child { - margin-bottom: 0; - } - - &:last-child { - border: none; - } -} - -.title { - margin-bottom: $spacer / 3; - font-size: $font-size-h4; - position: relative; - top: -($spacer / 6); -} - -.subTitle { - color: $brand-grey-light; - font-size: $font-size-h5; - - :global(.dark) & { - color: $brand-grey-dimmed; - } -} - -.time { - display: block; - margin-bottom: $spacer / 2; - white-space: nowrap; - font-style: italic; - - @media (min-width: $screen-md) { - text-align: right; - position: absolute; - top: -0.3rem; - right: 105%; - } -} - -@media print { - .resumeItem { - padding-bottom: $spacer * 2; - } - - .time { - text-align: left; - position: relative; - top: auto; - right: auto; - } -} diff --git a/src/pages/resume/index.jsx b/src/pages/resume/index.jsx index 86f1ec6..cbb3c96 100644 --- a/src/pages/resume/index.jsx +++ b/src/pages/resume/index.jsx @@ -3,7 +3,7 @@ import shortid from 'shortid' import SEO from '../../components/atoms/SEO' import Icon from '../../components/atoms/Icon' import { useResume } from '../../hooks/use-resume' -import styles from './index.module.scss' +import styles from './index.module.css' import Header from './Header' import ResumeItem from './ResumeItem' diff --git a/src/pages/resume/index.module.css b/src/pages/resume/index.module.css new file mode 100644 index 0000000..8699870 --- /dev/null +++ b/src/pages/resume/index.module.css @@ -0,0 +1,47 @@ +.resume { + padding: var(--spacer); + display: grid; + grid-gap: calc(var(--spacer) * 4); + grid-template-columns: 1fr; +} + +@media (min-width: 60em) { + .resume { + grid-template-columns: 1fr 2fr; + max-width: calc(var(--projectImageMaxWidth) + var(--spacer) * 2); + margin: 0 auto; + padding: var(--spacer) calc(var(--spacer) * 3); + } +} + +.subTitle { + font-size: var(--font-size-h3); + margin-bottom: 0; + margin-top: -(calc(var(--spacer) / 3)); +} + +.subTitle svg { + width: var(--font-size-large); + height: var(--font-size-large); + margin-right: calc(var(--spacer) / 4); + stroke: var(--brand-grey-light); +} + +@media print { + :global(html) { + font-size: 8pt; + } + + body { + background: #fff !important; + margin: 1cm 1.5cm; + } + + p { + color: silver; + } + + .resume { + grid-template-columns: 1fr; + } +} diff --git a/src/pages/resume/index.module.scss b/src/pages/resume/index.module.scss deleted file mode 100644 index e3f46d9..0000000 --- a/src/pages/resume/index.module.scss +++ /dev/null @@ -1,47 +0,0 @@ -@import 'variables'; - -.resume { - padding: $spacer; - display: grid; - grid-gap: $spacer * 4; - grid-template-columns: 1fr; - - @media (min-width: $screen-md) { - grid-template-columns: 1fr 2fr; - max-width: calc(#{$projectImageMaxWidth} + #{$spacer * 2}); - margin: 0 auto; - padding: $spacer $spacer * 3; - } -} - -.subTitle { - font-size: $font-size-h3; - margin-bottom: 0; - margin-top: -($spacer / 3); - - svg { - width: $font-size-large; - height: $font-size-large; - margin-right: $spacer / 4; - stroke: $brand-grey-light; - } -} - -@media print { - :global(html) { - font-size: 8pt; - } - - body { - background: #fff !important; - margin: 1cm 1.5cm; - } - - p { - color: silver; - } - - .resume { - grid-template-columns: 1fr; - } -} diff --git a/src/styles/_variables.css b/src/styles/_variables.css new file mode 100644 index 0000000..5d7f5eb --- /dev/null +++ b/src/styles/_variables.css @@ -0,0 +1,61 @@ +:root { + /* Colors */ + --brand-main: #015565; + --brand-cyan: #43a699; + --brand-main-light: #88bec8; + --brand-light: #e7eef4; + --brand-grey: #4e5d63; + --brand-grey-light: #70858e; + --brand-grey-dimmed: #97abb3; + + /* Backgrounds */ + --body-background-color: var(--brand-light); + --box-background-color: rgba(255, 255, 255, 0.2); + + /* Text Colors */ + --text-color: var(--brand-grey); + --text-color-light: var(--brand-grey-light); + --color-headings: var(--brand-main); + + /* Typography */ + --font-size-root: 18px; + --font-size-base: 1rem; + --font-size-large: 1.2rem; + --font-size-small: 0.8rem; + --font-size-mini: 0.7rem; + --font-size-h1: 2.5rem; + --font-size-h2: 2rem; + --font-size-h3: 1.65rem; + --font-size-h4: 1.45rem; + --font-size-h5: var(--font-size-large); + --font-size-h6: var(--font-size-base); + --line-height: 1.5; + --line-height-small: 1.1428571429; + --font-family-base: 'ff-tisa-sans-web-pro', 'Trebuchet MS', 'Helvetica Neue', + 'Helvetica', 'Arial', 'sans-serif'; + --font-weight-base: 400; + --font-family-monospace: 'Menlo', 'Monaco', 'Consolas', 'Courier New', + 'monospace'; + --font-family-headings: 'brandon-grotesque', 'Avenir Next', 'Helvetica Neue', + 'Helvetica', 'Arial', 'sans-serif'; + --font-weight-headings: 400; + --line-height-headings: 1.1; + + /* Components spacing */ + --spacer: 1.5rem; + --border-radius: 0.25rem; + + /* Miscellanious */ + --projectImageMaxWidth: 1200px; + --easing: cubic-bezier(0.75, 0, 0.08, 1); + --box-shadow: 0 3px 5px rgba(0, 0, 0, 0.05), 0 5px 16px rgba(0, 0, 0, 0.05); +} + +.dark { + --text-color: #7e9199; + --text-color-light: #7e9199; + --color-headings: var(--brand-main-light); + --body-background-color: #1d2224; + --box-background-color: rgba(255, 255, 255, 0.03); + --box-shadow: 0 3px 5px rgba(0, 0, 0, 0.25), 0 5px 16px rgba(0, 0, 0, 0.25); +} diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss deleted file mode 100644 index e88b534..0000000 --- a/src/styles/_variables.scss +++ /dev/null @@ -1,79 +0,0 @@ -$projectImageMaxWidth: 1200px; -$easing: cubic-bezier(0.75, 0, 0.08, 1); - -// Colors -///////////////////////////////////// - -$brand-main: #015565; -$brand-cyan: #43a699; -$brand-main-light: #88bec8; -$brand-light: #e7eef4; - -$brand-grey: #4e5d63; -$brand-grey-light: lighten($brand-grey, 15%); -$brand-grey-dimmed: lighten($brand-grey, 50%); - -// Backgrounds -///////////////////////////////////// - -$body-background-color: $brand-light; -$body-background-color--dark: darken($brand-grey, 22%); - -// Text Colors -///////////////////////////////////// - -$text-color: $brand-grey; -$text-color-light: $brand-grey-light; - -$text-color--dark: lighten($brand-grey-light, 5%); -$text-color-light--dark: lighten($brand-grey-light, 5%); - -// Typography -///////////////////////////////////// - -$font-size-root: 18px; - -$font-size-base: 1rem; -$font-size-large: 1.2rem; -$font-size-small: 0.8rem; -$font-size-mini: 0.7rem; - -$font-size-h1: 2.5rem; -$font-size-h2: 2rem; -$font-size-h3: 1.65rem; -$font-size-h4: 1.45rem; -$font-size-h5: $font-size-large; -$font-size-h6: $font-size-base; - -$line-height: 1.5; -$line-height-small: 1.1428571429; - -$font-family-base: 'ff-tisa-sans-web-pro', 'Trebuchet MS', 'Helvetica Neue', - 'Helvetica', 'Arial', 'sans-serif'; -$font-weight-base: 400; -$font-color-base: $text-color; - -$font-family-monospace: 'Menlo', 'Monaco', 'Consolas', 'Courier New', - 'monospace'; - -$font-family-headings: 'brandon-grotesque', 'Avenir Next', 'Helvetica Neue', - 'Helvetica', 'Arial', 'sans-serif'; -$font-weight-headings: 400; -$line-height-headings: 1.1; - -$color-headings: $brand-main; -$color-headings--dark: $brand-main-light; - -// Components spacing -///////////////////////////////////// - -$spacer: ($font-size-base * $line-height); -$border-radius: 0.25rem; - -// Responsive breakpoints -///////////////////////////////////// - -$screen-xs: 30em; -$screen-sm: 40em; -$screen-md: 60em; -$screen-lg: 70em; diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..9fed9bf --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,105 @@ +@import '_variables.css'; + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, +body { + margin: 0; + padding: 0; +} + +html { + font-size: var(--font-size-root); + background: var(--body-background-color); +} + +body { + font-family: var(--font-family-base); + font-weight: var(--font-weight-base); + font-size: var(--font-size-base); + line-height: var(--line-height); + color: var(--text-color); + text-rendering: optimizeLegibility; + font-feature-settings: 'liga', 'kern'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + min-height: 100vh; + background: var(--body-background-color); + transition: background 0.2s var(--easing); +} + +p, +ul, +ol { + margin: 0 0 var(--spacer); +} + +/* Headings */ + +h1 { + font-size: var(--font-size-h1); +} + +h2 { + font-size: var(--font-size-h2); +} + +h3 { + font-size: var(--font-size-h3); +} + +h4 { + font-size: var(--font-size-h4); +} + +h5 { + font-size: var(--font-size-h5); +} + +h6 { + font-size: var(--font-size-h6); +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-family-headings); + line-height: var(--line-height-headings); + color: var(--color-headings); + font-weight: var(--font-weight-headings); + margin: 0 0 var(--spacer); +} + +/* Links */ +a { + color: var(--brand-cyan); + text-decoration: none; + transition: 0.2s ease-out; +} + +a:hover, +a:focus { + color: #5ebeb1; +} + +/* Media */ +img, +video, +svg { + max-width: 100%; + height: auto; + margin: 0; +} + +#___gatsby { + display: flex; + min-height: 100vh; + flex-direction: column; +} diff --git a/src/styles/global.scss b/src/styles/global.scss deleted file mode 100644 index f4f2875..0000000 --- a/src/styles/global.scss +++ /dev/null @@ -1,119 +0,0 @@ -@import 'variables'; - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html, -body { - margin: 0; - padding: 0; -} - -html { - font-size: $font-size-root; - background: $body-background-color; -} - -body { - font-family: $font-family-base; - font-weight: $font-weight-base; - font-size: $font-size-base; - line-height: $line-height; - color: $font-color-base; - text-rendering: optimizeLegibility; - font-feature-settings: 'liga', 'kern'; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - min-height: 100vh; - background: $body-background-color; - transition: background 0.2s $easing; - - &.dark { - background-color: $body-background-color--dark; - color: $text-color--dark; - } -} - -p, -ul, -ol { - margin: 0 0 $spacer; -} - -// Headings -///////////////////////////////////// - -h1 { - font-size: $font-size-h1; -} - -h2 { - font-size: $font-size-h2; -} - -h3 { - font-size: $font-size-h3; -} - -h4 { - font-size: $font-size-h4; -} - -h5 { - font-size: $font-size-h5; -} - -h6 { - font-size: $font-size-h6; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: $font-family-headings; - line-height: $line-height-headings; - color: $color-headings; - font-weight: $font-weight-headings; - margin: 0 0 $spacer; - - .dark & { - color: $color-headings--dark; - } -} - -// Links -///////////////////////////////////// - -a { - color: $brand-cyan; - text-decoration: none; - transition: 0.2s ease-out; - - &:hover, - &:focus { - color: lighten($brand-cyan, 10%); - } -} - -// Media -///////////////////////////////////// - -img, -video, -svg { - max-width: 100%; - height: auto; - margin: 0; -} - -#___gatsby { - display: flex; - min-height: 100vh; - flex-direction: column; -}