diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 21c057f2..103bea24 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -20,10 +20,12 @@ "typescript.tsdk": "node_modules/typescript/lib" }, "extensions": [ - "EditorConfig.EditorConfig", "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", "prisma.prisma", - "unifiedjs.vscode-mdx" + "unifiedjs.vscode-mdx", + "esbenp.prettier-vscode", + "stylelint.vscode-stylelint" ] } }, diff --git a/.prettierrc.js b/.prettierrc.mjs similarity index 81% rename from .prettierrc.js rename to .prettierrc.mjs index 47506984..49b1fa75 100644 --- a/.prettierrc.js +++ b/.prettierrc.mjs @@ -1,6 +1,4 @@ -/** - * @type {import("prettier").Config} - */ +/** @type {import("prettier").Config} */ const config = { singleQuote: false, jsxSingleQuote: false, diff --git a/.stylelintrc.mjs b/.stylelintrc.mjs new file mode 100644 index 00000000..b6c5c7d1 --- /dev/null +++ b/.stylelintrc.mjs @@ -0,0 +1,19 @@ +/* eslint-disable import/no-anonymous-default-export */ + +/** @type {import("stylelint").Config} */ +export default { + extends: ["stylelint-config-standard", "stylelint-config-css-modules"], + rules: { + "selector-class-pattern": null, + "custom-property-pattern": null, + "media-feature-range-notation": null, + "rule-empty-line-before": [ + "always-multi-line", + { + except: ["after-single-line-comment"], + ignore: ["inside-block"], + }, + ], + "color-hex-length": "long", + }, +}; diff --git a/app/contact/form.module.css b/app/contact/form.module.css index bc898b10..203a861f 100644 --- a/app/contact/form.module.css +++ b/app/contact/form.module.css @@ -58,6 +58,7 @@ .result.success { color: var(--colors-success); } + .result.error { color: var(--colors-error); } diff --git a/app/notes/[slug]/page.module.css b/app/notes/[slug]/page.module.css index df8436a1..98091860 100644 --- a/app/notes/[slug]/page.module.css +++ b/app/notes/[slug]/page.module.css @@ -35,11 +35,13 @@ white-space: nowrap; margin-right: 0.75em; } -.meta .metaTag:before { + +.meta .metaTag::before { content: "\0023"; /* cosmetically hashtagify tags */ padding-right: 0.125em; color: var(--colors-light); } + .meta .metaTag:last-of-type { margin-right: 0; } diff --git a/app/notes/page.module.css b/app/notes/page.module.css index be7e73e6..934bd04c 100644 --- a/app/notes/page.module.css +++ b/app/notes/page.module.css @@ -7,6 +7,7 @@ .section:first-of-type { margin-top: 0.25em; } + .section:last-of-type { margin-bottom: 0.25em; } diff --git a/app/page.module.css b/app/page.module.css index eddb1e84..16b56eca 100644 --- a/app/page.module.css +++ b/app/page.module.css @@ -60,6 +60,7 @@ 30% { transform: rotate(0deg); } + /* pause for ~9 out of 10 seconds */ 100% { transform: rotate(0deg); diff --git a/app/projects/page.module.css b/app/projects/page.module.css index 44ad26af..344b1dfd 100644 --- a/app/projects/page.module.css +++ b/app/projects/page.module.css @@ -11,7 +11,7 @@ .card { flex-grow: 1; width: 370px; - padding: 1.2em 1.2em 0.8em 1.2em; + padding: 1.2em 1.2em 0.8em; border: 1px solid var(--colors-kindaLight); border-radius: var(--radii-corner); font-size: 0.9em; @@ -32,7 +32,6 @@ .card .meta { display: flex; flex-wrap: wrap; - align-items: baseline; } .card .metaItem { @@ -51,7 +50,7 @@ } .card .metaIcon { - display: inline; + display: inline-block; width: 1.25em; height: 1.25em; vertical-align: -0.25em; @@ -61,9 +60,10 @@ .card .metaLanguage { display: inline-block; position: relative; - width: 1.15em; - height: 1.15em; + width: 1.1em; + height: 1.1em; + line-height: 1; margin-right: 0.5em; border-radius: 50%; - vertical-align: text-top; + vertical-align: -0.2em; } diff --git a/app/projects/page.tsx b/app/projects/page.tsx index 543f969f..35e5f173 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -114,11 +114,7 @@ export default async function Page() {