Files
Flash5/src/main/resources/assets/html/default_exception.html
T
2026-03-15 01:54:35 +01:00

172 lines
3.9 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>500 — Flash</title>
<style>
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box }
:root {
--bg: #0c0c0c;
--text: #a0a0a0;
--muted: #555;
--faint: #333;
--surface: #1a1a1a;
--border: #2a2a2a;
--token-path: #7ab0ff;
--token-method: #c4b5fd;
--heading: #e8e8e8;
--divider-bg: #442222;
--err-label: #f87171;
--err-msg: #fca5a5;
--code-bg: #111;
--code-border: #222;
}
@media (prefers-color-scheme: light) {
:root {
--bg: #f5f5f5;
--text: #555;
--muted: #999;
--faint: #bbb;
--surface: #efefef;
--border: #ddd;
--token-path: #2563eb;
--token-method: #7c3aed;
--heading: #111;
--divider-bg: #f5c5c5;
--err-label: #dc2626;
--err-msg: #ef4444;
--code-bg: #f9f9f9;
--code-border: #ddd;
}
}
html { height: 100% }
body {
min-height: 100vh;
display: flex;
flex-direction: column;
font: 15px/1.5 'SF Mono', ui-monospace, 'Cascadia Code', Menlo, monospace;
background: var(--bg);
color: var(--text);
}
.wrap {
flex: 1;
display: grid;
place-items: center;
padding: 40px 24px;
}
main { max-width: 560px; width: 100% }
.code {
font-size: 72px;
font-weight: 700;
letter-spacing: -3px;
color: var(--heading);
line-height: 1;
margin-bottom: 20px;
}
.divider {
width: 48px;
height: 2px;
background: var(--divider-bg);
margin-bottom: 20px;
}
.route {
display: inline-block;
padding: 3px 8px;
border-radius: 4px;
background: var(--surface);
border: 1px solid var(--border);
font-size: 13px;
word-break: break-all;
}
.method { color: var(--token-method) }
.path { color: var(--token-path) }
.exc-type {
margin-top: 20px;
color: var(--err-label);
font-size: 13px;
font-weight: 600;
}
.exc-msg { color: var(--err-msg); font-weight: 400 }
.trace {
margin-top: 16px;
padding: 10px 12px;
border-radius: 4px;
background: var(--code-bg);
border: 1px solid var(--code-border);
color: var(--muted);
font-size: 11px;
white-space: pre-wrap;
max-height: 200px;
overflow-y: auto;
word-break: break-all;
}
.proto {
color: var(--faint);
font-size: 11px;
margin-top: 24px;
}
footer {
border-top: 1px solid var(--border);
padding: 12px 24px;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
color: var(--muted);
font-size: 11px;
}
.footer-logo {
height: 14px;
width: auto;
opacity: 0.55;
vertical-align: middle;
}
.footer-brand { color: var(--text); font-weight: 600 }
.sep { color: var(--faint); font-size: 14px; line-height: 1 }
time { font-variant-numeric: tabular-nums }
</style>
</head>
<body>
<div class="wrap">
<main>
<div class="code">500</div>
<div class="divider"></div>
<p><span class="route"><span class="method">{{method}}</span> <span class="path">{{path}}</span></span></p>
<p class="exc-type">{{exception_type}}<span class="exc-msg">: {{exception_message}}</span></p>
<pre class="trace">{{stacktrace}}</pre>
<p class="proto">{{protocol}}</p>
</main>
</div>
<footer>
{{logo_img}}
<span class="footer-brand">Flash 5</span>
<span class="sep">·</span>
<span>v{{version}}</span>
<span class="sep">·</span>
<time>{{timestamp}}</time>
</footer>
</body>
</html>