+
{!formState.success && (
)}
+
{!pending && formState.message && (
- {formState.success ? (
-
- ) : (
-
- )}{" "}
- {formState.message}
+ {formState.success ? : }{" "}
+ {formState.message}
)}
diff --git a/app/contact/page.tsx b/app/contact/page.tsx
index 7d4fb13c..e6995a16 100644
--- a/app/contact/page.tsx
+++ b/app/contact/page.tsx
@@ -1,4 +1,4 @@
-import PageTitle from "@/components/page-title";
+import PageTitle from "@/components/layout/page-title";
import Link from "@/components/link";
import { createMetadata } from "@/lib/metadata";
diff --git a/app/globals.css b/app/globals.css
index 350ed1ab..0b86c5bf 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -2,51 +2,53 @@
@custom-variant dark (&:where([data-theme=dark] *));
-:root {
- --radius: 0.625rem;
- --background: oklch(1 0 0);
- --foreground: oklch(0.141 0.005 285.823);
- --card: oklch(1 0 0);
- --card-foreground: oklch(0.141 0.005 285.823);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.141 0.005 285.823);
- --primary: oklch(0.5 0.134 242.749);
- --primary-foreground: oklch(0.97 0.014 254.604);
- --secondary: oklch(0.967 0.001 286.375);
- --secondary-foreground: oklch(0.21 0.006 285.885);
- --muted: oklch(0.967 0.001 286.375);
- --muted-foreground: oklch(0.552 0.016 285.938);
- --accent: oklch(0.967 0.001 286.375);
- --accent-foreground: oklch(0.21 0.006 285.885);
- --destructive: oklch(0.577 0.245 27.325);
- --warning: oklch(0.67 0.179 58.318);
- --success: oklch(0.63 0.194 149.214);
- --border: oklch(0.92 0.004 286.32);
- --input: oklch(0.92 0.004 286.32);
- --ring: oklch(0.705 0.015 286.067);
-}
+@layer base {
+ :root {
+ --radius: 0.625rem;
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.141 0.005 285.823);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.141 0.005 285.823);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.141 0.005 285.823);
+ --primary: oklch(0.5 0.134 242.749);
+ --primary-foreground: oklch(0.97 0.014 254.604);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --muted: oklch(0.967 0.001 286.375);
+ --muted-foreground: oklch(0.552 0.016 285.938);
+ --accent: oklch(0.967 0.001 286.375);
+ --accent-foreground: oklch(0.21 0.006 285.885);
+ --destructive: oklch(0.577 0.245 27.325);
+ --warning: oklch(0.67 0.179 58.318);
+ --success: oklch(0.63 0.194 149.214);
+ --border: oklch(0.92 0.004 286.32);
+ --input: oklch(0.92 0.004 286.32);
+ --ring: oklch(0.705 0.015 286.067);
+ }
-[data-theme="dark"] {
- --background: oklch(0.205 0 0);
- --foreground: oklch(0.985 0 0);
- --card: oklch(0.21 0.006 285.885);
- --card-foreground: oklch(0.985 0 0);
- --popover: oklch(0.21 0.006 285.885);
- --popover-foreground: oklch(0.985 0 0);
- --primary: oklch(0.81 0.105 251.813);
- --primary-foreground: oklch(0.18 0.0374 265.522);
- --secondary: oklch(0.274 0.006 286.033);
- --secondary-foreground: oklch(0.985 0 0);
- --muted: oklch(0.274 0.006 286.033);
- --muted-foreground: oklch(0.705 0.015 286.067);
- --accent: oklch(0.274 0.006 286.033);
- --accent-foreground: oklch(0.985 0 0);
- --destructive: oklch(0.704 0.191 22.216);
- --warning: oklch(0.8 0.184 86.047);
- --success: oklch(0.79 0.209 151.711);
- --border: oklch(1 0 0 / 10%);
- --input: oklch(1 0 0 / 15%);
- --ring: oklch(0.552 0.016 285.938);
+ [data-theme="dark"] {
+ --background: oklch(0.205 0 0);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.21 0.006 285.885);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.21 0.006 285.885);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.81 0.105 251.813);
+ --primary-foreground: oklch(0.18 0.0374 265.522);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.274 0.006 286.033);
+ --muted-foreground: oklch(0.705 0.015 286.067);
+ --accent: oklch(0.274 0.006 286.033);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --warning: oklch(0.8 0.184 86.047);
+ --success: oklch(0.79 0.209 151.711);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.552 0.016 285.938);
+ }
}
@theme inline {
@@ -58,8 +60,6 @@
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
- --container-default: var(--container-4xl);
-
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
@@ -85,10 +85,13 @@
@theme {
--animate-wave: wave 5s ease 1s infinite;
--animate-heartbeat: heartbeat 10s ease 7.5s infinite;
- --animate-loading: animation: loading 1.5s infinite ease-in-out both;
+ --animate-loading: loading 1.5s infinite ease-in-out both;
+ --animate-marquee: marquee 30s infinite linear;
@keyframes wave {
- 0% {
+ 0%,
+ 30%,
+ 100% {
transform: rotate(0deg);
}
5% {
@@ -106,33 +109,21 @@
25% {
transform: rotate(10deg);
}
- 30% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(0deg);
- }
}
@keyframes heartbeat {
- 0% {
+ 0%,
+ 4%,
+ 8%,
+ 100% {
transform: scale(1);
}
2% {
transform: scale(1.25);
}
- 4% {
- transform: scale(1);
- }
6% {
transform: scale(1.2);
}
- 8% {
- transform: scale(1);
- }
- 100% {
- transform: scale(1);
- }
}
@keyframes loading {
@@ -145,4 +136,47 @@
transform: scale(0.6);
}
}
+
+ @keyframes marquee {
+ from {
+ transform: translateX(0);
+ }
+ to {
+ transform: translateX(calc(-100% - var(--gap)));
+ }
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+
+ body {
+ @apply bg-background text-foreground;
+ font-synthesis-weight: none;
+ font-variant-ligatures: none;
+ text-rendering: optimizeLegibility;
+ }
+
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+ ::-webkit-scrollbar-track {
+ background: transparent;
+ }
+ ::-webkit-scrollbar-thumb {
+ background: var(--border);
+ border-radius: 5px;
+ }
+ * {
+ scrollbar-width: thin;
+ scrollbar-color: var(--border) transparent;
+ }
+}
+
+@layer components {
+ .youtube-embed {
+ @import "react-lite-youtube-embed/dist/LiteYouTubeEmbed.css";
+ }
}
diff --git a/app/hillary/page.tsx b/app/hillary/page.tsx
index 07f93659..90ea0aa8 100644
--- a/app/hillary/page.tsx
+++ b/app/hillary/page.tsx
@@ -1,6 +1,6 @@
import { env } from "@/lib/env";
import { JsonLd } from "react-schemaorg";
-import PageTitle from "@/components/page-title";
+import PageTitle from "@/components/layout/page-title";
import Link from "@/components/link";
import Video from "@/components/video";
import { createMetadata } from "@/lib/metadata";
diff --git a/app/layout.tsx b/app/layout.tsx
index 0834e068..b7db636d 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -5,27 +5,24 @@ import { ThemeProvider, ThemeScript } from "@/components/layout/theme-context";
import Header from "@/components/layout/header";
import Footer from "@/components/layout/footer";
import { SkipNavLink, SkipNavTarget } from "@/components/layout/skip-nav";
-import { cn } from "@/lib/utils";
import { defaultMetadata } from "@/lib/metadata";
+import { GeistMono, GeistSans } from "@/lib/fonts";
import siteConfig from "@/lib/config/site";
import authorConfig from "@/lib/config/author";
import type { Person, WebSite } from "schema-dts";
-import { GeistMono, GeistSans } from "./fonts";
import "./globals.css";
export const metadata = defaultMetadata;
const RootLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
return (
-
+
+
+
item={{
"@context": "https://schema.org",
@@ -67,7 +64,7 @@ const RootLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
-
+
diff --git a/app/leo/page.tsx b/app/leo/page.tsx
index b5f0020c..bff75434 100644
--- a/app/leo/page.tsx
+++ b/app/leo/page.tsx
@@ -1,6 +1,6 @@
import { env } from "@/lib/env";
import { JsonLd } from "react-schemaorg";
-import PageTitle from "@/components/page-title";
+import PageTitle from "@/components/layout/page-title";
import Link from "@/components/link";
import Video from "@/components/video";
import { createMetadata } from "@/lib/metadata";
diff --git a/app/license/page.mdx b/app/license/page.mdx
index 40ec0e8e..522cba6a 100644
--- a/app/license/page.mdx
+++ b/app/license/page.mdx
@@ -1,4 +1,4 @@
-import PageTitle from "@/components/page-title";
+import PageTitle from "@/components/layout/page-title";
import { createMetadata } from "@/lib/metadata";
export const metadata = createMetadata({
diff --git a/app/notes/[slug]/page.tsx b/app/notes/[slug]/page.tsx
index fcfbdcc7..a667f5c4 100644
--- a/app/notes/[slug]/page.tsx
+++ b/app/notes/[slug]/page.tsx
@@ -85,20 +85,23 @@ const Page = async ({ params }: { params: Promise<{ slug: string }> }) => {
}}
/>
-
-
-
+
+
+
{frontmatter!.tags && (
-
-
+
+
{frontmatter!.tags.map((tag) => (
{tag}
@@ -110,14 +113,14 @@ const Page = async ({ params }: { params: Promise<{ slug: string }> }) => {
-
+
Improve This Post
-
-
+
+
{
href="https://jrvs.io/pgp"
rel="pgpkey"
title="My Public Key"
- className="text-muted-foreground hover:decoration-muted-foreground/40 text-nowrap hover:decoration-1"
+ className="text-muted-foreground hover:decoration-muted-foreground/40 text-nowrap hover:decoration-1 hover:underline-offset-4"
>
-
+
2B0C 9CF2 51E6 9A39
diff --git a/app/previously/page.mdx b/app/previously/page.mdx
index d27c7120..f3a0017d 100644
--- a/app/previously/page.mdx
+++ b/app/previously/page.mdx
@@ -1,6 +1,7 @@
-import { Comic_Neue as ComicNeueLoader } from "next/font/google";
-import PageTitle from "@/components/page-title";
+import PageTitle from "@/components/layout/page-title";
+import Marquee from "@/components/marquee";
import { createMetadata } from "@/lib/metadata";
+import { ComicNeue } from "@/lib/fonts";
export const metadata = createMetadata({
title: "Previously on...",
@@ -8,45 +9,42 @@ export const metadata = createMetadata({
canonical: "/previously",
});
-export const ComicNeue = ComicNeueLoader({
- weight: ["400", "700"],
- style: ["normal", "italic"],
- subsets: ["latin"],
- display: "swap",
- fallback: ["'Comic Sans MS'", "'Comic Sans'"],
- adjustFontFallback: false,
- variable: "--font-comic-neue",
- preload: false,
-});
+export const WarningMarquee = () => (
+
+);
export const PageStyles = () => (
-
+
);
export const WindowsLogo = () => (
@@ -56,7 +54,7 @@ export const WindowsLogo = () => (
stroke="currentColor"
strokeWidth="0"
viewBox="0 0 24 24"
- className="inline size-[16px] align-text-top"
+ className="inline size-4 align-text-top"
>
@@ -73,9 +71,9 @@ _Previously on the [Cringey Chronicles™](https://web.archive.org/web/20010
---
-🚨 Trigger warning: excessive marquees, animated GIFs, Comic Sans, popups, color: limegreen
ahead...
+
-[ Click here for the _full_ experience anyway.](https://y2k.pages.dev)
+[ Click here for the _full_ experience (at your own risk).](https://y2k.pages.dev)