diff --git a/site/src/components/FilmGrain/FilmGrain.tsx b/site/src/components/FilmGrain/FilmGrain.tsx
new file mode 100644
index 00000000..9180f3ac
--- /dev/null
+++ b/site/src/components/FilmGrain/FilmGrain.tsx
@@ -0,0 +1,29 @@
+import clsx from 'clsx';
+import { twMerge } from 'tailwind-merge';
+import texture from './texture.svg?raw';
+
+const textureUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(texture)}`;
+
+interface Props {
+ currentPath: string;
+ className?: string;
+}
+
+export default function FilmGrain({ currentPath, className }: Props) {
+ return (
+
+ );
+}
diff --git a/site/src/components/FilmGrain/index.ts b/site/src/components/FilmGrain/index.ts
new file mode 100644
index 00000000..1db5951d
--- /dev/null
+++ b/site/src/components/FilmGrain/index.ts
@@ -0,0 +1 @@
+export { default } from './FilmGrain';
diff --git a/site/src/components/FilmGrain/texture.svg b/site/src/components/FilmGrain/texture.svg
new file mode 100644
index 00000000..902c0f53
--- /dev/null
+++ b/site/src/components/FilmGrain/texture.svg
@@ -0,0 +1,7 @@
+
diff --git a/site/src/components/NavBar/MobileNav.tsx b/site/src/components/NavBar/MobileNav.tsx
index 08b9c022..44d2da29 100644
--- a/site/src/components/NavBar/MobileNav.tsx
+++ b/site/src/components/NavBar/MobileNav.tsx
@@ -2,6 +2,7 @@ import { Dialog } from '@base-ui-components/react/dialog';
import clsx from 'clsx';
import { ArrowUpRight, Menu, X } from 'lucide-react';
import { DISCORD_INVITE_URL, GITHUB_REPO_URL } from '@/consts';
+import FilmGrain from '../FilmGrain';
interface NavLink {
href: string;
@@ -32,6 +33,7 @@ export default function MobileNav({ navLinks, currentPath, dark = false, childre
{/* Popup container */}
+
{/* Header with close button */}
Navigation
-
Video.js
+
Video.js v10
- {/* Children */}
- {children ? {children}
: null}
+ {/* Astro makes it hard to know if we have children, so, we use -mt-px to hide the border-b if we don't */}
+
+ {children}
+
{/* Navigation links */}