@ -35,7 +35,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="activeId === item.id" class="px-2 md:pt-8">
|
<div v-if="activeId === item.id" class="px-2 pt-4 md:pt-8">
|
||||||
<div
|
<div
|
||||||
class="animate-in fade-in zoom-in-95 border-t-2 border-white pt-[10px] text-[15px] leading-relaxed duration-200 md:pt-[20px]"
|
class="animate-in fade-in zoom-in-95 border-t-2 border-white pt-[10px] text-[15px] leading-relaxed duration-200 md:pt-[20px]"
|
||||||
>
|
>
|
||||||
@ -71,7 +71,11 @@
|
|||||||
height: hz.h + 'px',
|
height: hz.h + 'px',
|
||||||
}"
|
}"
|
||||||
@click="handleHotzone(hz)"
|
@click="handleHotzone(hz)"
|
||||||
></div>
|
>
|
||||||
|
<span class="text-xs font-bold text-black" v-if="hz.type === 'text'">{{
|
||||||
|
hz.payload
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- PC Image Stack -->
|
<!-- PC Image Stack -->
|
||||||
@ -104,7 +108,14 @@
|
|||||||
|
|
||||||
<!-- 底部收起按钮 -->
|
<!-- 底部收起按钮 -->
|
||||||
<div class="absolute right-4 bottom-4 z-10">
|
<div class="absolute right-4 bottom-4 z-10">
|
||||||
<div @click="toggle(item.id)" class="h-[30px] w-[200px]"></div>
|
<div @click="toggle(item.id)" class="h-[30px] w-[200px]">
|
||||||
|
<div
|
||||||
|
class="flex items-center justify-end gap-[10px] rounded-full bg-black/40 px-3 py-1 text-xl backdrop-blur-sm transition-all hover:bg-black/60"
|
||||||
|
>
|
||||||
|
<span class="tracking-tight">点击收起</span>
|
||||||
|
<ArrowIcon class="size-[12px] rotate-180 md:size-[22px]" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -150,7 +161,7 @@ interface Hotzone {
|
|||||||
y: number
|
y: number
|
||||||
w: number
|
w: number
|
||||||
h: number
|
h: number
|
||||||
type: 'copy' | 'link'
|
type: 'copy' | 'link' | 'text'
|
||||||
payload: string
|
payload: string
|
||||||
label?: string
|
label?: string
|
||||||
}
|
}
|
||||||
@ -170,7 +181,16 @@ const downloadMethods = computed(() => {
|
|||||||
highlight: '',
|
highlight: '',
|
||||||
mobileImages: [m1_1, m1_2, m1_3],
|
mobileImages: [m1_1, m1_2, m1_3],
|
||||||
pcImages: [pc1_1, pc1_2, pc1_3],
|
pcImages: [pc1_1, pc1_2, pc1_3],
|
||||||
mobileHotzones: [] as Hotzone[],
|
mobileHotzones: [
|
||||||
|
{
|
||||||
|
x: 62,
|
||||||
|
y: 130,
|
||||||
|
w: 88,
|
||||||
|
h: 20,
|
||||||
|
type: 'link',
|
||||||
|
payload: 'https://account.apple.com/account',
|
||||||
|
},
|
||||||
|
] as Hotzone[],
|
||||||
pcHotzones: [
|
pcHotzones: [
|
||||||
{
|
{
|
||||||
x: 410,
|
x: 410,
|
||||||
@ -190,7 +210,16 @@ const downloadMethods = computed(() => {
|
|||||||
highlight: '',
|
highlight: '',
|
||||||
mobileImages: [m2_1, m2_2, m2_3],
|
mobileImages: [m2_1, m2_2, m2_3],
|
||||||
pcImages: [pc2_1, pc2_2, pc2_3],
|
pcImages: [pc2_1, pc2_2, pc2_3],
|
||||||
mobileHotzones: [] as Hotzone[],
|
mobileHotzones: [
|
||||||
|
{
|
||||||
|
x: 62,
|
||||||
|
y: 130,
|
||||||
|
w: 88,
|
||||||
|
h: 20,
|
||||||
|
type: 'link',
|
||||||
|
payload: 'https://account.apple.com',
|
||||||
|
},
|
||||||
|
] as Hotzone[],
|
||||||
pcHotzones: [
|
pcHotzones: [
|
||||||
{
|
{
|
||||||
x: 410,
|
x: 410,
|
||||||
@ -210,7 +239,42 @@ const downloadMethods = computed(() => {
|
|||||||
highlight: '谨慎选择',
|
highlight: '谨慎选择',
|
||||||
mobileImages: [m3_1, m3_2, m3_3],
|
mobileImages: [m3_1, m3_2, m3_3],
|
||||||
pcImages: [pc3_1, pc3_2, pc3_3],
|
pcImages: [pc3_1, pc3_2, pc3_3],
|
||||||
mobileHotzones: [] as Hotzone[],
|
mobileHotzones: [
|
||||||
|
{
|
||||||
|
x: 62,
|
||||||
|
y: 1950,
|
||||||
|
w: 170,
|
||||||
|
h: 20,
|
||||||
|
type: 'text', // 展示账号文字
|
||||||
|
payload: account.account,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
x: 62,
|
||||||
|
y: 1985,
|
||||||
|
w: 170,
|
||||||
|
h: 20,
|
||||||
|
type: 'text', // 展示账号文字
|
||||||
|
payload: account.password,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
x: 53,
|
||||||
|
y: 1941,
|
||||||
|
w: 200,
|
||||||
|
h: 32,
|
||||||
|
type: 'copy', // 展示账号文字
|
||||||
|
payload: account.account,
|
||||||
|
label: '账号', // account
|
||||||
|
},
|
||||||
|
{
|
||||||
|
x: 53,
|
||||||
|
y: 1976,
|
||||||
|
w: 200,
|
||||||
|
h: 32,
|
||||||
|
type: 'copy', // 展示账号文字
|
||||||
|
payload: account.password,
|
||||||
|
label: '密码', // 复制提示
|
||||||
|
},
|
||||||
|
] as Hotzone[],
|
||||||
pcHotzones: [
|
pcHotzones: [
|
||||||
{
|
{
|
||||||
x: 103,
|
x: 103,
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 242 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 382 KiB |
BIN
src/pages/Home/bg-mobile.webp
Normal file
|
After Width: | Height: | Size: 81 KiB |
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mx-auto grid grid-cols-2 gap-4 md:flex md:flex-wrap">
|
<div class="mx-auto grid grid-cols-2 gap-[10px] md:flex md:flex-wrap">
|
||||||
<template v-for="(item, index) in downloadLinks" :key="index">
|
<template v-for="(item, index) in downloadLinks" :key="index">
|
||||||
<router-link
|
<router-link
|
||||||
v-if="item.isInternal"
|
v-if="item.isInternal"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative min-h-screen overflow-hidden bg-[#24963e] bg-[url('@/pages/Home/bg-mobile.jpg')] bg-cover bg-center bg-no-repeat pb-[calc(1rem+env(safe-area-inset-bottom))] font-sans text-white md:flex md:flex-col md:bg-[url('@/pages/Home/bg-desktop.webp')] md:pb-0"
|
class="relative min-h-screen overflow-hidden bg-black bg-[url('@/pages/Home/bg-mobile.webp')] bg-cover bg-center bg-no-repeat pb-[calc(1rem+env(safe-area-inset-bottom))] font-sans text-white md:flex md:flex-col md:bg-[url('@/pages/Home/bg-desktop.webp')] md:pb-0"
|
||||||
>
|
>
|
||||||
<!-- Full Width Header -->
|
<!-- Full Width Header -->
|
||||||
<div class="h-[88px] md:h-[125px]">
|
<div class="h-[88px] md:h-[125px]">
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<div class="ripple ripple-outer-3"></div>
|
<div class="ripple ripple-outer-3"></div>
|
||||||
<div class="ripple ripple-outer-2"></div>
|
<div class="ripple ripple-outer-2"></div>
|
||||||
<div class="ripple ripple-outer-1"></div>
|
<div class="ripple ripple-outer-1"></div>
|
||||||
<div class="ripple ripple-core"></div>
|
<div class="ripple ripple-core size-[80%]!"></div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Center Image (Foreground/Top Layer) -->
|
<!-- Center Image (Foreground/Top Layer) -->
|
||||||
<div
|
<div
|
||||||
@ -86,14 +86,14 @@
|
|||||||
|
|
||||||
<!-- Download Buttons Grid -->
|
<!-- Download Buttons Grid -->
|
||||||
<div
|
<div
|
||||||
class="mg:mb-[65px] mb-9 flex grid-cols-2 flex-wrap gap-[10px] px-[24px] md:mt-[124px] md:ml-[17px] md:px-0"
|
class="mb-6 flex grid-cols-2 flex-wrap gap-[10px] px-[24px] md:mt-[124px] md:mb-[65px] md:ml-[17px] md:px-0"
|
||||||
>
|
>
|
||||||
<DownloadButton />
|
<DownloadButton />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Features / Footer Info -->
|
<!-- Features / Footer Info -->
|
||||||
<div
|
<div
|
||||||
class="mb-5 w-full text-center text-xs leading-5 font-[300] md:ml-[17px] md:text-left md:text-sm"
|
class="mb-5 w-full text-center text-[10px] leading-5 font-[300] md:ml-[17px] md:text-left md:text-sm"
|
||||||
>
|
>
|
||||||
<p>最新加密协议-安全有保障</p>
|
<p>最新加密协议-安全有保障</p>
|
||||||
<p>IEPL专线-纯净、稳定</p>
|
<p>IEPL专线-纯净、稳定</p>
|
||||||
@ -103,7 +103,7 @@
|
|||||||
<a
|
<a
|
||||||
href="https://x.com/hifasttech"
|
href="https://x.com/hifasttech"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="mt-[12px] flex h-[30px] w-[100px] shrink-0 items-center justify-center space-x-2 rounded-full transition-transform hover:brightness-110 md:mt-[16px]"
|
class="mt-[8px] flex h-[30px] w-[100px] shrink-0 items-center justify-center space-x-2 rounded-full transition-transform hover:brightness-110 md:mt-[16px]"
|
||||||
style="
|
style="
|
||||||
backdrop-filter: blur(36px);
|
backdrop-filter: blur(36px);
|
||||||
box-shadow:
|
box-shadow:
|
||||||
@ -140,7 +140,7 @@
|
|||||||
<!-- Right Column: Phone Screenshot -->
|
<!-- Right Column: Phone Screenshot -->
|
||||||
<div class="relative hidden w-full max-w-[632px] md:mt-0 md:block">
|
<div class="relative hidden w-full max-w-[632px] md:mt-0 md:block">
|
||||||
<!-- Screenshot with Ripple Effect -->
|
<!-- Screenshot with Ripple Effect -->
|
||||||
<div class="absolute right-[9%] bottom-0 z-50 aspect-square w-[58%] overflow-hidden">
|
<div class="absolute right-[10%] bottom-0 z-50 aspect-square w-[58%] overflow-hidden">
|
||||||
<!-- Ripple Animation (Background) -->
|
<!-- Ripple Animation (Background) -->
|
||||||
<div class="ripple-container absolute inset-0">
|
<div class="ripple-container absolute inset-0">
|
||||||
<div class="ripple ripple-outer-3"></div>
|
<div class="ripple ripple-outer-3"></div>
|
||||||
@ -252,8 +252,8 @@ const openLoginModal = () => {
|
|||||||
|
|
||||||
/* Core: Fixed minimum diameter (~57% of max) */
|
/* Core: Fixed minimum diameter (~57% of max) */
|
||||||
.ripple-core {
|
.ripple-core {
|
||||||
width: 57%;
|
width: 70%;
|
||||||
height: 57%;
|
height: 70%;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
z-index: 4;
|
z-index: 4;
|
||||||
}
|
}
|
||||||
|
|||||||