PageSourceSearch

https://tuguoba.com/contact

html tuguoba.com collected 2026-09-25 14:49:08 UTC 56,875 bytes, 1,679 lines download raw bytes

1
2
3<!DOCTYPE html>
4
5<html lang="en-us">
6<head>
7    <meta charset="UTF-8">
8    <meta name="viewport" content="width=device-width, initial-scale=1">
9    <meta http-equiv="X-UA-Compatible" content="IE=edge">
10    <meta name="theme-color" content="#667eea">
11    
12    <!-- hreflang for international SEO -->
13    <link rel="alternate" hreflang="x-default" href="https://tuguoba.com/contact">
14    <link rel="alternate" hreflang="en" href="https://tuguoba.com/contact">
15    <link rel="alternate" hreflang="zh-CN" href="https://tuguoba.com/contact">
16    <link rel="alternate" hreflang="zh-TW" href="https://tuguoba.com/contact">
17    <link rel="alternate" hreflang="ja" href="https://tuguoba.com/contact">
18    <link rel="alternate" hreflang="ko" href="https://tuguoba.com/contact">
19    <link rel="alternate" hreflang="de" href="https://tuguoba.com/contact">
20    <link rel="alternate" hreflang="ar" href="https://tuguoba.com/contact">
21    <link rel="alternate" hreflang="fr" href="https://tuguoba.com/contact">
22    <link rel="alternate" hreflang="es" href="https://tuguoba.com/contact">
23    <link rel="alternate" hreflang="it" href="https://tuguoba.com/contact">
24    <link rel="alternate" hreflang="pt" href="https://tuguoba.com/contact">
25    <link rel="alternate" hreflang="ru" href="https://tuguoba.com/contact">
26    <link rel="alternate" hreflang="th" href="https://tuguoba.com/contact">
27    
28    <title>Contact Us - Get in Touch with Tuguoba | Tuguoba</title>
29    <meta name="description" content="Contact Tuguoba for support, questions, or feedback about our AI-powered image editing tools including face swap, barcode generation, and image filters.">
30    <meta name="keywords" content="contact tuguoba, customer support, AI image editing support, face swap help, technical support">
31    <meta name="robots" content="index, follow, max-image-preview:large, max-video-preview:-1">
32    <link rel="canonical" href="https://tuguoba.com/contact">
33    
34    <!-- Twitter Cards -->
35    <meta property="twitter:card" content="summary">
36    <meta property="twitter:title" content="Contact Us - Get in Touch with Tuguoba">
37    <meta property="twitter:description" content="Contact Tuguoba for support, questions, or feedback about our AI-powered image editing tools.">
38    <meta name="twitter:site" content="@tuguoba">
39    
40    <!-- Open Graph / Facebook -->
41    <meta property="og:type" content="website">
42    <meta property="og:locale" content="en_US">
43    <meta property="og:locale:alternate" content="zh_CN">
44    <meta property="og:locale:alternate" content="zh_TW">
45    <meta property="og:locale:alternate" content="ja_JP">
46    <meta property="og:locale:alternate" content="ko_KR">
47    <meta property="og:locale:alternate" content="de_DE">
48    <meta property="og:locale:alternate" content="ar_SA">
49    <meta property="og:locale:alternate" content="fr_FR">
50    <meta property="og:locale:alternate" content="es_ES">
51    <meta property="og:locale:alternate" content="it_IT">
52    <meta property="og:locale:alternate" content="pt_PT">
53    <meta property="og:locale:alternate" content="ru_RU">
54    <meta property="og:locale:alternate" content="th_TH">
55    <meta property="og:title" content="Contact Us - Get in Touch with Tuguoba">
56    <meta property="og:description" content="Contact Tuguoba for support, questions, or feedback about our AI-powered image editing tools.">
57    <meta property="og:url" content="https://tuguoba.com/contact">
58    <meta property="og:site_name" content="Tuguoba">
59    
60    <!-- Structured Data - WebApplication -->
61    
61<script type="application/ld+json">
62    {
63        "@context": "https://schema.org",
64        "@type": "WebApplication",
65        "name": "Contact Tuguoba",
66        "description": "Get in touch with Tuguoba for support, questions, or feedback about our AI-powered image editing tools.",
67        "url": "https://tuguoba.com/contact",
68        "applicationCategory": "UtilityApplication",
69        "operatingSystem": "Web Browser",
70        "offers": {
71            "@type": "Offer",
72            "price": "0",
73            "priceCurrency": "USD",
74            "priceValidUntil": "2099-12-31"
75        },
76        "publisher": {
77            "@type": "Organization",
78            "name": "Tuguoba",
79            "url": "https://tuguoba.com"
80        }
81    }
82    </script>
82
83
84    <!-- Structured Data - FAQPage -->
85    
85<script type="application/ld+json">
86    {
87        "@context": "https://schema.org",
88        "@type": "FAQPage",
89        "mainEntity": [
90            {
91                "@type": "Question",
92                "name": "How can I contact Tuguoba for support?",
93                "acceptedAnswer": {
94                    "@type": "Answer",
95                    "text": "You can contact us via email at [email protected]. We typically respond within 24-48 hours on business days."
96                }
97            },
98            {
99                "@type": "Question",
100                "name": "What tools does Tuguoba offer?",
101                "acceptedAnswer": {
102                    "@type": "Answer",
103                    "text": "Tuguoba provides free online AI-powered image processing tools including face swap, face average, barcode generation, image enhancement, sketch to image, cartoon effects, and more."
104                }
105            },
106            {
107                "@type": "Question",
108                "name": "Are Tuguoba tools free to use?",
109                "acceptedAnswer": {
110                    "@type": "Answer",
111                    "text": "Yes, most of our basic tools are completely free to use without registration. We also offer premium desktop applications with advanced features for professional use."
112                }
113            },
114            {
115                "@type": "Question",
116                "name": "How can I report a bug or suggest a feature?",
117                "acceptedAnswer": {
118                    "@type": "Answer",
119                    "text": "Please email us at [email protected] with details about the issue or feature request. Include the tool name, steps to reproduce, and any error messages if applicable."
120                }
121            },
122            {
123                "@type": "Question",
124                "name": "What languages does customer support offer?",
125                "acceptedAnswer": {
126                    "@type": "Answer",
127                    "text": "We provide customer support in English and Chinese. Our team is happy to assist with any questions about our image processing tools."
128                }
129            },
130            {
131                "@type": "Question",
132                "name": "How quickly can I expect a response from support?",
133                "acceptedAnswer": {
134                    "@type": "Answer",
135                    "text": "We typically respond within 24-48 hours on business days. For urgent technical issues, please include as much detail as possible in your initial email."
136                }
137            },
138            {
139                "@type": "Question",
140                "name": "Does Tuguoba offer technical documentation?",
141                "acceptedAnswer": {
142                    "@type": "Answer",
143                    "text": "Yes, each tool on Tuguoba has an integrated how-to-use guide. Additionally, our blog provides tutorials and tips for getting the most out of our image processing tools."
144                }
145            },
146            {
147                "@type": "Question",
148                "name": "Can I request a new feature or tool?",
149                "acceptedAnswer": {
150                    "@type": "Answer",
151                    "text": "Absolutely! We welcome feature requests and tool suggestions. Email us at [email protected] with your ideas, and our team reviews all suggestions for future development."
152                }
153            }
154        ]
155    }
156    </script>
156
157
158    <!-- Structured Data - Organization -->
159    
159<script type="application/ld+json">
160    {
161        "@context": "https://schema.org",
162        "@type": "Organization",
163        "name": "Tuguoba",
164        "url": "https://tuguoba.com",
165        "logo": {
166            "@type": "ImageObject",
167            "url": "https://tuguoba.com/static/image/site_logo.png"
168        },
169        "description": "Tuguoba provides free online AI-powered image processing tools including face swap, barcode generation, image enhancement, and more.",
170        "email": "[email protected]",
171        "contactPoint": {
172            "@type": "ContactPoint",
173            "contactType": "customer service",
174            "availableLanguage": ["English", "Chinese"]
175        }
176    }
177    </script>
177
178
179    <!-- Structured Data - BreadcrumbList -->
180    
180<script type="application/ld+json">
181    {
182        "@context": "https://schema.org",
183        "@type": "BreadcrumbList",
184        "itemListElement": [{
185            "@type": "ListItem",
186            "position": 1,
187            "name": "Home",
188            "item": "https://tuguoba.com"
189        },{
190            "@type": "ListItem",
191            "position": 2,
192            "name": "Contact",
193            "item": "https://tuguoba.com/contact"
194        }]
195    }
196    </script>
196
197    
198    <meta name="author" content="Tuguoba">
199    <meta name="format-detection" content="telephone=no">
200    
201    
202
203    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 203-204
203
204    <script async src="https://www.googletagmanager.com/gtag/js?id=
204G-EHBKTXXZV7
vendor: 16 bytes, lines 204-205
204"></script>
205    
205<script>
206      
vendor: 146 bytes, lines 206-210
206window.dataLayer = window.dataLayer || [];
207      function gtag(){dataLayer.push(arguments);}
208      gtag('js', new Date());
209
210      gtag('config', '
210G-EHBKTXXZV7
vendor: 8 bytes, lines 210-211
210');
211    
211</script>
211
212    
213    
213<script src="/static/js/jquery/jquery-3.7.1.min.js"></script>
213
214    
214<script src="/static/js/form-submit.js"></script>
214
215    
215<script src="/static/js/toast.js"></script>
215
216    
217    <!-- Set language for RTL detection -->
218    
218<script>
219        // Get language from <html> tag's lang attribute (set by Django template)
220        var htmlLang = document.documentElement && document.documentElement.getAttribute('lang');
221        window.appLanguage = htmlLang || 'en-us';
222    </script>
222
223    
223<script src="/static/js/rtl.js"></script>
223
224    
224<script>
225        // Global fallback for inline onclick handlers
226        window.toggleDirection = function() {
227            if (window.RTL) {
228                return window.RTL.toggleDirection();
229            }
230        };
231    </script>
231
232    
233    <!-- File Upload Translations -->
234    
234<script>
235    window.fileUploadMessages = {
236        'file_too_large': 'File size exceeds the limit of {size}MB. Please choose a smaller file.',
237        'file_too_large_title': 'File Too Large',
238        'upload_failed': 'Upload failed: {error}',
239        'upload_failed_title': 'Upload Failed',
240        'upload_http_error': 'Upload failed with status: {status}',
241        'network_error': 'Network error. Please check your connection.',
242        'network_error_title': 'Network Error',
243        'no_valid_files': 'No valid files selected',
244        'upload_server_error': 'Server error. Please try again later.',
245        'invalid_file_type': 'Invalid file type. Please select an image file.',
246        'file_type_error_title': 'Invalid File Type',
247        'server_busy': 'The server is busy, please try again later',
248        'server_error': 'Server error. Please try again later.',
249        'request_timeout': 'Request timeout. The server is taking too long, please try again.',
250    };
251    
252    window.formSubmitMessages = {
253        'processing': 'Processing',
254        'submit': 'Submit',
255        'please_upload_first': 'Please upload an image first',
256        'error_parsing_response': 'Error parsing response',
257        'request_failed': 'Request failed',
258        'network_error': 'Network error',
259        'server_busy': 'The server is busy, please try again later',
260        'server_error': 'Server error',
261        'request_timeout': 'Request timeout',
262        'processing_failed': 'Processing failed'
263    };
264    </script>
264
265    
266    <!-- New Design System CSS -->
267    <link rel="stylesheet" type="text/css" href="/static/css/design-system.css" />
268    <!-- Page-specific Styles -->
269    <link rel="stylesheet" type="text/css" href="/static/css/page-styles.css" />
270    <!-- Tool Page Styles -->
271    <link rel="stylesheet" type="text/css" href="/static/css/tool-pages.css" />
272    <!-- Toast Notification Styles -->
273    <link rel="stylesheet" type="text/css" href="/static/css/toast.css" />
274    <!-- RTL Support CSS -->
275    <link rel="stylesheet" type="text/css" href="/static/css/rtl.css" />
276    
277    <!-- Favicon -->
278    <link rel="icon" href="/static/image/site_logo.png"/>
279    <link rel="apple-touch-icon" href="/static/image/site_logo.png">
280    <meta name="theme-color" content="#FFFFFF">
281    <meta name="author" content="Tuguoba">
282    <meta name="generator" content="Django">
283    <link rel="preconnect" href="https://fonts.googleapis.com">
284    <link rel="dns-prefetch" href="//www.google-analytics.com">
285    
286    <!-- Custom Page Styles -->
287    <style>
288        /* Override dark theme with clean modern design */
289        body {
290            background: var(--color-slate-50);
291            background-image: none;
292            
293            display: flex;
294            
295            flex-direction: column;
296            min-height: 100vh;
297        }
298        
299        body > .footer,
300        body .footer {
301            flex-shrink: 0;
302        }
303
304        /* Ensure footer stays at bottom */
305        .tm_footer {
306            position: relative;
307            z-index: 100;
308            left: 0;
309            bottom: 0;
310            width: 100%;
311            background-color: var(--color-slate-900);
312            text-align: center;
313            margin-top: var(--space-16);
314        }
315
316        /* Page content wrapper with proper centering */
317        .page-content {
318            min-height: calc(100vh - 200px);
319            padding-bottom: var(--space-8);
320        }
321
322        /* Centered container with responsive margins */
323        .container {
324            width: 100%;
325            max-width: 1200px;
326            margin: 0 auto;
327            padding: 0 var(--space-6);
328        }
329
330        /* Responsive breakpoint adjustments */
331        @media (min-width: 640px) {
332            .container {
333                padding: 0 var(--space-8);
334            }
335        }
336
337        @media (min-width: 1024px) {
338            .container {
339                padding: 0 var(--space-10);
340            }
341        }
342
343        @media (min-width: 1280px) {
344            .container {
345                padding: 0 var(--space-12);
346            }
347        }
348
349        /* Page wrapper for proper spacing */
350        .page-wrapper {
351            width: 100%;
352            max-width: 1400px;
353            margin: 0 auto;
354            padding: 0 var(--space-4);
355        }
356
357        @media (min-width: 768px) {
358            .page-wrapper {
359                padding: 0 var(--space-6);
360            }
361        }
362
363        @media (min-width: 1024px) {
364            .page-wrapper {
365                padding: 0 var(--space-8);
366            }
367        }
368
369        /* Section containers */
370        .section {
371            padding: var(--space-8) 0;
372        }
373
374        @media (min-width: 768px) {
375            .section {
376                padding: var(--space-12) 0;
377            }
378        }
379
380        /* Section containers with background */
381        .section-bg {
382            background: var(--bg-secondary);
383            padding: var(--space-8) var(--space-6);
384            margin: 0 calc(var(--space-4) * -1);
385        }
386
387        @media (min-width: 768px) {
388            .section-bg {
389                padding: var(--space-12) var(--space-8);
390                margin: 0 calc(var(--space-6) * -1);
391                border-radius: var(--radius-xl);
392            }
393        }
394
395        @media (min-width: 1024px) {
396            .section-bg {
397                padding: var(--space-16) var(--space-12);
398                margin: 0 calc(var(--space-8) * -1);
399            }
400        }
401
402        /* Hide UIKit-specific classes that aren't in our design system */
403        [class*="uk-"] {
404            /* These will be progressively replaced */
405        }
406
407        /* Utility classes for centered content */
408        .mx-auto {
409            margin-left: auto;
410            margin-right: auto;
411        }
412
413        .max-w-screen-sm { max-width: 640px; }
414        .max-w-screen-md { max-width: 768px; }
415        .max-w-screen-lg { max-width: 1024px; }
416        .max-w-screen-xl { max-width: 1280px; }
417        .max-w-screen-2xl { max-width: 1400px; }
418
419        /* Centered text utility */
420        .text-center {
421            text-align: center;
422        }
423
424        /* Flex center utilities */
425        .flex-center {
426            display: flex;
427            justify-content: center;
428            align-items: center;
429        }
430
431        .flex-col-center {
432            display: flex;
433            flex-direction: column;
434            align-items: center;
435        }
436
437        /* Grid center utilities */
438        .grid-center {
439            display: grid;
440            place-items: center;
441        }
442
443        /* Card container with centered content */
444        .card-container {
445            max-width: 1000px;
446            margin: 0 auto;
447            padding: 0 var(--space-4);
448        }
449
450        @media (min-width: 768px) {
451            .card-container {
452                padding: 0 var(--space-6);
453            }
454        }
455
456        /* Tool page container */
457        .tool-container {
458            max-width: 1100px;
459            margin: 0 auto;
460            padding: 0 var(--space-4);
461        }
462
463        @media (min-width: 768px) {
464            .tool-container {
465                padding: 0 var(--space-6);
466            }
467        }
468
469        @media (min-width: 1024px) {
470            .tool-container {
471                padding: 0 var(--space-8);
472            }
473        }
474
475        /* Page container */
476        .page-container {
477            flex: 1;
478            display: flex;
479            flex-direction: column;
480        }
481
482        /* Page main */
483        .page-main {
484            flex: 1;
485            display: flex;
486            flex-direction: column;
487        }
488
489        /* Contact Page Styles */
490        .contact-content {
491            max-width: 600px;
492            margin: 0 auto;
493            padding: var(--space-8) 0;
494        }
495        
496        .contact-title {
497            font-size: var(--text-2xl);
498            font-weight: 700;
499            color: var(--text-primary);
500            margin-bottom: var(--space-6);
501            display: flex;
502            align-items: center;
503            gap: var(--space-2);
504        }
505        
506        .contact-info {
507            background: var(--bg-secondary);
508            border-radius: var(--radius-lg);
509            padding: var(--space-6);
510        }
511        
512        .contact-label {
513            font-size: var(--text-sm);
514            font-weight: 600;
515            color: var(--text-secondary);
516            margin-bottom: var(--space-2);
517            text-transform: uppercase;
518            letter-spacing: var(--tracking-wide);
519        }
520        
521        .contact-value {
522            font-size: var(--text-lg);
523            font-weight: 600;
524            color: var(--color-primary-600);
525            margin: 0;
526        }
527        
528        /* How It Works Section */
529        .how-it-works-title {
530            font-size: var(--text-2xl, 1.5rem);
531            font-weight: 700;
532            color: var(--color-text-primary, #1a1a1a);
533            margin: 0 0 var(--space-4, 1rem);
534        }
535    </style>
536
537</head>
538
539<body>
540
541<div class="page-container">
542    <!-- Language Selector -->
543    <div class="bg-primary py-2">
544        <div class="container">
545            
546
547
548
549<div class="language-selector">
550  <div class="language-current" id="languageCurrent" onclick="toggleLanguageDropdown()">
551    
552      
553        
554          <span class="language-flag">EN</span>
555          <span class="language-name">English</span>
556        
557      
558        
559      
560        
561      
562        
563      
564        
565      
566        
567      
568        
569      
570        
571      
572        
573      
574        
575      
576        
577      
578        
579      
580        
581      
582    
583    <svg class="language-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
584      <polyline points="6 9 12 15 18 9"></polyline>
585    </svg>
586  </div>
587  <div class="language-dropdown" id="languageDropdown">
588    <div class="language-dropdown-header">
589      <svg class="language-dropdown-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
590        <circle cx="12" cy="12" r="10"/>
591        <line x1="2" y1="12" x2="22" y2="12"/>
592        <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/>
593      </svg>
594      Select Language
595    </div>
596    <form action="/i18n/setlang/" method="post" class="language-form">
597      <input type="hidden" name="csrfmiddlewaretoken" value="eBuxlB9Fqh0xLzCwxdVT2F7mkBjNqXHt2Tzv5YYJmPPT2vTdhD2aEk9YB7yUviDJ">
598      
599        
600        <button class="language-option" type="submit" name="language" value="en">
601          <span class="language-option-flag">EN</span>
602          <span class="language-option-name">English</span>
603          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
604            <polyline points="20 6 9 17 4 12"></polyline>
605          </svg>
606        </button>
607        
608      
609        
610        <button class="language-option" type="submit" name="language" value="zh-hans">
611          <span class="language-option-flag">ZH</span>
612          <span class="language-option-name">简体中文</span>
613          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
614            <polyline points="20 6 9 17 4 12"></polyline>
615          </svg>
616        </button>
617        
618      
619        
620        <button class="language-option" type="submit" name="language" value="zh-hant">
621          <span class="language-option-flag">ZH</span>
622          <span class="language-option-name">繁體中文</span>
623          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
624            <polyline points="20 6 9 17 4 12"></polyline>
625          </svg>
626        </button>
627        
628      
629        
630        <button class="language-option" type="submit" name="language" value="ja">
631          <span class="language-option-flag">JA</span>
632          <span class="language-option-name">日本語</span>
633          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
634            <polyline points="20 6 9 17 4 12"></polyline>
635          </svg>
636        </button>
637        
638      
639        
640        <button class="language-option" type="submit" name="language" value="ko">
641          <span class="language-option-flag">KO</span>
642          <span class="language-option-name">한국어</span>
643          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
644            <polyline points="20 6 9 17 4 12"></polyline>
645          </svg>
646        </button>
647        
648      
649        
650        <button class="language-option" type="submit" name="language" value="es">
651          <span class="language-option-flag">ES</span>
652          <span class="language-option-name">español</span>
653          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
654            <polyline points="20 6 9 17 4 12"></polyline>
655          </svg>
656        </button>
657        
658      
659        
660        <button class="language-option" type="submit" name="language" value="pt">
661          <span class="language-option-flag">PT</span>
662          <span class="language-option-name">Português</span>
663          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
664            <polyline points="20 6 9 17 4 12"></polyline>
665          </svg>
666        </button>
667        
668      
669        
670        <button class="language-option" type="submit" name="language" value="it">
671          <span class="language-option-flag">IT</span>
672          <span class="language-option-name">italiano</span>
673          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
674            <polyline points="20 6 9 17 4 12"></polyline>
675          </svg>
676        </button>
677        
678      
679        
680        <button class="language-option" type="submit" name="language" value="ru">
681          <span class="language-option-flag">RU</span>
682          <span class="language-option-name">Русский</span>
683          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
684            <polyline points="20 6 9 17 4 12"></polyline>
685          </svg>
686        </button>
687        
688      
689        
690        <button class="language-option" type="submit" name="language" value="de">
691          <span class="language-option-flag">DE</span>
692          <span class="language-option-name">Deutsch</span>
693          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
694            <polyline points="20 6 9 17 4 12"></polyline>
695          </svg>
696        </button>
697        
698      
699        
700        <button class="language-option" type="submit" name="language" value="fr">
701          <span class="language-option-flag">FR</span>
702          <span class="language-option-name">français</span>
703          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
704            <polyline points="20 6 9 17 4 12"></polyline>
705          </svg>
706        </button>
707        
708      
709        
710        <button class="language-option" type="submit" name="language" value="ar">
711          <span class="language-option-flag">AR</span>
712          <span class="language-option-name">العربيّة</span>
713          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
714            <polyline points="20 6 9 17 4 12"></polyline>
715          </svg>
716        </button>
717        
718      
719        
720        <button class="language-option" type="submit" name="language" value="th">
721          <span class="language-option-flag">TH</span>
722          <span class="language-option-name">ภาษาไทย</span>
723          <svg class="language-option-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
724            <polyline points="20 6 9 17 4 12"></polyline>
725          </svg>
726        </button>
727        
728      
729    </form>
730  </div>
731  
732</div>
733
734<script>
735  function toggleLanguageDropdown() {
736    const dropdown = document.getElementById('languageDropdown');
737    const current = document.getElementById('languageCurrent');
738    dropdown.classList.toggle('open');
739    current.classList.toggle('open');
740  }
741
742  // Close dropdown when clicking outside
743  document.addEventListener('click', function(event) {
744    const selector = document.querySelector('.language-selector');
745    const dropdown = document.getElementById('languageDropdown');
746    const current = document.getElementById('languageCurrent');
747    if (selector && !selector.contains(event.target)) {
748      dropdown.classList.remove('open');
749      current.classList.remove('open');
750    }
751  });
752
753  // Keyboard navigation
754  document.addEventListener('keydown', function(event) {
755    if (event.key === 'Escape') {
756      const dropdown = document.getElementById('languageDropdown');
757      const current = document.getElementById('languageCurrent');
758      dropdown.classList.remove('open');
759      current.classList.remove('open');
760    }
761  });
762</script>
762
763
764<style>
765  .language-selector {
766    position: relative;
767    z-index: var(--z-dropdown);
768  }
769
770  .language-current {
771    display: flex;
772    align-items: center;
773    gap: var(--space-2);
774    padding: var(--space-2) var(--space-3);
775    background: var(--bg-secondary);
776    border: 1px solid var(--border-light);
777    border-radius: var(--radius-lg);
778    cursor: pointer;
779    transition: all var(--transition-fast);
780    font-size: var(--text-sm);
781    color: var(--text-primary);
782  }
783
784  .language-current:hover {
785    background: var(--color-primary-50);
786    border-color: var(--color-primary-300);
787  }
788
789  .language-current.open {
790    background: var(--color-primary-50);
791    border-color: var(--color-primary-400);
792    border-bottom-left-radius: 0;
793    border-bottom-right-radius: 0;
794  }
795
796  .language-flag {
797    font-size: var(--text-base);
798    line-height: 1;
799  }
800
801  .language-name {
802    font-weight: 500;
803  }
804
805  .language-chevron {
806    width: 14px;
807    height: 14px;
808    color: var(--text-muted);
809    transition: transform var(--transition-fast);
810  }
811
812  .language-current.open .language-chevron {
813    transform: rotate(180deg);
814  }
815
816  .language-dropdown {
817    position: absolute;
818    top: 100%;
819    right: 0;
820    min-width: 220px;
821    background: var(--bg-secondary);
822    border: 1px solid var(--color-primary-400);
823    border-top: none;
824    border-radius: var(--radius-lg);
825    border-top-left-radius: 0;
826    border-top-right-radius: 0;
827    box-shadow: var(--shadow-lg);
828    opacity: 0;
829    visibility: hidden;
830    transform: translateY(-10px);
831    transition: all var(--transition-fast);
832  }
833
834  .language-dropdown.open {
835    opacity: 1;
836    visibility: visible;
837    transform: translateY(0);
838  }
839
840  .language-dropdown-header {
841    display: flex;
842    align-items: center;
843    gap: var(--space-2);
844    padding: var(--space-3) var(--space-4);
845    background: var(--color-primary-50);
846    border-bottom: 1px solid var(--color-primary-100);
847    font-size: var(--text-xs);
848    font-weight: 600;
849    color: var(--color-primary-700);
850    text-transform: uppercase;
851    letter-spacing: var(--tracking-wide);
852  }
853
854  .language-dropdown-icon {
855    width: 14px;
856    height: 14px;
857  }
858
859  .language-form {
860    padding: var(--space-2);
861    max-height: 300px;
862    overflow-y: auto;
863  }
864
865  .language-option {
866    display: flex;
867    align-items: center;
868    gap: var(--space-3);
869    width: 100%;
870    padding: var(--space-3) var(--space-4);
871    background: transparent;
872    border: none;
873    border-radius: var(--radius-md);
874    cursor: pointer;
875    transition: all var(--transition-fast);
876    font-size: var(--text-sm);
877    color: var(--text-primary);
878    text-align: left;
879  }
880
881  .language-option:hover {
882    background: var(--color-primary-50);
883  }
884
885  .language-option:focus {
886    outline: none;
887    background: var(--color-primary-100);
888  }
889
890  .language-option-flag {
891    font-size: var(--text-base);
892    line-height: 1;
893    width: 24px;
894    text-align: center;
895  }
896
897  .language-option-name {
898    flex: 1;
899  }
900
901  .language-option-check {
902    width: 16px;
903    height: 16px;
904    color: var(--color-primary-500);
905    opacity: 0;
906    transition: opacity var(--transition-fast);
907  }
908
909  .language-option:hover .language-option-check {
910    opacity: 1;
911  }
912
913  /* Scrollbar styling for dropdown */
914  .language-form::-webkit-scrollbar {
915    width: 6px;
916  }
917
918  .language-form::-webkit-scrollbar-track {
919    background: var(--bg-tertiary);
920    border-radius: 3px;
921  }
922
923  .language-form::-webkit-scrollbar-thumb {
924    background: var(--color-slate-300);
925    border-radius: 3px;
926  }
927
928  .language-form::-webkit-scrollbar-thumb:hover {
929    background: var(--color-slate-400);
930  }
931
932  /* RTL Toggle Button */
933  .rtl-toggle-btn {
934    display: flex;
935    align-items: center;
936    gap: var(--space-1);
937    padding: var(--space-2) var(--space-3);
938    background: var(--bg-secondary);
939    border: 1px solid var(--border-light);
940    border-radius: var(--radius-lg);
941    cursor: pointer;
942    font-size: var(--text-xs);
943    color: var(--text-secondary);
944    transition: all var(--transition-fast);
945    margin-left: var(--space-2);
946  }
947
948  .rtl-toggle-btn:hover {
949    background: var(--color-primary-50);
950    border-color: var(--color-primary-300);
951    color: var(--color-primary-600);
952  }
953
954  .rtl-toggle-btn svg {
955    width: 14px;
956    height: 14px;
957  }
958
959  .rtl-toggle-text {
960    font-weight: 500;
961  }
962
963  /* RTL mode adjustments for language selector */
964  [dir="rtl"] .rtl-toggle-btn {
965    margin-left: 0;
966    margin-right: var(--space-2);
967  }
968</style>
969
970        </div>
971    </div>
972
973    <!-- Menu Bar -->
974    
975
976<nav class="navbar">
977  <div class="navbar-container">
978    <!-- Brand with Logo -->
979    <a class="navbar-brand" href="#">
980      <img src="/static/image/site_logo.png" alt="Tuguoba" class="navbar-logo" width="32" height="32" />
981      <span>Tuguoba</span>
982    </a>
983
984    <!-- Desktop Navigation -->
985    <div class="navbar-menu">
986      <ul class="navbar-nav">
987        <!-- Document Scan -->
988        <li class="nav-item">
989          <a class="nav-link " href="scanner">
990            Document Scan
991          </a>
992        </li>
993
994        <!-- Face Dropdown -->
995        <li class="nav-item dropdown" onclick="toggleDropdown(this)">
996          <a class="nav-link " href="#">
997            
998              Face
999            
1000            <svg class="icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1001              <polyline points="6 9 12 15 18 9"></polyline>
1002            </svg>
1003          </a>
1004          <div class="dropdown-menu">
1005            <a class="dropdown-item active" href="faceswap">Face Swap</a>
1006            <a class="dropdown-item active" href="faceswaponeimage">Face Swap in one image</a>
1007            <a class="dropdown-item active" href="faceaverage">Face Fusion</a>
1008            <a class="dropdown-item active" href="faceavatar">Face Avatar</a>
1009          </div>
1010        </li>
1011
1012        <!-- Image Effect Dropdown -->
1013        <li class="nav-item dropdown" onclick="toggleDropdown(this)">
1014          <a class="nav-link " href="#" onclick="return false;">
1015            
1016              Image Effect
1017            
1018            <svg class="icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1019              <polyline points="6 9 12 15 18 9"></polyline>
1020            </svg>
1021          </a>
1022          <div class="dropdown-menu">
1023            <a class="dropdown-item active" href="sketch">Sketch</a>
1024            <a class="dropdown-item active" href="sytle">Watercolor</a>
1025            <a class="dropdown-item active" href="oilpaint">Oilpaint</a>
1026            <a class="dropdown-item active" href="cartoon">Cartoon</a>
1027            <a class="dropdown-item active" href="enhance">Detail Enhance</a>
1028            <a class="dropdown-item active" href="image_enhance">Image Enhance</a>
1029            <a class="dropdown-item active" href="inpaint">Image Inpaint</a>
1030            <a class="dropdown-item active" href="bgeffect">Image Transform</a>
1031            <a class="dropdown-item active" href="imagefilter">Image Filter</a>
1032            <a class="dropdown-item active" href="deblur">Deblur</a>
1033          </div>
1034        </li>
1035
1036        <!-- Single Links -->
1037        <li class="nav-item">
1038          <a class="nav-link " href="editor">
1039            Image Editor
1040          </a>
1041        </li>
1042        <li class="nav-item">
1043          <a class="nav-link " href="text_editor">
1044            Text Editor
1045          </a>
1046        </li>
1047      </ul>
1048
1049      <!-- Right Side: Language Selector & Links -->
1050      <ul class="navbar-nav navbar-right">
1051
1052        <!-- Language Selector in Navbar -->
1053        <li class="nav-item">
1054          
1055          
1056          
1057          <div class="nav-language-selector" id="navLanguageSelector">
1058            <button class="nav-language-current" onclick="toggleNavLanguageDropdown()">
1059              
1060                
1061                  
1062                    <span class="nav-lang-name">English</span>
1063                  
1064                
1065                  
1066                
1067                  
1068                
1069                  
1070                
1071                  
1072                
1073                  
1074                
1075                  
1076                
1077                  
1078                
1079                  
1080                
1081                  
1082                
1083                  
1084                
1085                  
1086                
1087                  
1088                
1089              
1090              <svg class="nav-lang-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1091                <polyline points="6 9 12 15 18 9"></polyline>
1092              </svg>
1093            </button>
1094            <div class="nav-language-dropdown" id="navLanguageDropdown">
1095              <form action="/i18n/setlang/" method="post">
1096                <input type="hidden" name="csrfmiddlewaretoken" value="eBuxlB9Fqh0xLzCwxdVT2F7mkBjNqXHt2Tzv5YYJmPPT2vTdhD2aEk9YB7yUviDJ">
1097                
1098                  
1099                    
1100                    <button class="nav-language-option nav-language-current-selected" type="submit" name="language" value="en">
1101                      <span class="nav-lang-option-name">English</span>
1102                      <svg style="width: 16px; height: 16px; margin-left: auto;" viewBox="0 0 24 24" fill="none" stroke-width="2">
1103                        <polyline points="20 6 9 17 4 12" stroke="currentColor"></polyline>
1104                      </svg>
1105                    </button>
1106                    
1107                  
1108                
1109                  
1110                    
1111                    <button class="nav-language-option" type="submit" name="language" value="zh-hans">
1112                      <span class="nav-lang-option-name">简体中文</span>
1113                    </button>
1114                    
1115                  
1116                
1117                  
1118                    
1119                    <button class="nav-language-option" type="submit" name="language" value="zh-hant">
1120                      <span class="nav-lang-option-name">繁體中文</span>
1121                    </button>
1122                    
1123                  
1124                
1125                  
1126                    
1127                    <button class="nav-language-option" type="submit" name="language" value="ja">
1128                      <span class="nav-lang-option-name">日本語</span>
1129                    </button>
1130                    
1131                  
1132                
1133                  
1134                    
1135                    <button class="nav-language-option" type="submit" name="language" value="ko">
1136                      <span class="nav-lang-option-name">한국어</span>
1137                    </button>
1138                    
1139                  
1140                
1141                  
1142                    
1143                    <button class="nav-language-option" type="submit" name="language" value="es">
1144                      <span class="nav-lang-option-name">español</span>
1145                    </button>
1146                    
1147                  
1148                
1149                  
1150                    
1151                    <button class="nav-language-option" type="submit" name="language" value="pt">
1152                      <span class="nav-lang-option-name">Português</span>
1153                    </button>
1154                    
1155                  
1156                
1157                  
1158                    
1159                    <button class="nav-language-option" type="submit" name="language" value="it">
1160                      <span class="nav-lang-option-name">italiano</span>
1161                    </button>
1162                    
1163                  
1164                
1165                  
1166                    
1167                    <button class="nav-language-option" type="submit" name="language" value="ru">
1168                      <span class="nav-lang-option-name">Русский</span>
1169                    </button>
1170                    
1171                  
1172                
1173                  
1174                    
1175                    <button class="nav-language-option" type="submit" name="language" value="de">
1176                      <span class="nav-lang-option-name">Deutsch</span>
1177                    </button>
1178                    
1179                  
1180                
1181                  
1182                    
1183                    <button class="nav-language-option" type="submit" name="language" value="fr">
1184                      <span class="nav-lang-option-name">français</span>
1185                    </button>
1186                    
1187                  
1188                
1189                  
1190                    
1191                    <button class="nav-language-option" type="submit" name="language" value="ar">
1192                      <span class="nav-lang-option-name">العربيّة</span>
1193                    </button>
1194                    
1195                  
1196                
1197                  
1198                    
1199                    <button class="nav-language-option" type="submit" name="language" value="th">
1200                      <span class="nav-lang-option-name">ภาษาไทย</span>
1201                    </button>
1202                    
1203                  
1204                
1205              </form>
1206            </div>
1207          </div>
1208        </li>
1209
1210        <li class="nav-item">
1211          <a class="nav-link active" href="contact">
1212            <strong>Contact</strong>
1213          </a>
1214        </li>
1215
1216        <!-- RTL Toggle -->
1217        
1218
1219      </ul>
1220    </div>
1221
1222    <!-- Mobile Menu Toggle -->
1223    <button class="navbar-toggle" onclick="toggleMobileMenu()" aria-label="Toggle menu">
1224      <svg class="icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1225        <line x1="3" y1="6" x2="21" y2="6"></line>
1226        <line x1="3" y1="12" x2="21" y2="12"></line>
1227        <line x1="3" y1="18" x2="21" y2="18"></line>
1228      </svg>
1229    </button>
1230  </div>
1231</nav>
1232
1233<!-- Mobile Menu -->
1234<div class="mobile-menu" id="mobileMenu">
1235  <div class="flex justify-between items-center mb-6">
1236    <a class="navbar-brand" href="#">
1237      <img src="/static/image/site_logo.png" alt="Tuguoba" class="navbar-logo" width="32" height="32" />
1238      <span>Tuguoba</span>
1239    </a>
1240    <button class="btn-icon" onclick="closeMobileMenu()" aria-label="Close menu">
1241      <svg class="icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1242        <line x1="18" y1="6" x2="6" y2="18"></line>
1243        <line x1="6" y1="6" x2="18" y2="18"></line>
1244      </svg>
1245    </button>
1246  </div>
1247
1248  <!-- Mobile Language Selector - Dropdown Style -->
1249  <div class="mobile-language-section">
1250    
1251    
1252    
1253    <div class="mobile-language-selector" id="mobileLanguageSelector">
1254      <button class="mobile-language-current" onclick="toggleMobileLanguageDropdown()">
1255        
1256          
1257            
1258              <span class="mobile-lang-name">English</span>
1259            
1260          
1261            
1262          
1263            
1264          
1265            
1266          
1267            
1268          
1269            
1270          
1271            
1272          
1273            
1274          
1275            
1276          
1277            
1278          
1279            
1280          
1281            
1282          
1283            
1284          
1285        
1286        <svg class="mobile-lang-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1287          <polyline points="6 9 12 15 18 9"></polyline>
1288        </svg>
1289      </button>
1290      <div class="mobile-language-dropdown" id="mobileLanguageDropdown">
1291        <form action="/i18n/setlang/" method="post">
1292          <input type="hidden" name="csrfmiddlewaretoken" value="eBuxlB9Fqh0xLzCwxdVT2F7mkBjNqXHt2Tzv5YYJmPPT2vTdhD2aEk9YB7yUviDJ">
1293          
1294            
1295              
1296              <button class="mobile-language-option mobile-language-current-selected" type="submit" name="language" value="en">
1297                <span class="mobile-lang-option-name">English</span>
1298                <svg style="width: 16px; height: 16px; margin-left: auto;" viewBox="0 0 24 24" fill="none" stroke-width="2">
1299                  <polyline points="20 6 9 17 4 12" stroke="currentColor"></polyline>
1300                </svg>
1301              </button>
1302              
1303            
1304          
1305            
1306              
1307              <button class="mobile-language-option" type="submit" name="language" value="zh-hans">
1308                <span class="mobile-lang-option-name">简体中文</span>
1309              </button>
1310              
1311            
1312          
1313            
1314              
1315              <button class="mobile-language-option" type="submit" name="language" value="zh-hant">
1316                <span class="mobile-lang-option-name">繁體中文</span>
1317              </button>
1318              
1319            
1320          
1321            
1322              
1323              <button class="mobile-language-option" type="submit" name="language" value="ja">
1324                <span class="mobile-lang-option-name">日本語</span>
1325              </button>
1326              
1327            
1328          
1329            
1330              
1331              <button class="mobile-language-option" type="submit" name="language" value="ko">
1332                <span class="mobile-lang-option-name">한국어</span>
1333              </button>
1334              
1335            
1336          
1337            
1338              
1339              <button class="mobile-language-option" type="submit" name="language" value="es">
1340                <span class="mobile-lang-option-name">español</span>
1341              </button>
1342              
1343            
1344          
1345            
1346              
1347              <button class="mobile-language-option" type="submit" name="language" value="pt">
1348                <span class="mobile-lang-option-name">Português</span>
1349              </button>
1350              
1351            
1352          
1353            
1354              
1355              <button class="mobile-language-option" type="submit" name="language" value="it">
1356                <span class="mobile-lang-option-name">italiano</span>
1357              </button>
1358              
1359            
1360          
1361            
1362              
1363              <button class="mobile-language-option" type="submit" name="language" value="ru">
1364                <span class="mobile-lang-option-name">Русский</span>
1365              </button>
1366              
1367            
1368          
1369            
1370              
1371              <button class="mobile-language-option" type="submit" name="language" value="de">
1372                <span class="mobile-lang-option-name">Deutsch</span>
1373              </button>
1374              
1375            
1376          
1377            
1378              
1379              <button class="mobile-language-option" type="submit" name="language" value="fr">
1380                <span class="mobile-lang-option-name">français</span>
1381              </button>
1382              
1383            
1384          
1385            
1386              
1387              <button class="mobile-language-option" type="submit" name="language" value="ar">
1388                <span class="mobile-lang-option-name">العربيّة</span>
1389              </button>
1390              
1391            
1392          
1393            
1394              
1395              <button class="mobile-language-option" type="submit" name="language" value="th">
1396                <span class="mobile-lang-option-name">ภาษาไทย</span>
1397              </button>
1398              
1399            
1400          
1401        </form>
1402      </div>
1403    </div>
1404  </div>
1405
1406  <ul class="mobile-nav">
1407    <li class="mobile-nav-item"><a class="mobile-nav-link" href="scanner">Document Scan</a></li>
1408    <li class="mobile-nav-item"><a class="mobile-nav-link" href="faceswap">Face Swap</a></li>
1409    <li class="mobile-nav-item"><a class="mobile-nav-link" href="faceswaponeimage">Face Swap in one image</a></li>
1410    <li class="mobile-nav-item"><a class="mobile-nav-link" href="faceaverage">Face Fusion</a></li>
1411    <li class="mobile-nav-item"><a class="mobile-nav-link" href="faceavatar">Face Avatar</a></li>
1412    <li class="mobile-nav-item"><a class="mobile-nav-link" href="sketch">Sketch</a></li>
1413    <li class="mobile-nav-item"><a class="mobile-nav-link" href="sytle">Watercolor</a></li>
1414    <li class="mobile-nav-item"><a class="mobile-nav-link" href="cartoon">Cartoon</a></li>
1415    <li class="mobile-nav-item"><a class="mobile-nav-link" href="enhance">Detail Enhance</a></li>
1416    <li class="mobile-nav-item"><a class="mobile-nav-link" href="image_enhance">Image Enhance</a></li>
1417    <li class="mobile-nav-item"><a class="mobile-nav-link" href="inpaint">Image Inpaint</a></li>
1418    <li class="mobile-nav-item"><a class="mobile-nav-link" href="bgeffect">Image Transform</a></li>
1419    <li class="mobile-nav-item"><a class="mobile-nav-link" href="imagefilter">Image Filter</a></li>
1420    <li class="mobile-nav-item"><a class="mobile-nav-link" href="deblur">Deblur</a></li>
1421    <li class="mobile-nav-item"><a class="mobile-nav-link" href="editor">Image Editor</a></li>
1422    <li class="mobile-nav-item"><a class="mobile-nav-link" href="text_editor">Text Editor</a></li>
1423    <li class="mobile-nav-item"><a class="mobile-nav-link" href="contact">Contact</a></li>
1424  </ul>
1425</div>
1426
1427<style>
1428  /* Dropdown base */
1429  .nav-item.dropdown {
1430    position: relative;
1431  }
1432
1433  .dropdown-menu {
1434    position: absolute;
1435    top: 100%;
1436    left: 0;
1437    min-width: 200px;
1438    padding: 8px;
1439    margin-top: 4px;
1440    background: var(--bg-secondary);
1441    border: 1px solid var(--border-light);
1442    border-radius: 8px;
1443    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
1444    opacity: 0;
1445    visibility: hidden;
1446    transform: translateY(-8px);
1447    transition: all 0.2s;
1448    z-index: 100;
1449  }
1450
1451  .nav-item.dropdown:hover .dropdown-menu,
1452  .nav-item.dropdown.open .dropdown-menu {
1453    opacity: 1;
1454    visibility: visible;
1455    transform: translateY(0);
1456  }
1457
1458  .dropdown-item {
1459    display: block;
1460    padding: 8px 12px;
1461    font-size: 13px;
1462    color: var(--text-primary);
1463    text-decoration: none;
1464    border-radius: 6px;
1465    transition: background 0.15s;
1466  }
1467
1468  .dropdown-item:hover {
1469    background: var(--color-primary-50);
1470  }
1471
1472  /* Navbar Logo */
1473  .navbar-logo {
1474    height: 32px;
1475    width: auto;
1476    object-fit: contain;
1477  }
1478
1479  /* RTL mode adjustments */
1480  [dir="rtl"] .navbar-right {
1481    margin-left: 0;
1482    margin-right: auto;
1483  }
1484
1485  [dir="rtl"] .nav-language-dropdown {
1486    right: auto;
1487    left: 0;
1488  }
1489</style>
1490
1491<!-- Navbar Scripts -->
1492<script>
1493  // Toggle dropdown menu
1494  function toggleDropdown(element) {
1495    element.classList.toggle('open');
1496  }
1497
1498  // Close dropdowns when clicking outside
1499  document.addEventListener('click', function(event) {
1500    const dropdowns = document.querySelectorAll('.nav-item.dropdown');
1501    dropdowns.forEach(function(dropdown) {
1502      if (!dropdown.contains(event.target)) {
1503        dropdown.classList.remove('open');
1504      }
1505    });
1506  });
1507
1508  // Navbar language dropdown
1509  function toggleNavLanguageDropdown() {
1510    const dropdown = document.getElementById('navLanguageDropdown');
1511    dropdown.classList.toggle('open');
1512  }
1513
1514  // Close navbar language dropdown when clicking outside
1515  document.addEventListener('click', function(event) {
1516    const selector = document.getElementById('navLanguageSelector');
1517    const dropdown = document.getElementById('navLanguageDropdown');
1518    if (selector && !selector.contains(event.target)) {
1519      dropdown.classList.remove('open');
1520    }
1521  });
1522
1523  // Mobile language dropdown
1524  function toggleMobileLanguageDropdown() {
1525    const button = document.querySelector('.mobile-language-current');
1526    const dropdown = document.getElementById('mobileLanguageDropdown');
1527    
1528    if (button && dropdown) {
1529      button.classList.toggle('open');
1530      dropdown.classList.toggle('open');
1531    }
1532  }
1533
1534  // Close mobile language dropdown when clicking outside
1535  document.addEventListener('click', function(event) {
1536    const selector = document.getElementById('mobileLanguageSelector');
1537    const button = document.querySelector('.mobile-language-current');
1538    const dropdown = document.getElementById('mobileLanguageDropdown');
1539    
1540    if (selector && !selector.contains(event.target)) {
1541      if (button) button.classList.remove('open');
1542      if (dropdown) dropdown.classList.remove('open');
1543    }
1544  });
1545
1546  // Mobile menu toggle
1547  function toggleMobileMenu() {
1548    const menu = document.getElementById('mobileMenu');
1549    menu.classList.toggle('open');
1550    document.body.style.overflow = menu.classList.contains('open') ? 'hidden' : '';
1551  }
1552
1553  function closeMobileMenu() {
1554    const menu = document.getElementById('mobileMenu');
1555    menu.classList.remove('open');
1556    document.body.style.overflow = '';
1557  }
1558
1559  // Close mobile menu when clicking outside
1560  document.addEventListener('click', function(event) {
1561    const menu = document.getElementById('mobileMenu');
1562    const toggle = document.querySelector('.navbar-toggle');
1563    if (menu.classList.contains('open') &&
1564        !menu.contains(event.target) &&
1565        !toggle.contains(event.target)) {
1566      closeMobileMenu();
1567    }
1568  });
1569
1570  // Update RTL toggle button text based on current direction
1571  document.addEventListener('DOMContentLoaded', function() {
1572    var navToggleText = document.querySelector('.nav-rtl-text');
1573    if (navToggleText && window.RTL) {
1574      var updateNavToggleText = function() {
1575        navToggleText.textContent = window.RTL.getDirection() === 'rtl' ? 'LTR' : 'RTL';
1576      };
1577      updateNavToggleText();
1578      window.addEventListener('directionChanged', updateNavToggleText);
1579    }
1580});
1581</script>
1581
1582
1583
1584    <!-- Main Content -->
1585    <main class="page-main">
1586        <div class="container">
1587            <div class="contact-content">
1588                <h1 class="contact-title">
1589                    <svg class="icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: inline-block; vertical-align: middle; margin-right: var(--space-2);">
1590                        <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
1591                        <circle cx="12" cy="7" r="4"></circle>
1592                    </svg>
1593                    Contact Details
1594                </h1>
1595                <div class="contact-info">
1596                    <p class="contact-label">Email</p>
1597                    <p class="contact-value">[email protected]</p>
1598                </div>
1599            </div>
1600        </div>
1601    </main>
1602
1603</div>
1604
1605
1606
1607<link rel="stylesheet" type="text/css" href="/static/css/footer.css" />
1608<footer class="footer">
1609  <div class="footer-content">
1610    <!-- Footer Main Content -->
1611    <div class="footer-main">
1612      <!-- Brand Section -->
1613      <div class="footer-brand">
1614        <a href="#" class="footer-brand-link">
1615          <img src="/static/image/site_logo.png" alt="Tuguoba" class="footer-brand-logo" width="32" height="32" />
1616          <span class="footer-brand-name">Tuguoba</span>
1617        </a>
1618        <p class="footer-brand-tagline">AI-Powered Image Processing Tools</p>
1619      </div>
1620
1621      <!-- Navigation Section -->
1622      <div class="footer-nav">
1623        <!-- Legal Links -->
1624        <div class="footer-nav-group">
1625          <h4 class="footer-nav-title">Policy</h4>
1626          <div class="footer-nav-list">
1627            <a href="PrivacyPolicy" class="footer-nav-link" target="_blank">Privacy Policy</a>
1628            <a href="TermOfService" class="footer-nav-link" target="_blank">Terms of Service</a>
1629          </div>
1630        </div>
1631
1632        <!-- Windows Apps -->
1633        <div class="footer-nav-group">
1634          <h4 class="footer-nav-title">Related</h4>
1635          <div class="footer-nav-list">
1636            <a href="https://apps.microsoft.com/detail/9PJ71PK3G2FD" class="footer-nav-link" target="_blank" rel="noopener noreferrer">TryFit - Virtual Try-On</a>
1637            <a href="https://apps.microsoft.com/detail/9N5SQ4KZRZ8L" class="footer-nav-link" target="_blank" rel="noopener noreferrer">DreamForge - Image Creator and Editor</a>
1638            <a href="https://apps.microsoft.com/detail/9ND1FC1CWK25" class="footer-nav-link" target="_blank" rel="noopener noreferrer">PixelForge - Image Upscaler and Background Remover</a>
1639          </div>
1640        </div>
1641
1642        <!-- Related (only for scanner) -->
1643        
1644      </div>
1645    </div>
1646
1647    <!-- Footer Bottom -->
1648    <div class="footer-bottom">
1649      <p class="footer-copyright">© 2026 Tuguoba. All rights reserved.</p>
1650      <p class="footer-tagline">Transform your images with AI</p>
1651    </div>
1652  </div>
1653</footer>
1654
1655<!-- Share Buttons - placed outside footer -->
1656<!-- AddToAny BEGIN -->
1657<!--<a class="a2a_dd" href="https://www.addtoany.com/share"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" width="171" height="16" border="0" alt="Share"></a>-->
1658<!--<a class="a2a_dd uk-icon-hover uk-icon-small uk-icon-share-alt" href="https://www.addtoany.com/share"></a>-->
1659<!--
1659<script>-->
1660<!--var a2a_config = a2a_config || {};-->
1661<!--a2a_config.num_services = 4;-->
1662<!--</script>
1662-->
1663<!--
1663<script async src="https://static.addtoany.com/menu/page.js"></script>
1663-->
1664<!-- AddToAny END -->
1665
1666
1667<div class="a2a_kit a2a_kit_size_32 a2a_floating_style a2a_vertical_style" data-a2a-scroll-show="0,40" style="bottom:0px; right:0px;">
1668    <a class="a2a_button_whatsapp"></a>
1669    <a class="a2a_button_x"></a>
1670    <a class="a2a_button_wechat"></a>
1671    <a class="a2a_button_line"></a>
1672<!--    <a class="a2a_button_sina_weibo"></a>-->
1673    <a class="a2a_dd" href="https://www.addtoany.com/share"></a>
1674</div>
1675
1676<script async src="https://static.addtoany.com/menu/page.js"></script>
1676
1677
1678</body>
1679</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.