turn the terminal/Gruvbox theme into the skeuo console

- rename the theme everywhere: id terminal -> skeuo, desktop sim skeuo -> desktop,
  skeleton terminal shell -> SkeuoLayout, page.css -> shared.css (shared components),
  old skeuo.css -> desktop.css, storage key theme -> dmx-theme (with migration)
- rebuild the theme as a walnut-and-aluminium home-lab console: brass plates, patch bay,
  analogue gym gauges, clipboard, stitched leather logbook, service rack with pilot lamps,
  framed print, chart recorder, cartridge, software box, pegboard tags, card-index drawer
- all materials are CSS + inline-SVG noise (no texture images); Barlow Semi Condensed +
  Courier Prime via next/font with fallbacks
- desktop mode is now phone-only (<=768px): switch hidden above that, stored desktop
  preference overridden, sim never mounted on wide viewports
- drop the ASCII train background and its gruvbox.webp asset
This commit is contained in:
Martin Dvořák 2026-09-30 10:46:24 +00:00
commit d3f953e4a2
17 changed files with 4439 additions and 2834 deletions

View file

@ -1,8 +1,28 @@
import type { Metadata } from "next";
// Removed unused google fonts since we use local Custom Mono
import { Barlow_Semi_Condensed, Courier_Prime } from "next/font/google";
import "./globals.css";
import ThemeScript from "./components/ThemeScript";
// The skeuo theme's two voices: an engraved-panel grotesque for metal
// (labels, headings, controls) and a typewriter for anything on paper.
// Both get an explicit fallback stack so the page still reads correctly
// if the webfont never arrives.
const panel = Barlow_Semi_Condensed({
variable: "--font-panel",
subsets: ["latin"],
weight: ["500", "600", "700"],
display: "swap",
fallback: ["Arial Narrow", "Helvetica Neue", "Arial", "sans-serif"],
});
const typewriter = Courier_Prime({
variable: "--font-typewriter",
subsets: ["latin"],
weight: ["400", "700"],
display: "swap",
fallback: ["Courier New", "Courier", "monospace"],
});
export const metadata: Metadata = {
title: "dvorakmortonxd.dev",
description: "Martin Dvořák's personal website.",
@ -25,7 +45,12 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
<html lang="en" data-theme="skeuo" suppressHydrationWarning>
<html
lang="en"
data-theme="skeuo"
suppressHydrationWarning
className={`${panel.variable} ${typewriter.variable}`}
>
<body className="antialiased">
<ThemeScript />
{children}