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