@@ -5,47 +5,107 @@ const lang = getLangFromUrl(Astro.url);
55const t = useTranslations (lang );
66---
77
8- <footer style =" background: var(--bg-card); border-top: 1px solid var(--border-subtle); padding: 3rem 0;" >
9- <div class =" max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" >
10- <div class =" grid grid-cols-1 lg:grid-cols-2 gap-6" >
11- <div class =" text-center lg:text-left" >
12- <h2 class =" text-lg font-semibold mb-6" style =" font-family: var(--font-heading);" >
13- RETARDO <span style =" color: var(--text-accent);" >CNE</span >
14- </h2 >
15- <p class =" text-gray-500 mb-1 text-sm" style =" max-width: 440px; line-height: 1.6;" >
16- © 2024–2026 { t (' footer_rights' )}
17- <br />
18- { t (' footer_built_by' )} <a href =" https://tooltician.com/" target =" _blank" rel =" noopener noreferrer" style =" color: var(--text-accent); text-decoration: none; font-weight: 500;" >Tooltician</a >
19- </p >
20- <div style =" margin-top: 1rem; font-size: 0.78rem; line-height: 1.6; color: var(--text-secondary); max-width: 480px;" >
21- <p style =" margin: 0 0 0.35rem;" >
22- { t (' footer_disclaimer' )}
23- </p >
24- <p style =" margin: 0;" >
25- <a href =" https://github.com/cortega26/retardo_cne/issues/new" target =" _blank" rel =" noopener noreferrer" style =" color: var(--text-accent);" >{ t (' footer_report_correction' )} </a >
26- <span aria-hidden =" true" > · </span >
27- CC BY 4.0
28- <span aria-hidden =" true" > · </span >
29- { t (' cred_update' ).replace (' {{date}}' , ' 2025-05-27' )}
30- </p >
31- </div >
32- </div >
33- <div class =" text-center lg:text-right" >
34- <div class =" flex flex-wrap justify-center lg:justify-end gap-3 items-center" >
35- <a href =" https://github.com/cortega26/retardo_cne" target =" _blank" rel =" noopener noreferrer"
36- class =" btn btn-outline-primary btn-sm font-bold" >
37- <svg viewBox =" 0 0 16 16" fill =" currentColor" width =" 14" height =" 14" style =" margin-right:0.35rem;vertical-align:-2px;" aria-hidden =" true" ><path d =" M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" /></svg >
38- { t (' footer_opensource' )}
39- </a >
40- </div >
41- </div >
42- </div >
43- <div class =" mt-6 pt-6" style =" border-top: 1px solid var(--border-subtle);" >
44- <div class =" flex justify-center gap-4 text-gray-500" style =" font-size: 0.7rem; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em;" >
45- <a href =" #inicio" class =" story-link" >{ t (' nav_home' )} </a >
46- <a href =" #cronologia" class =" story-link" >{ t (' nav_evidence' )} </a >
47- <a href =" #sistema" class =" story-link" >{ t (' nav_context' )} </a >
48- </div >
49- </div >
50- </div >
8+ <footer class =" site-footer" >
9+ <p class =" footer-copy" >© 2024–2026 { t (' footer_rights' )} </p >
10+ <p class =" footer-built" >
11+ { t (' footer_built_by' )} <a href =" https://tooltician.com/" target =" _blank" rel =" noopener noreferrer" >Tooltician</a >
12+ </p >
5113</footer >
14+
15+ <a href =" #inicio" id =" back-to-top" class =" back-to-top" aria-label ={ lang === ' es' ? ' Volver al inicio' : ' Back to top' } >
16+ <svg viewBox =" 0 0 24 24" fill =" none" stroke =" currentColor" stroke-width =" 2.5"
17+ stroke-linecap =" round" stroke-linejoin =" round" width =" 18" height =" 18" aria-hidden =" true" >
18+ <polyline points =" 18 15 12 9 6 15" />
19+ </svg >
20+ </a >
21+
22+ <script >
23+ const btn = document.getElementById('back-to-top');
24+ if (btn) {
25+ window.addEventListener('scroll', () => {
26+ btn.classList.toggle('visible', window.scrollY > 400);
27+ }, { passive: true });
28+
29+ btn.addEventListener('click', (e) => {
30+ e.preventDefault();
31+ document.getElementById('inicio')?.scrollIntoView({ behavior: 'smooth' });
32+ });
33+ }
34+ </script >
35+
36+ <style >
37+ .site-footer {
38+ text-align: center;
39+ padding: 2rem 1rem 2.5rem;
40+ border-top: 1px solid var(--border-subtle);
41+ background: var(--bg-card);
42+ }
43+
44+ .footer-copy {
45+ font-size: 0.84rem;
46+ color: var(--text-secondary);
47+ margin: 0 0 0.3rem;
48+ line-height: 1.5;
49+ }
50+
51+ .footer-built {
52+ font-size: 0.82rem;
53+ color: var(--text-secondary);
54+ margin: 0;
55+ }
56+
57+ .footer-built a {
58+ color: var(--text-accent);
59+ text-decoration: none;
60+ font-weight: 600;
61+ }
62+
63+ .footer-built a:hover {
64+ text-decoration: underline;
65+ }
66+
67+ /* Back-to-top button */
68+ .back-to-top {
69+ position: fixed;
70+ bottom: 1.75rem;
71+ right: 1.75rem;
72+ z-index: 200;
73+ width: 2.75rem;
74+ height: 2.75rem;
75+ border-radius: 50%;
76+ background: var(--color-brand-600);
77+ color: #fff;
78+ display: flex;
79+ align-items: center;
80+ justify-content: center;
81+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.18);
82+ text-decoration: none;
83+ opacity: 0;
84+ transform: translateY(0.6rem);
85+ transition: opacity 0.22s ease, transform 0.22s ease, background 0.15s;
86+ pointer-events: none;
87+ }
88+
89+ .back-to-top.visible {
90+ opacity: 1;
91+ transform: translateY(0);
92+ pointer-events: auto;
93+ }
94+
95+ .back-to-top:hover,
96+ .back-to-top:focus-visible {
97+ background: var(--color-brand-700);
98+ outline: 2px solid var(--color-brand-400);
99+ outline-offset: 2px;
100+ }
101+
102+ :global([data-theme="dark"]) .back-to-top {
103+ background: var(--color-brand-500);
104+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.4);
105+ }
106+
107+ :global([data-theme="dark"]) .back-to-top:hover,
108+ :global([data-theme="dark"]) .back-to-top:focus-visible {
109+ background: var(--color-brand-400);
110+ }
111+ </style >
0 commit comments