mirror of
https://github.com/BeamMP/BeamMP-Website.git
synced 2026-10-22 16:17:51 +00:00
Lots of changes & improvements
This commit is contained in:
1 parent
07a84f25d5
commit
b3d6f59aaf
18 files changed
+557
-153
No files matched your search
@@ -2,71 +2,71 @@
|
||||
import { Github, Facebook, Instagram, createLucideIcon } from 'lucide-vue-next'
|
||||
import { RouterLink } from 'vue-router'
|
||||
|
||||
const XIcon = createLucideIcon("X", [
|
||||
const XIcon = createLucideIcon('X', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
|
||||
const BlueskyIcon = createLucideIcon("Bluesky", [
|
||||
const BlueskyIcon = createLucideIcon('Bluesky', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
|
||||
const RedditIcon = createLucideIcon("X", [
|
||||
const RedditIcon = createLucideIcon('X', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M12 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 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M12 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 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
|
||||
const DiscordIcon = createLucideIcon("Discord", [
|
||||
const DiscordIcon = createLucideIcon('Discord', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
|
||||
const YouTubeIcon = createLucideIcon("YouTube", [
|
||||
const YouTubeIcon = createLucideIcon('YouTube', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
|
||||
const TikTokIcon = createLucideIcon("TikTok", [
|
||||
const TikTokIcon = createLucideIcon('TikTok', [
|
||||
[
|
||||
"path",
|
||||
'path',
|
||||
{
|
||||
d: "M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z",
|
||||
stroke: "none",
|
||||
fill: "currentColor",
|
||||
d: 'M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z',
|
||||
stroke: 'none',
|
||||
fill: 'currentColor',
|
||||
},
|
||||
],
|
||||
]);
|
||||
])
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -76,7 +76,7 @@ const TikTokIcon = createLucideIcon("TikTok", [
|
||||
<!-- Social Media Links -->
|
||||
<div class="flex items-center gap-4">
|
||||
<!-- GitHub -->
|
||||
<a
|
||||
<a
|
||||
href="https://github.com/BeamMP"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
@@ -172,7 +172,7 @@ const TikTokIcon = createLucideIcon("TikTok", [
|
||||
rel="noopener noreferrer"
|
||||
class="text-xs text-orange-600 hover:text-orange-700 underline-offset-2 hover:underline dark:text-orange-400 dark:hover:text-orange-300"
|
||||
>
|
||||
{{ $t("message.footer.support_on_patreon") }}
|
||||
{{ $t('message.footer.support_on_patreon') }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -186,7 +186,7 @@ const TikTokIcon = createLucideIcon("TikTok", [
|
||||
to="/about"
|
||||
class="text-neutral-700 hover:text-beammp-blue transition-colors dark:text-neutral-500 dark:hover:text-blue-400"
|
||||
>
|
||||
{{ $t("message.footer.about") }}
|
||||
{{ $t('message.footer.about') }}
|
||||
</RouterLink>
|
||||
<span>·</span>
|
||||
<a
|
||||
@@ -195,7 +195,7 @@ const TikTokIcon = createLucideIcon("TikTok", [
|
||||
rel="noopener noreferrer"
|
||||
class="text-neutral-700 hover:text-beammp-blue transition-colors dark:text-neutral-500 dark:hover:text-blue-400"
|
||||
>
|
||||
{{ $t("message.footer.privacy_policy") }}
|
||||
{{ $t('message.footer.privacy_policy') }}
|
||||
</a>
|
||||
<span>·</span>
|
||||
<a
|
||||
@@ -204,7 +204,7 @@ const TikTokIcon = createLucideIcon("TikTok", [
|
||||
rel="noopener noreferrer"
|
||||
class="text-neutral-700 hover:text-beammp-blue transition-colors dark:text-neutral-500 dark:hover:text-blue-400"
|
||||
>
|
||||
{{ $t("message.footer.terms_conditions") }}
|
||||
{{ $t('message.footer.terms_conditions') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -32,7 +32,9 @@ function localRoute(path) {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header class="border-b border-neutral-200 dark:border-neutral-800 bg-white/80 dark:bg-neutral-900/70 backdrop-blur sticky top-0 z-20">
|
||||
<header
|
||||
class="border-b border-neutral-200 dark:border-neutral-800 bg-white/80 dark:bg-neutral-900/70 backdrop-blur sticky top-0 z-20"
|
||||
>
|
||||
<nav class="max-w-6xl mx-auto px-4 h-16 flex items-center justify-between">
|
||||
<RouterLink
|
||||
:to="localRoute('')"
|
||||
@@ -52,19 +54,85 @@ function localRoute(path) {
|
||||
class="h-16 w-auto shrink-0 hidden dark:block"
|
||||
/>
|
||||
</RouterLink>
|
||||
|
||||
|
||||
<!-- Desktop Navigation -->
|
||||
<!-- Switch to mobile earlier (avoid logo crowding) -->
|
||||
<div class="hidden lg:flex items-center gap-4">
|
||||
<NavigationMenu>
|
||||
<NavigationMenuList>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('communities')"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.communities') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('partners')"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.partners') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('servers')"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.servers') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('stats')"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.statistics') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<a
|
||||
href="https://forum.beammp.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
aria-label="External link"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.forums') }}
|
||||
</a>
|
||||
@@ -76,49 +144,31 @@ function localRoute(path) {
|
||||
href="https://docs.beammp.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
aria-label="External link"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.docs') }}
|
||||
</a>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('communities')"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
>
|
||||
{{ $t('message.nav.communities') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('servers')"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
>
|
||||
{{ $t('message.nav.servers') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<RouterLink
|
||||
:to="localRoute('stats')"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
>
|
||||
{{ $t('message.nav.statistics') }}
|
||||
</RouterLink>
|
||||
</NavigationMenuLink>
|
||||
</NavigationMenuItem>
|
||||
<NavigationMenuItem>
|
||||
<NavigationMenuLink as-child>
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
aria-label="External link"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.github') }}
|
||||
</a>
|
||||
@@ -130,7 +180,13 @@ function localRoute(path) {
|
||||
href="https://www.patreon.com/BeamMP"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
:class="cn(navigationMenuTriggerStyle(), 'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white')"
|
||||
aria-label="External link"
|
||||
:class="
|
||||
cn(
|
||||
navigationMenuTriggerStyle(),
|
||||
'bg-transparent text-neutral-900 hover:bg-neutral-100 hover:text-neutral-900 dark:bg-transparent dark:text-white dark:hover:bg-neutral-800 dark:hover:text-white'
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('message.nav.patreon') }}
|
||||
</a>
|
||||
@@ -173,6 +229,34 @@ function localRoute(path) {
|
||||
class="md:hidden border-t border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900"
|
||||
>
|
||||
<div class="px-4 py-3 space-y-1">
|
||||
<RouterLink
|
||||
:to="localRoute('communities')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.communities') }}
|
||||
</RouterLink>
|
||||
<RouterLink
|
||||
:to="localRoute('partners')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.partners') }}
|
||||
</RouterLink>
|
||||
<RouterLink
|
||||
:to="localRoute('servers')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.servers') }}
|
||||
</RouterLink>
|
||||
<RouterLink
|
||||
:to="localRoute('stats')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.statistics') }}
|
||||
</RouterLink>
|
||||
<a
|
||||
href="https://forum.beammp.com"
|
||||
target="_blank"
|
||||
@@ -191,27 +275,6 @@ function localRoute(path) {
|
||||
>
|
||||
{{ $t('message.nav.docs') }}
|
||||
</a>
|
||||
<RouterLink
|
||||
:to="localRoute('communities')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.communities') }}
|
||||
</RouterLink>
|
||||
<RouterLink
|
||||
:to="localRoute('servers')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.servers') }}
|
||||
</RouterLink>
|
||||
<RouterLink
|
||||
:to="localRoute('stats')"
|
||||
class="block px-4 py-3 text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 rounded-md transition-colors"
|
||||
@click="closeMobileMenu"
|
||||
>
|
||||
{{ $t('message.nav.statistics') }}
|
||||
</RouterLink>
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP"
|
||||
target="_blank"
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Forum",
|
||||
"docs": "Docs",
|
||||
"communities": "Communities",
|
||||
"partners": "Partners",
|
||||
"servers": "Server",
|
||||
"statistics": "Statistiken",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "Bereit, deinen eigenen Server zu hosten?",
|
||||
"description": "Lade die Serverdateien herunter und erschaffe deine eigene BeamMP-Erfahrung",
|
||||
"windows": "Windows-Server",
|
||||
"linux": "Linux-Builds"
|
||||
"linux": "Linux Builds",
|
||||
"partners": {
|
||||
"description": "Starte schnell mit unseren vertrauenswürdigen Hosting-Partnern - problemlose Einrichtung, 24/7 Support und optimierte Leistung.",
|
||||
"view_partners": "Hosting-Partner ansehen"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "Oder selbst hosten"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -163,6 +171,13 @@
|
||||
"join_discord": "Discord beitreten"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Hosting-Partner",
|
||||
"description": "Wähle aus unseren vertrauenswürdigen Hosting-Partnern. Einfache Einrichtung, optimierte Leistung und Support, damit dein BeamMP-Server reibungslos läuft.",
|
||||
"from_price": "Ab {price}",
|
||||
"visit_website": "Website besuchen",
|
||||
"error_loading": "Partner konnten nicht geladen werden"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Server",
|
||||
"description": "Durchsuche und trete BeamMP-Servern weltweit bei. Finde deine Lieblingsspielmodi, Communities und Erlebnisse an einem Ort.",
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Forums",
|
||||
"docs": "Docs",
|
||||
"communities": "Communities",
|
||||
"partners": "Partners",
|
||||
"servers": "Servers",
|
||||
"statistics": "Statistics",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "Ready to Host Your Own Server?",
|
||||
"description": "Download the server files and create your own unique BeamMP experience",
|
||||
"windows": "Windows Server",
|
||||
"linux": "Linux Builds"
|
||||
"linux": "Linux Builds",
|
||||
"partners": {
|
||||
"description": "Get started quickly with our trusted hosting partners - hassle-free setup, 24/7 support, and optimized performance.",
|
||||
"view_partners": "View Hosting Partners"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "Or Host It Yourself"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -169,6 +177,13 @@
|
||||
"join_discord": "Join Our Discord"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Hosting Partners",
|
||||
"description": "Choose from our trusted hosting partners. Simple setup, optimized performance, and support to keep your BeamMP server running smoothly.",
|
||||
"from_price": "From {price}",
|
||||
"visit_website": "Visit Website",
|
||||
"error_loading": "Unable to fetch partners"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Servers",
|
||||
"description": "Browse and join BeamMP servers from around the world. Find your favorite game modes, communities, and experiences all in one place.",
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Foros",
|
||||
"docs": "Docs",
|
||||
"communities": "Comunidades",
|
||||
"partners": "Socios",
|
||||
"servers": "Servidores",
|
||||
"statistics": "Estadísticas",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "¿Listo para alojar tu propio servidor?",
|
||||
"description": "Descarga los archivos del servidor y crea tu experiencia única en BeamMP",
|
||||
"windows": "Servidor Windows",
|
||||
"linux": "Compilaciones Linux"
|
||||
"linux": "Compilaciones Linux",
|
||||
"partners": {
|
||||
"description": "Comienza rápidamente con nuestros socios de hosting de confianza - configuración sin complicaciones, soporte 24/7 y rendimiento optimizado.",
|
||||
"view_partners": "Ver socios de hosting"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "O alójalo tú mismo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -163,6 +171,13 @@
|
||||
"join_discord": "Unirte a Discord"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Socios de alojamiento",
|
||||
"description": "Elige entre nuestros socios de alojamiento de confianza. Configuración sencilla, rendimiento optimizado y soporte para mantener tu servidor BeamMP funcionando sin problemas.",
|
||||
"from_price": "Desde {price}",
|
||||
"visit_website": "Visitar sitio web",
|
||||
"error_loading": "No se pudieron cargar los socios"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Servidores",
|
||||
"description": "Explora y únete a servidores de BeamMP en todo el mundo. Encuentra tus modos de juego, comunidades y experiencias favoritas en un solo lugar.",
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Forums",
|
||||
"docs": "Docs",
|
||||
"communities": "Communautés",
|
||||
"partners": "Partenaires",
|
||||
"servers": "Serveurs",
|
||||
"statistics": "Statistiques",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "Prêt à héberger votre propre serveur ?",
|
||||
"description": "Téléchargez les fichiers serveur et créez votre expérience BeamMP unique",
|
||||
"windows": "Serveur Windows",
|
||||
"linux": "Builds Linux"
|
||||
"linux": "Versions Linux",
|
||||
"partners": {
|
||||
"description": "Démarrez rapidement avec nos partenaires d'hébergement de confiance - configuration sans tracas, support 24/7 et performances optimisées.",
|
||||
"view_partners": "Voir les partenaires d'hébergement"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "Ou hébergez-le vous-même"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -163,6 +171,13 @@
|
||||
"join_discord": "Rejoindre Discord"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Partenaires d’hébergement",
|
||||
"description": "Choisissez parmi nos partenaires d’hébergement de confiance. Configuration simple, performances optimisées et support pour que votre serveur BeamMP fonctionne sans interruption.",
|
||||
"from_price": "À partir de {price}",
|
||||
"visit_website": "Visiter le site",
|
||||
"error_loading": "Impossible de charger les partenaires"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Serveurs",
|
||||
"description": "Parcourez et rejoignez des serveurs BeamMP dans le monde entier. Retrouvez vos modes de jeu, communautés et expériences préférés au même endroit.",
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Forum",
|
||||
"docs": "Docs",
|
||||
"communities": "Community",
|
||||
"partners": "Partner",
|
||||
"servers": "Server",
|
||||
"statistics": "Statistiche",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "Pronto a ospitare il tuo server?",
|
||||
"description": "Scarica i file del server e crea la tua esperienza unica su BeamMP",
|
||||
"windows": "Server Windows",
|
||||
"linux": "Build Linux"
|
||||
"linux": "Build Linux",
|
||||
"partners": {
|
||||
"description": "Inizia rapidamente con i nostri partner di hosting affidabili - configurazione semplice, supporto 24/7 e prestazioni ottimizzate.",
|
||||
"view_partners": "Visualizza partner di hosting"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "O ospitalo tu stesso"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -163,6 +171,13 @@
|
||||
"join_discord": "Unisciti a Discord"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Partner di hosting",
|
||||
"description": "Scegli tra i nostri partner di hosting di fiducia. Configurazione semplice, prestazioni ottimizzate e supporto per mantenere il tuo server BeamMP sempre operativo.",
|
||||
"from_price": "Da {price}",
|
||||
"visit_website": "Visita il sito",
|
||||
"error_loading": "Impossibile caricare i partner"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Server",
|
||||
"description": "Sfoglia e unisciti ai server di BeamMP in tutto il mondo. Trova modalità, community ed esperienze preferite in un unico posto.",
|
||||
|
||||
+16
-1
@@ -10,6 +10,7 @@
|
||||
"forums": "Форум",
|
||||
"docs": "Документация",
|
||||
"communities": "Сообщества",
|
||||
"partners": "Партнёры",
|
||||
"servers": "Серверы",
|
||||
"statistics": "Статистика",
|
||||
"github": "GitHub",
|
||||
@@ -117,7 +118,14 @@
|
||||
"title": "Готовы разместить свой сервер?",
|
||||
"description": "Скачайте серверные файлы и создайте уникальный опыт в BeamMP",
|
||||
"windows": "Windows-сервер",
|
||||
"linux": "Linux-сборки"
|
||||
"linux": "Linux-сборки",
|
||||
"partners": {
|
||||
"description": "Быстро начните работу с нашими надежными хостинг-партнерами - простая настройка, поддержка 24/7 и оптимизированная производительность.",
|
||||
"view_partners": "Посмотреть хостинг-партнеров"
|
||||
},
|
||||
"self_host": {
|
||||
"title": "Или разместите самостоятельно"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
@@ -163,6 +171,13 @@
|
||||
"join_discord": "Вступить в Discord"
|
||||
}
|
||||
},
|
||||
"partners": {
|
||||
"title": "Партнёры по хостингу",
|
||||
"description": "Выберите из наших надёжных хостинг‑партнёров. Простая настройка, оптимизированная производительность и поддержка, чтобы ваш сервер BeamMP работал стабильно.",
|
||||
"from_price": "От {price}",
|
||||
"visit_website": "Перейти на сайт",
|
||||
"error_loading": "Не удалось загрузить партнёров"
|
||||
},
|
||||
"servers": {
|
||||
"title": "Серверы",
|
||||
"description": "Просматривайте и присоединяйтесь к серверам BeamMP по всему миру. Найдите любимые режимы, сообщества и впечатления в одном месте.",
|
||||
|
||||
+1
-4
@@ -22,7 +22,4 @@ window.locale = i18n.global.locale
|
||||
|
||||
import router from './routes'
|
||||
|
||||
createApp(App)
|
||||
.use(i18n)
|
||||
.use(router)
|
||||
.mount('#app')
|
||||
createApp(App).use(i18n).use(router).mount('#app')
|
||||
@@ -55,6 +55,16 @@ const baseRoutes = [
|
||||
requiresAuth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'partners',
|
||||
name: 'Partners',
|
||||
component: () => import('@/views/Partners.vue'),
|
||||
meta: {
|
||||
title: 'Partners - BeamMP',
|
||||
description: 'Explore trusted hosting partners for BeamMP servers',
|
||||
requiresAuth: false,
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
const routes = [
|
||||
|
||||
@@ -5,6 +5,15 @@
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme {
|
||||
--color-beammp-orange: #F36D24;
|
||||
--color-beammp-white: #FFFFFF;
|
||||
--color-beammp-black: #000000;
|
||||
--color-beammp-gray: #333333;
|
||||
--color-beammp-green: #1D9749;
|
||||
--color-beammp-blue: #4470B6;
|
||||
}
|
||||
|
||||
@theme inline {
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
|
||||
+3
-1
@@ -54,7 +54,9 @@
|
||||
|
||||
<!-- How to Get Involved -->
|
||||
<div class="rounded-lg border border-neutral-200 dark:border-neutral-800 p-6 mb-10">
|
||||
<h3 class="text-xl font-semibold text-neutral-900 dark:text-white mb-3">{{ $t('message.about.get_involved.title') }}</h3>
|
||||
<h3 class="text-xl font-semibold text-neutral-900 dark:text-white mb-3">
|
||||
{{ $t('message.about.get_involved.title') }}
|
||||
</h3>
|
||||
<p class="text-neutral-700 dark:text-neutral-300 mb-4">
|
||||
{{ $t('message.about.get_involved.description') }}
|
||||
<a
|
||||
|
||||
+86
-43
@@ -93,12 +93,17 @@ const devFeatures = [
|
||||
icon: Code,
|
||||
title: t('message.home.devFeatures.lua.title'),
|
||||
description: t('message.home.devFeatures.lua.description'),
|
||||
link: 'https://docs.beammp.com/' + (locale == 'en' ? '' : locale + '/') + 'scripting/mod-reference/',
|
||||
link:
|
||||
'https://docs.beammp.com/' +
|
||||
// eslint-disable-next-line no-undef
|
||||
(locale == 'en' ? '' : locale + '/') +
|
||||
'scripting/mod-reference/',
|
||||
},
|
||||
{
|
||||
icon: BookOpen,
|
||||
title: t('message.home.devFeatures.docs.title'),
|
||||
description: t('message.home.devFeatures.docs.description'),
|
||||
// eslint-disable-next-line no-undef
|
||||
link: 'https://docs.beammp.com' + (locale == 'en' ? '' : locale + '/'),
|
||||
},
|
||||
{
|
||||
@@ -140,8 +145,6 @@ const faqs = [
|
||||
answer: t('message.home.faq["5"].answer'),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -151,20 +154,23 @@ const faqs = [
|
||||
<!-- Background Image with Overlay -->
|
||||
<div class="absolute inset-0 overflow-hidden">
|
||||
<img
|
||||
src="/beamng-mp-landing.png"
|
||||
src="/landing-1.jpg"
|
||||
alt="BeamMP Gameplay"
|
||||
class="w-full h-full object-cover"
|
||||
/>
|
||||
<div
|
||||
class="absolute inset-0 bg-linear-to-b from-black/70 via-black/60 to-neutral-950 dark:to-neutral-950"
|
||||
class="absolute inset-0 bg-linear-to-b from-black/30 dark:from-black/70 via-black/40 dark:via-black/60 to-neutral-0 dark:to-neutral-950"
|
||||
/>
|
||||
<div class="absolute inset-0 bg-linear-to-r from-beammp-blue/20 to-beammp-orange/20" />
|
||||
<!--<div class="absolute inset-0 bg-linear-to-r from-beammp-blue/20 to-beammp-orange/20" />-->
|
||||
</div>
|
||||
|
||||
<!-- Hero Content -->
|
||||
<div class="relative max-w-6xl mx-auto px-4 py-32 md:py-40">
|
||||
<div class="max-w-4xl mx-auto text-center space-y-8 animate-fade-in">
|
||||
<h1 class="text-5xl md:text-7xl font-bold leading-tight text-white" v-html="$t('message.home.hero.title', { game: 'BeamNG.drive' })"></h1>
|
||||
<h1
|
||||
class="text-5xl md:text-7xl font-bold leading-tight text-white"
|
||||
v-html="$t('message.home.hero.title', { game: 'BeamNG.drive' })"
|
||||
/>
|
||||
<p class="text-xl md:text-2xl text-neutral-200">
|
||||
{{ $t('message.home.hero.subtitle') }}
|
||||
</p>
|
||||
@@ -174,7 +180,7 @@ const faqs = [
|
||||
<a
|
||||
href="/installer/BeamMP_Installer.zip"
|
||||
download
|
||||
class="group flex items-center gap-3 bg-linear-to-r from-beammp-orange to-red-600 hover:from-red-600 hover:to-beammp-orange px-8 py-4 rounded-lg font-semibold text-lg transition-all transform hover:scale-105 shadow-lg hover:shadow-beammp-orange/50"
|
||||
class="group flex items-center gap-3 bg-linear-to-r from-beammp-orange to-red-600 hover:from-red-600 hover:to-beammp-orange px-8 py-4 rounded-lg font-semibold text-lg transition-all transform hover:scale-105 shadow-lg hover:shadow-beammp-orange/50 text-white"
|
||||
>
|
||||
<Download class="w-6 h-6" />
|
||||
{{ $t('message.home.hero.download_now') }}
|
||||
@@ -211,7 +217,9 @@ const faqs = [
|
||||
<!-- Features Section -->
|
||||
<section class="py-16 px-4">
|
||||
<div class="max-w-6xl mx-auto">
|
||||
<h2 class="text-4xl font-bold text-center mb-12">{{ $t('message.home.why_choose_beammp') }}</h2>
|
||||
<h2 class="text-4xl font-bold text-center mb-12">
|
||||
{{ $t('message.home.why_choose_beammp') }}
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||
<div
|
||||
v-for="(feature, index) in features"
|
||||
@@ -373,40 +381,75 @@ const faqs = [
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Download Server Section -->
|
||||
<div
|
||||
class="mt-12 bg-linear-to-br from-neutral-800 to-neutral-900 dark:from-neutral-950 dark:to-neutral-900 rounded-xl p-8 md:p-12 text-white"
|
||||
>
|
||||
<div class="max-w-3xl mx-auto text-center space-y-6">
|
||||
<h3 class="text-3xl font-bold">{{ $t('message.home.devFeatures.host.title') }}</h3>
|
||||
<p class="text-neutral-300">
|
||||
{{ $t('message.home.devFeatures.host.description') }}
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center pt-4">
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP-Server/releases/latest/download/BeamMP-Server.exe"
|
||||
class="flex items-center justify-center gap-3 bg-beammp-orange hover:bg-beammp-orange/90 px-6 py-3 rounded-lg font-semibold transition-all"
|
||||
>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path
|
||||
d="M0 3.449L9.75 2.1v9.451H0m10.949-9.602L24 0v11.4H10.949M0 12.6h9.75v9.451L0 20.699M10.949 12.6H24V24l-12.9-1.801"
|
||||
/>
|
||||
</svg>
|
||||
{{ $t('message.home.devFeatures.host.windows') }}
|
||||
<Download class="w-5 h-5" />
|
||||
</a>
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP-Server/releases/latest"
|
||||
class="flex items-center justify-center gap-3 bg-white/10 hover:bg-white/20 border border-white/30 px-6 py-3 rounded-lg font-semibold transition-all"
|
||||
>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path
|
||||
d="M12.504 0c-.155 0-.315.008-.48.021-4.226.333-3.105 4.807-3.17 6.298-.076 1.092-.3 1.953-1.05 3.02-.885 1.051-2.127 2.75-2.716 4.521-.278.832-.41 1.684-.287 2.489a.424.424 0 00-.11.135c-.26.268-.45.6-.663.839-.199.199-.485.267-.797.4-.313.136-.658.269-.864.68-.09.189-.136.394-.132.602 0 .199.027.4.055.536.058.399.116.728.04.97-.249.68-.28 1.145-.106 1.484.174.334.535.47.94.601.81.2 1.91.135 2.774.6.926.466 1.866.67 2.616.47.526-.116.97-.464 1.208-.946.587-.003 1.23-.269 2.26-.334.699-.058 1.574.267 2.577.2.025.134.063.198.114.333l.003.003c.391.778 1.113 1.132 1.884 1.071.771-.06 1.592-.536 2.257-1.306.631-.765 1.683-1.084 2.378-1.503.348-.199.629-.469.649-.853.023-.4-.2-.811-.714-1.376v-.097l-.003-.003c-.17-.2-.25-.535-.338-.926-.085-.401-.182-.786-.492-1.046h-.003c-.059-.054-.123-.067-.188-.135a.357.357 0 00-.19-.064c.431-1.278.264-2.55-.173-3.694-.533-1.41-1.465-2.638-2.175-3.483-.796-1.005-1.576-1.957-1.56-3.368.026-2.152.236-6.133-3.544-6.139zm.529 3.405h.013c.213 0 .396.062.584.198.19.135.33.332.438.533.105.259.158.459.166.724 0-.02.006-.04.006-.06v.105a.086.086 0 01-.004-.021l-.004-.024a1.807 1.807 0 01-.15.706.953.953 0 01-.213.335.71.71 0 00-.088-.042c-.104-.045-.198-.064-.284-.133a1.312 1.312 0 00-.22-.066c.05-.06.146-.133.183-.198.053-.128.082-.264.088-.402v-.02a1.21 1.21 0 00-.061-.4c-.045-.134-.101-.2-.183-.333-.084-.066-.167-.132-.267-.132h-.016c-.093 0-.176.03-.262.132a.8.8 0 00-.205.334 1.18 1.18 0 00-.09.4v.019c.002.089.008.179.02.267-.193-.067-.438-.135-.607-.202a1.635 1.635 0 01-.018-.2v-.02a1.772 1.772 0 01.15-.768c.082-.22.232-.406.43-.533a.985.985 0 01.594-.2zm-2.962.059h.036c.142 0 .27.048.399.135.146.129.264.288.344.465.09.199.14.4.153.667v.004c.007.134.006.2-.002.266v.08c-.03.007-.056.018-.083.024-.152.055-.274.135-.393.2.012-.09.013-.18.003-.267v-.015c-.012-.133-.04-.2-.082-.333a.613.613 0 00-.166-.267.248.248 0 00-.183-.064h-.021c-.071.006-.13.04-.186.132a.552.552 0 00-.12.27.944.944 0 00-.023.33v.015c.012.135.037.2.08.334.046.134.098.2.166.268.01.009.02.018.034.024-.07.057-.117.07-.176.136a.304.304 0 01-.131.068 2.62 2.62 0 01-.275-.402 1.772 1.772 0 01-.155-.667 1.759 1.759 0 01.08-.668 1.43 1.43 0 01.283-.535c.128-.133.26-.2.418-.2zm1.37 1.706c.332 0 .733.065 1.216.399.293.2.523.269 1.052.468h.003c.255.136.405.266.478.399v-.131a.571.571 0 01.016.47c-.123.31-.516.643-1.063.842v.002c-.268.135-.501.333-.775.465-.276.135-.588.292-1.012.267a1.139 1.139 0 01-.448-.067 3.566 3.566 0 01-.322-.198c-.195-.135-.363-.332-.612-.465v-.005h-.005c-.4-.246-.616-.512-.686-.71-.07-.268-.005-.47.193-.6.224-.135.38-.271.483-.336.104-.074.143-.102.176-.131h.002v-.003c.169-.202.436-.47.839-.601.139-.036.294-.065.466-.065zm2.8 2.142c.358 1.417 1.196 3.475 1.735 4.473.286.534.855 1.659 1.102 3.024.156-.005.33.018.513.064.646-1.671-.546-3.467-1.089-3.966-.22-.2-.232-.335-.123-.335.59.534 1.365 1.572 1.646 2.757.13.535.16 1.104.021 1.67.067.028.135.06.205.067 1.032.534 1.413.938 1.23 1.537v-.043c-.06-.003-.12 0-.18 0h-.016c.151-.467-.182-.825-1.065-1.224-.915-.4-1.646-.336-1.77.465-.008.043-.013.066-.018.135-.068.023-.139.053-.209.064-.43.268-.662.669-.793 1.187-.13.533-.17 1.156-.205 1.869v.003c-.02.334-.17.838-.319 1.35-1.5 1.072-3.58 1.538-5.348.334a2.645 2.645 0 00-.402-.533 1.45 1.45 0 00-.275-.333c.182 0 .338-.03.465-.067a.615.615 0 00.314-.334c.108-.267 0-.697-.345-1.163-.345-.467-.931-.995-1.788-1.521-.63-.4-.986-.87-1.15-1.396-.165-.534-.143-1.085-.015-1.645.245-1.07.873-2.11 1.274-2.763.107-.065.037.135-.408.974-.396.751-1.14 2.497-.122 3.854a8.123 8.123 0 01.647-2.876c.564-1.278 1.743-3.504 1.836-5.268.048.036.217.135.289.202.218.133.38.333.59.465.21.201.477.335.876.335.039.003.075.006.11.006.412 0 .73-.134.997-.268.29-.134.52-.334.74-.4h.005c.467-.135.835-.402 1.044-.7zm2.185 8.958c.037.6.343 1.245.882 1.377.588.134 1.434-.333 1.791-.765l.211-.01c.315-.007.577.01.847.268l.003.003c.208.199.305.53.391.876.085.4.154.78.409 1.066.486.527.645.906.636 1.14l.003-.007v.018l-.003-.012c-.015.262-.185.396-.498.595-.63.401-1.746.712-2.457 1.57-.618.737-1.37 1.14-2.036 1.191-.664.053-1.237-.2-1.574-.898l-.005-.003c-.21-.4-.12-1.025.056-1.69.176-.668.428-1.344.463-1.897.037-.714.076-1.335.195-1.814.12-.465.308-.797.641-.984l.045-.022zm-10.814.049h.01c.053 0 .105.005.157.014.376.055.706.333 1.023.752l.91 1.664.003.003c.243.533.754 1.064 1.189 1.637.434.598.77 1.131.729 1.57v.006c-.057.744-.48 1.148-1.125 1.294-.645.135-1.52.002-2.395-.464-.968-.536-2.118-.469-2.857-.602-.369-.066-.61-.2-.723-.4-.11-.2-.113-.602.123-1.23v-.004l.002-.003c.117-.334.03-.752-.027-1.118-.055-.401-.083-.71.043-.94.16-.334.396-.4.69-.533.294-.135.64-.202.915-.47h.002v-.002c.256-.268.445-.601.668-.838.19-.201.38-.336.663-.336zm7.159-9.074c-.435.201-.945.535-1.488.535-.542 0-.97-.267-1.28-.466-.154-.134-.28-.268-.373-.335-.164-.134-.144-.333-.074-.333.109.016.129.134.199.2.096.066.215.2.36.333.292.2.68.467 1.167.467.485 0 1.053-.267 1.398-.466.195-.135.445-.334.648-.467.156-.136.149-.267.279-.267.128.016.034.134Line truncated
|
||||
/>
|
||||
</svg>
|
||||
{{ $t('message.home.devFeatures.host.linux') }}
|
||||
<Download class="w-5 h-5" />
|
||||
</a>
|
||||
<!-- Hosting Section -->
|
||||
<div class="mt-12 space-y-8">
|
||||
<!-- Hosting Partners -->
|
||||
<div
|
||||
class="bg-linear-to-br from-beammp-orange to-beammp-orange/80 dark:from-beammp-orange/90 dark:to-beammp-orange/70 rounded-xl p-8 md:p-12 shadow-lg"
|
||||
>
|
||||
<div class="max-w-3xl mx-auto text-center space-y-6">
|
||||
<h3 class="text-3xl font-bold text-white">
|
||||
{{ $t('message.home.devFeatures.host.title') }}
|
||||
</h3>
|
||||
<p class="text-white/95 dark:text-white/90">
|
||||
{{ $t('message.home.devFeatures.host.partners.description') }}
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center pt-4">
|
||||
<RouterLink
|
||||
:to="`/${$i18n.locale}/partners`"
|
||||
class="flex items-center justify-center gap-3 bg-white text-beammp-orange hover:bg-neutral-50 dark:bg-white dark:hover:bg-neutral-100 px-8 py-4 rounded-lg font-semibold transition-all shadow-lg"
|
||||
>
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M9 5l7 7-7 7"
|
||||
/>
|
||||
</svg>
|
||||
{{ $t('message.home.devFeatures.host.partners.view_partners') }}
|
||||
</RouterLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Self-Hosting Option -->
|
||||
<div
|
||||
class="bg-linear-to-br from-neutral-100 to-neutral-200 dark:from-neutral-900 dark:to-neutral-950 rounded-xl p-8 md:p-12 border border-neutral-300 dark:border-neutral-700 shadow-md"
|
||||
>
|
||||
<div class="max-w-3xl mx-auto text-center space-y-6">
|
||||
<h3 class="text-2xl font-bold text-neutral-900 dark:text-white">
|
||||
{{ $t('message.home.devFeatures.host.self_host.title') }}
|
||||
</h3>
|
||||
<p class="text-neutral-700 dark:text-neutral-300">
|
||||
{{ $t('message.home.devFeatures.host.description') }}
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center pt-4">
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP-Server/releases/latest/download/BeamMP-Server.exe"
|
||||
class="flex items-center justify-center gap-3 bg-neutral-800 hover:bg-neutral-700 dark:bg-neutral-700 dark:hover:bg-neutral-600 text-white border border-neutral-600 dark:border-neutral-600 px-6 py-3 rounded-lg font-semibold transition-all"
|
||||
>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path
|
||||
d="M0 3.449L9.75 2.1v9.451H0m10.949-9.602L24 0v11.4H10.949M0 12.6h9.75v9.451L0 20.699M10.949 12.6H24V24l-12.9-1.801"
|
||||
/>
|
||||
</svg>
|
||||
{{ $t('message.home.devFeatures.host.windows') }}
|
||||
<Download class="w-5 h-5" />
|
||||
</a>
|
||||
<a
|
||||
href="https://github.com/BeamMP/BeamMP-Server/releases/latest"
|
||||
class="flex items-center justify-center gap-3 bg-neutral-800 hover:bg-neutral-700 dark:bg-neutral-700 dark:hover:bg-neutral-600 text-white border border-neutral-600 dark:border-neutral-600 px-6 py-3 rounded-lg font-semibold transition-all"
|
||||
>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path
|
||||
d="M12.504 0c-.155 0-.315.008-.48.021-4.226.333-3.105 4.807-3.17 6.298-.076 1.092-.3 1.953-1.05 3.02-.885 1.051-2.127 2.75-2.716 4.521-.278.832-.41 1.684-.287 2.489a.424.424 0 00-.11.135c-.26.268-.45.6-.663.839-.199.199-.485.267-.797.4-.313.136-.658.269-.864.68-.09.189-.136.394-.132.602 0 .199.027.4.055.536.058.399.116.728.04.97-.249.68-.28 1.145-.106 1.484.174.334.535.47.94.601.81.2 1.91.135 2.774.6.926.466 1.866.67 2.616.47.526-.116.97-.464 1.208-.946.587-.003 1.23-.269 2.26-.334.699-.058 1.574.267 2.577.2.025.134.063.198.114.333l.003.003c.391.778 1.113 1.132 1.884 1.071.771-.06 1.592-.536 2.257-1.306.631-.765 1.683-1.084 2.378-1.503.348-.199.629-.469.649-.853.023-.4-.2-.811-.714-1.376v-.097l-.003-.003c-.17-.2-.25-.535-.338-.926-.085-.401-.182-.786-.492-1.046h-.003c-.059-.054-.123-.067-.188-.135a.357.357 0 00-.19-.064c.431-1.278.264-2.55-.173-3.694-.533-1.41-1.465-2.638-2.175-3.483-.796-1.005-1.576-1.957-1.56-3.368.026-2.152.236-6.133-3.544-6.139zm.529 3.405h.013c.213 0 .396.062.584.198.19.135.33.332.438.533.105.259.158.459.166.724 0-.02.006-.04.006-.06v.105a.086.086 0 01-.004-.021l-.004-.024a1.807 1.807 0 01-.15.706.953.953 0 01-.213.335.71.71 0 00-.088-.042c-.104-.045-.198-.064-.284-.133a1.312 1.312 0 00-.22-.066c.05-.06.146-.133.183-.198.053-.128.082-.264.088-.402v-.02a1.21 1.21 0 00-.061-.4c-.045-.134-.101-.2-.183-.333-.084-.066-.167-.132-.267-.132h-.016c-.093 0-.176.03-.262.132a.8.8 0 00-.205.334 1.18 1.18 0 00-.09.4v.019c.002.089.008.179.02.267-.193-.067-.438-.135-.607-.202a1.635 1.635 0 01-.018-.2v-.02a1.772 1.772 0 01.15-.768c.082-.22.232-.406.43-.533a.985.985 0 01.594-.2zm-2.962.059h.036c.142 0 .27.048.399.135.146.129.264.288.344.465.09.199.14.4.153.667v.004c.007.134.006.2-.002.266v.08c-.03.007-.056.018-.083.024-.152.055-.274.135-.393.2.012-.09.013-.18.003-.267v-.015c-.012-.133-.04-.2-.082-.333a.613.613 0 00-.166-.267.248.248 0 00-.183-.064h-.021c-.071.006-.13.04-.186.132a.552.552 0 00-.12.27.944.944 0 00-.023.33v.015c.012.135.037.2.08.334.046.134.098.2.166.268.01.009.02.018.034.024-.07.057-.117.07-.176.136a.304.304 0 01-.131.068 2.62 2.62 0 01-.275-.402 1.772 1.772 0 01-.155-.667 1.759 1.759 0 01.08-.668 1.43 1.43 0 01.283-.535c.128-.133.26-.2.418-.2zm1.37 1.706c.332 0 .733.065 1.216.399.293.2.523.269 1.052.468h.003c.255.136.405.266.478.399v-.131a.571.571 0 01.016.47c-.123.31-.516.643-1.063.842v.002c-.268.135-.501.333-.775.465-.276.135-.588.292-1.012.267a1.139 1.139 0 01-.448-.067 3.566 3.566 0 01-.322-.198c-.195-.135-.363-.332-.612-.465v-.005h-.005c-.4-.246-.616-.512-.686-.71-.07-.268-.005-.47.193-.6.224-.135.38-.271.483-.336.104-.074.143-.102.176-.131h.002v-.003c.169-.202.436-.47.839-.601.139-.036.294-.065.466-.065zm2.8 2.142c.358 1.417 1.196 3.475 1.735 4.473.286.534.855 1.659 1.102 3.024.156-.005.33.018.513.064.646-1.671-.546-3.467-1.089-3.966-.22-.2-.232-.335-.123-.335.59.534 1.365 1.572 1.646 2.757.13.535.16 1.104.021 1.67.067.028.135.06.205.067 1.032.534 1.413.938 1.23 1.537v-.043c-.06-.003-.12 0-.18 0h-.016c.151-.467-.182-.825-1.065-1.224-.915-.4-1.646-.336-1.77.465-.008.043-.013.066-.018.135-.068.023-.139.053-.209.064-.43.268-.662.669-.793 1.187-.13.533-.17 1.156-.205 1.869v.003c-.02.334-.17.838-.319 1.35-1.5 1.072-3.58 1.538-5.348.334a2.645 2.645 0 00-.402-.533 1.45 1.45 0 00-.275-.333c.182 0 .338-.03.465-.067a.615.615 0 00.314-.334c.108-.267 0-.697-.345-1.163-.345-.467-.931-.995-1.788-1.521-.63-.4-.986-.87-1.15-1.396-.165-.534-.143-1.085-.015-1.645.245-1.07.873-2.11 1.274-2.763.107-.065.037.135-.408.974-.396.751-1.14 2.497-.122 3.854a8.123 8.123 0 01.647-2.876c.564-1.278 1.743-3.504 1.836-5.268.048.036.217.135.289.202.218.133.38.333.59.465.21.201.477.335.876.335.039.003.075.006.11.006.412 0 .73-.134.997-.268.29-.134.52-.334.74-.4h.005c.467-.135.835-.402 1.044-.7zm2.185 8.958c.037.6.343 1.245.882 1.377.588.134 1.434-.333 1.791-.765l.211-.01c.315-.007.577.01.847.268l.003.003c.208.199.305.53.391.876.085.4.154.78.409 1.066.486.527.645.906.636 1.14l.003-.007v.018l-.003-.012c-.015.262-.185.396-.498.595-.63.401-1.746.712-2.457 1.57-.618.737-1.37 1.14-2.036 1.191-.664.053-1.237-.2-1.574-.898l-.005-.003c-.21-.4-.12-1.025.056-1.69.176-.668.428-1.344.463-1.897.037-.714.076-1.335.195-1.814.12-.465.308-.797.641-.984l.045-.022zm-10.814.049h.01c.053 0 .105.005.157.014.376.055.706.333 1.023.752l.91 1.664.003.003c.243.533.754 1.064 1.189 1.637.434.598.77 1.131.729 1.57v.006c-.057.744-.48 1.148-1.125 1.294-.645.135-1.52.002-2.395-.464-.968-.536-2.118-.469-2.857-.602-.369-.066-.61-.2-.723-.4-.11-.2-.113-.602.123-1.23v-.004l.002-.003c.117-.334.03-.752-.027-1.118-.055-.401-.083-.71.043-.94.16-.334.396-.4.69-.533.294-.135.64-.202.915-.47h.002v-.002c.256-.268.445-.601.668-.838.19-.201.38-.336.663-.336zm7.159-9.074c-.435.201-.945.535-1.488.535-.542 0-.97-.267-1.28-.466-.154-.134-.28-.268-.373-.335-.164-.134-.144-.333-.074-.333.109.016.129.134.199.2.096.066.215.2.36.333.292.2.68.467 1.167.467.485 0 1.053-.267 1.398-.466.195-.135.445-.334.648-.467.156-.136.149-.267.279-.267.128.016.034.1Line truncated
|
||||
/>
|
||||
</svg>
|
||||
{{ $t('message.home.devFeatures.host.linux') }}
|
||||
<Download class="w-5 h-5" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
|
||||
const partners = ref([])
|
||||
const loading = ref(true)
|
||||
const error = ref(null)
|
||||
|
||||
async function loadPartners() {
|
||||
try {
|
||||
const res = await fetch('/partners.json', { cache: 'no-store' })
|
||||
if (!res.ok) throw new Error(`Failed to load partners (${res.status})`)
|
||||
const data = await res.json()
|
||||
partners.value = Array.isArray(data) ? data : []
|
||||
} catch (e) {
|
||||
error.value = e.message || 'Unable to fetch partners'
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(loadPartners)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="py-16 px-4">
|
||||
<div class="max-w-6xl mx-auto">
|
||||
<div class="text-center mb-12">
|
||||
<h1 class="text-4xl font-bold">{{ $t('message.partners.title') }}</h1>
|
||||
<p class="text-neutral-600 dark:text-neutral-400 max-w-2xl mx-auto">
|
||||
{{ $t('message.partners.description') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Loading State -->
|
||||
<div v-if="loading" class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<div
|
||||
v-for="n in 6"
|
||||
:key="n"
|
||||
class="rounded-xl border border-neutral-200 dark:border-neutral-800 p-6 bg-white/70 dark:bg-neutral-900/50 animate-pulse"
|
||||
>
|
||||
<div class="h-16 bg-neutral-200 dark:bg-neutral-800 rounded mb-4" />
|
||||
<div class="h-5 bg-neutral-200 dark:bg-neutral-800 rounded w-2/3 mb-2" />
|
||||
<div class="h-4 bg-neutral-200 dark:bg-neutral-800 rounded w-1/3" />
|
||||
<div class="h-9 bg-neutral-200 dark:bg-neutral-800 rounded w-full mt-6" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Error State -->
|
||||
<div v-else-if="error" class="text-center">
|
||||
<p class="text-red-600 dark:text-red-400">{{ $t('message.partners.error_loading') }}</p>
|
||||
</div>
|
||||
|
||||
<!-- Partners Grid -->
|
||||
<div v-else class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<div
|
||||
v-for="(p, idx) in partners"
|
||||
:key="idx"
|
||||
class="group rounded-xl border border-neutral-200 dark:border-neutral-800 bg-white/70 dark:bg-neutral-900/50 p-6 hover:border-beammp-blue dark:hover:border-beammp-orange hover:shadow-xl transition-all"
|
||||
>
|
||||
<div class="flex items-center justify-center h-16 mb-4">
|
||||
<img :src="p.logo" :alt="p.name" class="max-h-16 object-contain" />
|
||||
</div>
|
||||
<div class="space-y-1">
|
||||
<h3 class="text-xl font-semibold">{{ p.name }}</h3>
|
||||
<p class="text-sm text-neutral-600 dark:text-neutral-400">
|
||||
{{ $t('message.partners.from_price', { price: p.from }) }}
|
||||
</p>
|
||||
</div>
|
||||
<a
|
||||
:href="p.website"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="mt-6 inline-flex items-center justify-center gap-2 w-full bg-beammp-blue hover:bg-beammp-blue/90 text-white px-4 py-2 rounded-lg font-semibold transition-colors dark:bg-beammp-orange dark:hover:bg-beammp-orange/90"
|
||||
>
|
||||
{{ $t('message.partners.visit_website') }}
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M9 5l7 7-7 7"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
Reference in new issue
Block a user