86 lines
3.5 KiB
HTML
86 lines
3.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" data-theme="dark">
|
|
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Error {{ error.code or 500 }}</title>
|
|
<meta name="theme-color" content="#0f1115" />
|
|
<link rel="preload" href="{{ url_for('static', filename='css/main.css') }}" as="style">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
|
</head>
|
|
|
|
<body>
|
|
<header class="site-header">
|
|
<div class="brand">
|
|
<svg aria-hidden="true" width="24" height="24" viewBox="0 0 24 24">
|
|
<path d="M4 4h16v4H4zM4 10h10v4H4zM4 16h16v4H4z" fill="currentColor" />
|
|
</svg>
|
|
<span>Hosts Converter</span>
|
|
</div>
|
|
<nav class="actions">
|
|
<button class="btn ghost" type="button" data-action="toggle-theme" aria-label="Toggle theme">🌓</button>
|
|
<a class="btn primary" href="/" rel="nofollow">Home</a>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="container">
|
|
<section class="card error-card">
|
|
<div class="error-hero">
|
|
<div class="error-illustration" aria-hidden="true">⚠️</div>
|
|
|
|
<div class="error-main">
|
|
<div class="status-badge">Error {{ error.code or 500 }}</div>
|
|
<h1 class="error-title">
|
|
{% if (error.code or 500) == 400 %}Bad request
|
|
{% elif (error.code or 500) == 403 %}Forbidden
|
|
{% elif (error.code or 500) == 404 %}Not found
|
|
{% elif (error.code or 500) == 413 %}Payload too large
|
|
{% elif (error.code or 500) == 415 %}Unsupported media type
|
|
{% elif (error.code or 500) == 500 %}Internal server error
|
|
{% else %}Something went wrong
|
|
{% endif %}
|
|
</h1>
|
|
<p class="muted">{{ (error.description|string)|e }}</p>
|
|
|
|
<div class="error-actions">
|
|
<button class="btn" type="button" data-action="try-again">Try again</button>
|
|
<a class="btn outline" href="/" rel="nofollow">Go home</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<details class="error-details">
|
|
<summary>
|
|
<span class="summary-title">Error details</span>
|
|
<span class="summary-hint">click to expand</span>
|
|
</summary>
|
|
<div class="details-body">
|
|
<pre id="error-dump" class="mono">
|
|
code: {{ error.code or 500 }}
|
|
message: {{ (error.description|string) }}
|
|
path: {{ request.path if request else '/' }}
|
|
method: {{ request.method if request else 'GET' }}
|
|
user_ip: {{ request.remote_addr if request else '' }}
|
|
user_agent: {{ request.headers.get('User-Agent') if request else '' }}
|
|
</pre>
|
|
<div class="details-actions">
|
|
|
|
</div>
|
|
</div>
|
|
</details>
|
|
</section>
|
|
</main>
|
|
|
|
<footer class="site-footer">
|
|
<div>© 2025 <a href="https://www.linuxiarz.pl" target="_blank" rel="noopener">linuxiarz.pl</a></div>
|
|
<div class="meta">Your IP: <strong>{{ request.remote_addr if request else '' }}</strong></div>
|
|
</footer>
|
|
|
|
<div id="toast" role="status" aria-live="polite" aria-atomic="true"></div>
|
|
|
|
<script defer src="{{ url_for('static', filename='js/main.js') }}"></script>
|
|
<script defer src="{{ url_for('static', filename='js/error.js') }}"></script>
|
|
</body>
|
|
|
|
</html> |