fix: move about assets into src
All checks were successful
Docker / build-and-push-image (push) Successful in 1m0s

This commit is contained in:
Troy 2025-06-04 18:51:58 +01:00
parent 414164f3b1
commit 9d86db033f
Signed by: troy
GPG key ID: DFC06C02ED3B4711
22 changed files with 77 additions and 68 deletions

56
package-lock.json generated
View file

@ -10,10 +10,10 @@
"dependencies": { "dependencies": {
"@astrojs/check": "0.9.4", "@astrojs/check": "0.9.4",
"@astrojs/mdx": "^4.3.0", "@astrojs/mdx": "^4.3.0",
"@astrojs/rss": "^4.0.11", "@astrojs/rss": "^4.0.12",
"@astrojs/sitemap": "3.4.0", "@astrojs/sitemap": "3.4.1",
"@tailwindcss/vite": "^4.1.8", "@tailwindcss/vite": "^4.1.8",
"astro": "^5.8.1", "astro": "^5.8.2",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"rehype-external-links": "^3.0.0", "rehype-external-links": "^3.0.0",
"tailwindcss": "^4.1.8", "tailwindcss": "^4.1.8",
@ -22,11 +22,11 @@
"devDependencies": { "devDependencies": {
"@iconify-json/mdi": "^1.2.3", "@iconify-json/mdi": "^1.2.3",
"@tailwindcss/typography": "^0.5.16", "@tailwindcss/typography": "^0.5.16",
"@types/node": "^22.15.24", "@types/node": "^22.15.29",
"npm-check-updates": "^18.0.1", "npm-check-updates": "^18.0.1",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"prettier-plugin-astro": "^0.14.1", "prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.6.11" "prettier-plugin-tailwindcss": "^0.6.12"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
@ -204,19 +204,19 @@
} }
}, },
"node_modules/@astrojs/rss": { "node_modules/@astrojs/rss": {
"version": "4.0.11", "version": "4.0.12",
"resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.11.tgz", "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.12.tgz",
"integrity": "sha512-3e3H8i6kc97KGnn9iaZBJpIkdoQi8MmR5zH5R+dWsfCM44lLTszOqy1OBfGGxDt56mpQkYVtZJWoxMyWuUZBfw==", "integrity": "sha512-O5yyxHuDVb6DQ6VLOrbUVFSm+NpObulPxjs6XT9q3tC+RoKbN4HXMZLpv0LvXd1qdAjzVgJ1NFD+zKHJNDXikw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fast-xml-parser": "^4.5.0", "fast-xml-parser": "^5.2.0",
"kleur": "^4.1.5" "kleur": "^4.1.5"
} }
}, },
"node_modules/@astrojs/sitemap": { "node_modules/@astrojs/sitemap": {
"version": "3.4.0", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.4.0.tgz", "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.4.1.tgz",
"integrity": "sha512-C5m/xsKvRSILKM3hy47n5wKtTQtJXn8epoYuUmCCstaE9XBt20yInym3Bz2uNbEiNfv11bokoW0MqeXPIvjFIQ==", "integrity": "sha512-VjZvr1e4FH6NHyyHXOiQgLiw94LnCVY4v06wN/D0gZKchTMkg71GrAHJz81/huafcmavtLkIv26HnpfDq6/h/Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"sitemap": "^8.0.0", "sitemap": "^8.0.0",
@ -2139,9 +2139,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "22.15.24", "version": "22.15.29",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz",
"integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==", "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~6.21.0" "undici-types": "~6.21.0"
@ -2455,9 +2455,9 @@
} }
}, },
"node_modules/astro": { "node_modules/astro": {
"version": "5.8.1", "version": "5.8.2",
"resolved": "https://registry.npmjs.org/astro/-/astro-5.8.1.tgz", "resolved": "https://registry.npmjs.org/astro/-/astro-5.8.2.tgz",
"integrity": "sha512-lkBg1smMRFW+FQ6i92SgEN53o4+ItRjlRt6Ck+rEjmTcb57Bid7faTNKUQNYuNnxiesTWw3NJDyVPQPbfKDyfw==", "integrity": "sha512-t0TBpBdVluA2QVmbFBwpIqmTvBwNhIz1XTIT1BWPkDkoIgsiEMf6BOZqcoGG7f4GVKkUB9bTgMOhPgU3tbJ6vQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@astrojs/compiler": "^2.11.0", "@astrojs/compiler": "^2.11.0",
@ -3769,9 +3769,9 @@
"license": "BSD-3-Clause" "license": "BSD-3-Clause"
}, },
"node_modules/fast-xml-parser": { "node_modules/fast-xml-parser": {
"version": "4.5.3", "version": "5.2.3",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.3.tgz",
"integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "integrity": "sha512-OdCYfRqfpuLUFonTNjvd30rCBZUneHpSQkCqfaeWQ9qrKcl6XlWeDBNVwGb+INAIxRshuN2jF+BE0L6gbBO2mw==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -3780,7 +3780,7 @@
], ],
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"strnum": "^1.1.1" "strnum": "^2.1.0"
}, },
"bin": { "bin": {
"fxparser": "src/cli/cli.js" "fxparser": "src/cli/cli.js"
@ -6576,9 +6576,9 @@
} }
}, },
"node_modules/prettier-plugin-tailwindcss": { "node_modules/prettier-plugin-tailwindcss": {
"version": "0.6.11", "version": "0.6.12",
"resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz", "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.12.tgz",
"integrity": "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==", "integrity": "sha512-OuTQKoqNwV7RnxTPwXWzOFXy6Jc4z8oeRZYGuMpRyG3WbuR3jjXdQFK8qFBMBx8UHWdHrddARz2fgUenild6aw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@ -7436,9 +7436,9 @@
} }
}, },
"node_modules/strnum": { "node_modules/strnum": {
"version": "1.1.2", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
"integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",

View file

@ -14,10 +14,10 @@
"dependencies": { "dependencies": {
"@astrojs/check": "0.9.4", "@astrojs/check": "0.9.4",
"@astrojs/mdx": "^4.3.0", "@astrojs/mdx": "^4.3.0",
"@astrojs/rss": "^4.0.11", "@astrojs/rss": "^4.0.12",
"@astrojs/sitemap": "3.4.0", "@astrojs/sitemap": "3.4.1",
"@tailwindcss/vite": "^4.1.8", "@tailwindcss/vite": "^4.1.8",
"astro": "^5.8.1", "astro": "^5.8.2",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"rehype-external-links": "^3.0.0", "rehype-external-links": "^3.0.0",
"tailwindcss": "^4.1.8", "tailwindcss": "^4.1.8",
@ -26,10 +26,10 @@
"devDependencies": { "devDependencies": {
"@iconify-json/mdi": "^1.2.3", "@iconify-json/mdi": "^1.2.3",
"@tailwindcss/typography": "^0.5.16", "@tailwindcss/typography": "^0.5.16",
"@types/node": "^22.15.24", "@types/node": "^22.15.29",
"npm-check-updates": "^18.0.1", "npm-check-updates": "^18.0.1",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"prettier-plugin-astro": "^0.14.1", "prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.6.11" "prettier-plugin-tailwindcss": "^0.6.12"
} }
} }

View file

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 570 B

After

Width:  |  Height:  |  Size: 570 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

View file

@ -55,16 +55,16 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
<Icon name="mdi:calendar" /> <Icon name="mdi:calendar" />
{ {
!article.data.updated ? ( !article.data.updated ? (
<p title="Date"> <p>
<FormattedDate date={article.data.date} /> <FormattedDate date={article.data.date} />
</p> </p>
) : ( ) : (
<> <>
<p title="Date"> <p>
<FormattedDate date={article.data.date} /> <FormattedDate date={article.data.date} />
</p> </p>
<Icon name="mdi:trending-up" /> <Icon name="mdi:trending-up" />
<p title="Updated"> <p>
<FormattedDate date={article.data.updated} /> <FormattedDate date={article.data.updated} />
</p> </p>
</> </>
@ -75,7 +75,7 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
isPost ? ( isPost ? (
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Icon name="mdi:timer" /> <Icon name="mdi:timer" />
<p title="Word count">{readingTime(article.body)}</p> <p>{readingTime(article.body)}</p>
</div> </div>
) : null ) : null
} }
@ -83,7 +83,7 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
article.data.extraAuthors ? ( article.data.extraAuthors ? (
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Icon name="mdi:account-plus" /> <Icon name="mdi:account-plus" />
<p title="Collaborators" set:html={formattedList} /> <p set:html={formattedList} />
</div> </div>
) : null ) : null
} }

View file

@ -14,10 +14,9 @@ import { Icon } from "astro-icon/components";
<div class="text-tertiary flex flex-row items-center gap-4"> <div class="text-tertiary flex flex-row items-center gap-4">
{ {
SITE.LINKS.map((i) => ( SITE.LINKS.map((i) => (
<Link href={i.href}> <Link href={i.href} aria-label={i.name}>
<Icon <Icon
name={i.icon} name={i.icon}
title={i.name}
class="hover:text-secondary h-4 w-auto transition-colors duration-300" class="hover:text-secondary h-4 w-auto transition-colors duration-300"
/> />
</Link> </Link>

View file

@ -22,7 +22,6 @@ const { items } = Astro.props as Props;
<Image <Image
src={item.src} src={item.src}
alt={item.alt} alt={item.alt}
title={item.alt}
loading="eager" loading="eager"
class="mt-0 mb-0 h-full max-h-[90svh] w-full object-cover" class="mt-0 mb-0 h-full max-h-[90svh] w-full object-cover"
/> />

View file

@ -1,6 +1,6 @@
--- ---
import { SITE } from "@consts"; import { SITE } from "@consts";
import gradient from "../../public/assets/gradient.avif"; import gradient from "@assets/gradient.avif";
import { Font } from "astro:assets"; import { Font } from "astro:assets";
interface Props { interface Props {

View file

@ -9,10 +9,9 @@ const currentPath = pathname.replace(/\/$/, "");
<header class="mx-auto w-full"> <header class="mx-auto w-full">
<nav class="flex w-full justify-between"> <nav class="flex w-full justify-between">
<a href="/" aria-label={SITE.TITLE} title={SITE.TITLE}> <a href="/" aria-label={SITE.TITLE}>
<Icon <Icon
name="icon" name="icon"
title={SITE.TITLE}
class="hover:text-tertiary h-8 w-auto transition-colors duration-500 ease-in-out" class="hover:text-tertiary h-8 w-auto transition-colors duration-500 ease-in-out"
/> />
</a> </a>

View file

@ -16,7 +16,6 @@ const { collection } = Astro.props;
<Image <Image
src={collection.data.image.url} src={collection.data.image.url}
alt={collection.data.image.alt} alt={collection.data.image.alt}
title={collection.data.title}
loading="eager" loading="eager"
class="aspect-[2/1] object-cover transition-all duration-300 ease-in-out group-hover:brightness-50" class="aspect-[2/1] object-cover transition-all duration-300 ease-in-out group-hover:brightness-50"
fit="cover" fit="cover"

View file

@ -27,7 +27,6 @@ const { interval = 3000, images } = Astro.props;
<Image <Image
src={image.data.image.url} src={image.data.image.url}
alt={`Slide ${index + 1}`} alt={`Slide ${index + 1}`}
title={image.data.title}
class="h-full w-full rounded-sm object-cover transition-all duration-300 group-hover:brightness-50" class="h-full w-full rounded-sm object-cover transition-all duration-300 group-hover:brightness-50"
loading="eager" loading="eager"
/> />

View file

@ -40,6 +40,7 @@ Many will try to stop you as you race out in search of the final piece of your m
The game is not yet available but can be wishlisted on [Steam](https://store.steampowered.com/app/3012740/MUST_FIND_BEANS/) in preparation for when it releases. I was inspired to make this game after testing out Godot within a module in University for which I produced a small prototype [horror experience](https://troylusty.itch.io/kikimora). The game is not yet available but can be wishlisted on [Steam](https://store.steampowered.com/app/3012740/MUST_FIND_BEANS/) in preparation for when it releases. I was inspired to make this game after testing out Godot within a module in University for which I produced a small prototype [horror experience](https://troylusty.itch.io/kikimora).
![Brute enemy type model](brute.png) ![Brute enemy type model](brute.png)
> Brute enemy model from current development not yet in the playtest. > Brute enemy model from current development not yet in the playtest.
## Screenshots ## Screenshots

View file

@ -6,16 +6,16 @@ import { Icon } from "astro-icon/components";
import Link from "@components/Link.astro"; import Link from "@components/Link.astro";
import { createSlug } from "@lib/utils"; import { createSlug } from "@lib/utils";
import me from "./me.jpg"; import me from "@assets/me.jpg";
import camoicon from "./camouflage-store.png"; import camoicon from "@assets/camouflage-store.png";
import nisaicon from "./nisa.png"; import nisaicon from "@assets/nisa.png";
import pphicon from "./paigntonpicturehouse.png"; import pphicon from "@assets/paigntonpicturehouse.png";
import webbossicon from "./webboss.png"; import webbossicon from "@assets/webboss.png";
import uopicon from "./uop.png"; import uopicon from "@assets/uop.png";
import ucsdicon from "./ucsd.png"; import ucsdicon from "@assets/ucsd.png";
import sdcicon from "./sdc.png"; import sdcicon from "@assets/sdc.png";
import keviccicon from "./kevicc.png"; import keviccicon from "@assets/kevicc.png";
const projects = [ const projects = [
{ {
@ -24,7 +24,7 @@ const projects = [
description: description:
"A fast-paced first person shooter set following the realization that youre all out of beans. The problem is, youre nearing the end of cooking all the other items and you cant just not have them. Without beans, the day just wont be started off right.", "A fast-paced first person shooter set following the realization that youre all out of beans. The problem is, youre nearing the end of cooking all the other items and you cant just not have them. Without beans, the day just wont be started off right.",
tags: ["Godot", "Blender", "GIMP", "Steamworks"], tags: ["Godot", "Blender", "GIMP", "Steamworks"],
link: "/projects/must-find-beans", link: "https://troylusty.com/projects/must-find-beans",
done: false, done: false,
}, },
{ {
@ -48,7 +48,7 @@ const projects = [
description: description:
"A collection of digital artwork created with a variety of tools.", "A collection of digital artwork created with a variety of tools.",
tags: ["Blender", "Cinema 4D", "DaVinci Resolve"], tags: ["Blender", "Cinema 4D", "DaVinci Resolve"],
link: "/projects", link: "https://troylusty.com/projects",
done: true, done: true,
}, },
{ {
@ -57,7 +57,7 @@ const projects = [
description: description:
"Packard is a simple terminal based RSS aggregator meant to allow you to take a quick glance at whats occurring in topics you care about.", "Packard is a simple terminal based RSS aggregator meant to allow you to take a quick glance at whats occurring in topics you care about.",
tags: ["Rust", "Tokio", "Clap", "NixOS Flake"], tags: ["Rust", "Tokio", "Clap", "NixOS Flake"],
link: "/projects/packard", link: "https://troylusty.com/projects/packard",
done: true, done: true,
}, },
]; ];
@ -102,7 +102,7 @@ const education = [
name: "University of Plymouth", name: "University of Plymouth",
image: uopicon, image: uopicon,
course: "BA (Hons) Game Arts and Design", course: "BA (Hons) Game Arts and Design",
date: "2024 - Now", date: "2024 - 2025",
}, },
{ {
id: 2, id: 2,
@ -124,7 +124,7 @@ const education = [
name: "King Edward VI Community College", name: "King Edward VI Community College",
image: keviccicon, image: keviccicon,
course: course:
"Art & Design BTEC, Comp Sci A-level, 10 GCSEs, Creative iMedia Level 2", "Art & Design BTEC, Computer Science A-level, 10 GCSEs, Creative iMedia Level 2",
date: "2014 - 2020", date: "2014 - 2020",
}, },
]; ];
@ -152,31 +152,35 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
</p><div class="text-secondary/70 flex gap-x-1 pt-1 text-sm print:hidden"> </p><div class="text-secondary/70 flex gap-x-1 pt-1 text-sm print:hidden">
<Link <Link
href="/" href="/"
aria-label="Website"
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300" class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
> >
<Icon name="mdi:link-variant" title="Website" class="h-4 w-4" /> <Icon name="mdi:link-variant" class="h-4 w-4" />
</Link> </Link>
<Link <Link
href={`mailto:${SITE.EMAIL}`} href={`mailto:${SITE.EMAIL}`}
aria-label="Email"
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300" class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
> >
<Icon name="mdi:email" title="Email" class="h-4 w-4" /> <Icon name="mdi:email" class="h-4 w-4" />
</Link> </Link>
<Link <Link
href="https://code.threepop.com" href="https://code.threepop.com"
aria-label="Git"
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300" class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
> >
<Icon name="mdi:git" title="Git" class="h-4 w-4" /> <Icon name="mdi:git" class="h-4 w-4" />
</Link> </Link>
<Link <Link
href="https://store.steampowered.com/developer/troy" href="https://store.steampowered.com/developer/troy"
aria-label="Steam"
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300" class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
> >
<Icon name="mdi:steam" title="Steamworks" class="h-4 w-4" /> <Icon name="mdi:steam" class="h-4 w-4" />
</Link> </Link>
</div> </div>
<p <p
class="text-secondary/70 hidden max-w-md items-center text-sm text-pretty print:flex" class="text-secondary/70 hidden max-w-md items-center text-pretty print:flex"
> >
<Link <Link
class="inline-flex gap-x-1.5 align-baseline leading-none hover:underline" class="inline-flex gap-x-1.5 align-baseline leading-none hover:underline"
@ -218,7 +222,7 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
</p> </p>
</section> </section>
<section class="animate-reveal opacity-0 [animation-delay:0.2s]"> <section class="animate-reveal opacity-0 [animation-delay:0.2s] print:hidden">
<div <div
class="flex flex-col-reverse justify-between gap-5 rounded-sm bg-yellow-200/20 p-6 transition-transform duration-300 hover:scale-102 md:flex-row dark:bg-yellow-900/20" class="flex flex-col-reverse justify-between gap-5 rounded-sm bg-yellow-200/20 p-6 transition-transform duration-300 hover:scale-102 md:flex-row dark:bg-yellow-900/20"
> >
@ -352,14 +356,17 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
class="inline-flex items-center gap-1 font-medium underline hover:no-underline" class="inline-flex items-center gap-1 font-medium underline hover:no-underline"
> >
{project.done ? ( {project.done ? (
<span class="mr-1 h-1 w-1 rounded-full bg-green-500" /> <span class="mr-1 h-1.5 w-1.5 rounded-full bg-green-600 dark:bg-green-400" />
) : ( ) : (
<span class="mr-1 h-1 w-1 rounded-full bg-amber-500" /> <span class="mr-1 h-1.5 w-1.5 rounded-full bg-amber-600 dark:bg-amber-400" />
)} )}
{project.name} {project.name}
</Link> </Link>
</h3> </h3>
<p class="text-secondary/70 text-sm">{project.description}</p> <p class="text-secondary/70 text-sm">{project.description}</p>
<p class="text-secondary/40 hidden text-xs print:block">
Available at {project.link}.
</p>
</> </>
</div> </div>
</div> </div>

View file

@ -59,3 +59,9 @@
@apply underline decoration-2 underline-offset-2; @apply underline decoration-2 underline-offset-2;
} }
} }
@media print {
a {
text-decoration: none;
}
}