Update resume animation

This commit is contained in:
2025-05-23 00:32:49 -06:00
parent fc1a4e2560
commit e6b50d5ea5
5 changed files with 271 additions and 179 deletions

View File

@ -9,24 +9,24 @@
"astro": "astro" "astro": "astro"
}, },
"dependencies": { "dependencies": {
"@astrojs/mdx": "^4.2.6", "@astrojs/mdx": "^4.3.0",
"@astrojs/node": "^9.2.1", "@astrojs/node": "^9.2.2",
"@astrojs/preact": "^4.0.11", "@astrojs/preact": "^4.1.0",
"@astrojs/rss": "^4.0.11", "@astrojs/rss": "^4.0.11",
"@preact/signals": "^2.0.4", "@preact/signals": "^2.0.4",
"@tailwindcss/typography": "^0.5.16", "@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.1.7", "@tailwindcss/vite": "^4.1.7",
"astro": "^5.7.13", "astro": "^5.8.0",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"lucide-preact": "^0.511.0", "lucide-preact": "^0.511.0",
"preact": "^10.26.6", "preact": "^10.26.6",
"sharp": "^0.34.1", "sharp": "^0.34.2",
"tailwindcss": "^4.1.7" "tailwindcss": "^4.1.7"
}, },
"devDependencies": { "devDependencies": {
"@iconify-json/mdi": "^1.2.3", "@iconify-json/mdi": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.34", "@iconify-json/simple-icons": "^1.2.35",
"daisyui": "^5.0.35" "daisyui": "^5.0.37"
}, },
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [

311
pnpm-lock.yaml generated
View File

@ -9,14 +9,14 @@ importers:
.: .:
dependencies: dependencies:
'@astrojs/mdx': '@astrojs/mdx':
specifier: ^4.2.6 specifier: ^4.3.0
version: 4.2.6(astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3)) version: 4.3.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))
'@astrojs/node': '@astrojs/node':
specifier: ^9.2.1 specifier: ^9.2.2
version: 9.2.1(astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3)) version: 9.2.2(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))
'@astrojs/preact': '@astrojs/preact':
specifier: ^4.0.11 specifier: ^4.1.0
version: 4.0.11(@babel/core@7.27.1)(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.6) version: 4.1.0(@babel/core@7.27.1)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.6)
'@astrojs/rss': '@astrojs/rss':
specifier: ^4.0.11 specifier: ^4.0.11
version: 4.0.11 version: 4.0.11
@ -28,10 +28,10 @@ importers:
version: 0.5.16(tailwindcss@4.1.7) version: 0.5.16(tailwindcss@4.1.7)
'@tailwindcss/vite': '@tailwindcss/vite':
specifier: ^4.1.7 specifier: ^4.1.7
version: 4.1.7(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)) version: 4.1.7(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))
astro: astro:
specifier: ^5.7.13 specifier: ^5.8.0
version: 5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3) version: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3)
astro-icon: astro-icon:
specifier: ^1.1.5 specifier: ^1.1.5
version: 1.1.5 version: 1.1.5
@ -42,8 +42,8 @@ importers:
specifier: ^10.26.6 specifier: ^10.26.6
version: 10.26.6 version: 10.26.6
sharp: sharp:
specifier: ^0.34.1 specifier: ^0.34.2
version: 0.34.1 version: 0.34.2
tailwindcss: tailwindcss:
specifier: ^4.1.7 specifier: ^4.1.7
version: 4.1.7 version: 4.1.7
@ -52,11 +52,11 @@ importers:
specifier: ^1.2.3 specifier: ^1.2.3
version: 1.2.3 version: 1.2.3
'@iconify-json/simple-icons': '@iconify-json/simple-icons':
specifier: ^1.2.34 specifier: ^1.2.35
version: 1.2.34 version: 1.2.35
daisyui: daisyui:
specifier: ^5.0.35 specifier: ^5.0.37
version: 5.0.35 version: 5.0.37
packages: packages:
@ -76,36 +76,36 @@ packages:
'@astrojs/internal-helpers@0.6.1': '@astrojs/internal-helpers@0.6.1':
resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==} resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==}
'@astrojs/markdown-remark@6.3.1': '@astrojs/markdown-remark@6.3.2':
resolution: {integrity: sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg==} resolution: {integrity: sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==}
'@astrojs/mdx@4.2.6': '@astrojs/mdx@4.3.0':
resolution: {integrity: sha512-0i/GmOm6d0qq1/SCfcUgY/IjDc/bS0i42u7h85TkPFBmlFOcBZfkYhR5iyz6hZLwidvJOEq5yGfzt9B1Azku4w==} resolution: {integrity: sha512-OGX2KvPeBzjSSKhkCqrUoDMyzFcjKt5nTE5SFw3RdoLf0nrhyCXBQcCyclzWy1+P+XpOamn+p+hm1EhpCRyPxw==}
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
peerDependencies: peerDependencies:
astro: ^5.0.0 astro: ^5.0.0
'@astrojs/node@9.2.1': '@astrojs/node@9.2.2':
resolution: {integrity: sha512-kEHLB37ooW91p7FLGalqa3jVQRIafntfKiZgCnjN1lEYw+j8NP6VJHQbLHmzzbtKUI0J+srGiTnGZmaHErHE5w==} resolution: {integrity: sha512-PtLPuuojmcl9O3CEvXqL/D+wB4x5DlbrGOvP0MeTAh/VfKFprYAzgw1+45xsnTO+QvPWb26l1cT+ZQvvohmvMw==}
peerDependencies: peerDependencies:
astro: ^5.3.0 astro: ^5.3.0
'@astrojs/preact@4.0.11': '@astrojs/preact@4.1.0':
resolution: {integrity: sha512-BEx4sIWCojMJM3RC6wXzPvS5URNKMeQitoW+Uy8uqZ6nM5Me3WE984yntMZTlq8hn3AE278TfUJn2dZhGtSuYA==} resolution: {integrity: sha512-yXs63ndFHhoKHEZsvYbfsmmZt15QPEziW/twF4uBLAPWjSlZ1Fx/lG+NFMQpGy/CmvI0WkrhyPa9pkJp5ZaVmQ==}
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
peerDependencies: peerDependencies:
preact: ^10.6.5 preact: ^10.6.5
'@astrojs/prism@3.2.0': '@astrojs/prism@3.3.0':
resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==}
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
'@astrojs/rss@4.0.11': '@astrojs/rss@4.0.11':
resolution: {integrity: sha512-3e3H8i6kc97KGnn9iaZBJpIkdoQi8MmR5zH5R+dWsfCM44lLTszOqy1OBfGGxDt56mpQkYVtZJWoxMyWuUZBfw==} resolution: {integrity: sha512-3e3H8i6kc97KGnn9iaZBJpIkdoQi8MmR5zH5R+dWsfCM44lLTszOqy1OBfGGxDt56mpQkYVtZJWoxMyWuUZBfw==}
'@astrojs/telemetry@3.2.1': '@astrojs/telemetry@3.3.0':
resolution: {integrity: sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg==} resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==}
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
@ -355,8 +355,8 @@ packages:
'@iconify-json/mdi@1.2.3': '@iconify-json/mdi@1.2.3':
resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==}
'@iconify-json/simple-icons@1.2.34': '@iconify-json/simple-icons@1.2.35':
resolution: {integrity: sha512-1FRWEA94hSl5zmBogRh6lQL36l7bVTfrl0n5+QJ+WmXmw70RccPT5phqeiSynwo3IhUWKoW2LiajyUMeweXW8g==} resolution: {integrity: sha512-PAHZZn6P5ToHMhmEeeh/O96E/Ep4PctN44N64dWYbDasEvbVoN6x62m+Doz8au0SVS4/zYEMAsDO6TdO9ep84Q==}
'@iconify/tools@4.1.2': '@iconify/tools@4.1.2':
resolution: {integrity: sha512-q6NzLQYEN9zkDfcyBqD3vItHcZw97w/s++3H3TBxUORr57EfHxj6tOW6fyufDjMq+Vl56WXWaPx1csBPYlI5CA==} resolution: {integrity: sha512-q6NzLQYEN9zkDfcyBqD3vItHcZw97w/s++3H3TBxUORr57EfHxj6tOW6fyufDjMq+Vl56WXWaPx1csBPYlI5CA==}
@ -373,8 +373,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-arm64@0.34.1': '@img/sharp-darwin-arm64@0.34.2':
resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@ -385,8 +385,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-x64@0.34.1': '@img/sharp-darwin-x64@0.34.2':
resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@ -482,8 +482,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linux-arm64@0.34.1': '@img/sharp-linux-arm64@0.34.2':
resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -494,8 +494,8 @@ packages:
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-linux-arm@0.34.1': '@img/sharp-linux-arm@0.34.2':
resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@ -506,8 +506,8 @@ packages:
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-linux-s390x@0.34.1': '@img/sharp-linux-s390x@0.34.2':
resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
@ -518,8 +518,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linux-x64@0.34.1': '@img/sharp-linux-x64@0.34.2':
resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -530,8 +530,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-arm64@0.34.1': '@img/sharp-linuxmusl-arm64@0.34.2':
resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -542,8 +542,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-x64@0.34.1': '@img/sharp-linuxmusl-x64@0.34.2':
resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -553,19 +553,25 @@ packages:
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-wasm32@0.34.1': '@img/sharp-wasm32@0.34.2':
resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-win32-arm64@0.34.2':
resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [win32]
'@img/sharp-win32-ia32@0.33.5': '@img/sharp-win32-ia32@0.33.5':
resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@img/sharp-win32-ia32@0.34.1': '@img/sharp-win32-ia32@0.34.2':
resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@ -576,8 +582,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@img/sharp-win32-x64@0.34.1': '@img/sharp-win32-x64@0.34.2':
resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -904,8 +910,8 @@ packages:
'@types/nlcst@2.0.3': '@types/nlcst@2.0.3':
resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
'@types/node@22.15.18': '@types/node@22.15.21':
resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==}
'@types/tar@6.1.13': '@types/tar@6.1.13':
resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==}
@ -968,9 +974,9 @@ packages:
astro-icon@1.1.5: astro-icon@1.1.5:
resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==} resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==}
astro@5.7.13: astro@5.8.0:
resolution: {integrity: sha512-cRGq2llKOhV3XMcYwQpfBIUcssN6HEK5CRbcMxAfd9OcFhvWE7KUy50zLioAZVVl3AqgUTJoNTlmZfD2eG0G1w==} resolution: {integrity: sha512-G57ELkdIntDiSrucA5lQaRtBOjquaZ9b9NIwoz2f471ZuuJcynLjWgItgBzlrz5UMY4WqnFbVWUCKlJb7nt9bA==}
engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true hasBin: true
asynckit@0.4.0: asynckit@0.4.0:
@ -1164,8 +1170,8 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
daisyui@5.0.35: daisyui@5.0.37:
resolution: {integrity: sha512-AWi11n/x5++mps55jcwrBf0Lmip1euWY0FYcH/05SFGmoqrU7S7/aIUWaiaeqlJ5EcmEZ/7zEY73aOxMv6hcIg==} resolution: {integrity: sha512-PLc+MhWAqTwolygEGPDi+ac+OsFqIt9nZylTIiyVlEx8loYL7Pt7hNWb8cp5pQQ9dhjYnda1ERiuM6OsJmvPGw==}
debug@4.4.1: debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
@ -1245,8 +1251,8 @@ packages:
ee-first@1.1.1: ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
electron-to-chromium@1.5.155: electron-to-chromium@1.5.157:
resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} resolution: {integrity: sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==}
emoji-regex@10.4.0: emoji-regex@10.4.0:
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
@ -2216,8 +2222,8 @@ packages:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
sharp@0.34.1: sharp@0.34.2:
resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shiki@3.4.2: shiki@3.4.2:
@ -2291,8 +2297,8 @@ packages:
tailwindcss@4.1.7: tailwindcss@4.1.7:
resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==}
tapable@2.2.1: tapable@2.2.2:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
engines: {node: '>=6'} engines: {node: '>=6'}
tar@6.2.1: tar@6.2.1:
@ -2329,8 +2335,8 @@ packages:
trough@2.2.0: trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
tsconfck@3.1.5: tsconfck@3.1.6:
resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
engines: {node: ^18 || >=20} engines: {node: ^18 || >=20}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -2595,8 +2601,8 @@ packages:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'} engines: {node: '>=12.20'}
yocto-spinner@0.2.2: yocto-spinner@0.2.3:
resolution: {integrity: sha512-21rPcM3e4vCpOXThiFRByX8amU5By1R0wNS8Oex+DP3YgC8xdU0vEJ/K8cbPLiIJVosSSysgcFof6s6MSD5/Vw==} resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==}
engines: {node: '>=18.19'} engines: {node: '>=18.19'}
yoctocolors@2.1.1: yoctocolors@2.1.1:
@ -2614,8 +2620,8 @@ packages:
typescript: ^4.9.4 || ^5.0.2 typescript: ^4.9.4 || ^5.0.2
zod: ^3 zod: ^3
zod@3.24.4: zod@3.25.23:
resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} resolution: {integrity: sha512-Od2bdMosahjSrSgJtakrwjMDb1zM1A3VIHCPGveZt/3/wlrTWBya2lmEh2OYe4OIu8mPTmmr0gnLHIWQXdtWBg==}
zwitch@2.0.4: zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@ -2638,10 +2644,10 @@ snapshots:
'@astrojs/internal-helpers@0.6.1': {} '@astrojs/internal-helpers@0.6.1': {}
'@astrojs/markdown-remark@6.3.1': '@astrojs/markdown-remark@6.3.2':
dependencies: dependencies:
'@astrojs/internal-helpers': 0.6.1 '@astrojs/internal-helpers': 0.6.1
'@astrojs/prism': 3.2.0 '@astrojs/prism': 3.3.0
github-slugger: 2.0.0 github-slugger: 2.0.0
hast-util-from-html: 2.0.3 hast-util-from-html: 2.0.3
hast-util-to-text: 4.0.2 hast-util-to-text: 4.0.2
@ -2664,12 +2670,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/mdx@4.2.6(astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))': '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))':
dependencies: dependencies:
'@astrojs/markdown-remark': 6.3.1 '@astrojs/markdown-remark': 6.3.2
'@mdx-js/mdx': 3.1.0(acorn@8.14.1) '@mdx-js/mdx': 3.1.0(acorn@8.14.1)
acorn: 8.14.1 acorn: 8.14.1
astro: 5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3) astro: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3)
es-module-lexer: 1.7.0 es-module-lexer: 1.7.0
estree-util-visit: 2.0.0 estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5 hast-util-to-html: 9.0.5
@ -2683,22 +2689,22 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/node@9.2.1(astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))': '@astrojs/node@9.2.2(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3))':
dependencies: dependencies:
'@astrojs/internal-helpers': 0.6.1 '@astrojs/internal-helpers': 0.6.1
astro: 5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3) astro: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3)
send: 1.2.0 send: 1.2.0
server-destroy: 1.0.1 server-destroy: 1.0.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/preact@4.0.11(@babel/core@7.27.1)(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.6)': '@astrojs/preact@4.1.0(@babel/core@7.27.1)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.6)':
dependencies: dependencies:
'@preact/preset-vite': 2.10.1(@babel/core@7.27.1)(preact@10.26.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)) '@preact/preset-vite': 2.10.1(@babel/core@7.27.1)(preact@10.26.6)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))
'@preact/signals': 2.0.4(preact@10.26.6) '@preact/signals': 2.0.4(preact@10.26.6)
preact: 10.26.6 preact: 10.26.6
preact-render-to-string: 6.5.13(preact@10.26.6) preact-render-to-string: 6.5.13(preact@10.26.6)
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- '@types/node' - '@types/node'
@ -2714,7 +2720,7 @@ snapshots:
- tsx - tsx
- yaml - yaml
'@astrojs/prism@3.2.0': '@astrojs/prism@3.3.0':
dependencies: dependencies:
prismjs: 1.30.0 prismjs: 1.30.0
@ -2723,7 +2729,7 @@ snapshots:
fast-xml-parser: 4.5.3 fast-xml-parser: 4.5.3
kleur: 4.1.5 kleur: 4.1.5
'@astrojs/telemetry@3.2.1': '@astrojs/telemetry@3.3.0':
dependencies: dependencies:
ci-info: 4.2.0 ci-info: 4.2.0
debug: 4.4.1 debug: 4.4.1
@ -2954,7 +2960,7 @@ snapshots:
dependencies: dependencies:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
'@iconify-json/simple-icons@1.2.34': '@iconify-json/simple-icons@1.2.35':
dependencies: dependencies:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
@ -2995,7 +3001,7 @@ snapshots:
'@img/sharp-libvips-darwin-arm64': 1.0.4 '@img/sharp-libvips-darwin-arm64': 1.0.4
optional: true optional: true
'@img/sharp-darwin-arm64@0.34.1': '@img/sharp-darwin-arm64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.1.0 '@img/sharp-libvips-darwin-arm64': 1.1.0
optional: true optional: true
@ -3005,7 +3011,7 @@ snapshots:
'@img/sharp-libvips-darwin-x64': 1.0.4 '@img/sharp-libvips-darwin-x64': 1.0.4
optional: true optional: true
'@img/sharp-darwin-x64@0.34.1': '@img/sharp-darwin-x64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.1.0 '@img/sharp-libvips-darwin-x64': 1.1.0
optional: true optional: true
@ -3066,7 +3072,7 @@ snapshots:
'@img/sharp-libvips-linux-arm64': 1.0.4 '@img/sharp-libvips-linux-arm64': 1.0.4
optional: true optional: true
'@img/sharp-linux-arm64@0.34.1': '@img/sharp-linux-arm64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.1.0 '@img/sharp-libvips-linux-arm64': 1.1.0
optional: true optional: true
@ -3076,7 +3082,7 @@ snapshots:
'@img/sharp-libvips-linux-arm': 1.0.5 '@img/sharp-libvips-linux-arm': 1.0.5
optional: true optional: true
'@img/sharp-linux-arm@0.34.1': '@img/sharp-linux-arm@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.1.0 '@img/sharp-libvips-linux-arm': 1.1.0
optional: true optional: true
@ -3086,7 +3092,7 @@ snapshots:
'@img/sharp-libvips-linux-s390x': 1.0.4 '@img/sharp-libvips-linux-s390x': 1.0.4
optional: true optional: true
'@img/sharp-linux-s390x@0.34.1': '@img/sharp-linux-s390x@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.1.0 '@img/sharp-libvips-linux-s390x': 1.1.0
optional: true optional: true
@ -3096,7 +3102,7 @@ snapshots:
'@img/sharp-libvips-linux-x64': 1.0.4 '@img/sharp-libvips-linux-x64': 1.0.4
optional: true optional: true
'@img/sharp-linux-x64@0.34.1': '@img/sharp-linux-x64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.1.0 '@img/sharp-libvips-linux-x64': 1.1.0
optional: true optional: true
@ -3106,7 +3112,7 @@ snapshots:
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4 '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
optional: true optional: true
'@img/sharp-linuxmusl-arm64@0.34.1': '@img/sharp-linuxmusl-arm64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.1.0 '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
optional: true optional: true
@ -3116,7 +3122,7 @@ snapshots:
'@img/sharp-libvips-linuxmusl-x64': 1.0.4 '@img/sharp-libvips-linuxmusl-x64': 1.0.4
optional: true optional: true
'@img/sharp-linuxmusl-x64@0.34.1': '@img/sharp-linuxmusl-x64@0.34.2':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.1.0 '@img/sharp-libvips-linuxmusl-x64': 1.1.0
optional: true optional: true
@ -3126,21 +3132,24 @@ snapshots:
'@emnapi/runtime': 1.4.3 '@emnapi/runtime': 1.4.3
optional: true optional: true
'@img/sharp-wasm32@0.34.1': '@img/sharp-wasm32@0.34.2':
dependencies: dependencies:
'@emnapi/runtime': 1.4.3 '@emnapi/runtime': 1.4.3
optional: true optional: true
'@img/sharp-win32-arm64@0.34.2':
optional: true
'@img/sharp-win32-ia32@0.33.5': '@img/sharp-win32-ia32@0.33.5':
optional: true optional: true
'@img/sharp-win32-ia32@0.34.1': '@img/sharp-win32-ia32@0.34.2':
optional: true optional: true
'@img/sharp-win32-x64@0.33.5': '@img/sharp-win32-x64@0.33.5':
optional: true optional: true
'@img/sharp-win32-x64@0.34.1': '@img/sharp-win32-x64@0.34.2':
optional: true optional: true
'@isaacs/fs-minipass@4.0.1': '@isaacs/fs-minipass@4.0.1':
@ -3196,18 +3205,18 @@ snapshots:
'@oslojs/encoding@1.1.0': {} '@oslojs/encoding@1.1.0': {}
'@preact/preset-vite@2.10.1(@babel/core@7.27.1)(preact@10.26.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1))': '@preact/preset-vite@2.10.1(@babel/core@7.27.1)(preact@10.26.6)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))':
dependencies: dependencies:
'@babel/core': 7.27.1 '@babel/core': 7.27.1
'@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.1)
'@prefresh/vite': 2.4.7(preact@10.26.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)) '@prefresh/vite': 2.4.7(preact@10.26.6)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.27.1) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.27.1)
debug: 4.4.1 debug: 4.4.1
kolorist: 1.8.0 kolorist: 1.8.0
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)) vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))
transitivePeerDependencies: transitivePeerDependencies:
- preact - preact
- supports-color - supports-color
@ -3227,7 +3236,7 @@ snapshots:
'@prefresh/utils@1.2.0': {} '@prefresh/utils@1.2.0': {}
'@prefresh/vite@2.4.7(preact@10.26.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1))': '@prefresh/vite@2.4.7(preact@10.26.6)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))':
dependencies: dependencies:
'@babel/core': 7.27.1 '@babel/core': 7.27.1
'@prefresh/babel-plugin': 0.5.1 '@prefresh/babel-plugin': 0.5.1
@ -3235,7 +3244,7 @@ snapshots:
'@prefresh/utils': 1.2.0 '@prefresh/utils': 1.2.0
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
preact: 10.26.6 preact: 10.26.6
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3421,12 +3430,12 @@ snapshots:
postcss-selector-parser: 6.0.10 postcss-selector-parser: 6.0.10
tailwindcss: 4.1.7 tailwindcss: 4.1.7
'@tailwindcss/vite@4.1.7(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1))': '@tailwindcss/vite@4.1.7(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))':
dependencies: dependencies:
'@tailwindcss/node': 4.1.7 '@tailwindcss/node': 4.1.7
'@tailwindcss/oxide': 4.1.7 '@tailwindcss/oxide': 4.1.7
tailwindcss: 4.1.7 tailwindcss: 4.1.7
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
'@trysound/sax@0.2.0': {} '@trysound/sax@0.2.0': {}
@ -3442,7 +3451,7 @@ snapshots:
'@types/fontkit@2.0.8': '@types/fontkit@2.0.8':
dependencies: dependencies:
'@types/node': 22.15.18 '@types/node': 22.15.21
'@types/hast@3.0.4': '@types/hast@3.0.4':
dependencies: dependencies:
@ -3460,13 +3469,13 @@ snapshots:
dependencies: dependencies:
'@types/unist': 3.0.3 '@types/unist': 3.0.3
'@types/node@22.15.18': '@types/node@22.15.21':
dependencies: dependencies:
undici-types: 6.21.0 undici-types: 6.21.0
'@types/tar@6.1.13': '@types/tar@6.1.13':
dependencies: dependencies:
'@types/node': 22.15.18 '@types/node': 22.15.21
minipass: 4.2.8 minipass: 4.2.8
'@types/unist@2.0.11': {} '@types/unist@2.0.11': {}
@ -3475,7 +3484,7 @@ snapshots:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 22.15.18 '@types/node': 22.15.21
optional: true optional: true
'@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.0': {}
@ -3518,12 +3527,12 @@ snapshots:
- debug - debug
- supports-color - supports-color
astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3): astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.41.0)(typescript@5.8.3):
dependencies: dependencies:
'@astrojs/compiler': 2.12.0 '@astrojs/compiler': 2.12.0
'@astrojs/internal-helpers': 0.6.1 '@astrojs/internal-helpers': 0.6.1
'@astrojs/markdown-remark': 6.3.1 '@astrojs/markdown-remark': 6.3.2
'@astrojs/telemetry': 3.2.1 '@astrojs/telemetry': 3.3.0
'@capsizecss/unpack': 2.4.0 '@capsizecss/unpack': 2.4.0
'@oslojs/encoding': 1.1.0 '@oslojs/encoding': 1.1.0
'@rollup/pluginutils': 5.1.4(rollup@4.41.0) '@rollup/pluginutils': 5.1.4(rollup@4.41.0)
@ -3550,6 +3559,7 @@ snapshots:
github-slugger: 2.0.0 github-slugger: 2.0.0
html-escaper: 3.0.3 html-escaper: 3.0.3
http-cache-semantics: 4.2.0 http-cache-semantics: 4.2.0
import-meta-resolve: 4.1.0
js-yaml: 4.1.0 js-yaml: 4.1.0
kleur: 4.1.5 kleur: 4.1.5
magic-string: 0.30.17 magic-string: 0.30.17
@ -3566,20 +3576,20 @@ snapshots:
shiki: 3.4.2 shiki: 3.4.2
tinyexec: 0.3.2 tinyexec: 0.3.2
tinyglobby: 0.2.13 tinyglobby: 0.2.13
tsconfck: 3.1.5(typescript@5.8.3) tsconfck: 3.1.6(typescript@5.8.3)
ultrahtml: 1.6.0 ultrahtml: 1.6.0
unifont: 0.5.0 unifont: 0.5.0
unist-util-visit: 5.0.0 unist-util-visit: 5.0.0
unstorage: 1.16.0 unstorage: 1.16.0
vfile: 6.0.3 vfile: 6.0.3
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)) vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1))
xxhash-wasm: 1.1.0 xxhash-wasm: 1.1.0
yargs-parser: 21.1.1 yargs-parser: 21.1.1
yocto-spinner: 0.2.2 yocto-spinner: 0.2.3
zod: 3.24.4 zod: 3.25.23
zod-to-json-schema: 3.24.5(zod@3.24.4) zod-to-json-schema: 3.24.5(zod@3.25.23)
zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.24.4) zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.23)
optionalDependencies: optionalDependencies:
sharp: 0.33.5 sharp: 0.33.5
transitivePeerDependencies: transitivePeerDependencies:
@ -3661,7 +3671,7 @@ snapshots:
browserslist@4.24.5: browserslist@4.24.5:
dependencies: dependencies:
caniuse-lite: 1.0.30001718 caniuse-lite: 1.0.30001718
electron-to-chromium: 1.5.155 electron-to-chromium: 1.5.157
node-releases: 2.0.19 node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.24.5) update-browserslist-db: 1.1.3(browserslist@4.24.5)
@ -3806,7 +3816,7 @@ snapshots:
dependencies: dependencies:
css-tree: 2.2.1 css-tree: 2.2.1
daisyui@5.0.35: {} daisyui@5.0.37: {}
debug@4.4.1: debug@4.4.1:
dependencies: dependencies:
@ -3872,7 +3882,7 @@ snapshots:
ee-first@1.1.1: {} ee-first@1.1.1: {}
electron-to-chromium@1.5.155: {} electron-to-chromium@1.5.157: {}
emoji-regex@10.4.0: {} emoji-regex@10.4.0: {}
@ -3892,7 +3902,7 @@ snapshots:
enhanced-resolve@5.18.1: enhanced-resolve@5.18.1:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
tapable: 2.2.1 tapable: 2.2.2
entities@4.5.0: {} entities@4.5.0: {}
@ -5304,14 +5314,14 @@ snapshots:
'@img/sharp-win32-x64': 0.33.5 '@img/sharp-win32-x64': 0.33.5
optional: true optional: true
sharp@0.34.1: sharp@0.34.2:
dependencies: dependencies:
color: 4.2.3 color: 4.2.3
detect-libc: 2.0.4 detect-libc: 2.0.4
semver: 7.7.2 semver: 7.7.2
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.1 '@img/sharp-darwin-arm64': 0.34.2
'@img/sharp-darwin-x64': 0.34.1 '@img/sharp-darwin-x64': 0.34.2
'@img/sharp-libvips-darwin-arm64': 1.1.0 '@img/sharp-libvips-darwin-arm64': 1.1.0
'@img/sharp-libvips-darwin-x64': 1.1.0 '@img/sharp-libvips-darwin-x64': 1.1.0
'@img/sharp-libvips-linux-arm': 1.1.0 '@img/sharp-libvips-linux-arm': 1.1.0
@ -5321,15 +5331,16 @@ snapshots:
'@img/sharp-libvips-linux-x64': 1.1.0 '@img/sharp-libvips-linux-x64': 1.1.0
'@img/sharp-libvips-linuxmusl-arm64': 1.1.0 '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
'@img/sharp-libvips-linuxmusl-x64': 1.1.0 '@img/sharp-libvips-linuxmusl-x64': 1.1.0
'@img/sharp-linux-arm': 0.34.1 '@img/sharp-linux-arm': 0.34.2
'@img/sharp-linux-arm64': 0.34.1 '@img/sharp-linux-arm64': 0.34.2
'@img/sharp-linux-s390x': 0.34.1 '@img/sharp-linux-s390x': 0.34.2
'@img/sharp-linux-x64': 0.34.1 '@img/sharp-linux-x64': 0.34.2
'@img/sharp-linuxmusl-arm64': 0.34.1 '@img/sharp-linuxmusl-arm64': 0.34.2
'@img/sharp-linuxmusl-x64': 0.34.1 '@img/sharp-linuxmusl-x64': 0.34.2
'@img/sharp-wasm32': 0.34.1 '@img/sharp-wasm32': 0.34.2
'@img/sharp-win32-ia32': 0.34.1 '@img/sharp-win32-arm64': 0.34.2
'@img/sharp-win32-x64': 0.34.1 '@img/sharp-win32-ia32': 0.34.2
'@img/sharp-win32-x64': 0.34.2
shiki@3.4.2: shiki@3.4.2:
dependencies: dependencies:
@ -5411,7 +5422,7 @@ snapshots:
tailwindcss@4.1.7: {} tailwindcss@4.1.7: {}
tapable@2.2.1: {} tapable@2.2.2: {}
tar@6.2.1: tar@6.2.1:
dependencies: dependencies:
@ -5450,7 +5461,7 @@ snapshots:
trough@2.2.0: {} trough@2.2.0: {}
tsconfck@3.1.5(typescript@5.8.3): tsconfck@3.1.6(typescript@5.8.3):
optionalDependencies: optionalDependencies:
typescript: 5.8.3 typescript: 5.8.3
@ -5575,7 +5586,7 @@ snapshots:
'@types/unist': 3.0.3 '@types/unist': 3.0.3
vfile-message: 4.0.2 vfile-message: 4.0.2
vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)): vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)):
dependencies: dependencies:
kolorist: 1.8.0 kolorist: 1.8.0
magic-string: 0.30.17 magic-string: 0.30.17
@ -5583,9 +5594,9 @@ snapshots:
simple-code-frame: 1.3.0 simple-code-frame: 1.3.0
source-map: 0.7.4 source-map: 0.7.4
stack-trace: 1.0.0-pre2 stack-trace: 1.0.0-pre2
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1): vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1):
dependencies: dependencies:
esbuild: 0.25.4 esbuild: 0.25.4
fdir: 6.4.4(picomatch@4.0.2) fdir: 6.4.4(picomatch@4.0.2)
@ -5594,14 +5605,14 @@ snapshots:
rollup: 4.41.0 rollup: 4.41.0
tinyglobby: 0.2.13 tinyglobby: 0.2.13
optionalDependencies: optionalDependencies:
'@types/node': 22.15.18 '@types/node': 22.15.21
fsevents: 2.3.3 fsevents: 2.3.3
jiti: 2.4.2 jiti: 2.4.2
lightningcss: 1.30.1 lightningcss: 1.30.1
vitefu@1.0.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)): vitefu@1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)):
optionalDependencies: optionalDependencies:
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1) vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)
web-namespaces@2.0.1: {} web-namespaces@2.0.1: {}
@ -5649,21 +5660,21 @@ snapshots:
yocto-queue@1.2.1: {} yocto-queue@1.2.1: {}
yocto-spinner@0.2.2: yocto-spinner@0.2.3:
dependencies: dependencies:
yoctocolors: 2.1.1 yoctocolors: 2.1.1
yoctocolors@2.1.1: {} yoctocolors@2.1.1: {}
zod-to-json-schema@3.24.5(zod@3.24.4): zod-to-json-schema@3.24.5(zod@3.25.23):
dependencies: dependencies:
zod: 3.24.4 zod: 3.25.23
zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.24.4): zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.23):
dependencies: dependencies:
typescript: 5.8.3 typescript: 5.8.3
zod: 3.24.4 zod: 3.25.23
zod@3.24.4: {} zod@3.25.23: {}
zwitch@2.0.4: {} zwitch@2.0.4: {}

