diff --git a/app/components/common/article/article.module.less b/app/components/common/article/article.module.less index 4f34906..feed626 100644 --- a/app/components/common/article/article.module.less +++ b/app/components/common/article/article.module.less @@ -9,6 +9,61 @@ } } + h2, h3 { + font-size: 1.2em; + } + + h1 { + margin-top: 5rem; + font-size: 1.75em; + position: relative; + margin-bottom: 1em; + padding-bottom: .25em; + display: inline-block; + scroll-margin-top: 7em; + + &:first-child { + margin-top: 0; + } + + &::before { + content: ""; + left: 0; + bottom: 0; + position: absolute; + + width: 1.5em; + height: 4px; + display: block; + border-radius: 4px; + background-color: rgb(244 114 182 / var(--tw-text-opacity)); + } + } + + h2 { + margin-top: 2em; + scroll-margin-top: 4em; + + &:first-child { + margin-top: 0; + } + } + + a { + color:rgb(244 114 182 / var(--tw-bg-opacity)); + } + + img { + border-radius: .75rem; + } + + em { + font-size: smaller; + font-style: normal; + padding: .15rem .5rem; + border-radius: .75rem; + } + pre { tab-size: 4; padding: 1em; diff --git a/app/root.tsx b/app/root.tsx index 94c344e..48e3be3 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -7,13 +7,56 @@ import { Outlet, Scripts, ScrollRestoration, + isRouteErrorResponse, + useRouteError, } from "@remix-run/react"; import Header from "./components/layout/header"; import Spinner from "./components/common/spinner"; import Footer from "./components/layout/footer"; +import { siteTitle } from "~/utils"; import "./index.css"; +export function ErrorBoundary() { + const error = useRouteError(); + const isRouteError = isRouteErrorResponse(error); + + const [statusCode, message] = (() => { + if (isRouteError) { + return [error.status, error.statusText]; + } + + if (error instanceof Error) { + return [500, error.message]; + } + + return [500, "未知异常"]; + })(); + + return ( + + + + + {siteTitle(statusCode)} + + + + +
+
+

+ {statusCode} +

+

{message}

+
+