-
Artalk
-
- The Artalk. Made with
♥️.
+ <>
+
+
+
+
+
Artalk
+
+ The Artalk. Made with ♥️.
+
+
-
+ >
)
}
diff --git a/docs/landing/src/components/Header.scss b/docs/landing/src/components/Header.scss
index 2b09039a1..c14ca851c 100644
--- a/docs/landing/src/components/Header.scss
+++ b/docs/landing/src/components/Header.scss
@@ -1,6 +1,7 @@
.app-header {
z-index: 999;
- position: sticky;
+ position: fixed;
+ width: 100%;
top: 0;
left: 0;
transition: background 0.2s ease;
@@ -14,6 +15,7 @@
}
&.fixed {
+ backdrop-filter: saturate(1.8) blur(20px);
border-bottom: 1px solid var(--color-border);
background: var(--color-bg-transparent);
}
diff --git a/docs/landing/src/components/LazyImage.scss b/docs/landing/src/components/LazyImage.scss
new file mode 100644
index 000000000..42e436157
--- /dev/null
+++ b/docs/landing/src/components/LazyImage.scss
@@ -0,0 +1,8 @@
+img.lazyload {
+ opacity: 0;
+ transition: opacity 300ms;
+
+ &.loaded {
+ opacity: 1;
+ }
+}
diff --git a/docs/landing/src/components/LazyImage.tsx b/docs/landing/src/components/LazyImage.tsx
new file mode 100644
index 000000000..ce7c0d361
--- /dev/null
+++ b/docs/landing/src/components/LazyImage.tsx
@@ -0,0 +1,30 @@
+import React, { useEffect, useRef } from 'react'
+import LazyLoad, { type ILazyLoadInstance } from 'vanilla-lazyload'
+import './LazyImage.scss'
+
+let lazyLoadInstance: ILazyLoadInstance
+
+const LazyImage: React.FC
> = ({
+ src,
+ alt,
+ className = '',
+ ...props
+}) => {
+ const imageRef = useRef(null)
+
+ useEffect(() => {
+ if (!lazyLoadInstance) {
+ lazyLoadInstance = new LazyLoad({
+ elements_selector: '.lazyload',
+ threshold: 0,
+ })
+ }
+ lazyLoadInstance.update()
+ }, [src])
+
+ return (
+
+ )
+}
+
+export default LazyImage
diff --git a/docs/landing/src/components/Slogan.scss b/docs/landing/src/components/Slogan.scss
index c0054719f..fbc18c408 100644
--- a/docs/landing/src/components/Slogan.scss
+++ b/docs/landing/src/components/Slogan.scss
@@ -34,11 +34,12 @@
.text {
margin-top: 50px;
- line-height: 1.5;
- font-size: 4rem;
+ line-height: 1.7;
+ font-size: 2.6rem;
font-weight: 700;
.highlight {
+ font-size: 3.4rem;
overflow: hidden;
position: relative;
color: var(--color-primary);
@@ -80,22 +81,23 @@
place-items: center;
min-width: 140px;
padding: 0 25px;
- height: 55px;
+ height: 50px;
text-align: center;
border-radius: 100px;
border: 3px solid transparent;
font-size: 1rem;
font-weight: bold;
cursor: pointer;
- color: var(--color-font);
+ background: #ebf5fe;
+ color: var(--color-primary);
&:not(:last-child) {
margin-right: 15px;
}
&.blue {
- border-color: var(--color-primary);
- color: var(--color-primary);
+ background: var(--color-primary);
+ color: #fff;
&:hover {
opacity: 0.9;
diff --git a/docs/landing/src/components/Slogan.tsx b/docs/landing/src/components/Slogan.tsx
index 1da8ac743..a17554940 100644
--- a/docs/landing/src/components/Slogan.tsx
+++ b/docs/landing/src/components/Slogan.tsx
@@ -54,7 +54,7 @@ export const Slogan: React.FC = () => {
{t('slogan_line_1')}
-
+ */}
diff --git a/docs/landing/src/darkmode.scss b/docs/landing/src/darkmode.scss
index 846a0bb43..21c10c9c8 100644
--- a/docs/landing/src/darkmode.scss
+++ b/docs/landing/src/darkmode.scss
@@ -5,6 +5,22 @@
--color-bg: #22272e;
--color-bg-transparent: rgba(34, 39, 46, 0.9);
--color-bg-grey: #2d333b;
+ --color-bg-grey-deep: #2d333b;
--color-bg-blue: #aabcd7;
--color-border: #444c56;
+ --color-border-light: #444c56;
+
+ .slogan .btns .btn {
+ background: var(--color-bg);
+ color: #fff;
+ }
+
+ .grey-cards-feature .window .text-row {
+ color: #000;
+ filter: invert(1);
+ }
+
+ .feature-block {
+ background-color: var(--color-bg-grey) !important;
+ }
}
diff --git a/docs/landing/src/i18n/en.ts b/docs/landing/src/i18n/en.ts
index e25217b5d..f728a10b8 100644
--- a/docs/landing/src/i18n/en.ts
+++ b/docs/landing/src/i18n/en.ts
@@ -143,4 +143,30 @@ export const en = {
feature_api_documentation_desc: 'Provides OpenAPI format documentation',
feature_program_upgrade_name: 'Program Upgrade',
feature_program_upgrade_desc: 'Version check, one-click upgrade',
+ intro_stack_card_1_name: 'Alice',
+ intro_stack_card_1_text: 'Hello, how are you',
+ intro_stack_card_2_name: 'Bob',
+ intro_stack_card_2_text: "Hi, what's up?",
+ intro_stack_card_3_name: 'Cook',
+ intro_stack_card_3_text: 'Good morning',
+ concept_section_locales_title: 'Localized Multiple languages',
+ concept_section_locales_desc: 'English, Chinese, French, Japanese, Korean, Russian, and more.',
+ concept_section_docker_title: 'Docker installation',
+ concept_section_docker_desc_line_1:
+ 'We provide a Docker Image for quick, one-click installation.',
+ concept_section_docker_desc_line_2:
+ 'Built in Golang, supports cross-platform deployment, making it easy to set up anywhere.',
+ concept_section_open_source_title: 'Open Source',
+ concept_section_open_source_desc_line_1:
+ 'Artalk is open-source, free software with a strong focus on privacy and data security.',
+ concept_section_open_source_desc_line_2:
+ 'Maintained continuously for {{year}} years, we consistently update and iterate to improve the experience and ensure stability.',
+ feature_community_title: 'Enhance your experience',
+ feature_community_desc:
+ 'In the plugin marketplace, you can find a wide variety of plugins to customize your own Artalk.',
+ use_artalk_with: 'Use Artalk with',
+ any_website_or_blog: 'any website or blog',
+ see_more_on_github: 'See more on GitHub',
+ star_proposal_line_1: 'If you like Artalk, please give it a STAR 🌟',
+ star_proposal_line_2: 'This would be very helpful to us!',
}
diff --git a/docs/landing/src/i18n/fr.ts b/docs/landing/src/i18n/fr.ts
index 313a50b2f..d718dd878 100644
--- a/docs/landing/src/i18n/fr.ts
+++ b/docs/landing/src/i18n/fr.ts
@@ -145,4 +145,31 @@ export const fr: MessageSchema = {
feature_api_documentation_desc: 'Documentation au format OpenAPI',
feature_program_upgrade_name: 'Mise à jour du programme',
feature_program_upgrade_desc: 'Vérification des versions et mise à jour en un clic',
+ intro_stack_card_1_name: 'Alice',
+ intro_stack_card_1_text: 'Salut, comment ça va ?',
+ intro_stack_card_2_name: 'Bob',
+ intro_stack_card_2_text: 'Comment se passent les choses récemment ?',
+ intro_stack_card_3_name: 'Cook',
+ intro_stack_card_3_text: 'Bonjour',
+ concept_section_locales_title: 'Localisation multilingue',
+ concept_section_locales_desc:
+ "Prise en charge de plusieurs langues, telles que l'anglais, le chinois, le français, le japonais, le coréen et le russe.",
+ concept_section_docker_title: 'Installation avec Docker',
+ concept_section_docker_desc_line_1:
+ 'Nous fournissons une image Docker pour une installation rapide en un seul clic.',
+ concept_section_docker_desc_line_2:
+ 'Construit avec Golang, il est compatible avec les déploiements multi-plateformes, vous permettant de le lancer où que vous soyez.',
+ concept_section_open_source_title: 'Open Source',
+ concept_section_open_source_desc_line_1:
+ 'Artalk est un logiciel libre et open source, axé sur la confidentialité et la sécurité des données.',
+ concept_section_open_source_desc_line_2:
+ "En maintenance continue depuis {{year}} ans, nous proposons des mises à jour régulières pour améliorer l'expérience utilisateur et garantir la stabilité.",
+ feature_community_title: 'Élargissez votre expérience',
+ feature_community_desc:
+ "Dans notre marketplace de plugins, vous trouverez une variété de plugins pour personnaliser votre propre version d'Artalk.",
+ use_artalk_with: 'Utilisez Artalk avec',
+ any_website_or_blog: "n'importe quel site web ou blog",
+ see_more_on_github: 'Voir plus sur GitHub',
+ star_proposal_line_1: "Si vous aimez Artalk, n'hésitez pas à lui donner une étoile 🌟",
+ star_proposal_line_2: 'Cela nous serait très utile !',
}
diff --git a/docs/landing/src/i18n/ja.ts b/docs/landing/src/i18n/ja.ts
index c5e312073..7531905be 100644
--- a/docs/landing/src/i18n/ja.ts
+++ b/docs/landing/src/i18n/ja.ts
@@ -142,4 +142,31 @@ export const ja: MessageSchema = {
feature_api_documentation_desc: 'OpenAPI 形式のドキュメントを提供',
feature_program_upgrade_name: 'プログラムのアップグレード',
feature_program_upgrade_desc: 'バージョンチェックとワンクリックアップグレード',
+ intro_stack_card_1_name: 'アリス',
+ intro_stack_card_1_text: 'こんにちは。',
+ intro_stack_card_2_name: 'ボブ',
+ intro_stack_card_2_text: '最近どう?',
+ intro_stack_card_3_name: 'クック',
+ intro_stack_card_3_text: 'おはよう',
+ concept_section_locales_title: 'マルチ言語ローカライズ',
+ concept_section_locales_desc:
+ '英語、中国語、フランス語、日本語、韓国語、ロシア語など、多言語をサポートしています。',
+ concept_section_docker_title: 'Docker インストール',
+ concept_section_docker_desc_line_1:
+ '私たちは Docker イメージを提供しており、ワンクリックで高速インストールを実現します。',
+ concept_section_docker_desc_line_2:
+ 'Golang を使用して構築されており、クロスプラットフォーム展開に対応。どこでも簡単に起動できます。',
+ concept_section_open_source_title: 'オープンソース',
+ concept_section_open_source_desc_line_1:
+ 'Artalk はオープンソースのフリーソフトウェアであり、プライバシーとデータの安全性に焦点を当てています。',
+ concept_section_open_source_desc_line_2:
+ '{{year}} 年間連続でメンテナンスされており、私たちは継続的にアップデートと改善を行い、ユーザー体験の向上と安定性を確保しています。',
+ feature_community_title: '体験を広げよう',
+ feature_community_desc:
+ 'プラグインマーケットでは、さまざまなプラグインを見つけて、あなた専用の Artalk にカスタマイズできます。',
+ use_artalk_with: 'Use Artalk with',
+ any_website_or_blog: '任意のウェブサイトやブログ',
+ see_more_on_github: 'GitHub で詳しく見る',
+ star_proposal_line_1: 'Artalk を気に入ったら、ぜひスターをつけてください 🌟',
+ star_proposal_line_2: 'これは私たちにとって非常に役立ちます!',
}
diff --git a/docs/landing/src/i18n/ko.ts b/docs/landing/src/i18n/ko.ts
index 19846d710..7ab63b580 100644
--- a/docs/landing/src/i18n/ko.ts
+++ b/docs/landing/src/i18n/ko.ts
@@ -142,4 +142,31 @@ export const ko: MessageSchema = {
feature_api_documentation_desc: 'OpenAPI 형식의 문서 제공',
feature_program_upgrade_name: '프로그램 업그레이드',
feature_program_upgrade_desc: '버전 확인 및 원클릭 업그레이드',
+ intro_stack_card_1_name: '앨리스',
+ intro_stack_card_1_text: '안녕하세요.',
+ intro_stack_card_2_name: '밥',
+ intro_stack_card_2_text: '요즘 어때요?',
+ intro_stack_card_3_name: '쿡',
+ intro_stack_card_3_text: '굿모닝.',
+ concept_section_locales_title: '다국어 현지화',
+ concept_section_locales_desc:
+ '영어, 중국어, 프랑스어, 일본어, 한국어, 러시아어 등 다양한 언어를 지원합니다.',
+ concept_section_docker_title: 'Docker 설치',
+ concept_section_docker_desc_line_1:
+ '저희는 Docker 이미지를 제공하여, 원클릭으로 빠른 설치를 지원합니다.',
+ concept_section_docker_desc_line_2:
+ 'Golang으로 개발되었으며, 크로스 플랫폼 배포를 지원합니다. 언제 어디서나 쉽게 시작할 수 있습니다.',
+ concept_section_open_source_title: '오픈 소스',
+ concept_section_open_source_desc_line_1:
+ 'Artalk는 오픈 소스 자유 소프트웨어로, 개인정보 보호와 데이터 보안을 중시합니다.',
+ concept_section_open_source_desc_line_2:
+ '{{year}}년 동안 꾸준히 유지 관리되고 있으며, 지속적인 업데이트와 개선을 통해 사용자 경험을 향상시키고 안정성을 보장합니다.',
+ feature_community_title: '당신의 경험을 확장하세요',
+ feature_community_desc:
+ '플러그인 마켓에서 다양한 플러그인을 찾아 자신의 Artalk를 맞춤설정할 수 있습니다.',
+ use_artalk_with: 'Use Artalk with',
+ any_website_or_blog: '모든 웹사이트 또는 블로그',
+ see_more_on_github: 'GitHub에서 더 보기',
+ star_proposal_line_1: 'Artalk을 좋아하신다면, 별을 주세요 🌟',
+ star_proposal_line_2: '감사합니다!',
}
diff --git a/docs/landing/src/i18n/ru.ts b/docs/landing/src/i18n/ru.ts
index ec2d01fa6..c3f1b60aa 100644
--- a/docs/landing/src/i18n/ru.ts
+++ b/docs/landing/src/i18n/ru.ts
@@ -145,4 +145,31 @@ export const ru: MessageSchema = {
feature_api_documentation_desc: 'Документация в формате OpenAPI',
feature_program_upgrade_name: 'Обновление программы',
feature_program_upgrade_desc: 'Проверка версий, одно нажатие для обновления',
+ intro_stack_card_1_name: 'Алиса',
+ intro_stack_card_1_text: 'Привет, как дела?',
+ intro_stack_card_2_name: 'Боб',
+ intro_stack_card_2_text: 'Как у тебя дела в последнее время?',
+ intro_stack_card_3_name: 'Кук',
+ intro_stack_card_3_text: 'Доброе утро',
+ concept_section_locales_title: 'Многоязычная локализация',
+ concept_section_locales_desc:
+ 'Поддержка нескольких языков, таких как английский, китайский, французский, японский, корейский, русский и другие.',
+ concept_section_docker_title: 'Установка с помощью Docker',
+ concept_section_docker_desc_line_1:
+ 'Мы предоставляем образ Docker, который позволяет выполнить быструю установку одним кликом.',
+ concept_section_docker_desc_line_2:
+ 'Построен с использованием Golang, поддерживает кроссплатформенное развертывание. Легко запустите его в любом месте.',
+ concept_section_open_source_title: 'Открытый исходный код',
+ concept_section_open_source_desc_line_1:
+ 'Artalk – это свободное и открытое программное обеспечение, ориентированное на конфиденциальность и безопасность данных.',
+ concept_section_open_source_desc_line_2:
+ 'Мы поддерживаем его уже {{year}} лет, регулярно обновляем и совершенствуем с целью улучшения пользовательского опыта и повышения стабильности.',
+ feature_community_title: 'Расширьте свои возможности',
+ feature_community_desc:
+ 'В маркетплейсе плагинов вы можете найти множество плагинов, чтобы настроить Artalk под свои нужды.',
+ use_artalk_with: 'Интеграция Artalk в',
+ any_website_or_blog: 'любой веб-сайт или блог',
+ see_more_on_github: 'Подробнее на GitHub',
+ star_proposal_line_1: 'Если вам нравится Artalk, пожалуйста, поставьте звезду 🌟',
+ star_proposal_line_2: 'Это поможет нам стать лучше.',
}
diff --git a/docs/landing/src/i18n/zh-CN.ts b/docs/landing/src/i18n/zh-CN.ts
index 6d8a2ec93..302702c2f 100644
--- a/docs/landing/src/i18n/zh-CN.ts
+++ b/docs/landing/src/i18n/zh-CN.ts
@@ -5,7 +5,7 @@ export const zhCN: MessageSchema = {
get_artalk: '获取 Artalk',
get_artalk_link: 'https://artalk.js.org/zh/guide/intro.html',
slogan_line_1: 'Artalk 评论系统',
- slogan_line_2: '重构互动极速体验',
+ slogan_line_2: '即时评论,即刻响应',
slogan_line_3: '',
nav_docs_link: 'https://artalk.js.org/zh/guide/intro.html',
nav_changelog_link: 'https://github.com/ArtalkJS/Artalk/blob/master/CHANGELOG.md',
@@ -140,4 +140,26 @@ export const zhCN: MessageSchema = {
feature_api_documentation_desc: '提供 OpenAPI 格式文档',
feature_program_upgrade_name: '程序升级',
feature_program_upgrade_desc: '版本检测,一键升级',
+ intro_stack_card_1_name: '爱丽丝',
+ intro_stack_card_1_text: '嗨,你好。',
+ intro_stack_card_2_name: '鲍勃',
+ intro_stack_card_2_text: '最近过得怎么样?',
+ intro_stack_card_3_name: '库克',
+ intro_stack_card_3_text: '早上好!',
+ concept_section_locales_title: '多语言本地化',
+ concept_section_locales_desc: '支持英语、中文、法语、日语、韩语、俄语等多种语言。',
+ concept_section_docker_title: 'Docker 安装',
+ concept_section_docker_desc_line_1: '我们提供 Docker 镜像,实现一键快速安装。',
+ concept_section_docker_desc_line_2: '使用 Golang 构建,支持跨平台部署,轻松在任何地方启动。',
+ concept_section_open_source_title: '开源',
+ concept_section_open_source_desc_line_1: 'Artalk 是开源的自由软件,专注于隐私和数据安全。',
+ concept_section_open_source_desc_line_2:
+ '连续维护 {{year}} 年,我们持续更新迭代,改进体验和确保稳定性。',
+ feature_community_title: '扩展您的体验',
+ feature_community_desc: '在插件市场,你可以找到各种各样的插件,定制属于你自己的 Artalk。',
+ use_artalk_with: '将 Artalk 集成至',
+ any_website_or_blog: '任何网站或博客',
+ see_more_on_github: '在 GitHub 上查看',
+ star_proposal_line_1: '开源不易,如果你喜欢 Artalk',
+ star_proposal_line_2: '请给它点一个 STAR 🌟 这会对我们很有帮助!',
}
diff --git a/docs/landing/src/i18n/zh-TW.ts b/docs/landing/src/i18n/zh-TW.ts
index ea3687d50..57b4b659a 100644
--- a/docs/landing/src/i18n/zh-TW.ts
+++ b/docs/landing/src/i18n/zh-TW.ts
@@ -5,7 +5,7 @@ export const zhTW: MessageSchema = {
get_artalk: '取得 Artalk',
get_artalk_link: 'https://artalk.js.org/guide/intro.html',
slogan_line_1: 'Artalk 評論系統',
- slogan_line_2: '重構互動極速體驗',
+ slogan_line_2: '即時評論,即時回應',
slogan_line_3: '',
nav_docs_link: 'https://artalk.js.org/guide/intro.html',
nav_changelog_link: 'https://github.com/ArtalkJS/Artalk/blob/master/CHANGELOG.md',
@@ -140,4 +140,26 @@ export const zhTW: MessageSchema = {
feature_api_documentation_desc: '提供 OpenAPI 格式文件',
feature_program_upgrade_name: '程式升級',
feature_program_upgrade_desc: '版本檢測,一鍵升級',
+ intro_stack_card_1_name: '愛麗絲',
+ intro_stack_card_1_text: '嗨,你好。',
+ intro_stack_card_2_name: '鮑勃',
+ intro_stack_card_2_text: '最近過得怎麼樣?',
+ intro_stack_card_3_name: '庫克',
+ intro_stack_card_3_text: '早安!',
+ concept_section_locales_title: '多語言在地化',
+ concept_section_locales_desc: '支援英文、中文、法文、日文、韓文、俄文等多種語言。',
+ concept_section_docker_title: 'Docker 安裝',
+ concept_section_docker_desc_line_1: '我們提供 Docker 映像檔,實現一鍵快速安裝。',
+ concept_section_docker_desc_line_2: '使用 Golang 開發,支援跨平台部署,輕鬆在任何地方啟動。',
+ concept_section_open_source_title: '開源',
+ concept_section_open_source_desc_line_1: 'Artalk 是開源的自由軟體,專注於隱私與數據安全。',
+ concept_section_open_source_desc_line_2:
+ '持續維護 {{year}} 年,我們不斷更新迭代,改善用戶體驗並確保穩定性。',
+ feature_community_title: '擴充您的體驗',
+ feature_community_desc: '在插件平台,您可以找到各式各樣的插件,客製化屬於您自己的 Artalk。',
+ use_artalk_with: '將 Artalk 集成至',
+ any_website_or_blog: '任何網站或部落格',
+ see_more_on_github: '在 GitHub 上查看',
+ star_proposal_line_1: '開源不易,如果您喜歡 Artalk',
+ star_proposal_line_2: '請給它點一個 STAR 🌟 這對我們很有幫助!',
}
diff --git a/docs/landing/src/responsive.scss b/docs/landing/src/responsive.scss
index 17e3a4087..e9a9dfe30 100644
--- a/docs/landing/src/responsive.scss
+++ b/docs/landing/src/responsive.scss
@@ -14,7 +14,7 @@ $breakpoints: (
padding: 0 40px;
}
- .content {
+ & > .content {
padding: 0 75px;
main {
@@ -45,6 +45,10 @@ $breakpoints: (
justify-content: space-around;
}
+ .link-item {
+ font-size: 14px;
+ }
+
.link-item:not(:last-child) {
margin-right: 0;
}
@@ -54,18 +58,26 @@ $breakpoints: (
}
}
+ .slogan {
+ text-align: center;
+ }
+
.slogan .slogan-inner {
padding: 0 40px;
}
.slogan .text {
- font-size: 3em;
+ font-size: 31px;
width: 100%;
}
- .slogan .text .highlight .line-wrap {
- bottom: -15px;
- zoom: 0.9;
+ .slogan .text .highlight {
+ font-size: 40px;
+
+ .line-wrap {
+ bottom: -15px;
+ zoom: 0.9;
+ }
}
.slogan .demos {
@@ -74,12 +86,20 @@ $breakpoints: (
.slogan .btns {
display: flex;
+ justify-content: center;
flex-direction: row;
.btn:not(:last-child) {
margin-right: 10px;
margin-bottom: 20px;
}
+
+ .btn {
+ height: 44px;
+ min-width: 100px;
+ font-size: 15px;
+ padding: 0 20px;
+ }
}
.feature {
@@ -90,7 +110,7 @@ $breakpoints: (
max-height: 300px;
}
- .content {
+ & > .content {
padding: 0;
flex-direction: column;
@@ -112,19 +132,126 @@ $breakpoints: (
}
}
- .full.feature .func-list .row {
- display: flex;
+ .feature-group {
flex-direction: column;
- transform: translateX(0) !important;
+ padding: 0 25px;
- .item {
+ .feature-block {
+ padding: 20px 30px;
+ }
+ }
+
+ .start-feature {
+ padding-bottom: 50px;
+ padding-left: 0;
+ padding-right: 0;
+
+ & > aside {
+ display: none;
+ }
+
+ & > main {
+ padding: 0 20px;
+ }
+ }
+
+ .start-carousel {
+ .feature-cards {
+ .feature-item {
+ padding: 35px 35px;
+
+ .icon {
+ height: 55px;
+ width: 55px;
+ margin-right: 0.4em;
+ }
+
+ .main .title {
+ font-size: 1.2rem;
+ }
+
+ .main .desc {
+ font-size: 1.1rem;
+ }
+
+ .action .arrow-btn {
+ display: none;
+ font-size: 15px;
+ height: 40px;
+ width: 40px;
+ }
+ }
+ }
+
+ .screenshot-group {
+ display: flex;
+ flex-direction: column;
+
+ .screenshot {
+ min-height: 200px;
+ }
+ }
+ }
+
+ .frameworks-feature {
+ flex-direction: column;
+
+ .title {
+ font-size: 24px;
+ margin-bottom: 50px;
+ margin-left: 0;
+ }
+
+ .methods {
width: 100%;
- padding: 30px 40px;
- margin: 0;
- font-size: 1.3rem;
+ place-items: center;
+ padding: 0 20px;
+ grid-template-columns: repeat(auto-fill, minmax(85px, 1fr));
+
+ .icon {
+ height: 65px;
+ width: 65px;
+ }
+ }
+ }
+
+ .grey-cards-feature {
+ padding: 0 20px;
+ flex-direction: column;
+ margin-bottom: 50px;
+ }
+
+ .full-feature {
+ padding-bottom: 50px;
+ }
+
+ .full-feature .func-list {
+ .row {
+ display: flex;
+ flex-direction: column;
+ transform: translateX(0) !important;
- &:not(:last-child) {
- margin-bottom: 40px;
+ .item {
+ width: 100%;
+ padding: 30px 40px;
+ margin: 0;
+ font-size: 1.3rem;
+
+ &:not(:last-child) {
+ margin-bottom: 40px;
+ }
+
+ .header {
+ font-size: 23px;
+
+ .icon-wrap {
+ margin-right: 24px;
+ }
+ }
+
+ .body {
+ font-size: 20px;
+ }
}
}
}
@@ -148,11 +275,11 @@ $breakpoints: (
font-size: 1rem;
}
- .full.feature .folder-icon {
+ .full-feature .folder-icon {
margin-top: 0;
}
- .func.feature .content .ship-icon {
+ .funcs-feature .content .ship-icon {
margin-top: 0;
}
@@ -166,39 +293,129 @@ $breakpoints: (
}
}
- .safe.feature .data-icon {
+ .safe-feature .data-icon {
zoom: 0.5;
margin-left: 0;
margin-bottom: 0;
}
- .safe.feature main {
+ .safe-feature main {
margin: 0;
}
- .func.feature .func-grps {
+ .funcs-feature .func-grps {
padding: 0;
column-count: 1;
}
- .feature.quick .deploy-links .item span {
- font-size: 1.6rem;
+ .feature-block {
+ min-height: 300px;
}
- .feature.quick .deploy-links .item .bold {
- font-size: 2rem;
+ .quick-feature .deploy-links {
+ margin: 20px 0;
+
+ .item {
+ span {
+ font-size: 20px;
+ }
+
+ .bold {
+ font-size: 28px;
+ }
+
+ .arrow-icon {
+ margin-left: 0;
+ height: 35px;
+ width: 70px;
+ font-size: 25px;
+
+ .block {
+ height: 1.5em;
+ width: 0.4em;
+ }
+
+ svg {
+ padding-left: 10px;
+ }
+ }
+ }
}
- .func.feature .func-grps .grp .name {
+ .funcs-feature .func-grps .grp .name {
font-size: 1.45rem;
}
.feature-title {
- font-size: 2.5em;
+ font-size: 28px;
+
+ svg {
+ zoom: 0.8;
+ }
+ }
+
+ .feature-block .feature-desc {
+ font-size: 20px;
+ }
+
+ .safe-feature {
+ text-align: center;
+
+ .data-icon {
+ width: 90px;
+ height: 90px;
+ margin-left: 0;
+ margin-top: 10px;
+ margin: 0 auto;
+ }
+
+ & > .content {
+ flex-direction: column;
+
+ .feature-desc {
+ font-size: 20px;
+ }
+
+ .app-learn-more-link {
+ font-size: 20px;
+ }
+ }
+
+ .report-audit {
+ text-align: center;
+
+ .app-learn-more-link {
+ margin-bottom: 15px;
+ }
+ }
+ }
+
+ .plugins-feature {
+ .left-right {
+ flex-direction: column;
+ }
+
+ .screenshot {
+ display: none;
+ }
+
+ .left-right .stamps {
+ svg {
+ height: 40px;
+ width: 40px;
+
+ &:not(:last-child) {
+ margin-right: 20px;
+ }
+ }
+ }
}
.feature-desc {
- text-align: left;
- font-size: 1.5rem;
+ font-size: 20px;
+ }
+
+ .app-footer {
+ font-size: 20px;
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 86b338db8..f7b0b51c0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -185,6 +185,9 @@ importers:
usehooks-ts:
specifier: ^3.1.0
version: 3.1.0(react@18.3.1)
+ vanilla-lazyload:
+ specifier: ^19.1.3
+ version: 19.1.3
docs/swagger:
devDependencies:
@@ -4808,6 +4811,9 @@ packages:
validate-html-nesting@1.2.2:
resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
+ vanilla-lazyload@19.1.3:
+ resolution: {integrity: sha512-bBMERPu2AFJc35krS+8BOhq++c6dRfL6q368lJPnkS5U92fRQagTR3FsNta69/GukfZzDwDEjD5M3U7VuSiCDw==}
+
vfile-message@4.0.2:
resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
@@ -10173,6 +10179,8 @@ snapshots:
validate-html-nesting@1.2.2: {}
+ vanilla-lazyload@19.1.3: {}
+
vfile-message@4.0.2:
dependencies:
'@types/unist': 3.0.3
diff --git a/ui/artalk/index.html b/ui/artalk/index.html
index 255d6e078..69a2a3020 100644
--- a/ui/artalk/index.html
+++ b/ui/artalk/index.html
@@ -11,6 +11,14 @@