View File

@ -242,9 +242,9 @@
{ {
"id": "yorfn8ku98u5o0jzvumo9q2v", "id": "yorfn8ku98u5o0jzvumo9q2v",
"visible": true, "visible": true,
"network": "Forgejo", "network": "Gitea",
"username": "atridad", "username": "atridad",
"icon": "forgejo", "icon": "gitea",
"url": { "url": {
"label": "", "label": "",
"href": "https://git.atri.dad/atridad" "href": "https://git.atri.dad/atridad"

View File

@ -0,0 +1,95 @@
import { useSignal } from "@preact/signals";
import { useEffect } from "preact/hooks";
interface Skill {
id: string;
name: string;
level: number;
}
interface SkillsSectionProps {
title: string;
skills: Skill[];
}
export default function SkillsSection({ title, skills }: SkillsSectionProps) {
const animatedLevels = useSignal<{ [key: string]: number }>({});
const hasAnimated = useSignal(false);
useEffect(() => {
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting && !hasAnimated.value) {
hasAnimated.value = true;
// Start animation for all skills
skills.forEach((skill) => {
animateSkill(skill.id, skill.level);
});
}
});
},
{ threshold: 0.3 }
);
const skillsElement = document.getElementById('skills-section');
if (skillsElement) {
observer.observe(skillsElement);
}
return () => {
if (skillsElement) {
observer.unobserve(skillsElement);
}
};
}, [skills]);
const animateSkill = (skillId: string, targetLevel: number) => {
const duration = 1500; // 1.5 seconds
const steps = 60; // 60 frames for smooth animation
const increment = targetLevel / steps;
let currentStep = 0;
const animate = () => {
if (currentStep <= steps) {
const currentValue = Math.min(increment * currentStep, targetLevel);
animatedLevels.value = {
...animatedLevels.value,
[skillId]: currentValue
};
currentStep++;
requestAnimationFrame(animate);
}
};
requestAnimationFrame(animate);
};
return (
<div id="skills-section" class="card bg-base-200 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title text-2xl">{title || "Skills"}</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
{skills.map((skill) => {
const currentLevel = animatedLevels.value[skill.id] || 0;
const progressValue = currentLevel * 20; // Convert 1-5 scale to 0-100
return (
<div key={skill.id}>
<label class="label">
<span class="label-text">{skill.name}</span>
</label>
<progress
class="progress progress-primary w-full transition-all duration-100 ease-out"
value={progressValue}
max="100"
>
</progress>
</div>
);
})}
</div>
</div>
</div>
);
}

