diff options
| author | Jay V <[email protected]> | 2025-09-04 01:39:54 -0700 |
|---|---|---|
| committer | Jay V <[email protected]> | 2025-09-04 01:39:54 -0700 |
| commit | 85ac2437523a3dbe3a81f6698c235c5d7ec89cc2 (patch) | |
| tree | d61c84a2b5f1d9ef7f7cd352c2779e6b2fa30d2c /cloud/app | |
| parent | 03522471a17576161b3c7aadd9a12c55e3b37a27 (diff) | |
| download | opencode-85ac2437523a3dbe3a81f6698c235c5d7ec89cc2.tar.gz opencode-85ac2437523a3dbe3a81f6698c235c5d7ec89cc2.zip | |
ignore: 404
Diffstat (limited to 'cloud/app')
| -rw-r--r-- | cloud/app/src/routes/[...404].css | 130 | ||||
| -rw-r--r-- | cloud/app/src/routes/[...404].tsx | 45 |
2 files changed, 162 insertions, 13 deletions
diff --git a/cloud/app/src/routes/[...404].css b/cloud/app/src/routes/[...404].css new file mode 100644 index 000000000..1edbd0a5a --- /dev/null +++ b/cloud/app/src/routes/[...404].css @@ -0,0 +1,130 @@ +[data-page="not-found"] { + --color-text: hsl(224, 10%, 10%); + --color-text-secondary: hsl(224, 7%, 46%); + --color-text-dimmed: hsl(224, 6%, 63%); + --color-text-inverted: hsl(0, 0%, 100%); + + --color-border: hsl(224, 6%, 77%); +} + +[data-page="not-found"] { + @media (prefers-color-scheme: dark) { + --color-text: hsl(0, 0%, 100%); + --color-text-secondary: hsl(224, 6%, 66%); + --color-text-dimmed: hsl(224, 7%, 46%); + --color-text-inverted: hsl(224, 10%, 10%); + + --color-border: hsl(224, 6%, 36%); + } +} + +[data-page="not-found"] { + --padding: 3rem; + --vertical-padding: 1.5rem; + --heading-font-size: 1.375rem; + + @media (max-width: 30rem) { + --padding: 1rem; + --vertical-padding: 0.75rem; + --heading-font-size: 1rem; + } + + font-family: var(--font-mono); + color: var(--color-text); + padding: calc(var(--padding) + 1rem); + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + + a { + color: var(--color-text); + text-decoration: underline; + text-underline-offset: var(--space-0-75); + text-decoration-thickness: 1px; + } + + [data-component="content"] { + max-width: 40rem; + width: 100%; + border: 1px solid var(--color-border); + } + + [data-component="top"] { + padding: var(--padding); + display: flex; + flex-direction: column; + align-items: center; + gap: calc(var(--vertical-padding) / 2); + text-align: center; + + [data-slot="logo-link"] { + text-decoration: none; + } + + img { + height: auto; + width: clamp(200px, 85vw, 400px); + } + + [data-slot="logo dark"] { + display: none; + } + + @media (prefers-color-scheme: dark) { + [data-slot="logo light"] { + display: none; + } + [data-slot="logo dark"] { + display: block; + } + } + + [data-slot="title"] { + line-height: 1.25; + font-weight: 500; + text-align: center; + font-size: var(--heading-font-size); + color: var(--color-text); + text-transform: uppercase; + margin: 0; + } + } + + [data-component="actions"] { + border-top: 1px solid var(--color-border); + display: flex; + + [data-slot="action"] { + flex: 1; + text-align: center; + line-height: 1.4; + padding: var(--vertical-padding) 1rem; + text-transform: uppercase; + font-size: 1rem; + + a { + display: block; + width: 100%; + height: 100%; + color: var(--color-text); + text-decoration: underline; + text-underline-offset: var(--space-0-75); + text-decoration-thickness: 1px; + } + } + + [data-slot="action"] + [data-slot="action"] { + border-left: 1px solid var(--color-border); + } + + @media (max-width: 40rem) { + flex-direction: column; + + [data-slot="action"] + [data-slot="action"] { + border-left: none; + border-top: 1px solid var(--color-border); + } + } + } +} diff --git a/cloud/app/src/routes/[...404].tsx b/cloud/app/src/routes/[...404].tsx index 4ea71ec7f..ba2842b5a 100644 --- a/cloud/app/src/routes/[...404].tsx +++ b/cloud/app/src/routes/[...404].tsx @@ -1,19 +1,38 @@ -import { Title } from "@solidjs/meta"; -import { HttpStatusCode } from "@solidjs/start"; +import "./[...404].css" +import { Title } from "@solidjs/meta" +import { HttpStatusCode } from "@solidjs/start" +import logoLight from "../asset/logo-ornate-light.svg" +import logoDark from "../asset/logo-ornate-dark.svg" export default function NotFound() { return ( - <main> - <Title>Not Found</Title> + <main data-page="not-found"> + <Title>Not Found | opencode</Title> <HttpStatusCode code={404} /> - <h1>Page Not Found</h1> - <p> - Visit{" "} - <a href="https://start.solidjs.com" target="_blank"> - start.solidjs.com - </a>{" "} - to learn how to build SolidStart apps. - </p> + <div data-component="content"> + <section data-component="top"> + <a href="/" data-slot="logo-link"> + <img data-slot="logo light" src={logoLight} alt="opencode logo light" /> + <img data-slot="logo dark" src={logoDark} alt="opencode logo dark" /> + </a> + <h1 data-slot="title">404 - Page Not Found</h1> + </section> + + <section data-component="actions"> + <div data-slot="action"> + <a href="/">Home</a> + </div> + <div data-slot="action"> + <a href="/docs">Docs</a> + </div> + <div data-slot="action"> + <a href="https://github.com/sst/opencode">GitHub</a> + </div> + <div data-slot="action"> + <a href="/discord">Discord</a> + </div> + </section> + </div> </main> - ); + ) } |
