diff --git a/app/(landing)/landing.css b/app/(landing)/landing.css
index 86cc246..81d7a25 100644
--- a/app/(landing)/landing.css
+++ b/app/(landing)/landing.css
@@ -161,11 +161,16 @@
/* Resource showcase: a single row of square tiles */
.landing-root .landing-showcase {
- display: grid; grid-template-columns: repeat(6, 1fr);
- gap: 1px; background: var(--ln-border); border: 1px solid var(--ln-border);
+ display: grid; grid-template-columns: repeat(7, 1fr);
+ /* Hairlines come from each tile's right/bottom border rather than a grey
+ container showing through 1px gaps โ so an incomplete final row leaves
+ no filled-in grey cells. */
+ gap: 0; background: transparent;
+ border: 1px solid var(--ln-border); border-right: 0; border-bottom: 0;
}
.landing-root .landing-tile {
background: var(--ln-bg); aspect-ratio: 1 / 1;
+ border-right: 1px solid var(--ln-border); border-bottom: 1px solid var(--ln-border);
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 14px; padding: 20px; text-align: center;
transition: background 0.3s ease;
@@ -178,6 +183,7 @@
}
.landing-root .landing-tile:hover .landing-tile-visual { transform: translateY(-2px); }
.landing-root .landing-tile-visual svg { width: 100%; height: 100%; }
+.landing-root .landing-tile-visual img { width: 100%; height: 100%; object-fit: contain; }
.landing-root .landing-tile-title {
font-size: 0.75rem; letter-spacing: 0.04em; color: var(--ln-text-dim);
transition: color 0.3s ease;
diff --git a/app/(resources)/resources.css b/app/(resources)/resources.css
index 16bb357..941ebaf 100644
--- a/app/(resources)/resources.css
+++ b/app/(resources)/resources.css
@@ -220,6 +220,12 @@
height: 100%;
}
+.resources-root .resources-card-icon img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+}
+
.resources-root .resources-card-has-icon .resources-card-num {
padding-right: 60px;
}
diff --git a/app/(resources)/resources/page.tsx b/app/(resources)/resources/page.tsx
index 72b370c..e42e2aa 100644
--- a/app/(resources)/resources/page.tsx
+++ b/app/(resources)/resources/page.tsx
@@ -8,7 +8,6 @@ import {
CubeIcon,
KeyIcon,
GridIcon,
- HackBuildIcon,
} from '@/components/resources/icons'
import { AtlasLogo } from '@/components/resources/atlas-logo'
@@ -124,7 +123,7 @@ export default function ResourcesLandingPage() {
title="Hacking Your Hackerspace"
description="A talk on the patterns, pitfalls, and governance lessons behind keeping a hackerspace alive โ the research from these projects, condensed into one interactive session."
type="Talk ยท Interactive"
- visual={}
+ visual={
}
/>
diff --git a/components/landing/resource-showcase.tsx b/components/landing/resource-showcase.tsx
index 26b217e..c2138bd 100644
--- a/components/landing/resource-showcase.tsx
+++ b/components/landing/resource-showcase.tsx
@@ -1,6 +1,6 @@
import Link from 'next/link'
import { AtlasLogo } from '@/components/resources/atlas-logo'
-import { CubeIcon, TraceIcon, SpaceIcon, GridIcon, KeyIcon, HackBuildIcon } from '@/components/resources/icons'
+import { CubeIcon, TraceIcon, SpaceIcon, GridIcon, KeyIcon } from '@/components/resources/icons'
// The hackerspace.sh research/game projects, shown as a single row of square
// tiles at the foot of the landing page. Internal routes use next/link;
@@ -13,7 +13,7 @@ const RESOURCES = [
{ title: 'The Hackerspace Game', href: '/zine', external: false, visual: },
{ title: 'Interactive Learner', href: 'https://hackerspacegame.netlify.app/', external: true, visual: },
{ title: 'Governance in a Box', href: '/governance', external: false, visual: },
- { title: 'Hacking Your Hackerspace', href: 'https://hack.build/hacking-your-hackerspace.html', external: true, visual: },
+ { title: 'Hacking Your Hackerspace', href: 'https://hack.build/hacking-your-hackerspace.html', external: true, visual:
},
]
export function ResourceShowcase() {
diff --git a/components/resources/icons.tsx b/components/resources/icons.tsx
index 5d22a22..27aae9c 100644
--- a/components/resources/icons.tsx
+++ b/components/resources/icons.tsx
@@ -123,19 +123,3 @@ export function PlayIcon(props: IconProps) {
)
}
-
-// hack.build โ the brand's hot-pink open-end wrench (an open "C" head at the
-// top-right with a diagonal handle to the lower-left).
-export function HackBuildIcon(props: IconProps) {
- return (
-
- )
-}
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c..c4b7818 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/public/hackbuild-mark.png b/public/hackbuild-mark.png
new file mode 100644
index 0000000..073420e
Binary files /dev/null and b/public/hackbuild-mark.png differ