View File

@ -3,6 +3,7 @@ import { Icon } from 'astro-icon/components';
import { readFile } from 'node:fs/promises'; import { readFile } from 'node:fs/promises';
import { join } from 'node:path'; import { join } from 'node:path';
import Layout from '../layouts/Layout.astro'; import Layout from '../layouts/Layout.astro';
import SkillsSection from '../components/SkillsSection.tsx';
import '../styles/global.css'; import '../styles/global.css';
interface ResumeData { interface ResumeData {
@ -133,26 +134,11 @@ const data = resumeData;
)} )}
{data.sections.skills && data.sections.skills.items && data.sections.skills.items.length > 0 && ( {data.sections.skills && data.sections.skills.items && data.sections.skills.items.length > 0 && (
<div class="card bg-base-200 shadow-xl mb-6"> <SkillsSection
<div class="card-body"> title={data.sections.skills.name}
<h2 class="card-title text-2xl">{data.sections.skills.name || "Skills"}</h2> skills={data.sections.skills.items}
<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> client:visible
{data.sections.skills.items.map((skill) => ( />
<div>
<label class="label">
<span class="label-text">{skill.name}</span>
</label>
<progress
class="progress progress-primary w-full"
value={skill.level * 20}
max="100"
>
</progress>
</div>
))}
</div>
</div>
</div>
)} )}
{data.sections.experience && data.sections.experience.items && data.sections.experience.items.length > 0 && ( {data.sections.experience && data.sections.experience.items && data.sections.experience.items.length > 0 && (