diff --git a/apps/docs/src/styles/modrinth.css b/apps/docs/src/styles/modrinth.css index b61c7fbe..4f149c26 100644 --- a/apps/docs/src/styles/modrinth.css +++ b/apps/docs/src/styles/modrinth.css @@ -2,9 +2,8 @@ ::backdrop, :root[data-theme='light'], [data-theme='light'] ::backdrop { - --sl-font-system: - Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, - Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + --sl-font-system: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, + Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; --sl-color-white: var(--color-contrast); /* “white” */ --sl-color-gray-1: var(--color-base); diff --git a/apps/frontend/src/assets/images/illustrations/medal_icon.svg b/apps/frontend/src/assets/images/illustrations/medal_icon.svg new file mode 100644 index 00000000..bcc68420 --- /dev/null +++ b/apps/frontend/src/assets/images/illustrations/medal_icon.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/apps/frontend/src/assets/styles/global.scss b/apps/frontend/src/assets/styles/global.scss index e5c5b551..e8262adf 100644 --- a/apps/frontend/src/assets/styles/global.scss +++ b/apps/frontend/src/assets/styles/global.scss @@ -131,6 +131,15 @@ html { --landing-raw-bg: #fff; + --medal-promotion-bg: #fff; + --medal-promotion-bg-orange: #48aaff; + --medal-promotion-text-orange: #156db8; + --medal-promotion-bg-gradient: linear-gradient( + 90deg, + rgba(152, 207, 255, 0.2) 20%, + rgba(152, 207, 255, 0.1) 100% + ); + --banner-error-bg: #fee2e2; --banner-error-text: #991b1b; --banner-error-border: #ef4444; @@ -237,6 +246,15 @@ html { --landing-raw-bg: #000; + --medal-promotion-bg: #000; + --medal-promotion-bg-orange: rgba(208, 246, 255, 0.25); + --medal-promotion-text-orange: #42abff; + --medal-promotion-bg-gradient: linear-gradient( + 90deg, + rgba(66, 170, 255, 0.15), + rgba(0, 0, 0, 0) 100% + ); + --hover-filter: brightness(120%); --active-filter: brightness(140%); diff --git a/apps/frontend/src/components/ui/AdPlaceholder.vue b/apps/frontend/src/components/ui/AdPlaceholder.vue index 70c713a7..937aeefd 100644 --- a/apps/frontend/src/components/ui/AdPlaceholder.vue +++ b/apps/frontend/src/components/ui/AdPlaceholder.vue @@ -1,16 +1,16 @@ diff --git a/apps/frontend/src/components/ui/servers/ServersUpgradeModalWrapper.vue b/apps/frontend/src/components/ui/servers/ServersUpgradeModalWrapper.vue new file mode 100644 index 00000000..4874339a --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServersUpgradeModalWrapper.vue @@ -0,0 +1,261 @@ + + + diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalBackgroundImage.vue b/apps/frontend/src/components/ui/servers/marketing/MedalBackgroundImage.vue new file mode 100644 index 00000000..866449a9 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/marketing/MedalBackgroundImage.vue @@ -0,0 +1,59 @@ + + + + diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalPlanPromotion.vue b/apps/frontend/src/components/ui/servers/marketing/MedalPlanPromotion.vue new file mode 100644 index 00000000..80578193 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/marketing/MedalPlanPromotion.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue b/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue new file mode 100644 index 00000000..33f63eb3 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue b/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue new file mode 100644 index 00000000..4c18659e --- /dev/null +++ b/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/apps/frontend/src/composables/featureFlags.ts b/apps/frontend/src/composables/featureFlags.ts index 79054649..28a74946 100644 --- a/apps/frontend/src/composables/featureFlags.ts +++ b/apps/frontend/src/composables/featureFlags.ts @@ -25,6 +25,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({ // Feature toggles projectTypesPrimaryNav: false, + enableMedalPromotion: false, hidePlusPromoInUserMenu: false, oldProjectCards: true, newProjectCards: false, diff --git a/apps/frontend/src/composables/servers/modules/general.ts b/apps/frontend/src/composables/servers/modules/general.ts index 8ab0bd6a..0562e38c 100644 --- a/apps/frontend/src/composables/servers/modules/general.ts +++ b/apps/frontend/src/composables/servers/modules/general.ts @@ -34,6 +34,8 @@ export class GeneralModule extends ServerModule implements ServerGeneral { node!: { token: string; instance: string } flows?: { intro?: boolean } + is_medal?: boolean + async fetch(): Promise { const data = await useServersFetch(`servers/${this.serverId}`, {}, 'general') diff --git a/apps/frontend/src/pages/search/[searchProjectType].vue b/apps/frontend/src/pages/search/[searchProjectType].vue index e2657a21..bd908801 100644 --- a/apps/frontend/src/pages/search/[searchProjectType].vue +++ b/apps/frontend/src/pages/search/[searchProjectType].vue @@ -20,7 +20,14 @@ class="flex flex-col gap-4 text-primary" > - + {{ server.general.name }} diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index 50758489..58017c21 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -392,7 +392,7 @@

Frequently Asked Questions

-
+
@@ -404,7 +404,7 @@ GHz, paired with DDR5 memory.

-
+
@@ -420,7 +420,7 @@

-
+
@@ -433,7 +433,7 @@

-
+
@@ -447,7 +447,7 @@

-
+
@@ -460,7 +460,7 @@

-
+
@@ -481,7 +481,7 @@

-
+
@@ -493,7 +493,7 @@

-
+
@@ -516,12 +516,13 @@
-
+

There's a server for everyone

@@ -551,6 +552,8 @@
+ +
    { if (route.hash) { - // where pyro-hash === route.hash - const faq = document.querySelector(`[pyro-hash="${route.hash.slice(1)}"]`) + // where nav-hash === route.hash + const faq = document.querySelector(`[nav-hash="${route.hash.slice(1)}"]`) if (faq) { faq.open = true const top = faq.getBoundingClientRect().top @@ -923,16 +928,20 @@ const selectProduct = async (product) => { await nextTick() if (product === 'custom') { - purchaseModal.value?.show(billingPeriod.value, undefined, selectedProjectId.value) + purchaseModal.value?.show(billingPeriod.value, null, selectedProjectId.value) } else { purchaseModal.value?.show(billingPeriod.value, selectedProduct.value, selectedProjectId.value) } } -const planQuery = () => { - if (route.query.plan) { - document.getElementById('plan').scrollIntoView() - selectProduct(route.query.plan) +const planQuery = async () => { + if ('plan' in route.query) { + await nextTick() + const planElement = document.querySelector(`[nav-hash="plan"]`) + if (planElement) { + planElement.scrollIntoView({ behavior: 'smooth' }) + await selectProduct(route.query.plan) + } } } diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue index 0955e91a..4e2c046f 100644 --- a/apps/frontend/src/pages/servers/manage/[id].vue +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -115,58 +115,63 @@ : `linear-gradient(180deg, rgba(153,153,153,1) 0%, rgba(87,87,87,1) 100%)`, }" > -
    - -
    - -
    -

    - {{ serverData.name }} -

    -
    - -
    -
    - -
    - Configuring server... -
    - + + + All servers + +
    + +
    +
    +

    + {{ serverData.name }} +

    +
    + +
    +
    + +
    + Configuring server... +
    + +
    @@ -290,6 +295,10 @@
+
+ +
+
-
+