Repository navigation
Expand file tree
/
Copy path404.html
More file actions
70 lines (68 loc) · 3.51 KB
/
Copy path404.html
File metadata and controls
70 lines (68 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page introuvable — Démo OTSPI</title>
<meta name="robots" content="noindex">
<meta name="color-scheme" content="light dark">
<link rel="icon" type="image/svg+xml" href="/icon.svg">
<script>
(function() {
const saved = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.setAttribute('data-theme', saved || (prefersDark ? 'dark' : 'light'));
})();
</script>
<link rel="stylesheet" href="/style.css">
<style>
.error-page { max-width: 40rem; margin: 4rem auto; padding: 0 1.25rem; }
.error-code { display: inline-block; font-size: .8rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--brand-primary); background: var(--brand-primary-glow); border-radius: var(--radius-full); padding: .25rem .75rem; }
.error-page h1 { margin: 1rem 0 .5rem; line-height: 1.2; }
.error-page p { color: var(--text-muted); }
.error-actions { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 1.5rem; }
.error-actions a { display: inline-flex; align-items: center; min-height: 44px; padding: .75rem 1.35rem; border-radius: var(--radius-md); font-weight: 700; font-size: .9rem; text-decoration: none; }
.error-actions .link-primary { background: var(--brand-primary); color: #fff; border: 1px solid var(--brand-primary); }
.error-actions .link-primary:hover { background: var(--brand-primary-hover); }
[data-theme="dark"] .error-actions .link-primary { color: var(--bg-page); }
.error-actions .link-secondary { color: var(--text-main, inherit); border: 1px solid var(--border-color); background: var(--bg-surface); }
.error-actions .link-secondary:hover { background: var(--bg-subtle-hover); }
.error-actions a:focus-visible { outline: 3px solid var(--brand-primary); outline-offset: 2px; }
.error-en { margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid var(--border-color, rgba(127,127,127,.25)); }
</style>
<script src="/analytics.js" defer></script>
</head>
<body>
<header class="top-bar">
<div class="top-bar-inner">
<a href="/" class="brand" title="Retour à la démo">
<div class="brand-icon-wrap">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
<path d="M12 8v4"/>
<path d="M12 16h.01"/>
</svg>
</div>
<span class="brand-title">OTSPI</span>
<span class="badge-staging"><span class="badge-dot"></span> <span class="badge-text-full">Staging Public</span><span class="badge-text-short">Staging</span></span>
</a>
</div>
</header>
<main class="error-page">
<span class="error-code">Erreur 404</span>
<h1>Cette page n'existe pas.</h1>
<p>La démo tient sur une seule page : tout se passe depuis son accueil.</p>
<div class="error-actions">
<a class="link-primary" href="/">Ouvrir la démo</a>
<a class="link-secondary" href="https://www.otspi.org/">Site d'OTSPI</a>
</div>
<div class="error-en" lang="en">
<h2>This page does not exist.</h2>
<p>The demo is a single page: everything starts from its home page.</p>
<div class="error-actions">
<a class="link-secondary" href="/">Open the demo</a>
</div>
</div>
</main>
</body>
</html>