132 lines
7.3 KiB
Vue
132 lines
7.3 KiB
Vue
<template>
|
|
<header class="sticky top-0 z-50 bg-white/80 backdrop-blur shadow-sm border-b">
|
|
<nav class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div class="flex justify-between h-16">
|
|
<div class="flex items-center">
|
|
<NuxtLink :to="localePath('/')" class="flex items-center space-x-2">
|
|
<img src="/logo.svg" alt="ClueFlare" class="h-8 w-8">
|
|
<span class="text-xl font-bold text-gray-900">ClueFlare</span>
|
|
</NuxtLink>
|
|
</div>
|
|
|
|
<div class="hidden md:flex items-center space-x-8">
|
|
<NuxtLink
|
|
v-for="item in navigation"
|
|
:key="item.name"
|
|
:to="localePath(item.href)"
|
|
class="text-gray-700 hover:text-blue-600 transition-colors duration-200"
|
|
>
|
|
{{ t(item.name) }}
|
|
</NuxtLink>
|
|
</div>
|
|
|
|
<div class="flex items-center space-x-4">
|
|
<button
|
|
type="button"
|
|
class="inline-flex items-center justify-center rounded-md p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500 md:hidden"
|
|
@click="isMobileOpen = !isMobileOpen"
|
|
:aria-expanded="isMobileOpen.toString()"
|
|
aria-controls="mobile-menu"
|
|
>
|
|
<span class="sr-only">Open main menu</span>
|
|
<svg v-if="!isMobileOpen" class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5M3.75 17.25h16.5" />
|
|
</svg>
|
|
<svg v-else class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
</svg>
|
|
</button>
|
|
<div class="flex items-center space-x-4">
|
|
<a
|
|
href="https://t.me/pinnovatecloud"
|
|
target="_blank"
|
|
class="flex items-center space-x-2 text-gray-600 hover:text-blue-600 transition-colors"
|
|
>
|
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
<path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/>
|
|
</svg>
|
|
<span class="hidden lg:inline text-sm">{{ t('contact.username') }}</span>
|
|
</a>
|
|
|
|
<a
|
|
href="https://wa.me/19174029875"
|
|
target="_blank"
|
|
class="flex items-center space-x-2 text-gray-600 hover:text-green-600 transition-colors"
|
|
>
|
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347"/>
|
|
</svg>
|
|
<span class="hidden lg:inline text-sm">{{ t('contact.phone') }}</span>
|
|
</a>
|
|
</div>
|
|
|
|
<LanguageSwitcher />
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
id="mobile-menu"
|
|
class="md:hidden"
|
|
v-if="isMobileOpen"
|
|
>
|
|
<div class="space-y-1 pb-3 pt-2">
|
|
<NuxtLink
|
|
v-for="item in navigation"
|
|
:key="item.name + '-mobile'"
|
|
:to="localePath(item.href)"
|
|
class="block px-3 py-2 text-base font-medium text-gray-700 hover:text-blue-600 hover:bg-gray-50 rounded-md"
|
|
@click="closeMobile()"
|
|
>
|
|
{{ t(item.name) }}
|
|
</NuxtLink>
|
|
</div>
|
|
<div class="border-t border-gray-200 pt-3 pb-4 flex items-center justify-between px-3">
|
|
<div class="flex items-center space-x-4">
|
|
<a
|
|
href="https://t.me/pinnovatecloud"
|
|
target="_blank"
|
|
class="flex items-center space-x-2 text-gray-600 hover:text-blue-600 transition-colors"
|
|
>
|
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
<path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/>
|
|
</svg>
|
|
</a>
|
|
<a
|
|
href="https://wa.me/19174029875"
|
|
target="_blank"
|
|
class="flex items-center space-x-2 text-gray-600 hover:text-green-600 transition-colors"
|
|
>
|
|
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
|
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347"/>
|
|
</svg>
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<LanguageSwitcher />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
</template>
|
|
|
|
<script setup>
|
|
const { t } = useI18n()
|
|
const localePath = useLocalePath()
|
|
|
|
const navigation = [
|
|
{ name: 'nav.home', href: '/' },
|
|
{ name: 'nav.about', href: '/about' },
|
|
{ name: 'nav.blog', href: '/blog' },
|
|
{ name: 'nav.contact', href: '/contact' }
|
|
]
|
|
|
|
const isMobileOpen = ref(false)
|
|
|
|
const closeMobile = () => {
|
|
isMobileOpen.value = false
|
|
}
|
|
</script>
|
|
|
|
|