Mavidart commited on
Commit
0e82ba4
·
verified ·
1 Parent(s): fbeb5e4

La imagen de fond cambiarla por una con letras, palabras, etc. Vamos a hacer el apartado de servicios mas discreto, con los servicios en tarjetas uno al lado del otro. Quiero que las categorías del blog estén más organizadas en una sección con pestañas nombradas como las etiquetas principales: idiomas, lectura, música, otros. Quiero poder ver el header y el footer

Browse files
Files changed (7) hide show
  1. README.md +8 -5
  2. components/footer.js +72 -0
  3. components/navbar.js +170 -0
  4. index.html +245 -19
  5. script.js +81 -0
  6. scripts/languages.js +162 -0
  7. style.css +82 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Wordsmith Forge
3
- emoji: 📈
4
- colorFrom: yellow
5
- colorTo: green
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: WordSmith Forge 🔥
3
+ colorFrom: gray
4
+ colorTo: purple
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/footer.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ footer {
7
+ background-color: #111827;
8
+ }
9
+
10
+ .social-icon {
11
+ transition: all 0.3s ease;
12
+ }
13
+
14
+ .social-icon:hover {
15
+ transform: translateY(-3px);
16
+ color: #b45309;
17
+ }
18
+ </style>
19
+
20
+ <footer class="py-12 px-6 md:px-12 text-amber-100">
21
+ <div class="max-w-7xl mx-auto">
22
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
23
+ <div>
24
+ <h3 class="text-xl font-playfair font-bold mb-4" data-i18n="footer_about">About La Fragua</h3>
25
+ <p class="mb-4" data-i18n="footer_about_text">A linguistic workshop where words are forged with precision and passion.</p>
26
+ <a href="about.html" class="text-amber-300 hover:text-amber-200 inline-flex items-center" data-i18n="footer_learnmore">
27
+ Learn more about me
28
+ <i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
29
+ </a>
30
+ </div>
31
+
32
+ <div>
33
+ <h3 class="text-xl font-playfair font-bold mb-4" data-i18n="footer_quicklinks">Quick Links</h3>
34
+ <ul class="space-y-2">
35
+ <li><a href="index.html" class="hover:text-amber-300 transition duration-300" data-i18n="nav_home">Home</a></li>
36
+ <li><a href="#services" class="hover:text-amber-300 transition duration-300" data-i18n="nav_services">Services</a></li>
37
+ <li><a href="blog.html" class="hover:text-amber-300 transition duration-300" data-i18n="nav_blog">Blog</a></li>
38
+ <li><a href="#contact" class="hover:text-amber-300 transition duration-300" data-i18n="nav_contact">Contact</a></li>
39
+ </ul>
40
+ </div>
41
+
42
+ <div>
43
+ <h3 class="text-xl font-playfair font-bold mb-4" data-i18n="footer_connect">Connect</h3>
44
+ <div class="flex space-x-4 mb-4">
45
+ <a href="#" class="social-icon">
46
+ <i data-feather="twitter" class="w-5 h-5"></i>
47
+ </a>
48
+ <a href="#" class="social-icon">
49
+ <i data-feather="linkedin" class="w-5 h-5"></i>
50
+ </a>
51
+ <a href="#" class="social-icon">
52
+ <i data-feather="instagram" class="w-5 h-5"></i>
53
+ </a>
54
+ </div>
55
+ <p data-i18n="footer_email">Email: info@lafraguadelogos.com</p>
56
+ </div>
57
+ </div>
58
+
59
+ <div class="border-t border-gray-700 mt-12 pt-8 text-center">
60
+ <p data-i18n="footer_copyright">© ${new Date().getFullYear()} La Fragua del Logos. Forged with words and ideas.</p>
61
+ </div>
62
+ </div>
63
+ </footer>
64
+
65
+ <script>
66
+ feather.replace();
67
+ </script>
68
+ `;
69
+ }
70
+ }
71
+
72
+ customElements.define('custom-footer', CustomFooter);
components/navbar.js ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ nav {
7
+ background-color: rgba(17, 24, 39, 0.9);
8
+ backdrop-filter: blur(10px);
9
+ transition: all 0.3s ease;
10
+ }
11
+
12
+ nav.scrolled {
13
+ background-color: rgba(17, 24, 39, 0.98);
14
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
15
+ }
16
+
17
+ .nav-link {
18
+ position: relative;
19
+ }
20
+
21
+ .nav-link::after {
22
+ content: '';
23
+ position: absolute;
24
+ bottom: -2px;
25
+ left: 0;
26
+ width: 0;
27
+ height: 2px;
28
+ background-color: #b45309;
29
+ transition: width 0.3s ease;
30
+ }
31
+
32
+ .nav-link:hover::after {
33
+ width: 100%;
34
+ }
35
+
36
+ .language-selector {
37
+ position: relative;
38
+ }
39
+
40
+ .language-dropdown {
41
+ display: none;
42
+ position: absolute;
43
+ right: 0;
44
+ background-color: #1a1a1a;
45
+ min-width: 160px;
46
+ box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
47
+ z-index: 1;
48
+ border-radius: 4px;
49
+ }
50
+
51
+ .language-selector:hover .language-dropdown {
52
+ display: block;
53
+ }
54
+
55
+ .language-option {
56
+ padding: 12px 16px;
57
+ display: flex;
58
+ align-items: center;
59
+ transition: background-color 0.3s;
60
+ }
61
+
62
+ .language-option:hover {
63
+ background-color: #b45309;
64
+ }
65
+
66
+ .active {
67
+ color: #b45309;
68
+ }
69
+ </style>
70
+
71
+ <nav class="fixed w-full z-50 py-4 px-6 md:px-12 transition-all duration-300">
72
+ <div class="max-w-7xl mx-auto flex justify-between items-center">
73
+ <a href="index.html" class="text-2xl font-playfair font-bold text-amber-100 hover:text-amber-200 transition duration-300">
74
+ La Fragua del Logos
75
+ </a>
76
+
77
+ <div class="hidden md:flex items-center space-x-8">
78
+ <a href="index.html" class="nav-link text-amber-100 hover:text-amber-200" data-i18n="nav_home">Home</a>
79
+ <a href="about.html" class="nav-link text-amber-100 hover:text-amber-200 text-sm" data-i18n="nav_about">About Me</a>
80
+ <a href="#services" class="nav-link text-amber-100 hover:text-amber-200" data-i18n="nav_services">Services</a>
81
+ <a href="blog.html" class="nav-link text-amber-100 hover:text-amber-200" data-i18n="nav_blog">Blog</a>
82
+ <a href="#contact" class="nav-link text-amber-100 hover:text-amber-200" data-i18n="nav_contact">Contact</a>
83
+
84
+ <div class="language-selector ml-4">
85
+ <button class="flex items-center text-amber-100 hover:text-amber-200">
86
+ <i data-feather="globe" class="w-5 h-5 mr-2"></i>
87
+ <span class="language-label">ES</span>
88
+ <i data-feather="chevron-down" class="w-4 h-4 ml-1"></i>
89
+ </button>
90
+ <div class="language-dropdown">
91
+ <div class="language-option active" data-lang="es">
92
+ <span class="mr-2">🇪🇸</span>
93
+ <span data-i18n="lang_es">Español</span>
94
+ </div>
95
+ <div class="language-option" data-lang="en">
96
+ <span class="mr-2">🇬🇧</span>
97
+ <span data-i18n="lang_en">English</span>
98
+ </div>
99
+ <div class="language-option" data-lang="fr">
100
+ <span class="mr-2">🇫🇷</span>
101
+ <span data-i18n="lang_fr">Français</span>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ </div>
106
+
107
+ <button class="md:hidden text-amber-100 focus:outline-none">
108
+ <i data-feather="menu" class="w-6 h-6"></i>
109
+ </button>
110
+ </div>
111
+
112
+ <!-- Mobile menu -->
113
+ <div class="md:hidden hidden bg-gray-900 mt-4 py-4 px-6 rounded-lg">
114
+ <a href="index.html" class="block py-2 text-amber-100 hover:text-amber-200" data-i18n="nav_home">Home</a>
115
+ <a href="about.html" class="block py-2 text-amber-100 hover:text-amber-200 text-sm" data-i18n="nav_about">About Me</a>
116
+ <a href="#services" class="block py-2 text-amber-100 hover:text-amber-200" data-i18n="nav_services">Services</a>
117
+ <a href="blog.html" class="block py-2 text-amber-100 hover:text-amber-200" data-i18n="nav_blog">Blog</a>
118
+ <a href="#contact" class="block py-2 text-amber-100 hover:text-amber-200" data-i18n="nav_contact">Contact</a>
119
+
120
+ <div class="pt-4 border-t border-gray-700 mt-4">
121
+ <div class="language-option active" data-lang="es">
122
+ <span class="mr-2">🇪🇸</span>
123
+ <span data-i18n="lang_es">Español</span>
124
+ </div>
125
+ <div class="language-option" data-lang="en">
126
+ <span class="mr-2">🇬🇧</span>
127
+ <span data-i18n="lang_en">English</span>
128
+ </div>
129
+ <div class="language-option" data-lang="fr">
130
+ <span class="mr-2">🇫🇷</span>
131
+ <span data-i18n="lang_fr">Français</span>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </nav>
136
+
137
+ <script>
138
+ // Mobile menu toggle
139
+ document.addEventListener('DOMContentLoaded', function() {
140
+ const mobileMenuButton = this.shadowRoot.querySelector('button[class*="md:hidden"]');
141
+ const mobileMenu = this.shadowRoot.querySelector('div[class*="md:hidden"]');
142
+
143
+ mobileMenuButton.addEventListener('click', function() {
144
+ const isHidden = mobileMenu.classList.contains('hidden');
145
+ if (isHidden) {
146
+ mobileMenu.classList.remove('hidden');
147
+ feather.replace();
148
+ } else {
149
+ mobileMenu.classList.add('hidden');
150
+ }
151
+ });
152
+
153
+ // Scroll effect for navbar
154
+ window.addEventListener('scroll', function() {
155
+ const nav = this.shadowRoot.querySelector('nav');
156
+ if (window.scrollY > 50) {
157
+ nav.classList.add('scrolled');
158
+ } else {
159
+ nav.classList.remove('scrolled');
160
+ }
161
+ });
162
+
163
+ feather.replace();
164
+ });
165
+ </script>
166
+ `;
167
+ }
168
+ }
169
+
170
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,19 +1,245 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="es" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>La Fragua del Logos</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <script src="components/navbar.js"></script>
12
+ <script src="components/footer.js"></script>
13
+ <script src="scripts/languages.js"></script>
14
+ <script src="script.js"></script>
15
+ <style>
16
+ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Lato:wght@300;400;700&display=swap');
17
+ </style>
18
+ </head>
19
+ <body class="bg-amber-50 text-gray-900 font-lato">
20
+ <custom-navbar></custom-navbar>
21
+
22
+ <main>
23
+ <!-- Hero Section -->
24
+ <section class="relative h-screen flex items-center justify-center bg-gradient-to-b from-gray-900 to-amber-900 overflow-hidden">
25
+ <div class="absolute inset-0 bg-[url('http://static.photos/education/1200x630/1')] opacity-20 bg-cover bg-center"></div>
26
+ <div class="relative z-10 text-center px-4 max-w-4xl">
27
+ <h1 class="text-5xl md:text-7xl font-playfair font-bold text-amber-100 mb-6">
28
+ <span class="block" data-i18n="hero_title">Where words are forged into ideas</span>
29
+ </h1>
30
+ <p class="text-xl md:text-2xl text-amber-200 mb-8" data-i18n="hero_subtitle">
31
+ And ideas into meaning at the anvil of language
32
+ </p>
33
+ <a href="#services" class="inline-block px-8 py-3 bg-amber-700 hover:bg-amber-600 text-white font-medium rounded-lg transition duration-300">
34
+ <span data-i18n="hero_button">Discover my craft</span>
35
+ </a>
36
+ </div>
37
+ </section>
38
+ <!-- Services Section -->
39
+ <section id="services" class="py-12 bg-amber-50">
40
+ <div class="container mx-auto px-4 max-w-5xl">
41
+ <h2 class="text-3xl font-playfair font-bold text-center text-gray-900 mb-8" data-i18n="services_title">
42
+ My Linguistic Services
43
+ </h2>
44
+
45
+ <div class="flex flex-col md:flex-row gap-6 justify-center">
46
+ <!-- Translation Card -->
47
+ <div class="bg-white rounded-lg shadow-md p-6 w-full md:w-1/3 flex flex-col">
48
+ <div class="flex justify-center mb-4">
49
+ <i data-feather="globe" class="w-12 h-12 text-amber-700"></i>
50
+ </div>
51
+ <h3 class="text-lg font-playfair font-bold mb-2 text-center" data-i18n="service1_title">Translation</h3>
52
+ <p class="text-gray-700 mb-4 text-sm text-center" data-i18n="service1_desc">
53
+ Precise and culturally adapted translations.
54
+ </p>
55
+ </div>
56
+
57
+ <!-- Transcription Card -->
58
+ <div class="bg-white rounded-lg shadow-md p-6 w-full md:w-1/3 flex flex-col">
59
+ <div class="flex justify-center mb-4">
60
+ <i data-feather="headphones" class="w-12 h-12 text-amber-700"></i>
61
+ </div>
62
+ <h3 class="text-lg font-playfair font-bold mb-2 text-center" data-i18n="service2_title">Transcription</h3>
63
+ <p class="text-gray-700 mb-4 text-sm text-center" data-i18n="service2_desc">
64
+ Accurate verbatim or edited transcriptions.
65
+ </p>
66
+ </div>
67
+
68
+ <!-- Subtitling Card -->
69
+ <div class="bg-white rounded-lg shadow-md p-6 w-full md:w-1/3 flex flex-col">
70
+ <div class="flex justify-center mb-4">
71
+ <i data-feather="film" class="w-12 h-12 text-amber-700"></i>
72
+ </div>
73
+ <h3 class="text-lg font-playfair font-bold mb-2 text-center" data-i18n="service3_title">Subtitling</h3>
74
+ <p class="text-gray-700 mb-4 text-sm text-center" data-i18n="service3_desc">
75
+ Professional subtitles with perfect timing.
76
+ </p>
77
+ </div>
78
+ </div>
79
+ <div class="text-center mt-8">
80
+ <a href="#contact" class="inline-block px-6 py-2 bg-amber-700 hover:bg-amber-600 text-white text-sm font-medium rounded-lg transition duration-300">
81
+ <span data-i18n="service_cta">Get in touch</span>
82
+ </a>
83
+ </div>
84
+ </div>
85
+ </section>
86
+
87
+ <!-- Blog Preview Section -->
88
+ <section class="py-16 bg-gray-100">
89
+ <div class="container mx-auto px-4">
90
+ <h2 class="text-3xl font-playfair font-bold text-center text-gray-900 mb-4" data-i18n="blog_title">
91
+ From the Forge
92
+ </h2>
93
+ <p class="text-center text-gray-700 max-w-2xl mx-auto mb-6" data-i18n="blog_subtitle">
94
+ Thoughts on language, translation, and the power of words
95
+ </p>
96
+
97
+ <!-- Blog Categories -->
98
+ <div class="flex justify-center mb-8">
99
+ <div class="inline-flex rounded-md shadow-sm" role="group">
100
+ <button type="button" class="px-4 py-2 text-sm font-medium rounded-l-lg bg-amber-700 text-white" data-category="languages">
101
+ <span data-i18n="blog_category_languages">Languages</span>
102
+ </button>
103
+ <button type="button" class="px-4 py-2 text-sm font-medium bg-white text-gray-700 hover:bg-gray-50" data-category="reading">
104
+ <span data-i18n="blog_category_reading">Reading</span>
105
+ </button>
106
+ <button type="button" class="px-4 py-2 text-sm font-medium bg-white text-gray-700 hover:bg-gray-50" data-category="music">
107
+ <span data-i18n="blog_category_music">Music</span>
108
+ </button>
109
+ <button type="button" class="px-4 py-2 text-sm font-medium rounded-r-lg bg-white text-gray-700 hover:bg-gray-50" data-category="other">
110
+ <span data-i18n="blog_category_other">Other</span>
111
+ </button>
112
+ </div>
113
+ </div>
114
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
115
+ <!-- Blog Post 1 -->
116
+ <article class="bg-white rounded-lg shadow-md overflow-hidden">
117
+ <img src="http://static.photos/education/640x360/1" alt="Blog post image" class="w-full h-48 object-cover">
118
+ <div class="p-6">
119
+ <div class="flex items-center text-sm text-gray-600 mb-2">
120
+ <span data-i18n="blog_date">May 15, 2023</span>
121
+ <span class="mx-2">•</span>
122
+ <span class="text-amber-700" data-i18n="blog_category1">Etymology</span>
123
+ </div>
124
+ <h3 class="text-xl font-playfair font-bold mb-3" data-i18n="blog_title1">
125
+ The Fiery Origins of Common Phrases
126
+ </h3>
127
+ <p class="text-gray-700 mb-4" data-i18n="blog_excerpt1">
128
+ Exploring how blacksmithing terminology forged its way into everyday language...
129
+ </p>
130
+ <a href="blog-post1.html" class="text-amber-700 hover:text-amber-600 font-medium flex items-center" data-i18n="blog_readmore">
131
+ Read more
132
+ <i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
133
+ </a>
134
+ </div>
135
+ </article>
136
+
137
+ <!-- Blog Post 2 -->
138
+ <article class="bg-white rounded-lg shadow-md overflow-hidden">
139
+ <img src="http://static.photos/technology/640x360/2" alt="Blog post image" class="w-full h-48 object-cover">
140
+ <div class="p-6">
141
+ <div class="flex items-center text-sm text-gray-600 mb-2">
142
+ <span data-i18n="blog_date">April 28, 2023</span>
143
+ <span class="mx-2">•</span>
144
+ <span class="text-amber-700" data-i18n="blog_category2">Technology</span>
145
+ </div>
146
+ <h3 class="text-xl font-playfair font-bold mb-3" data-i18n="blog_title2">
147
+ When Machines Translate Poetry
148
+ </h3>
149
+ <p class="text-gray-700 mb-4" data-i18n="blog_excerpt2">
150
+ The challenges and occasional triumphs of AI in literary translation...
151
+ </p>
152
+ <a href="blog-post2.html" class="text-amber-700 hover:text-amber-600 font-medium flex items-center" data-i18n="blog_readmore">
153
+ Read more
154
+ <i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
155
+ </a>
156
+ </div>
157
+ </article>
158
+
159
+ <!-- Blog Post 3 -->
160
+ <article class="bg-white rounded-lg shadow-md overflow-hidden">
161
+ <img src="http://static.photos/people/640x360/3" alt="Blog post image" class="w-full h-48 object-cover">
162
+ <div class="p-6">
163
+ <div class="flex items-center text-sm text-gray-600 mb-2">
164
+ <span data-i18n="blog_date">March 10, 2023</span>
165
+ <span class="mx-2">•</span>
166
+ <span class="text-amber-700" data-i18n="blog_category3">Culture</span>
167
+ </div>
168
+ <h3 class="text-xl font-playfair font-bold mb-3" data-i18n="blog_title3">
169
+ Lost in Translation: Cultural Nuances
170
+ </h3>
171
+ <p class="text-gray-700 mb-4" data-i18n="blog_excerpt3">
172
+ How idioms and cultural references present unique challenges for translators...
173
+ </p>
174
+ <a href="blog-post3.html" class="text-amber-700 hover:text-amber-600 font-medium flex items-center" data-i18n="blog_readmore">
175
+ Read more
176
+ <i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
177
+ </a>
178
+ </div>
179
+ </article>
180
+ </div>
181
+
182
+ <div class="text-center mt-12">
183
+ <a href="blog.html" class="inline-block px-8 py-3 bg-amber-700 hover:bg-amber-600 text-white font-medium rounded-lg transition duration-300" data-i18n="blog_viewall">
184
+ View all articles
185
+ </a>
186
+ </div>
187
+ </div>
188
+ </section>
189
+
190
+ <!-- Contact Section -->
191
+ <section id="contact" class="py-20 bg-gray-900 text-white">
192
+ <div class="container mx-auto px-4">
193
+ <h2 class="text-3xl md:text-4xl font-playfair font-bold text-center mb-4" data-i18n="contact_title">
194
+ Let's Forge Something Together
195
+ </h2>
196
+ <p class="text-center text-amber-200 max-w-2xl mx-auto mb-12" data-i18n="contact_subtitle">
197
+ Send me a message about your project and I'll respond within 24 hours
198
+ </p>
199
+
200
+ <form action="https://formsubmit.co/your-email@example.com" method="POST" class="max-w-2xl mx-auto">
201
+ <input type="hidden" name="_subject" value="New message from La Fragua del Logos!">
202
+ <input type="hidden" name="_next" value="https://yourdomain.com/thanks.html">
203
+
204
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
205
+ <div>
206
+ <label for="name" class="block mb-2 font-medium" data-i18n="contact_name">Your Name</label>
207
+ <input type="text" id="name" name="name" required class="w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-amber-500">
208
+ </div>
209
+ <div>
210
+ <label for="email" class="block mb-2 font-medium" data-i18n="contact_email">Email Address</label>
211
+ <input type="email" id="email" name="email" required class="w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-amber-500">
212
+ </div>
213
+ </div>
214
+
215
+ <div class="mb-6">
216
+ <label for="subject" class="block mb-2 font-medium" data-i18n="contact_subject">Subject</label>
217
+ <select id="subject" name="subject" class="w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-amber-500">
218
+ <option value="Translation" data-i18n="contact_option1">Translation Services</option>
219
+ <option value="Transcription" data-i18n="contact_option2">Transcription Services</option>
220
+ <option value="Subtitling" data-i18n="contact_option3">Subtitling Services</option>
221
+ <option value="Other" data-i18n="contact_option4">Other Inquiry</option>
222
+ </select>
223
+ </div>
224
+
225
+ <div class="mb-6">
226
+ <label for="message" class="block mb-2 font-medium" data-i18n="contact_message">Your Message</label>
227
+ <textarea id="message" name="message" rows="5" required class="w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-amber-500"></textarea>
228
+ </div>
229
+
230
+ <button type="submit" class="w-full md:w-auto px-8 py-3 bg-amber-700 hover:bg-amber-600 text-white font-medium rounded-lg transition duration-300" data-i18n="contact_button">
231
+ Send Message
232
+ </button>
233
+ </form>
234
+ </div>
235
+ </section>
236
+ </main>
237
+
238
+ <custom-footer></custom-footer>
239
+
240
+ <script>
241
+ feather.replace();
242
+ </script>
243
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
244
+ </body>
245
+ </html>
script.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', function() {
2
+ // Initialize language
3
+ const defaultLanguage = 'es';
4
+ let currentLanguage = localStorage.getItem('language') || defaultLanguage;
5
+ updateLanguage(currentLanguage);
6
+
7
+ // Language selector functionality
8
+ const languageSelectors = document.querySelectorAll('.language-option');
9
+ languageSelectors.forEach(selector => {
10
+ selector.addEventListener('click', function() {
11
+ const selectedLanguage = this.getAttribute('data-lang');
12
+ currentLanguage = selectedLanguage;
13
+ localStorage.setItem('language', selectedLanguage);
14
+ updateLanguage(selectedLanguage);
15
+ });
16
+ });
17
+ // Blog filter functionality
18
+ const blogFilterButtons = document.querySelectorAll('[data-category]');
19
+ blogFilterButtons.forEach(button => {
20
+ button.addEventListener('click', function() {
21
+ const category = this.getAttribute('data-category');
22
+ filterBlogPosts(category);
23
+
24
+ // Update active state
25
+ blogFilterButtons.forEach(btn => {
26
+ btn.classList.remove('bg-amber-700', 'text-white');
27
+ btn.classList.add('bg-white', 'text-gray-700', 'hover:bg-gray-50');
28
+ });
29
+ this.classList.remove('bg-white', 'text-gray-700', 'hover:bg-gray-50');
30
+ this.classList.add('bg-amber-700', 'text-white');
31
+ });
32
+ });
33
+ // Form submission handling
34
+ const contactForm = document.getElementById('contact-form');
35
+ if (contactForm) {
36
+ contactForm.addEventListener('submit', function(e) {
37
+ e.preventDefault();
38
+ // Here you would typically send the form data
39
+ // For demo purposes, we'll just show an alert
40
+ alert('Thank you for your message! I will get back to you soon.');
41
+ this.reset();
42
+ });
43
+ }
44
+ });
45
+
46
+ function updateLanguage(language) {
47
+ // Update all elements with data-i18n attributes
48
+ document.querySelectorAll('[data-i18n]').forEach(element => {
49
+ const key = element.getAttribute('data-i18n');
50
+ if (translations[language] && translations[language][key]) {
51
+ element.textContent = translations[language][key];
52
+ } else if (translations['es'][key]) {
53
+ // Fallback to Spanish if translation missing
54
+ element.textContent = translations['es'][key];
55
+ }
56
+ });
57
+
58
+ // Update HTML lang attribute
59
+ document.documentElement.lang = language;
60
+
61
+ // Update active language in selector
62
+ document.querySelectorAll('.language-option').forEach(option => {
63
+ if (option.getAttribute('data-lang') === language) {
64
+ option.classList.add('active');
65
+ } else {
66
+ option.classList.remove('active');
67
+ }
68
+ });
69
+ }
70
+
71
+ function filterBlogPosts(category) {
72
+ const blogPosts = document.querySelectorAll('.blog-post');
73
+ blogPosts.forEach(post => {
74
+ const postCategories = post.getAttribute('data-categories').split(' ');
75
+ if (category === 'all' || postCategories.includes(category)) {
76
+ post.style.display = 'block';
77
+ } else {
78
+ post.style.display = 'none';
79
+ }
80
+ });
81
+ }
scripts/languages.js ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const translations = {
2
+ 'es': {
3
+ 'hero_title': 'Donde las palabras se forjan en ideas',
4
+ 'hero_subtitle': 'Y las ideas en significado en el yunque del lenguaje',
5
+ 'hero_button': 'Descubre mi oficio',
6
+ 'services_title': 'Mi Artesanía Lingüística',
7
+ 'service1_title': 'Traducción',
8
+ 'service1_desc': 'Traducciones precisas y culturalmente adaptadas que preservan la esencia de tu mensaje.',
9
+ 'service2_title': 'Transcripción',
10
+ 'service2_desc': 'Transcripciones exactas literales o editadas para tu contenido de audio y video.',
11
+ 'service3_title': 'Subtitulación',
12
+ 'service3_desc': 'Subtítulos profesionales con sincronización perfecta y legibilidad para tus videos.',
13
+ 'service_cta': 'Consultar sin compromiso',
14
+ 'blog_title': 'Desde la Fragua',
15
+ 'blog_subtitle': 'Reflexiones sobre lenguaje, traducción y el poder de las palabras',
16
+ 'blog_date': '15 de mayo, 2023',
17
+ 'blog_category1': 'Etimología',
18
+ 'blog_title1': 'Los Orígenes Ardientes de Frases Comunes',
19
+ 'blog_excerpt1': 'Explorando cómo la terminología de herrería se forjó en el lenguaje cotidiano...',
20
+ 'blog_category2': 'Tecnología',
21
+ 'blog_title2': 'Cuando las Máquinas Traducen Poesía',
22
+ 'blog_excerpt2': 'Los desafíos y ocasionales triunfos de la IA en la traducción literaria...',
23
+ 'blog_category3': 'Cultura',
24
+ 'blog_title3': 'Perdido en la Traducción: Matices Culturales',
25
+ 'blog_excerpt3': 'Cómo los modismos y referencias culturales presentan desafíos únicos para los traductores...',
26
+ 'blog_readmore': 'Leer más',
27
+ 'blog_viewall': 'Ver todos los artículos',
28
+ 'contact_title': 'Forjemos Algo Juntos',
29
+ 'contact_subtitle': 'Envíame un mensaje sobre tu proyecto y responderé en 24 horas',
30
+ 'contact_name': 'Tu Nombre',
31
+ 'contact_email': 'Correo Electrónico',
32
+ 'contact_subject': 'Asunto',
33
+ 'contact_option1': 'Servicios de Traducción',
34
+ 'contact_option2': 'Servicios de Transcripción',
35
+ 'contact_option3': 'Servicios de Subtitulación',
36
+ 'contact_option4': 'Otra Consulta',
37
+ 'contact_message': 'Tu Mensaje',
38
+ 'contact_button': 'Enviar Mensaje',
39
+ 'nav_home': 'Inicio',
40
+ 'nav_about': 'Sobre Mí',
41
+ 'nav_services': 'Servicios',
42
+ 'nav_blog': 'Blog',
43
+ 'nav_contact': 'Contacto',
44
+ 'lang_es': 'Español',
45
+ 'lang_en': 'Inglés',
46
+ 'lang_fr': 'Francés',
47
+ 'footer_about': 'Sobre La Fragua',
48
+ 'footer_about_text': 'Un taller lingüístico donde las palabras se forjan con precisión y pasión.',
49
+ 'footer_learnmore': 'Conoce más sobre mí',
50
+ 'footer_quicklinks': 'Enlaces Rápidos',
51
+ 'footer_connect': 'Conectar',
52
+ 'footer_email': 'Email: info@lafraguadelogos.com',
53
+ 'footer_copyright': '© {currentYear} La Fragua del Logos. Forjado con palabras e ideas.'
54
+ },
55
+ 'en': {
56
+ 'hero_title': 'Where words are forged into ideas',
57
+ 'hero_subtitle': 'And ideas into meaning at the anvil of language',
58
+ 'hero_button': 'Discover my craft',
59
+ 'services_title': 'My Linguistic Craftsmanship',
60
+ 'service1_title': 'Translation',
61
+ 'service1_desc': 'Precise and culturally adapted translations that preserve the essence of your message.',
62
+ 'service2_title': 'Transcription',
63
+ 'service2_desc': 'Accurate verbatim or edited transcriptions for your audio and video content.',
64
+ 'service3_title': 'Subtitling',
65
+ 'service3_desc': 'Professional subtitles with perfect timing and readability for your videos.',
66
+ 'service_cta': 'Consult without commitment',
67
+ 'blog_title': 'From the Forge',
68
+ 'blog_subtitle': 'Thoughts on language, translation, and the power of words',
69
+ 'blog_date': 'May 15, 2023',
70
+ 'blog_category_languages': 'Languages',
71
+ 'blog_category_reading': 'Reading',
72
+ 'blog_category_music': 'Music',
73
+ 'blog_category_other': 'Other',
74
+ 'blog_title1': 'The Fiery Origins of Common Phrases',
75
+ 'blog_excerpt1': 'Exploring how blacksmithing terminology forged its way into everyday language...',
76
+ 'blog_title2': 'When Machines Translate Poetry',
77
+ 'blog_excerpt2': 'The challenges and occasional triumphs of AI in literary translation...',
78
+ 'blog_title3': 'Lost in Translation: Cultural Nuances',
79
+ 'blog_excerpt3': 'How idioms and cultural references present unique challenges for translators...',
80
+ 'blog_readmore': 'Read more',
81
+ 'blog_viewall': 'View all articles',
82
+ 'contact_title': "Let's Forge Something Together",
83
+ 'contact_subtitle': 'Send me a message about your project and I\'ll respond within 24 hours',
84
+ 'contact_name': 'Your Name',
85
+ 'contact_email': 'Email Address',
86
+ 'contact_subject': 'Subject',
87
+ 'contact_option1': 'Translation Services',
88
+ 'contact_option2': 'Transcription Services',
89
+ 'contact_option3': 'Subtitling Services',
90
+ 'contact_option4': 'Other Inquiry',
91
+ 'contact_message': 'Your Message',
92
+ 'contact_button': 'Send Message',
93
+ 'nav_home': 'Home',
94
+ 'nav_about': 'About Me',
95
+ 'nav_services': 'Services',
96
+ 'nav_blog': 'Blog',
97
+ 'nav_contact': 'Contact',
98
+ 'lang_es': 'Spanish',
99
+ 'lang_en': 'English',
100
+ 'lang_fr': 'French',
101
+ 'footer_about': 'About La Fragua',
102
+ 'footer_about_text': 'A linguistic workshop where words are forged with precision and passion.',
103
+ 'footer_learnmore': 'Learn more about me',
104
+ 'footer_quicklinks': 'Quick Links',
105
+ 'footer_connect': 'Connect',
106
+ 'footer_email': 'Email: info@lafraguadelogos.com',
107
+ 'footer_copyright': '© {currentYear} La Fragua del Logos. Forged with words and ideas.'
108
+ },
109
+ 'fr': {
110
+ 'hero_title': 'Où les mots sont forgés en idées',
111
+ 'hero_subtitle': 'Et les idées en sens sur l\'enclume du langage',
112
+ 'hero_button': 'Découvrez mon métier',
113
+ 'services_title': 'Mon Artisanat Linguistique',
114
+ 'service1_title': 'Traduction',
115
+ 'service1_desc': 'Traductions précises et adaptées culturellement qui préservent l\'essence de votre message.',
116
+ 'service2_title': 'Transcription',
117
+ 'service2_desc': 'Transcriptions verbatim ou éditées précises pour votre contenu audio et vidéo.',
118
+ 'service3_title': 'Sous-titrage',
119
+ 'service3_desc': 'Sous-titres professionnels avec un timing parfait et une bonne lisibilité pour vos vidéos.',
120
+ 'service_cta': 'Consulter sans engagement',
121
+ 'blog_title': 'De la Forge',
122
+ 'blog_subtitle': 'Réflexions sur le langage, la traduction et le pouvoir des mots',
123
+ 'blog_date': '15 mai 2023',
124
+ 'blog_category1': 'Étymologie',
125
+ 'blog_title1': 'Les Origines Ardentes des Expressions Courantes',
126
+ 'blog_excerpt1': 'Exploration de la façon dont la terminologie de la forge s\'est intégrée dans le langage quotidien...',
127
+ 'blog_category2': 'Technologie',
128
+ 'blog_title2': 'Quand les Machines Traduisent la Poésie',
129
+ 'blog_excerpt2': 'Les défis et les succès occasionnels de l\'IA dans la traduction littéraire...',
130
+ 'blog_category3': 'Culture',
131
+ 'blog_title3': 'Perdu en Traduction: Nuances Culturelles',
132
+ 'blog_excerpt3': 'Comment les idiomes et les références culturelles présentent des défis uniques pour les traducteurs...',
133
+ 'blog_readmore': 'Lire la suite',
134
+ 'blog_viewall': 'Voir tous les articles',
135
+ 'contact_title': 'Forgeons Quelque Chose Ensemble',
136
+ 'contact_subtitle': 'Envoyez-moi un message sur votre projet et je répondrai dans les 24 heures',
137
+ 'contact_name': 'Votre Nom',
138
+ 'contact_email': 'Adresse Email',
139
+ 'contact_subject': 'Sujet',
140
+ 'contact_option1': 'Services de Traduction',
141
+ 'contact_option2': 'Services de Transcription',
142
+ 'contact_option3': 'Services de Sous-titrage',
143
+ 'contact_option4': 'Autre Demande',
144
+ 'contact_message': 'Votre Message',
145
+ 'contact_button': 'Envoyer le Message',
146
+ 'nav_home': 'Accueil',
147
+ 'nav_about': 'À Propos',
148
+ 'nav_services': 'Services',
149
+ 'nav_blog': 'Blog',
150
+ 'nav_contact': 'Contact',
151
+ 'lang_es': 'Espagnol',
152
+ 'lang_en': 'Anglais',
153
+ 'lang_fr': 'Français',
154
+ 'footer_about': 'À Propos de La Fragua',
155
+ 'footer_about_text': 'Un atelier linguistique où les mots sont forgés avec précision et passion.',
156
+ 'footer_learnmore': 'En savoir plus sur moi',
157
+ 'footer_quicklinks': 'Liens Rapides',
158
+ 'footer_connect': 'Se Connecter',
159
+ 'footer_email': 'Email: info@lafraguadelogos.com',
160
+ 'footer_copyright': '© {currentYear} La Fragua del Logos. Forgé avec des mots et des idées.'
161
+ }
162
+ };
style.css CHANGED
@@ -1,28 +1,92 @@
 
 
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
 
 
 
 
 
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
28
  }
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
  body {
6
+ font-family: 'Lato', sans-serif;
7
+ }
8
+
9
+ .font-playfair {
10
+ font-family: 'Playfair Display', serif;
11
+ }
12
+
13
+ /* Custom scrollbar */
14
+ ::-webkit-scrollbar {
15
+ width: 8px;
16
+ }
17
+
18
+ ::-webkit-scrollbar-track {
19
+ background: #f1f1f1;
20
+ }
21
+
22
+ ::-webkit-scrollbar-thumb {
23
+ background: #b45309;
24
+ border-radius: 4px;
25
+ }
26
+
27
+ ::-webkit-scrollbar-thumb:hover {
28
+ background: #92400e;
29
+ }
30
+
31
+ /* Animation for hero section */
32
+ @keyframes fadeIn {
33
+ from { opacity: 0; transform: translateY(20px); }
34
+ to { opacity: 1; transform: translateY(0); }
35
+ }
36
+
37
+ .hero-content {
38
+ animation: fadeIn 1s ease-out forwards;
39
+ }
40
+ /* Services section */
41
+ #services .flex > div {
42
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
43
+ }
44
+
45
+ #services .flex > div:hover {
46
+ transform: translateY(-5px);
47
+ box-shadow: 0 10px 15px rgba(0,0,0,0.1);
48
+ }
49
+ /* Language selector dropdown */
50
+ .language-selector {
51
+ position: relative;
52
+ display: inline-block;
53
+ }
54
+
55
+ .language-dropdown {
56
+ display: none;
57
+ position: absolute;
58
+ right: 0;
59
+ background-color: #1a1a1a;
60
+ min-width: 160px;
61
+ box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
62
+ z-index: 1;
63
+ border-radius: 4px;
64
  }
65
 
66
+ .language-selector:hover .language-dropdown {
67
+ display: block;
 
68
  }
69
 
70
+ .language-option {
71
+ padding: 12px 16px;
72
+ display: flex;
73
+ align-items: center;
74
+ transition: background-color 0.3s;
75
  }
76
 
77
+ .language-option:hover {
78
+ background-color: #b45309;
79
+ }
80
+
81
+ /* Form input focus styles */
82
+ .form-input:focus {
83
+ box-shadow: 0 0 0 3px rgba(180, 83, 9, 0.3);
84
+ }
85
+ /* Blog category buttons */
86
+ [data-category] {
87
+ transition: all 0.3s ease;
88
  }
89
 
90
+ [data-category]:hover:not(.bg-amber-700) {
91
+ background-color: #f3f4f6 !important;
92
  }