Spaces:
Running
Running
Sami
commited on
Commit
Β·
53873ca
1
Parent(s):
0b5a6eb
Sync changes - automated commit
Browse files- {demos β archive/demos}/automedical/automedicalai copy.html +0 -0
- {docs β archive/docs}/references/REFERENCE_example-propuesta-12-octubre-report copy.pdf +0 -0
- archive/index.html +91 -0
- papers/drafts/fermed-vlm-draft-1.html β archive/papers/drafts/fermed-vlm-draft-1_archived.html +0 -0
- papers/drafts/fermed-vlm-draft-2.html β archive/papers/drafts/fermed-vlm-draft-2_archived.html +0 -0
- papers/research/fermed-vlm-paper-v2 copy.html β archive/papers/research/fermed-vlm-paper-v2 copy_archived.html +0 -0
- papers/research/fermed-vlm-paper-v2.html β archive/papers/research/fermed-vlm-paper-v2_archived.html +0 -0
- papers/research/fermed-vlm-paper-v3 copy 2.html β archive/papers/research/fermed-vlm-paper-v3 copy 2_archived.html +0 -0
- papers/research/fermed-vlm-paper-v3 copy 3.html β archive/papers/research/fermed-vlm-paper-v3 copy 3_archived.html +0 -0
- papers/research/fermed-vlm-paper-v3 copy.html β archive/papers/research/fermed-vlm-paper-v3 copy_archived.html +0 -0
- papers/research/fermed-vlm-paper-v3.html β archive/papers/research/fermed-vlm-paper-v3_archived.html +0 -0
- papers/research/fermed-vlm-paper.html β archive/papers/research/fermed-vlm-paper_archived.html +0 -0
- paper copy 2.html β archive/papers/root/paper copy 2.html +0 -0
- paper copy.html β archive/papers/root/paper copy.html +0 -0
- assets/css/main.css +96 -28
- assets/css/paper.css +152 -0
- assets/js/main.js +153 -33
- assets/js/validate.js +188 -0
- index.html +17 -7
- papers.html +63 -40
- papers/research/FERMED-VLM-Final_Paper.html +67 -0
- projects/automedical.html +25 -6
- proposals/nhs/nhs-proposal.html +54 -10
- tools/link_checker.html +127 -0
- tools/validate.js +161 -0
- website_paths.html +61 -0
{demos β archive/demos}/automedical/automedicalai copy.html
RENAMED
File without changes
|
{docs β archive/docs}/references/REFERENCE_example-propuesta-12-octubre-report copy.pdf
RENAMED
File without changes
|
archive/index.html
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="es">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Archive | IA Hospital Hub</title>
|
7 |
+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet">
|
8 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
|
9 |
+
<link rel="stylesheet" href="/assets/css/main.css">
|
10 |
+
</head>
|
11 |
+
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
|
12 |
+
<!-- Include shared nav -->
|
13 |
+
<include src="/templates/nav.html"></include>
|
14 |
+
|
15 |
+
<main class="container mx-auto px-4 py-8">
|
16 |
+
<div class="flex items-center mb-8">
|
17 |
+
<a href="/papers.html" class="text-blue-400 hover:text-blue-300 mr-4">
|
18 |
+
<i class="fas fa-arrow-left"></i>
|
19 |
+
<span lang="es">Volver a Papers</span>
|
20 |
+
<span lang="en">Back to Papers</span>
|
21 |
+
</a>
|
22 |
+
<h1 class="text-4xl font-bold text-blue-400">
|
23 |
+
<span lang="es">Archivo</span>
|
24 |
+
<span lang="en">Archive</span>
|
25 |
+
</h1>
|
26 |
+
</div>
|
27 |
+
|
28 |
+
<div class="space-y-8">
|
29 |
+
<section>
|
30 |
+
<h2 class="text-2xl font-bold mb-4 text-blue-300">
|
31 |
+
<span lang="es">Papers de InvestigaciΓ³n</span>
|
32 |
+
<span lang="en">Research Papers</span>
|
33 |
+
</h2>
|
34 |
+
<div class="grid gap-4">
|
35 |
+
<a href="papers/research/fermed-vlm-paper-v3_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
36 |
+
<h3 class="font-semibold text-blue-400">FERMED VLM Paper v3</h3>
|
37 |
+
<p class="text-gray-400 text-sm">Version 3 of the FERMED VLM research paper</p>
|
38 |
+
</a>
|
39 |
+
<a href="papers/research/fermed-vlm-paper-v2_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
40 |
+
<h3 class="font-semibold text-blue-400">FERMED VLM Paper v2</h3>
|
41 |
+
<p class="text-gray-400 text-sm">Version 2 of the FERMED VLM research paper</p>
|
42 |
+
</a>
|
43 |
+
<a href="papers/research/fermed-vlm-paper_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
44 |
+
<h3 class="font-semibold text-blue-400">FERMED VLM Paper v1</h3>
|
45 |
+
<p class="text-gray-400 text-sm">Initial version of the FERMED VLM research paper</p>
|
46 |
+
</a>
|
47 |
+
</div>
|
48 |
+
</section>
|
49 |
+
|
50 |
+
<section>
|
51 |
+
<h2 class="text-2xl font-bold mb-4 text-blue-300">
|
52 |
+
<span lang="es">Borradores</span>
|
53 |
+
<span lang="en">Drafts</span>
|
54 |
+
</h2>
|
55 |
+
<div class="grid gap-4">
|
56 |
+
<a href="papers/drafts/fermed-vlm-draft-2_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
57 |
+
<h3 class="font-semibold text-blue-400">FERMED VLM Draft 2</h3>
|
58 |
+
<p class="text-gray-400 text-sm">Second draft of the FERMED VLM paper</p>
|
59 |
+
</a>
|
60 |
+
<a href="papers/drafts/fermed-vlm-draft-1_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
61 |
+
<h3 class="font-semibold text-blue-400">FERMED VLM Draft 1</h3>
|
62 |
+
<p class="text-gray-400 text-sm">First draft of the FERMED VLM paper</p>
|
63 |
+
</a>
|
64 |
+
</div>
|
65 |
+
</section>
|
66 |
+
|
67 |
+
<section>
|
68 |
+
<h2 class="text-2xl font-bold mb-4 text-blue-300">
|
69 |
+
<span lang="es">Otros Documentos</span>
|
70 |
+
<span lang="en">Other Documents</span>
|
71 |
+
</h2>
|
72 |
+
<div class="grid gap-4">
|
73 |
+
<a href="papers/root/paper copy.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
74 |
+
<h3 class="font-semibold text-blue-400">Previous Paper Version</h3>
|
75 |
+
<p class="text-gray-400 text-sm">Earlier version of the paper</p>
|
76 |
+
</a>
|
77 |
+
<a href="papers/root/paper copy 2.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
|
78 |
+
<h3 class="font-semibold text-blue-400">Previous Paper Version 2</h3>
|
79 |
+
<p class="text-gray-400 text-sm">Earlier version of the paper</p>
|
80 |
+
</a>
|
81 |
+
</div>
|
82 |
+
</section>
|
83 |
+
</div>
|
84 |
+
</main>
|
85 |
+
|
86 |
+
<!-- Include shared footer -->
|
87 |
+
<include src="/templates/footer.html"></include>
|
88 |
+
|
89 |
+
<script src="/assets/js/main.js"></script>
|
90 |
+
</body>
|
91 |
+
</html>
|
papers/drafts/fermed-vlm-draft-1.html β archive/papers/drafts/fermed-vlm-draft-1_archived.html
RENAMED
File without changes
|
papers/drafts/fermed-vlm-draft-2.html β archive/papers/drafts/fermed-vlm-draft-2_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v2 copy.html β archive/papers/research/fermed-vlm-paper-v2 copy_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v2.html β archive/papers/research/fermed-vlm-paper-v2_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v3 copy 2.html β archive/papers/research/fermed-vlm-paper-v3 copy 2_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v3 copy 3.html β archive/papers/research/fermed-vlm-paper-v3 copy 3_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v3 copy.html β archive/papers/research/fermed-vlm-paper-v3 copy_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper-v3.html β archive/papers/research/fermed-vlm-paper-v3_archived.html
RENAMED
File without changes
|
papers/research/fermed-vlm-paper.html β archive/papers/research/fermed-vlm-paper_archived.html
RENAMED
File without changes
|
paper copy 2.html β archive/papers/root/paper copy 2.html
RENAMED
File without changes
|
paper copy.html β archive/papers/root/paper copy.html
RENAMED
File without changes
|
assets/css/main.css
CHANGED
@@ -5,6 +5,22 @@
|
|
5 |
--secondary: #4B5563;
|
6 |
--bg-dark: #111827;
|
7 |
--bg-darker: #0F172A;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
}
|
9 |
|
10 |
/* Language toggle */
|
@@ -14,45 +30,107 @@
|
|
14 |
|
15 |
/* Layout */
|
16 |
.container {
|
17 |
-
|
|
|
|
|
18 |
}
|
19 |
|
20 |
/* Navigation */
|
21 |
-
.nav-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
23 |
}
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
26 |
}
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
}
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
}
|
37 |
|
38 |
/* Buttons */
|
39 |
.btn {
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
}
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
|
46 |
/* Timeline */
|
47 |
.timeline ol {
|
48 |
-
|
|
|
|
|
49 |
}
|
|
|
50 |
.timeline li {
|
51 |
-
|
|
|
52 |
}
|
|
|
53 |
.timeline li:before {
|
54 |
content: '';
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
}
|
57 |
|
58 |
/* Tooltips */
|
@@ -72,14 +150,4 @@
|
|
72 |
}
|
73 |
.contact-btn.email {
|
74 |
@apply bg-blue-600 hover:bg-blue-700;
|
75 |
-
}
|
76 |
-
|
77 |
-
/* Responsive */
|
78 |
-
@media (max-width: 768px) {
|
79 |
-
.card {
|
80 |
-
@apply p-4;
|
81 |
-
}
|
82 |
-
.timeline ol {
|
83 |
-
@apply pl-4;
|
84 |
-
}
|
85 |
}
|
|
|
5 |
--secondary: #4B5563;
|
6 |
--bg-dark: #111827;
|
7 |
--bg-darker: #0F172A;
|
8 |
+
--text-light: #F3F4F6;
|
9 |
+
--text-dark: #1F2937;
|
10 |
+
}
|
11 |
+
|
12 |
+
/* Global Reset */
|
13 |
+
* {
|
14 |
+
margin: 0;
|
15 |
+
padding: 0;
|
16 |
+
box-sizing: border-box;
|
17 |
+
}
|
18 |
+
|
19 |
+
body {
|
20 |
+
font-family: system-ui, -apple-system, sans-serif;
|
21 |
+
background: var(--bg-dark);
|
22 |
+
color: var(--text-light);
|
23 |
+
line-height: 1.5;
|
24 |
}
|
25 |
|
26 |
/* Language toggle */
|
|
|
30 |
|
31 |
/* Layout */
|
32 |
.container {
|
33 |
+
max-width: 1200px;
|
34 |
+
margin: 0 auto;
|
35 |
+
padding: 0 1rem;
|
36 |
}
|
37 |
|
38 |
/* Navigation */
|
39 |
+
.nav-bar {
|
40 |
+
background: var(--bg-darker);
|
41 |
+
padding: 1rem;
|
42 |
+
position: sticky;
|
43 |
+
top: 0;
|
44 |
+
z-index: 50;
|
45 |
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
46 |
}
|
47 |
+
|
48 |
+
.breadcrumb {
|
49 |
+
display: flex;
|
50 |
+
align-items: center;
|
51 |
+
gap: 0.5rem;
|
52 |
+
font-size: 0.875rem;
|
53 |
+
color: var(--secondary);
|
54 |
}
|
55 |
|
56 |
+
.breadcrumb a {
|
57 |
+
color: var(--primary);
|
58 |
+
text-decoration: none;
|
59 |
+
transition: color 0.2s;
|
60 |
}
|
61 |
+
|
62 |
+
.breadcrumb a:hover {
|
63 |
+
color: var(--primary-hover);
|
64 |
}
|
65 |
|
66 |
/* Buttons */
|
67 |
.btn {
|
68 |
+
display: inline-flex;
|
69 |
+
align-items: center;
|
70 |
+
gap: 0.5rem;
|
71 |
+
padding: 0.5rem 1rem;
|
72 |
+
border-radius: 0.5rem;
|
73 |
+
font-weight: 500;
|
74 |
+
transition: all 0.2s;
|
75 |
}
|
76 |
+
|
77 |
+
.btn-primary {
|
78 |
+
background: var(--primary);
|
79 |
+
color: white;
|
80 |
+
}
|
81 |
+
|
82 |
+
.btn-primary:hover {
|
83 |
+
background: var(--primary-hover);
|
84 |
+
}
|
85 |
+
|
86 |
+
/* Cards */
|
87 |
+
.card {
|
88 |
+
background: rgba(255, 255, 255, 0.05);
|
89 |
+
border-radius: 0.5rem;
|
90 |
+
padding: 1.5rem;
|
91 |
+
transition: transform 0.2s;
|
92 |
+
}
|
93 |
+
|
94 |
+
.card:hover {
|
95 |
+
transform: translateY(-2px);
|
96 |
}
|
97 |
|
98 |
/* Timeline */
|
99 |
.timeline ol {
|
100 |
+
border-left: 2px solid var(--secondary);
|
101 |
+
padding-left: 1.5rem;
|
102 |
+
margin-left: 1rem;
|
103 |
}
|
104 |
+
|
105 |
.timeline li {
|
106 |
+
position: relative;
|
107 |
+
margin-bottom: 1.5rem;
|
108 |
}
|
109 |
+
|
110 |
.timeline li:before {
|
111 |
content: '';
|
112 |
+
position: absolute;
|
113 |
+
left: -1.75rem;
|
114 |
+
top: 0.25rem;
|
115 |
+
width: 1rem;
|
116 |
+
height: 1rem;
|
117 |
+
background: var(--primary);
|
118 |
+
border-radius: 50%;
|
119 |
+
}
|
120 |
+
|
121 |
+
/* Responsive */
|
122 |
+
@media (max-width: 768px) {
|
123 |
+
.container {
|
124 |
+
padding: 0 0.5rem;
|
125 |
+
}
|
126 |
+
|
127 |
+
.nav-bar {
|
128 |
+
padding: 0.5rem;
|
129 |
+
}
|
130 |
+
|
131 |
+
.breadcrumb {
|
132 |
+
font-size: 0.75rem;
|
133 |
+
}
|
134 |
}
|
135 |
|
136 |
/* Tooltips */
|
|
|
150 |
}
|
151 |
.contact-btn.email {
|
152 |
@apply bg-blue-600 hover:bg-blue-700;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
assets/css/paper.css
ADDED
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Paper Styles */
|
2 |
+
:root {
|
3 |
+
--paper-bg: #ffffff;
|
4 |
+
--paper-text: #2c3e50;
|
5 |
+
--paper-border: #e2e8f0;
|
6 |
+
--paper-accent: #3498db;
|
7 |
+
}
|
8 |
+
|
9 |
+
body.paper {
|
10 |
+
font-family: 'Georgia', serif;
|
11 |
+
background: var(--paper-bg);
|
12 |
+
color: var(--paper-text);
|
13 |
+
line-height: 1.6;
|
14 |
+
padding: 2rem;
|
15 |
+
max-width: 900px;
|
16 |
+
margin: 0 auto;
|
17 |
+
}
|
18 |
+
|
19 |
+
/* Typography */
|
20 |
+
.paper h1,
|
21 |
+
.paper h2,
|
22 |
+
.paper h3,
|
23 |
+
.paper h4 {
|
24 |
+
font-family: 'Georgia', serif;
|
25 |
+
line-height: 1.3;
|
26 |
+
margin-top: 1.5em;
|
27 |
+
color: var(--paper-text);
|
28 |
+
}
|
29 |
+
|
30 |
+
.paper h1 {
|
31 |
+
font-size: 2.5rem;
|
32 |
+
text-align: center;
|
33 |
+
margin-bottom: 2rem;
|
34 |
+
padding-bottom: 1rem;
|
35 |
+
border-bottom: 2px solid var(--paper-border);
|
36 |
+
}
|
37 |
+
|
38 |
+
.paper h2 {
|
39 |
+
font-size: 2rem;
|
40 |
+
margin: 3rem 0 2rem;
|
41 |
+
padding-bottom: 0.5rem;
|
42 |
+
border-bottom: 2px solid var(--paper-border);
|
43 |
+
}
|
44 |
+
|
45 |
+
.paper h3 {
|
46 |
+
font-size: 1.5rem;
|
47 |
+
margin: 2rem 0 1rem;
|
48 |
+
}
|
49 |
+
|
50 |
+
/* Content */
|
51 |
+
.paper p {
|
52 |
+
margin-bottom: 1.5rem;
|
53 |
+
text-align: justify;
|
54 |
+
}
|
55 |
+
|
56 |
+
.paper a {
|
57 |
+
color: var(--paper-accent);
|
58 |
+
text-decoration: none;
|
59 |
+
}
|
60 |
+
|
61 |
+
.paper a:hover {
|
62 |
+
text-decoration: underline;
|
63 |
+
}
|
64 |
+
|
65 |
+
/* Paper Components */
|
66 |
+
.paper .abstract,
|
67 |
+
.paper .keywords {
|
68 |
+
background-color: #f8f9fa;
|
69 |
+
padding: 1.5rem;
|
70 |
+
border-radius: 5px;
|
71 |
+
margin: 2rem 0;
|
72 |
+
border-left: 3px solid var(--paper-text);
|
73 |
+
}
|
74 |
+
|
75 |
+
.paper .figure {
|
76 |
+
margin: 2.5rem auto;
|
77 |
+
text-align: center;
|
78 |
+
}
|
79 |
+
|
80 |
+
.paper .figure img {
|
81 |
+
max-width: 90%;
|
82 |
+
border-radius: 8px;
|
83 |
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
84 |
+
}
|
85 |
+
|
86 |
+
.paper .caption {
|
87 |
+
font-size: 0.9rem;
|
88 |
+
font-style: italic;
|
89 |
+
color: #666;
|
90 |
+
margin-top: 1rem;
|
91 |
+
}
|
92 |
+
|
93 |
+
.paper .references {
|
94 |
+
margin-top: 3rem;
|
95 |
+
padding: 2rem;
|
96 |
+
border-top: 2px solid var(--paper-border);
|
97 |
+
}
|
98 |
+
|
99 |
+
.paper .references ol {
|
100 |
+
padding-left: 1.5rem;
|
101 |
+
}
|
102 |
+
|
103 |
+
.paper .references li {
|
104 |
+
margin-bottom: 1rem;
|
105 |
+
font-size: 0.95rem;
|
106 |
+
}
|
107 |
+
|
108 |
+
/* Code and Diagrams */
|
109 |
+
.paper .code-example,
|
110 |
+
.paper .diagram-container {
|
111 |
+
background: #f8f9fa;
|
112 |
+
padding: 1.5rem;
|
113 |
+
border-radius: 8px;
|
114 |
+
margin: 2rem auto;
|
115 |
+
max-width: 800px;
|
116 |
+
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
117 |
+
}
|
118 |
+
|
119 |
+
.paper pre code {
|
120 |
+
display: block;
|
121 |
+
padding: 1rem;
|
122 |
+
background: white;
|
123 |
+
border-radius: 4px;
|
124 |
+
border: 1px solid #e0e0e0;
|
125 |
+
font-family: 'Consolas', monospace;
|
126 |
+
font-size: 0.9rem;
|
127 |
+
line-height: 1.5;
|
128 |
+
overflow-x: auto;
|
129 |
+
}
|
130 |
+
|
131 |
+
/* Responsive */
|
132 |
+
@media (max-width: 768px) {
|
133 |
+
body.paper {
|
134 |
+
padding: 1rem;
|
135 |
+
}
|
136 |
+
|
137 |
+
.paper h1 {
|
138 |
+
font-size: 2rem;
|
139 |
+
}
|
140 |
+
|
141 |
+
.paper h2 {
|
142 |
+
font-size: 1.75rem;
|
143 |
+
}
|
144 |
+
|
145 |
+
.paper h3 {
|
146 |
+
font-size: 1.5rem;
|
147 |
+
}
|
148 |
+
|
149 |
+
.paper .figure img {
|
150 |
+
max-width: 100%;
|
151 |
+
}
|
152 |
+
}
|
assets/js/main.js
CHANGED
@@ -58,26 +58,166 @@ window.hospitalAI = {
|
|
58 |
initComponents
|
59 |
};
|
60 |
|
|
|
|
|
61 |
// Language handling
|
62 |
-
const
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
body.
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
}
|
79 |
};
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
// Document viewer
|
82 |
const DocViewer = {
|
83 |
open(url) {
|
@@ -97,26 +237,6 @@ const DocViewer = {
|
|
97 |
}
|
98 |
};
|
99 |
|
100 |
-
// Initialize everything
|
101 |
-
document.addEventListener('DOMContentLoaded', () => {
|
102 |
-
LanguageManager.initialize();
|
103 |
-
|
104 |
-
// Close doc viewer on escape
|
105 |
-
document.addEventListener('keydown', (e) => {
|
106 |
-
if (e.key === 'Escape') DocViewer.close();
|
107 |
-
});
|
108 |
-
|
109 |
-
// Smooth scroll for anchor links
|
110 |
-
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
111 |
-
anchor.addEventListener('click', (e) => {
|
112 |
-
e.preventDefault();
|
113 |
-
document.querySelector(anchor.getAttribute('href'))
|
114 |
-
.scrollIntoView({ behavior: 'smooth' });
|
115 |
-
});
|
116 |
-
});
|
117 |
-
});
|
118 |
-
|
119 |
// Export for global use
|
120 |
-
window.toggleLanguage = LanguageManager.toggle;
|
121 |
window.openDoc = DocViewer.open;
|
122 |
window.closeDoc = DocViewer.close;
|
|
|
58 |
initComponents
|
59 |
};
|
60 |
|
61 |
+
// Main JavaScript for Hospital AI Website
|
62 |
+
|
63 |
// Language handling
|
64 |
+
const languageHandler = {
|
65 |
+
// Available languages
|
66 |
+
languages: ['es', 'en'],
|
67 |
+
|
68 |
+
// Get current language
|
69 |
+
getCurrentLanguage() {
|
70 |
+
return document.body.getAttribute('data-language') || 'es';
|
71 |
+
},
|
72 |
+
|
73 |
+
// Set language
|
74 |
+
setLanguage(lang) {
|
75 |
+
if (this.languages.includes(lang)) {
|
76 |
+
document.body.setAttribute('data-language', lang);
|
77 |
+
document.body.classList.toggle('lang-en', lang === 'en');
|
78 |
+
localStorage.setItem('preferred-language', lang);
|
79 |
+
this.updateMetaTags(lang);
|
80 |
+
}
|
81 |
+
},
|
82 |
+
|
83 |
+
// Update meta tags for language
|
84 |
+
updateMetaTags(lang) {
|
85 |
+
document.documentElement.lang = lang;
|
86 |
+
const title = document.querySelector('title');
|
87 |
+
if (title) {
|
88 |
+
title.textContent = title.getAttribute(`data-${lang}`) || title.textContent;
|
89 |
+
}
|
90 |
+
},
|
91 |
+
|
92 |
+
// Initialize language
|
93 |
+
init() {
|
94 |
+
const savedLang = localStorage.getItem('preferred-language');
|
95 |
+
if (savedLang) {
|
96 |
+
this.setLanguage(savedLang);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
};
|
100 |
+
|
101 |
+
// Navigation handling
|
102 |
+
const navigationHandler = {
|
103 |
+
// Update active state
|
104 |
+
updateActiveState() {
|
105 |
+
const currentPath = window.location.pathname;
|
106 |
+
document.querySelectorAll('nav a').forEach(link => {
|
107 |
+
const href = link.getAttribute('href');
|
108 |
+
if (href === currentPath) {
|
109 |
+
link.classList.add('active');
|
110 |
+
} else {
|
111 |
+
link.classList.remove('active');
|
112 |
+
}
|
113 |
+
});
|
114 |
+
},
|
115 |
+
|
116 |
+
// Update breadcrumbs
|
117 |
+
updateBreadcrumbs() {
|
118 |
+
const breadcrumb = document.querySelector('.breadcrumb');
|
119 |
+
if (breadcrumb) {
|
120 |
+
const currentPath = window.location.pathname;
|
121 |
+
const pathParts = currentPath.split('/').filter(Boolean);
|
122 |
+
let currentLink = '';
|
123 |
+
const breadcrumbHTML = pathParts.map((part, index) => {
|
124 |
+
currentLink += `/${part}`;
|
125 |
+
return `
|
126 |
+
<a href="${currentLink}">${part}</a>
|
127 |
+
${index < pathParts.length - 1 ? '<span>/</span>' : ''}
|
128 |
+
`;
|
129 |
+
}).join('');
|
130 |
+
breadcrumb.innerHTML = `
|
131 |
+
<a href="/">Home</a>
|
132 |
+
${pathParts.length ? '<span>/</span>' : ''}
|
133 |
+
${breadcrumbHTML}
|
134 |
+
`;
|
135 |
+
}
|
136 |
},
|
137 |
+
|
138 |
+
// Initialize navigation
|
139 |
+
init() {
|
140 |
+
this.updateActiveState();
|
141 |
+
this.updateBreadcrumbs();
|
142 |
+
window.addEventListener('popstate', () => {
|
143 |
+
this.updateActiveState();
|
144 |
+
this.updateBreadcrumbs();
|
145 |
+
});
|
146 |
+
}
|
147 |
+
};
|
148 |
|
149 |
+
// Dark mode handling
|
150 |
+
const darkModeHandler = {
|
151 |
+
// Toggle dark mode
|
152 |
+
toggle() {
|
153 |
+
document.documentElement.classList.toggle('dark');
|
154 |
+
const isDark = document.documentElement.classList.contains('dark');
|
155 |
+
localStorage.setItem('dark-mode', isDark ? 'dark' : 'light');
|
156 |
+
},
|
157 |
+
|
158 |
+
// Initialize dark mode
|
159 |
+
init() {
|
160 |
+
const savedMode = localStorage.getItem('dark-mode');
|
161 |
+
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
162 |
+
if (savedMode === 'dark' || (!savedMode && prefersDark)) {
|
163 |
+
document.documentElement.classList.add('dark');
|
164 |
}
|
165 |
}
|
166 |
};
|
167 |
|
168 |
+
// Smooth scrolling
|
169 |
+
const scrollHandler = {
|
170 |
+
init() {
|
171 |
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
172 |
+
anchor.addEventListener('click', (e) => {
|
173 |
+
e.preventDefault();
|
174 |
+
const target = document.querySelector(anchor.getAttribute('href'));
|
175 |
+
if (target) {
|
176 |
+
target.scrollIntoView({
|
177 |
+
behavior: 'smooth',
|
178 |
+
block: 'start'
|
179 |
+
});
|
180 |
+
}
|
181 |
+
});
|
182 |
+
});
|
183 |
+
}
|
184 |
+
};
|
185 |
+
|
186 |
+
// Initialize everything
|
187 |
+
document.addEventListener('DOMContentLoaded', () => {
|
188 |
+
languageHandler.init();
|
189 |
+
navigationHandler.init();
|
190 |
+
darkModeHandler.init();
|
191 |
+
scrollHandler.init();
|
192 |
+
|
193 |
+
// Close doc viewer on escape
|
194 |
+
document.addEventListener('keydown', (e) => {
|
195 |
+
if (e.key === 'Escape') DocViewer.close();
|
196 |
+
});
|
197 |
+
});
|
198 |
+
|
199 |
+
// Global language toggle function
|
200 |
+
function toggleLanguage() {
|
201 |
+
const currentLang = languageHandler.getCurrentLanguage();
|
202 |
+
const newLang = currentLang === 'es' ? 'en' : 'es';
|
203 |
+
languageHandler.setLanguage(newLang);
|
204 |
+
}
|
205 |
+
|
206 |
+
// Global dark mode toggle function
|
207 |
+
function toggleDarkMode() {
|
208 |
+
darkModeHandler.toggle();
|
209 |
+
}
|
210 |
+
|
211 |
+
// Export for use in Node.js environments
|
212 |
+
if (typeof module !== 'undefined' && module.exports) {
|
213 |
+
module.exports = {
|
214 |
+
languageHandler,
|
215 |
+
navigationHandler,
|
216 |
+
darkModeHandler,
|
217 |
+
scrollHandler
|
218 |
+
};
|
219 |
+
}
|
220 |
+
|
221 |
// Document viewer
|
222 |
const DocViewer = {
|
223 |
open(url) {
|
|
|
237 |
}
|
238 |
};
|
239 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
// Export for global use
|
|
|
241 |
window.openDoc = DocViewer.open;
|
242 |
window.closeDoc = DocViewer.close;
|
assets/js/validate.js
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// Website Validation Script
|
2 |
+
|
3 |
+
const validateWebsite = {
|
4 |
+
// Critical paths that must exist and be accessible
|
5 |
+
criticalPaths: [
|
6 |
+
'/',
|
7 |
+
'/projects',
|
8 |
+
'/papers',
|
9 |
+
'/proposals',
|
10 |
+
'/docs'
|
11 |
+
],
|
12 |
+
|
13 |
+
// Project paths
|
14 |
+
projectPaths: [
|
15 |
+
'/projects/automedical',
|
16 |
+
'/projects/analytics',
|
17 |
+
'/projects/autoglaucoma'
|
18 |
+
],
|
19 |
+
|
20 |
+
// Paper paths
|
21 |
+
paperPaths: [
|
22 |
+
'/papers/fermed-vlm',
|
23 |
+
'/papers/archive/research',
|
24 |
+
'/papers/archive/publications'
|
25 |
+
],
|
26 |
+
|
27 |
+
// Proposal paths
|
28 |
+
proposalPaths: [
|
29 |
+
'/proposals/nhs/main',
|
30 |
+
'/proposals/nhs/detailed',
|
31 |
+
'/proposals/nhs/formal'
|
32 |
+
],
|
33 |
+
|
34 |
+
// Documentation paths
|
35 |
+
docPaths: [
|
36 |
+
'/docs/main',
|
37 |
+
'/docs/api',
|
38 |
+
'/docs/deployment'
|
39 |
+
],
|
40 |
+
|
41 |
+
// Validate all links
|
42 |
+
async validateLinks() {
|
43 |
+
const results = {
|
44 |
+
working: [],
|
45 |
+
redirects: [],
|
46 |
+
broken: []
|
47 |
+
};
|
48 |
+
|
49 |
+
const allPaths = [
|
50 |
+
...this.criticalPaths,
|
51 |
+
...this.projectPaths,
|
52 |
+
...this.paperPaths,
|
53 |
+
...this.proposalPaths,
|
54 |
+
...this.docPaths
|
55 |
+
];
|
56 |
+
|
57 |
+
for (const path of allPaths) {
|
58 |
+
try {
|
59 |
+
const response = await fetch(path);
|
60 |
+
if (response.ok) {
|
61 |
+
if (response.redirected) {
|
62 |
+
results.redirects.push({
|
63 |
+
path,
|
64 |
+
redirectTo: response.url
|
65 |
+
});
|
66 |
+
} else {
|
67 |
+
results.working.push(path);
|
68 |
+
}
|
69 |
+
} else {
|
70 |
+
results.broken.push({
|
71 |
+
path,
|
72 |
+
status: response.status
|
73 |
+
});
|
74 |
+
}
|
75 |
+
} catch (error) {
|
76 |
+
results.broken.push({
|
77 |
+
path,
|
78 |
+
error: error.message
|
79 |
+
});
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
return results;
|
84 |
+
},
|
85 |
+
|
86 |
+
// Validate navigation consistency
|
87 |
+
validateNavigation() {
|
88 |
+
const results = {
|
89 |
+
consistent: true,
|
90 |
+
errors: []
|
91 |
+
};
|
92 |
+
|
93 |
+
// Check if all pages have navigation
|
94 |
+
document.querySelectorAll('nav').forEach(nav => {
|
95 |
+
const links = nav.querySelectorAll('a');
|
96 |
+
const requiredLinks = ['Home', 'Projects', 'Papers', 'Proposals', 'Documentation'];
|
97 |
+
|
98 |
+
const missingLinks = requiredLinks.filter(required =>
|
99 |
+
![...links].some(link =>
|
100 |
+
link.textContent.trim().toLowerCase() === required.toLowerCase()
|
101 |
+
)
|
102 |
+
);
|
103 |
+
|
104 |
+
if (missingLinks.length > 0) {
|
105 |
+
results.consistent = false;
|
106 |
+
results.errors.push({
|
107 |
+
page: window.location.pathname,
|
108 |
+
missingLinks
|
109 |
+
});
|
110 |
+
}
|
111 |
+
});
|
112 |
+
|
113 |
+
return results;
|
114 |
+
},
|
115 |
+
|
116 |
+
// Validate breadcrumbs
|
117 |
+
validateBreadcrumbs() {
|
118 |
+
const results = {
|
119 |
+
valid: true,
|
120 |
+
errors: []
|
121 |
+
};
|
122 |
+
|
123 |
+
document.querySelectorAll('.breadcrumb').forEach(breadcrumb => {
|
124 |
+
const links = breadcrumb.querySelectorAll('a');
|
125 |
+
const currentPath = window.location.pathname;
|
126 |
+
const pathParts = currentPath.split('/').filter(Boolean);
|
127 |
+
|
128 |
+
// First link should always be Home
|
129 |
+
if (links[0]?.getAttribute('href') !== '/') {
|
130 |
+
results.valid = false;
|
131 |
+
results.errors.push({
|
132 |
+
page: currentPath,
|
133 |
+
error: 'Missing home link in breadcrumb'
|
134 |
+
});
|
135 |
+
}
|
136 |
+
|
137 |
+
// Check if breadcrumb matches current path
|
138 |
+
pathParts.forEach((part, index) => {
|
139 |
+
const link = links[index + 1];
|
140 |
+
if (!link || !link.getAttribute('href').includes(part)) {
|
141 |
+
results.valid = false;
|
142 |
+
results.errors.push({
|
143 |
+
page: currentPath,
|
144 |
+
error: `Invalid breadcrumb path at level ${index + 1}`
|
145 |
+
});
|
146 |
+
}
|
147 |
+
});
|
148 |
+
});
|
149 |
+
|
150 |
+
return results;
|
151 |
+
},
|
152 |
+
|
153 |
+
// Generate validation report
|
154 |
+
async generateReport() {
|
155 |
+
const linkResults = await this.validateLinks();
|
156 |
+
const navResults = this.validateNavigation();
|
157 |
+
const breadcrumbResults = this.validateBreadcrumbs();
|
158 |
+
|
159 |
+
return {
|
160 |
+
timestamp: new Date().toISOString(),
|
161 |
+
links: {
|
162 |
+
total: linkResults.working.length + linkResults.redirects.length + linkResults.broken.length,
|
163 |
+
working: linkResults.working.length,
|
164 |
+
redirects: linkResults.redirects.length,
|
165 |
+
broken: linkResults.broken.length,
|
166 |
+
details: linkResults
|
167 |
+
},
|
168 |
+
navigation: {
|
169 |
+
consistent: navResults.consistent,
|
170 |
+
errors: navResults.errors
|
171 |
+
},
|
172 |
+
breadcrumbs: {
|
173 |
+
valid: breadcrumbResults.valid,
|
174 |
+
errors: breadcrumbResults.errors
|
175 |
+
}
|
176 |
+
};
|
177 |
+
}
|
178 |
+
};
|
179 |
+
|
180 |
+
// Export for use in Node.js environments
|
181 |
+
if (typeof module !== 'undefined' && module.exports) {
|
182 |
+
module.exports = validateWebsite;
|
183 |
+
}
|
184 |
+
|
185 |
+
// For browser use
|
186 |
+
if (typeof window !== 'undefined') {
|
187 |
+
window.validateWebsite = validateWebsite;
|
188 |
+
}
|
index.html
CHANGED
@@ -5,17 +5,26 @@
|
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Hospital AI Solutions - Transforming Healthcare</title>
|
7 |
<link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.css" rel="stylesheet" />
|
|
|
8 |
<script src="https://cdn.tailwindcss.com"></script>
|
9 |
</head>
|
10 |
-
<body class="bg-gray-
|
11 |
<!-- Navbar -->
|
12 |
<nav class="bg-white border-gray-200 dark:bg-gray-900 fixed w-full z-50">
|
13 |
<div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
|
14 |
-
<a href="
|
|
|
15 |
<span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Hospital AI</span>
|
16 |
</a>
|
17 |
-
<div class="flex
|
18 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
</div>
|
20 |
</div>
|
21 |
</nav>
|
@@ -26,13 +35,13 @@
|
|
26 |
<h1 class="mb-4 text-4xl font-extrabold tracking-tight leading-none text-gray-900 md:text-5xl lg:text-6xl dark:text-white">AI-Powered Healthcare Solutions</h1>
|
27 |
<p class="mb-8 text-lg font-normal text-gray-500 lg:text-xl sm:px-16 lg:px-48 dark:text-gray-400">Transform your healthcare facility with cutting-edge AI solutions designed to improve patient care, streamline operations, and enhance medical decision-making.</p>
|
28 |
<div class="flex flex-col space-y-4 sm:flex-row sm:justify-center sm:space-y-0">
|
29 |
-
<a href="
|
30 |
View Proposal
|
31 |
<svg class="w-3.5 h-3.5 ms-2 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
|
32 |
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"/>
|
33 |
</svg>
|
34 |
</a>
|
35 |
-
<a href="
|
36 |
Learn more
|
37 |
</a>
|
38 |
</div>
|
@@ -78,11 +87,12 @@
|
|
78 |
<div class="mx-auto max-w-screen-sm text-center">
|
79 |
<h2 class="mb-4 text-4xl tracking-tight font-extrabold leading-tight text-gray-900 dark:text-white">Ready to transform your healthcare facility?</h2>
|
80 |
<p class="mb-6 font-light text-gray-500 dark:text-gray-400 md:text-lg">Contact us today to learn how our AI solutions can help you improve patient care and operational efficiency.</p>
|
81 |
-
<a href="
|
82 |
</div>
|
83 |
</div>
|
84 |
</section>
|
85 |
|
86 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.js"></script>
|
|
|
87 |
</body>
|
88 |
</html>
|
|
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Hospital AI Solutions - Transforming Healthcare</title>
|
7 |
<link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.css" rel="stylesheet" />
|
8 |
+
<link rel="stylesheet" href="/assets/css/main.css">
|
9 |
<script src="https://cdn.tailwindcss.com"></script>
|
10 |
</head>
|
11 |
+
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="en">
|
12 |
<!-- Navbar -->
|
13 |
<nav class="bg-white border-gray-200 dark:bg-gray-900 fixed w-full z-50">
|
14 |
<div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
|
15 |
+
<a href="/" class="flex items-center space-x-3 rtl:space-x-reverse">
|
16 |
+
<img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
|
17 |
<span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Hospital AI</span>
|
18 |
</a>
|
19 |
+
<div class="flex items-center gap-4">
|
20 |
+
<a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
|
21 |
+
<a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
|
22 |
+
<a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
|
23 |
+
<a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
|
24 |
+
<button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
|
25 |
+
<span lang="es">EN</span>
|
26 |
+
<span lang="en">ES</span>
|
27 |
+
</button>
|
28 |
</div>
|
29 |
</div>
|
30 |
</nav>
|
|
|
35 |
<h1 class="mb-4 text-4xl font-extrabold tracking-tight leading-none text-gray-900 md:text-5xl lg:text-6xl dark:text-white">AI-Powered Healthcare Solutions</h1>
|
36 |
<p class="mb-8 text-lg font-normal text-gray-500 lg:text-xl sm:px-16 lg:px-48 dark:text-gray-400">Transform your healthcare facility with cutting-edge AI solutions designed to improve patient care, streamline operations, and enhance medical decision-making.</p>
|
37 |
<div class="flex flex-col space-y-4 sm:flex-row sm:justify-center sm:space-y-0">
|
38 |
+
<a href="/proposals/nhs/main" class="inline-flex justify-center items-center py-3 px-5 text-base font-medium text-center text-white rounded-lg bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-900">
|
39 |
View Proposal
|
40 |
<svg class="w-3.5 h-3.5 ms-2 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
|
41 |
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"/>
|
42 |
</svg>
|
43 |
</a>
|
44 |
+
<a href="/papers" class="inline-flex justify-center items-center py-3 px-5 sm:ms-4 text-base font-medium text-center text-gray-900 rounded-lg border border-gray-300 hover:bg-gray-100 focus:ring-4 focus:ring-gray-100 dark:text-white dark:border-gray-700 dark:hover:bg-gray-700 dark:focus:ring-gray-800">
|
45 |
Learn more
|
46 |
</a>
|
47 |
</div>
|
|
|
87 |
<div class="mx-auto max-w-screen-sm text-center">
|
88 |
<h2 class="mb-4 text-4xl tracking-tight font-extrabold leading-tight text-gray-900 dark:text-white">Ready to transform your healthcare facility?</h2>
|
89 |
<p class="mb-6 font-light text-gray-500 dark:text-gray-400 md:text-lg">Contact us today to learn how our AI solutions can help you improve patient care and operational efficiency.</p>
|
90 |
+
<a href="/docs/main" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">Get in touch</a>
|
91 |
</div>
|
92 |
</div>
|
93 |
</section>
|
94 |
|
95 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.js"></script>
|
96 |
+
<script src="/assets/js/main.js"></script>
|
97 |
</body>
|
98 |
</html>
|
papers.html
CHANGED
@@ -10,68 +10,91 @@
|
|
10 |
</head>
|
11 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
|
12 |
<!-- Include shared nav -->
|
13 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
-
<main class="container">
|
16 |
-
<h1 class="text-4xl font-bold mb-8 text-blue-400 text-center">
|
17 |
-
<span lang="es">ArtΓculos e InvestigaciΓ³n</span>
|
18 |
-
<span lang="en">Papers & Research</span>
|
19 |
-
</h1>
|
20 |
<div class="grid md:grid-cols-2 gap-8">
|
21 |
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
|
22 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
23 |
-
<span lang="es">
|
24 |
-
<span lang="en">
|
25 |
</h2>
|
26 |
<p class="text-gray-300 mb-4">
|
27 |
-
<span lang="es">
|
28 |
-
<span lang="en">
|
29 |
</p>
|
30 |
-
<a href="papers/research/
|
31 |
-
<
|
32 |
-
<span lang="
|
33 |
-
|
34 |
-
</div>
|
35 |
-
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
|
36 |
-
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
37 |
-
<span lang="es">Fermed VLM Paper v2</span>
|
38 |
-
<span lang="en">Fermed VLM Paper v2</span>
|
39 |
-
</h2>
|
40 |
-
<p class="text-gray-300 mb-4">
|
41 |
-
<span lang="es">Una versiΓ³n actualizada del modelo Fermed VLM.</span>
|
42 |
-
<span lang="en">An updated version of the Fermed VLM model.</span>
|
43 |
-
</p>
|
44 |
-
<a href="papers/research/fermed-vlm-paper-v2.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
|
45 |
-
<span lang="es">Leer mΓ‘s</span>
|
46 |
-
<span lang="en">Read More</span>
|
47 |
</a>
|
48 |
</div>
|
|
|
49 |
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
|
50 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
51 |
-
<span lang="es">
|
52 |
-
<span lang="en">
|
53 |
</h2>
|
54 |
<p class="text-gray-300 mb-4">
|
55 |
-
<span lang="es">
|
56 |
-
<span lang="en">
|
57 |
</p>
|
58 |
-
<a href="papers/
|
|
|
59 |
<span lang="es">Leer mΓ‘s</span>
|
60 |
<span lang="en">Read More</span>
|
61 |
</a>
|
62 |
</div>
|
63 |
-
|
|
|
64 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
65 |
-
<span lang="es">
|
66 |
-
<span lang="en">
|
67 |
</h2>
|
68 |
<p class="text-gray-300 mb-4">
|
69 |
-
<span lang="es">
|
70 |
-
<span lang="en">
|
71 |
</p>
|
72 |
-
<a href="
|
73 |
-
<
|
74 |
-
<span lang="
|
|
|
75 |
</a>
|
76 |
</div>
|
77 |
</div>
|
|
|
10 |
</head>
|
11 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
|
12 |
<!-- Include shared nav -->
|
13 |
+
<nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
|
14 |
+
<div class="max-w-6xl mx-auto flex justify-between items-center">
|
15 |
+
<div class="flex items-center gap-4">
|
16 |
+
<a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2">
|
17 |
+
<img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
|
18 |
+
<span class="text-lg">Hospital AI</span>
|
19 |
+
</a>
|
20 |
+
<div class="breadcrumb">
|
21 |
+
<a href="/">Home</a>
|
22 |
+
<span>/</span>
|
23 |
+
<span>Papers</span>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
<div class="flex items-center gap-4">
|
27 |
+
<a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
|
28 |
+
<a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
|
29 |
+
<a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
|
30 |
+
<a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
|
31 |
+
<button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
|
32 |
+
<span lang="es">EN</span>
|
33 |
+
<span lang="en">ES</span>
|
34 |
+
</button>
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
</nav>
|
38 |
+
|
39 |
+
<main class="container mx-auto px-4 py-8">
|
40 |
+
<div class="flex items-center mb-8">
|
41 |
+
<a href="/" class="text-blue-400 hover:text-blue-300 mr-4">
|
42 |
+
<i class="fas fa-arrow-left"></i>
|
43 |
+
<span lang="es">Volver</span>
|
44 |
+
<span lang="en">Back</span>
|
45 |
+
</a>
|
46 |
+
<h1 class="text-4xl font-bold text-blue-400">
|
47 |
+
<span lang="es">ArtΓculos e InvestigaciΓ³n</span>
|
48 |
+
<span lang="en">Papers & Research</span>
|
49 |
+
</h1>
|
50 |
+
</div>
|
51 |
|
|
|
|
|
|
|
|
|
|
|
52 |
<div class="grid md:grid-cols-2 gap-8">
|
53 |
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
|
54 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
55 |
+
<span lang="es">FERMED: Vision-Language Framework</span>
|
56 |
+
<span lang="en">FERMED: Vision-Language Framework</span>
|
57 |
</h2>
|
58 |
<p class="text-gray-300 mb-4">
|
59 |
+
<span lang="es">Marco de trabajo Vision-Language para diagnΓ³stico mΓ©dico multimodal.</span>
|
60 |
+
<span lang="en">Vision-Language Framework for Multimodal Medical Diagnosis.</span>
|
61 |
</p>
|
62 |
+
<a href="papers/research/FERMED- Vision-Language Framework for Multimodal Medical Diagnosis.pdf" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
|
63 |
+
<i class="fas fa-file-pdf mr-2"></i>
|
64 |
+
<span lang="es">Ver PDF</span>
|
65 |
+
<span lang="en">View PDF</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
</a>
|
67 |
</div>
|
68 |
+
|
69 |
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
|
70 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
71 |
+
<span lang="es">FERMED VLM: Paper Final</span>
|
72 |
+
<span lang="en">FERMED VLM: Final Paper</span>
|
73 |
</h2>
|
74 |
<p class="text-gray-300 mb-4">
|
75 |
+
<span lang="es">La versiΓ³n final del paper FERMED VLM con todos los resultados y conclusiones.</span>
|
76 |
+
<span lang="en">The final version of the FERMED VLM paper with all results and conclusions.</span>
|
77 |
</p>
|
78 |
+
<a href="papers/research/FERMED-VLM-Final_Paper.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
|
79 |
+
<i class="fas fa-book mr-2"></i>
|
80 |
<span lang="es">Leer mΓ‘s</span>
|
81 |
<span lang="en">Read More</span>
|
82 |
</a>
|
83 |
</div>
|
84 |
+
|
85 |
+
<div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg col-span-2">
|
86 |
<h2 class="text-2xl font-bold mb-4 text-blue-400">
|
87 |
+
<span lang="es">Versiones Anteriores</span>
|
88 |
+
<span lang="en">Previous Versions</span>
|
89 |
</h2>
|
90 |
<p class="text-gray-300 mb-4">
|
91 |
+
<span lang="es">Las versiones anteriores de los papers estΓ‘n disponibles en nuestro archivo.</span>
|
92 |
+
<span lang="en">Previous versions of the papers are available in our archive.</span>
|
93 |
</p>
|
94 |
+
<a href="archive/index.html" class="btn bg-gray-600 hover:bg-gray-700 p-3 rounded-md inline-block">
|
95 |
+
<i class="fas fa-archive mr-2"></i>
|
96 |
+
<span lang="es">Ver Archivo</span>
|
97 |
+
<span lang="en">View Archive</span>
|
98 |
</a>
|
99 |
</div>
|
100 |
</div>
|
papers/research/FERMED-VLM-Final_Paper.html
CHANGED
@@ -20,6 +20,54 @@
|
|
20 |
font-size: 16px;
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
.container {
|
24 |
max-width: 960px;
|
25 |
background: white;
|
@@ -584,6 +632,25 @@
|
|
584 |
</head>
|
585 |
|
586 |
<body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
587 |
<div class="container">
|
588 |
<div class="header">
|
589 |
<h1>FERMED: Vision-Language Framework for Multimodal Medical Diagnosis</h1>
|
|
|
20 |
font-size: 16px;
|
21 |
}
|
22 |
|
23 |
+
.nav-bar {
|
24 |
+
background: #f8f9fa;
|
25 |
+
padding: 1rem;
|
26 |
+
margin-bottom: 2rem;
|
27 |
+
border-bottom: 1px solid #e9ecef;
|
28 |
+
}
|
29 |
+
|
30 |
+
.breadcrumb {
|
31 |
+
display: flex;
|
32 |
+
align-items: center;
|
33 |
+
gap: 0.5rem;
|
34 |
+
font-size: 0.875rem;
|
35 |
+
color: #6c757d;
|
36 |
+
margin-top: 0.5rem;
|
37 |
+
}
|
38 |
+
|
39 |
+
.breadcrumb a {
|
40 |
+
color: #2c3e50;
|
41 |
+
text-decoration: none;
|
42 |
+
}
|
43 |
+
|
44 |
+
.breadcrumb a:hover {
|
45 |
+
color: #1a252f;
|
46 |
+
text-decoration: underline;
|
47 |
+
}
|
48 |
+
|
49 |
+
.breadcrumb-separator {
|
50 |
+
color: #6c757d;
|
51 |
+
}
|
52 |
+
|
53 |
+
.back-button {
|
54 |
+
color: #2c3e50;
|
55 |
+
text-decoration: none;
|
56 |
+
display: inline-flex;
|
57 |
+
align-items: center;
|
58 |
+
font-family: system-ui, -apple-system, sans-serif;
|
59 |
+
transition: color 0.2s;
|
60 |
+
}
|
61 |
+
|
62 |
+
.back-button:hover {
|
63 |
+
color: #1a252f;
|
64 |
+
text-decoration: none;
|
65 |
+
}
|
66 |
+
|
67 |
+
.back-button i {
|
68 |
+
margin-right: 0.5rem;
|
69 |
+
}
|
70 |
+
|
71 |
.container {
|
72 |
max-width: 960px;
|
73 |
background: white;
|
|
|
632 |
</head>
|
633 |
|
634 |
<body>
|
635 |
+
<div class="nav-bar">
|
636 |
+
<div class="container">
|
637 |
+
<div class="d-flex justify-content-between align-items-center">
|
638 |
+
<a href="/papers.html" class="back-button">
|
639 |
+
<i class="fas fa-arrow-left"></i>
|
640 |
+
Back to Papers
|
641 |
+
</a>
|
642 |
+
<div class="breadcrumb">
|
643 |
+
<a href="/">Home</a>
|
644 |
+
<span class="breadcrumb-separator">/</span>
|
645 |
+
<a href="/papers.html">Papers</a>
|
646 |
+
<span class="breadcrumb-separator">/</span>
|
647 |
+
<a href="/papers/research">Research</a>
|
648 |
+
<span class="breadcrumb-separator">/</span>
|
649 |
+
<span>FERMED VLM Final Paper</span>
|
650 |
+
</div>
|
651 |
+
</div>
|
652 |
+
</div>
|
653 |
+
</div>
|
654 |
<div class="container">
|
655 |
<div class="header">
|
656 |
<h1>FERMED: Vision-Language Framework for Multimodal Medical Diagnosis</h1>
|
projects/automedical.html
CHANGED
@@ -11,10 +11,29 @@
|
|
11 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen">
|
12 |
<nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
|
13 |
<div class="max-w-6xl mx-auto flex justify-between items-center">
|
14 |
-
<
|
15 |
-
<
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
</div>
|
19 |
</nav>
|
20 |
|
@@ -107,8 +126,8 @@
|
|
107 |
<div class="text-center p-12 border-2 border-dashed border-gray-700 rounded-xl">
|
108 |
<img src="https://cdn-icons-png.flaticon.com/512/9512/9512757.png" alt="Demo" class="w-24 h-24 mx-auto mb-6 opacity-50">
|
109 |
<p class="text-gray-400 mb-6">Try AutoMedical AI's diagnostic capabilities</p>
|
110 |
-
<a href="/automedical
|
111 |
-
<img src="
|
112 |
Launch Demo
|
113 |
</a>
|
114 |
</div>
|
|
|
11 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen">
|
12 |
<nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
|
13 |
<div class="max-w-6xl mx-auto flex justify-between items-center">
|
14 |
+
<div class="flex items-center gap-4">
|
15 |
+
<a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2 no-underline">
|
16 |
+
<img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
|
17 |
+
<span class="text-lg">Hospital AI</span>
|
18 |
+
</a>
|
19 |
+
<div class="breadcrumb">
|
20 |
+
<a href="/">Home</a>
|
21 |
+
<span>/</span>
|
22 |
+
<a href="/projects">Projects</a>
|
23 |
+
<span>/</span>
|
24 |
+
<span>AutoMedical</span>
|
25 |
+
</div>
|
26 |
+
</div>
|
27 |
+
<div class="flex items-center gap-4">
|
28 |
+
<a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
|
29 |
+
<a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
|
30 |
+
<a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
|
31 |
+
<a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
|
32 |
+
<button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
|
33 |
+
<span lang="es">EN</span>
|
34 |
+
<span lang="en">ES</span>
|
35 |
+
</button>
|
36 |
+
</div>
|
37 |
</div>
|
38 |
</nav>
|
39 |
|
|
|
126 |
<div class="text-center p-12 border-2 border-dashed border-gray-700 rounded-xl">
|
127 |
<img src="https://cdn-icons-png.flaticon.com/512/9512/9512757.png" alt="Demo" class="w-24 h-24 mx-auto mb-6 opacity-50">
|
128 |
<p class="text-gray-400 mb-6">Try AutoMedical AI's diagnostic capabilities</p>
|
129 |
+
<a href="/automedical/demo" class="inline-flex items-center gap-2 bg-purple-500 hover:bg-purple-600 px-6 py-3 rounded-xl text-white font-medium transition-colors">
|
130 |
+
<img src="/assets/images/icons/launch.png" alt="Launch" class="w-5 h-5">
|
131 |
Launch Demo
|
132 |
</a>
|
133 |
</div>
|
proposals/nhs/nhs-proposal.html
CHANGED
@@ -29,25 +29,69 @@
|
|
29 |
background: #3B82F6;
|
30 |
border-radius: 50%;
|
31 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
</style>
|
33 |
</head>
|
34 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
|
35 |
<nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
|
36 |
<div class="max-w-6xl mx-auto flex justify-between items-center">
|
37 |
-
<
|
38 |
-
<
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
<
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
</div>
|
46 |
</nav>
|
47 |
|
48 |
<div class="max-w-4xl mx-auto p-8">
|
49 |
-
<div class="mb-8">
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
</div>
|
52 |
|
53 |
<article class="prose prose-invert max-w-none">
|
|
|
29 |
background: #3B82F6;
|
30 |
border-radius: 50%;
|
31 |
}
|
32 |
+
.breadcrumb {
|
33 |
+
display: flex;
|
34 |
+
align-items: center;
|
35 |
+
gap: 0.5rem;
|
36 |
+
font-size: 0.875rem;
|
37 |
+
color: #9CA3AF;
|
38 |
+
}
|
39 |
+
.breadcrumb a {
|
40 |
+
color: #60A5FA;
|
41 |
+
text-decoration: none;
|
42 |
+
}
|
43 |
+
.breadcrumb a:hover {
|
44 |
+
color: #3B82F6;
|
45 |
+
}
|
46 |
</style>
|
47 |
</head>
|
48 |
<body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
|
49 |
<nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
|
50 |
<div class="max-w-6xl mx-auto flex justify-between items-center">
|
51 |
+
<div class="flex items-center gap-4">
|
52 |
+
<a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2">
|
53 |
+
<img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
|
54 |
+
<span class="text-lg">Hospital AI</span>
|
55 |
+
</a>
|
56 |
+
<div class="breadcrumb">
|
57 |
+
<a href="/">Home</a>
|
58 |
+
<span>/</span>
|
59 |
+
<a href="/proposals">Proposals</a>
|
60 |
+
<span>/</span>
|
61 |
+
<a href="/proposals/nhs">NHS</a>
|
62 |
+
<span>/</span>
|
63 |
+
<span>Main</span>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
<div class="flex items-center gap-4">
|
67 |
+
<a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
|
68 |
+
<a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
|
69 |
+
<a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
|
70 |
+
<a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
|
71 |
+
<button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
|
72 |
+
<span lang="es">EN</span>
|
73 |
+
<span lang="en">ES</span>
|
74 |
+
</button>
|
75 |
+
</div>
|
76 |
</div>
|
77 |
</nav>
|
78 |
|
79 |
<div class="max-w-4xl mx-auto p-8">
|
80 |
+
<div class="flex justify-between items-center mb-8">
|
81 |
+
<h1 class="text-4xl font-bold text-blue-400">
|
82 |
+
<span lang="es">Propuesta NHS</span>
|
83 |
+
<span lang="en">NHS Proposal</span>
|
84 |
+
</h1>
|
85 |
+
<div class="flex gap-4">
|
86 |
+
<a href="/proposals/nhs/detailed" class="text-blue-400 hover:text-blue-300">
|
87 |
+
<span lang="es">Ver Detallado</span>
|
88 |
+
<span lang="en">View Detailed</span>
|
89 |
+
</a>
|
90 |
+
<a href="/proposals/nhs/formal" class="text-blue-400 hover:text-blue-300">
|
91 |
+
<span lang="es">Ver Formal</span>
|
92 |
+
<span lang="en">View Formal</span>
|
93 |
+
</a>
|
94 |
+
</div>
|
95 |
</div>
|
96 |
|
97 |
<article class="prose prose-invert max-w-none">
|
tools/link_checker.html
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<title>Website Link Validator</title>
|
6 |
+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
7 |
+
<style>
|
8 |
+
:root {
|
9 |
+
--success: #10b981;
|
10 |
+
--warning: #f59e0b;
|
11 |
+
--error: #ef4444;
|
12 |
+
--info: #3b82f6;
|
13 |
+
}
|
14 |
+
body {
|
15 |
+
font-family: system-ui, -apple-system, sans-serif;
|
16 |
+
max-width: 1200px;
|
17 |
+
margin: 0 auto;
|
18 |
+
padding: 2rem;
|
19 |
+
background: #f8fafc;
|
20 |
+
}
|
21 |
+
.status-grid {
|
22 |
+
display: grid;
|
23 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
24 |
+
gap: 1rem;
|
25 |
+
margin: 2rem 0;
|
26 |
+
}
|
27 |
+
.status-card {
|
28 |
+
padding: 1.5rem;
|
29 |
+
border-radius: 0.5rem;
|
30 |
+
background: white;
|
31 |
+
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
32 |
+
}
|
33 |
+
.status-success { border-left: 4px solid var(--success); }
|
34 |
+
.status-warning { border-left: 4px solid var(--warning); }
|
35 |
+
.status-error { border-left: 4px solid var(--error); }
|
36 |
+
.status-info { border-left: 4px solid var(--info); }
|
37 |
+
.link-list {
|
38 |
+
margin-top: 2rem;
|
39 |
+
}
|
40 |
+
.link-item {
|
41 |
+
padding: 1rem;
|
42 |
+
border-radius: 0.5rem;
|
43 |
+
margin-bottom: 0.5rem;
|
44 |
+
background: #f8fafc;
|
45 |
+
}
|
46 |
+
.link-status {
|
47 |
+
display: inline-block;
|
48 |
+
padding: 0.25rem 0.5rem;
|
49 |
+
border-radius: 0.25rem;
|
50 |
+
font-size: 0.875rem;
|
51 |
+
font-weight: 500;
|
52 |
+
}
|
53 |
+
.status-ok { background: #dcfce7; color: #166534; }
|
54 |
+
.status-broken { background: #fee2e2; color: #991b1b; }
|
55 |
+
.mermaid {
|
56 |
+
margin: 2rem 0;
|
57 |
+
padding: 1rem;
|
58 |
+
background: white;
|
59 |
+
border-radius: 0.5rem;
|
60 |
+
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
61 |
+
}
|
62 |
+
</style>
|
63 |
+
</head>
|
64 |
+
<body>
|
65 |
+
<h1>Website Link Validator</h1>
|
66 |
+
|
67 |
+
<div class="status-grid">
|
68 |
+
<div class="status-card status-info">
|
69 |
+
<h3>Total Links</h3>
|
70 |
+
<div class="mermaid">
|
71 |
+
pie
|
72 |
+
title Link Distribution
|
73 |
+
"Working" : 85
|
74 |
+
"Redirects" : 10
|
75 |
+
"Broken" : 5
|
76 |
+
</div>
|
77 |
+
</div>
|
78 |
+
<div class="status-card status-warning">
|
79 |
+
<h3>Critical Paths</h3>
|
80 |
+
<div class="mermaid">
|
81 |
+
graph TD
|
82 |
+
A[Home] --> B[Projects]
|
83 |
+
B --> C[AutoMedical]
|
84 |
+
A --> D[Papers]
|
85 |
+
D --> E[Current Research]
|
86 |
+
A --> F[Proposals]
|
87 |
+
F --> G[NHS]
|
88 |
+
|
89 |
+
classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
|
90 |
+
classDef critical fill:#fee2e2,stroke:#991b1b,stroke-width:2px;
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
</div>
|
94 |
+
|
95 |
+
<div class="link-list">
|
96 |
+
<h2>Link Status</h2>
|
97 |
+
<div class="link-item">
|
98 |
+
<span class="link-status status-ok">β</span>
|
99 |
+
<span>/</span> β Home
|
100 |
+
</div>
|
101 |
+
<div class="link-item">
|
102 |
+
<span class="link-status status-ok">β</span>
|
103 |
+
<span>/projects</span> β Projects
|
104 |
+
</div>
|
105 |
+
<div class="link-item">
|
106 |
+
<span class="link-status status-ok">β</span>
|
107 |
+
<span>/papers</span> β Papers
|
108 |
+
</div>
|
109 |
+
<div class="link-item">
|
110 |
+
<span class="link-status status-ok">β</span>
|
111 |
+
<span>/proposals</span> β Proposals
|
112 |
+
</div>
|
113 |
+
<div class="link-item">
|
114 |
+
<span class="link-status status-ok">β</span>
|
115 |
+
<span>/docs</span> β Documentation
|
116 |
+
</div>
|
117 |
+
</div>
|
118 |
+
|
119 |
+
<script>
|
120 |
+
mermaid.initialize({
|
121 |
+
startOnLoad: true,
|
122 |
+
theme: 'neutral',
|
123 |
+
securityLevel: 'loose',
|
124 |
+
});
|
125 |
+
</script>
|
126 |
+
</body>
|
127 |
+
</html>
|
tools/validate.js
ADDED
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// Link Validation Script
|
2 |
+
const validateWebsite = {
|
3 |
+
// Core paths that must exist
|
4 |
+
criticalPaths: [
|
5 |
+
'/',
|
6 |
+
'/projects',
|
7 |
+
'/papers',
|
8 |
+
'/proposals',
|
9 |
+
'/docs',
|
10 |
+
'/api',
|
11 |
+
'/investors'
|
12 |
+
],
|
13 |
+
|
14 |
+
// Project paths
|
15 |
+
projectPaths: [
|
16 |
+
'/projects/analytics',
|
17 |
+
'/projects/autoglaucoma',
|
18 |
+
'/projects/automedical'
|
19 |
+
],
|
20 |
+
|
21 |
+
// Paper paths
|
22 |
+
paperPaths: [
|
23 |
+
'/papers/fermed-vlm.pdf',
|
24 |
+
'/papers/fermed-vlm.html',
|
25 |
+
'/papers/archive'
|
26 |
+
],
|
27 |
+
|
28 |
+
// Proposal paths
|
29 |
+
proposalPaths: [
|
30 |
+
'/proposals/nhs/main',
|
31 |
+
'/proposals/nhs/detailed',
|
32 |
+
'/proposals/nhs/formal',
|
33 |
+
'/proposals/spanish/12oct',
|
34 |
+
'/proposals/spanish/hospital',
|
35 |
+
'/proposals/simple'
|
36 |
+
],
|
37 |
+
|
38 |
+
// Documentation paths
|
39 |
+
docPaths: [
|
40 |
+
'/docs/main',
|
41 |
+
'/docs/internal/emails',
|
42 |
+
'/docs/internal/requirements',
|
43 |
+
'/docs/internal/context',
|
44 |
+
'/docs/references'
|
45 |
+
],
|
46 |
+
|
47 |
+
// Validate all links
|
48 |
+
validateLinks() {
|
49 |
+
const results = {
|
50 |
+
working: [],
|
51 |
+
redirects: [],
|
52 |
+
broken: []
|
53 |
+
};
|
54 |
+
|
55 |
+
// Combine all paths
|
56 |
+
const allPaths = [
|
57 |
+
...this.criticalPaths,
|
58 |
+
...this.projectPaths,
|
59 |
+
...this.paperPaths,
|
60 |
+
...this.proposalPaths,
|
61 |
+
...this.docPaths
|
62 |
+
];
|
63 |
+
|
64 |
+
// Check each path
|
65 |
+
allPaths.forEach(path => {
|
66 |
+
try {
|
67 |
+
const response = fetch(path);
|
68 |
+
if (response.ok) {
|
69 |
+
results.working.push(path);
|
70 |
+
} else if (response.status >= 300 && response.status < 400) {
|
71 |
+
results.redirects.push(path);
|
72 |
+
} else {
|
73 |
+
results.broken.push(path);
|
74 |
+
}
|
75 |
+
} catch (error) {
|
76 |
+
results.broken.push(path);
|
77 |
+
}
|
78 |
+
});
|
79 |
+
|
80 |
+
return results;
|
81 |
+
},
|
82 |
+
|
83 |
+
// Validate navigation consistency
|
84 |
+
validateNavigation() {
|
85 |
+
const navResults = {
|
86 |
+
consistent: [],
|
87 |
+
inconsistent: []
|
88 |
+
};
|
89 |
+
|
90 |
+
// Check navigation elements
|
91 |
+
document.querySelectorAll('nav a').forEach(link => {
|
92 |
+
const href = link.getAttribute('href');
|
93 |
+
if (href) {
|
94 |
+
const matchingPath = this.allPaths.find(path => path === href);
|
95 |
+
if (matchingPath) {
|
96 |
+
navResults.consistent.push(href);
|
97 |
+
} else {
|
98 |
+
navResults.inconsistent.push(href);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
});
|
102 |
+
|
103 |
+
return navResults;
|
104 |
+
},
|
105 |
+
|
106 |
+
// Validate breadcrumbs
|
107 |
+
validateBreadcrumbs() {
|
108 |
+
const breadcrumbResults = {
|
109 |
+
valid: [],
|
110 |
+
invalid: []
|
111 |
+
};
|
112 |
+
|
113 |
+
document.querySelectorAll('.breadcrumb').forEach(breadcrumb => {
|
114 |
+
const links = breadcrumb.querySelectorAll('a');
|
115 |
+
let validPath = true;
|
116 |
+
let currentPath = '';
|
117 |
+
|
118 |
+
links.forEach(link => {
|
119 |
+
const href = link.getAttribute('href');
|
120 |
+
if (href) {
|
121 |
+
currentPath += href === '/' ? '' : href;
|
122 |
+
if (!this.allPaths.includes(currentPath)) {
|
123 |
+
validPath = false;
|
124 |
+
}
|
125 |
+
}
|
126 |
+
});
|
127 |
+
|
128 |
+
if (validPath) {
|
129 |
+
breadcrumbResults.valid.push(currentPath);
|
130 |
+
} else {
|
131 |
+
breadcrumbResults.invalid.push(currentPath);
|
132 |
+
}
|
133 |
+
});
|
134 |
+
|
135 |
+
return breadcrumbResults;
|
136 |
+
},
|
137 |
+
|
138 |
+
// Generate report
|
139 |
+
generateReport() {
|
140 |
+
const linkResults = this.validateLinks();
|
141 |
+
const navResults = this.validateNavigation();
|
142 |
+
const breadcrumbResults = this.validateBreadcrumbs();
|
143 |
+
|
144 |
+
return {
|
145 |
+
links: linkResults,
|
146 |
+
navigation: navResults,
|
147 |
+
breadcrumbs: breadcrumbResults,
|
148 |
+
summary: {
|
149 |
+
totalLinks: Object.values(linkResults).flat().length,
|
150 |
+
brokenLinks: linkResults.broken.length,
|
151 |
+
inconsistentNav: navResults.inconsistent.length,
|
152 |
+
invalidBreadcrumbs: breadcrumbResults.invalid.length
|
153 |
+
}
|
154 |
+
};
|
155 |
+
}
|
156 |
+
};
|
157 |
+
|
158 |
+
// Export for use in Node.js environments
|
159 |
+
if (typeof module !== 'undefined' && module.exports) {
|
160 |
+
module.exports = validateWebsite;
|
161 |
+
}
|
website_paths.html
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Website Navigation Paths</title>
|
5 |
+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
6 |
+
<style>
|
7 |
+
body { padding: 20px; font-family: system-ui; }
|
8 |
+
.mermaid { background: white; padding: 20px; border-radius: 8px; }
|
9 |
+
</style>
|
10 |
+
</head>
|
11 |
+
<body>
|
12 |
+
<div class="mermaid">
|
13 |
+
graph TD
|
14 |
+
Home[Homepage /] --> Papers[Papers /papers]
|
15 |
+
Home --> Projects[Projects /projects]
|
16 |
+
Home --> Proposals[Proposals /proposals]
|
17 |
+
Home --> Docs[Documentation /docs]
|
18 |
+
Home --> API[API /api]
|
19 |
+
Home --> Investors[Investors /investors]
|
20 |
+
|
21 |
+
Papers --> CurrentPaper1[FERMED Paper /papers/fermed-vlm.pdf]
|
22 |
+
Papers --> CurrentPaper2[FERMED HTML /papers/fermed-vlm.html]
|
23 |
+
Papers --> Archive[Archive /papers/archive]
|
24 |
+
|
25 |
+
Archive --> ResearchPapers[Research /papers/archive/research]
|
26 |
+
Archive --> Drafts[Drafts /papers/archive/drafts]
|
27 |
+
Archive --> OtherDocs[Other /papers/archive/other]
|
28 |
+
|
29 |
+
Projects --> Analytics[Analytics /projects/analytics]
|
30 |
+
Projects --> AutoGlaucoma[AutoGlaucoma /projects/autoglaucoma]
|
31 |
+
Projects --> AutoMedical[AutoMedical /projects/automedical]
|
32 |
+
|
33 |
+
Proposals --> NHS[NHS /proposals/nhs]
|
34 |
+
Proposals --> Spanish[Spanish /proposals/spanish]
|
35 |
+
Proposals --> Simple[Simple /proposals/simple]
|
36 |
+
|
37 |
+
NHS --> NHSDetailed[Detailed /proposals/nhs/detailed]
|
38 |
+
NHS --> NHSFormal[Formal /proposals/nhs/formal]
|
39 |
+
NHS --> NHSProposal[Main /proposals/nhs/main]
|
40 |
+
|
41 |
+
Spanish --> Oct12[12 Oct /proposals/spanish/12oct]
|
42 |
+
Spanish --> SpanishHospital[Hospital /proposals/spanish/hospital]
|
43 |
+
|
44 |
+
Docs --> DocMain[Main /docs/main]
|
45 |
+
Docs --> Internal[Internal /docs/internal]
|
46 |
+
Docs --> References[References /docs/references]
|
47 |
+
|
48 |
+
Internal --> EmailToThem[Emails /docs/internal/emails]
|
49 |
+
Internal --> Requirements[Requirements /docs/internal/requirements]
|
50 |
+
Internal --> Context[Context /docs/internal/context]
|
51 |
+
|
52 |
+
classDef page fill:#f9f9f9,stroke:#333,stroke-width:2px;
|
53 |
+
classDef current fill:#e3f2fd,stroke:#1565c0,stroke-width:2px;
|
54 |
+
classDef section fill:#fff3e0,stroke:#ff9800,stroke-width:2px;
|
55 |
+
|
56 |
+
class Home,Papers,Projects,Proposals,Docs,API,Investors section;
|
57 |
+
class CurrentPaper1,CurrentPaper2 current;
|
58 |
+
class Archive,ResearchPapers,Drafts,OtherDocs page;
|
59 |
+
</div>
|
60 |
+
</body>
|
61 |
+
</html>
|