diff --git a/assets/css/lnbits.css b/assets/css/lnbits.css
index c2e4807..091752c 100644
--- a/assets/css/lnbits.css
+++ b/assets/css/lnbits.css
@@ -233,25 +233,14 @@ body.body--dark {
.ud-hero {
position: relative;
overflow: hidden;
+ background: #000;
+ animation: none;
padding: 118px 0 8px;
flex: 1 0 auto;
display: flex;
align-items: center;
}
-.ud-hero::before {
- content: "";
- position: absolute;
- inset: 0;
- background:
- radial-gradient(700px 280px at 20% 0%, rgba(255, 30, 230, 0.25), transparent 60%),
- radial-gradient(700px 300px at 80% 10%, rgba(39, 215, 255, 0.24), transparent 62%),
- radial-gradient(520px 240px at 55% 20%, rgba(76, 126, 255, 0.22), transparent 60%);
- pointer-events: none;
- background-size: 200% 200%;
- animation: heroFlow 14s ease-in-out infinite alternate;
-}
-
.ud-hero > .container {
position: relative;
z-index: 1;
@@ -271,7 +260,7 @@ body.body--dark {
}
.ln-hero-intro .ud-hero-title {
- font-size: var(--ln-hero-title-size, 3.6rem);
+ font-size: var(--ln-hero-title-size, 4rem);
line-height: 1.05;
white-space: nowrap;
}
@@ -279,117 +268,273 @@ body.body--dark {
.ln-hero-intro .ud-hero-desc {
display: block;
margin: 0 auto;
- font-size: var(--ln-hero-desc-size, 3rem);
+ font-size: var(--ln-hero-desc-size, 2.5rem);
line-height: 1.08;
white-space: nowrap;
}
-.ln-landing-product,
-.ln-landing-product:hover,
-.ln-landing-product:focus {
- min-height: 100%;
+.ln-download {
+ max-width: 400px;
+ margin: 0 auto;
+ padding: 24px 0;
+ text-align: center;
+}
+
+.ln-download__title {
+ margin: 0 0 28px;
+ color: var(--ln-text);
+ font-size: clamp(1.8rem, 3vw, 2.6rem);
+ font-weight: 400;
+ line-height: 1.15;
+ letter-spacing: -0.03em;
+}
+
+.ln-download__control {
+ display: flex;
+ width: fit-content;
+ max-width: 100%;
+ margin-inline: auto;
+ direction: ltr;
+ border-radius: 16px;
+ background: linear-gradient(135deg, var(--ln-pink), var(--ln-purple));
+ box-shadow: 0 12px 30px rgba(255, 30, 230, 0.25);
+}
+
+.ln-download__button,
+.ln-download__toggle {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 48px;
+ color: #0b0c11;
+ background: transparent;
+ border: 0;
+ font: inherit;
+ font-weight: 700;
+ text-decoration: none;
+}
+
+.ln-download__button {
+ flex: 1;
+ gap: 8px;
+ padding: 10px 16px;
+ border-radius: 16px 0 0 16px;
+}
+
+.ln-download__button svg {
+ flex-shrink: 0;
+}
+
+.ln-download__toggle {
+ flex: 0 0 40px;
+ border-left: 1px solid rgba(11, 12, 17, 0.25);
+ border-radius: 0 16px 16px 0;
+}
+
+.ln-download__toggle::after {
+ margin: 0;
+}
+
+.ln-download__button:hover,
+.ln-download__toggle:hover {
+ color: #0b0c11;
+ background: rgba(255, 255, 255, 0.15);
+}
+
+.ln-download__button:focus-visible,
+.ln-download__toggle:focus-visible {
+ outline: 2px solid white;
+ outline-offset: 3px;
+}
+
+.ln-download__menu {
+ width: 100%;
+ padding: 8px;
+ border: 1px solid rgba(255, 30, 230, 0.3);
+ border-radius: 16px;
+ background: #1c1b2a;
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);
+}
+
+.ln-download__menu .dropdown-item {
+ padding: 12px;
+ border-radius: 8px;
+ color: var(--ln-text);
+ white-space: normal;
+}
+
+.ln-download__menu .dropdown-item:hover,
+.ln-download__menu .dropdown-item:focus,
+.ln-download__menu .dropdown-item.active {
color: var(--ln-pink);
+ background: rgba(255, 30, 230, 0.1);
+}
+
+.ln-download__menu .dropdown-divider {
+ border-color: rgba(255, 255, 255, 0.15);
+}
+
+.ln-download__status {
+ margin: 14px 0 0;
+ color: var(--ln-muted);
+ font-size: 0.85rem;
+ line-height: 1.5;
+}
+
+.ln-download__status:empty {
+ display: none;
+}
+
+.ln-landing-products {
+ display: grid;
+ grid-auto-rows: 1fr;
+ gap: 16px;
+}
+
+.ln-landing-product {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) clamp(160px, 16vw, 220px) 32px;
+ grid-template-areas: "title image action" "bullets image action";
+ grid-template-rows: 1fr 1fr;
+ gap: 12px 18px;
+ padding: 18px 24px;
+ color: var(--ln-text);
text-decoration: none;
- border: 1.5px solid rgba(255, 30, 230, 0.3);
- border-radius: 28px;
- padding: 26px 24px 30px;
- background: linear-gradient(180deg, rgba(28, 27, 42, 0.94), rgba(16, 17, 27, 0.88));
- box-shadow: 0 24px 50px rgba(0, 0, 0, 0.28);
- transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
+ border: 1px solid var(--ln-pink);
+ border-radius: 22px;
+ background: #000;
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.2);
+ transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}
.ln-landing-product:hover,
-.ln-landing-product:focus {
- transform: translateY(-6px);
- border-color: rgba(255, 30, 230, 0.48);
- box-shadow:
- 0 28px 60px rgba(0, 0, 0, 0.34),
- 0 0 28px rgba(255, 30, 230, 0.12);
+.ln-landing-product:focus-visible {
+ color: var(--ln-text);
+ transform: translateY(-3px);
+ box-shadow: 0 16px 32px rgba(0, 0, 0, 0.3);
+}
+
+.ln-landing-product:focus-visible {
+ outline: 2px solid var(--ln-pink);
+ outline-offset: 4px;
+}
+
+.ln-landing-product__visual {
+ grid-area: image;
+ position: relative;
+ min-width: 0;
+ min-height: 130px;
}
.ln-landing-product__image {
+ position: absolute;
+ inset: 0;
display: block;
- width: auto;
- max-width: 100%;
- height: auto;
- max-height: 250px;
- margin: 0 auto 18px;
+ width: 100%;
+ height: 100%;
object-fit: contain;
- filter: drop-shadow(0 24px 42px rgba(0, 0, 0, 0.45));
- transition: filter 0.25s ease, transform 0.25s ease;
+ filter: drop-shadow(0 12px 16px rgba(0, 0, 0, 0.4));
+ transition: transform 0.2s ease;
}
.ln-landing-product:hover .ln-landing-product__image,
-.ln-landing-product:focus .ln-landing-product__image {
- transform: translateY(-4px);
- filter:
- drop-shadow(0 24px 42px rgba(0, 0, 0, 0.45))
- drop-shadow(0 0 24px rgba(255, 30, 230, 0.22));
-}
-
-.ln-landing-product__body {
- margin-top: auto;
+.ln-landing-product:focus-visible .ln-landing-product__image {
+ transform: scale(1.05);
}
.ln-landing-product__title {
+ grid-area: title;
+ align-self: end;
margin: 0;
color: var(--ln-pink);
- font-size: clamp(1.9rem, 3vw, 2.45rem);
- line-height: 1.05;
+ font-size: clamp(1.5rem, 2.2vw, 1.9rem);
+ font-weight: 650;
+ line-height: 1.15;
letter-spacing: -0.03em;
+ text-align: start;
}
.ln-landing-product__bullets {
+ grid-area: bullets;
+ align-self: start;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px 12px;
list-style: none;
- margin: 18px 0 0;
- padding-left: 0;
- text-align: left;
- color: rgba(255, 255, 255, 0.92);
- font-size: 1rem;
- line-height: 1.55;
+ margin: 0;
+ padding: 0;
+ text-align: start;
+ color: var(--ln-muted);
+ font-size: 1.1rem;
+ line-height: 1.5;
}
.ln-landing-product__bullets li {
- position: relative;
- padding-left: 1.6rem;
+ display: flex;
+ align-items: baseline;
+ gap: 6px;
}
.ln-landing-product__bullets li::before {
content: "✓";
- position: absolute;
- left: 0;
- top: 0;
+ flex-shrink: 0;
color: var(--ln-pink);
font-weight: 700;
}
-.ln-landing-product__bullets li + li {
- margin-top: 8px;
+.ln-landing-product__action {
+ grid-area: action;
+ align-self: center;
+ display: grid;
+ place-items: center;
+ width: 32px;
+ height: 32px;
+ border: 1px solid rgba(255, 30, 230, 0.25);
+ border-radius: 50%;
+ color: var(--ln-pink);
+ background: rgba(255, 30, 230, 0.06);
+ transition: background 0.2s ease, color 0.2s ease;
}
-@media (max-width: 991px) {
+.ln-landing-product:hover .ln-landing-product__action,
+.ln-landing-product:focus-visible .ln-landing-product__action {
+ color: #0b0c11;
+ background: var(--ln-pink);
+}
+
+@media (max-width: 575px) {
.ln-landing-product {
- padding: 20px 18px 22px;
- border-radius: 22px;
+ grid-template-columns: minmax(0, 1fr) 86px 28px;
+ grid-template-areas: "title image action" "bullets bullets bullets";
+ grid-template-rows: auto auto;
+ gap: 14px 8px;
+ padding: 16px;
+ border-radius: 18px;
}
- .ln-landing-product__image {
- max-height: 150px;
- margin-bottom: 14px;
+ .ln-landing-product__title {
+ align-self: center;
}
- .ln-landing-product__title {
- font-size: 1.6rem;
+ .ln-landing-product__visual {
+ min-height: 76px;
+ }
+
+ .ln-landing-product__action {
+ width: 28px;
+ height: 28px;
}
.ln-landing-product__bullets {
- margin-top: 14px;
- font-size: 0.9rem;
- line-height: 1.45;
+ gap: 6px 12px;
}
+}
- .ln-landing-product__bullets li {
- padding-left: 1.35rem;
+@media (prefers-reduced-motion: reduce) {
+ .ln-landing-product,
+ .ln-landing-product__image,
+ .ln-landing-product__action {
+ transition: none;
}
}
@@ -1086,6 +1231,10 @@ body.body--dark {
text-transform: uppercase;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 12px;
+}
+
+.ln-contrib-label,
+.ln-contrib-metrics {
display: flex;
align-items: center;
gap: 10px;
@@ -1203,23 +1352,11 @@ body.body--dark {
}
.ln-hero-intro .ud-hero-desc {
- font-size: clamp(1.4rem, 5.4vw, 2rem);
+ font-size: clamp(1.125rem, 4vw, 1.5rem);
line-height: 1.15;
white-space: normal;
}
- .ln-landing-product__image {
- max-height: 190px;
- }
-
- .ln-landing-product__title {
- font-size: 1.8rem;
- }
-
- .ln-landing-product__bullets {
- font-size: 0.95rem;
- }
-
.ln-bootstrap-showcase {
margin-top: 16px;
max-width: 100%;
@@ -1286,15 +1423,6 @@ body.body--dark {
}
}
-@keyframes heroFlow {
- 0% {
- background-position: 20% 0%, 80% 20%, 50% 10%;
- }
- 100% {
- background-position: 40% 20%, 60% 0%, 70% 30%;
- }
-}
-
@-moz-document url-prefix() {
.ud-header,
.ln-btn-outline,
@@ -1302,11 +1430,6 @@ body.body--dark {
backdrop-filter: none;
}
- .ud-hero,
- .ud-hero::before {
- animation: none;
- }
-
.ln-section::before {
mix-blend-mode: normal;
opacity: 0.35;
diff --git a/assets/i18n/ar.json b/assets/i18n/ar.json
index 1cd2d6b..cc243c7 100644
--- a/assets/i18n/ar.json
+++ b/assets/i18n/ar.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "اطّلع على إضافات LNbits",
"tooltip.store": "زر متجر LNbits الإلكتروني",
"tooltip.github": "عرض المستودع",
- "hero.title": "أقوى مجموعة أدوات بيتكوين في العالم.",
- "hero.subtitle": "شغّلها لنفسك أو للآخرين أو كجزء من حزمة.",
+ "hero.title": "أقوى حزمة أدوات للدفع في العالم.",
+ "hero.subtitle": "اقبل المدفوعات. استخدم/طوّر الإضافات. ادمجها في منظومتك التقنية.",
"hero.slide1.title": "نظام المستخدم/المحفظة",
"hero.slide1.subtitle": "محفظة ويب متجاوبة بالكامل
",
"hero.slide1.time": "(43 ثانية)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "سهل",
"products.saas.bullet2": "مُدار بالكامل",
"products.saas.bullet3": "جهوزية 99.9%",
+ "products.saas.bullet4": "نسخ احتياطية",
"products.box.title": "LNbits Box",
"products.box.bullet1": "سهل",
"products.box.bullet2": "يعمل محليًا",
"products.box.bullet3": "عتاد جاهز للتشغيل",
- "products.selfhost.title": "شغّله بنفسك",
- "products.selfhost.bullet1": "متقدم",
- "products.selfhost.bullet2": "شغّله في أي مكان",
- "products.selfhost.bullet3": "تحكم كامل",
+ "products.box.bullet4": "مبني على NixOS",
+ "download.title": "ابدأ بقبول المدفوعات خلال دقائق.",
+ "download.button": "تنزيل {format}",
+ "download.choose": "اختر التنزيل",
+ "download.select": "اختر نظام التشغيل",
+ "download.source": "البناء من الشيفرة المصدرية",
+ "download.releases": "عرض الإصدارات",
+ "download.fallback": "ابحث عن ملفات التثبيت المتاحة في إصدارات GitHub.",
+ "download.unavailable": "ملف التثبيت هذا غير متاح بعد. تصفح الإصدارات أو ابنِ التطبيق من الشيفرة المصدرية.",
+ "download.preview": "إصدار تجريبي",
+ "contributors.open_source": "مجاني بالكامل ومفتوح المصدر",
"contributors.label": "المساهمون",
"features.title": "تطبيقك الشامل للمدفوعات.",
"features.lead": "
LNbits منصة مدفوعات معيارية — محفظة ومتجر تطبيقات ومحرك أتمتة في منصة واحدة.",
diff --git a/assets/i18n/de.json b/assets/i18n/de.json
index 0de1e8a..f4e4ae0 100644
--- a/assets/i18n/de.json
+++ b/assets/i18n/de.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Schau dir die Erweiterungen in LNbits an",
"tooltip.store": "Besuche den LNbits Webshop",
"tooltip.github": "Zum Repository",
- "hero.title": "Die weltweit leistungsstärkste Suite an Bitcoin-Tools.",
- "hero.subtitle": "Betreibe es für dich, für andere oder als Teil eines Stacks.",
+ "hero.title": "Die leistungsstärkste Zahlungssuite der Welt.",
+ "hero.subtitle": "Nimm Zahlungen an. Nutze/entwickle Erweiterungen. Integriere sie in deinen Stack.",
"hero.slide1.title": "Benutzer-/Wallet-System",
"hero.slide1.subtitle": "Voll responsives Web-Wallet
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Einfach",
"products.saas.bullet2": "Voll verwaltet",
"products.saas.bullet3": "99,9 % Verfügbarkeit",
+ "products.saas.bullet4": "Backups",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Einfach",
"products.box.bullet2": "Läuft lokal",
"products.box.bullet3": "Plug-and-Play-Hardware",
- "products.selfhost.title": "Selbst betreiben",
- "products.selfhost.bullet1": "Fortgeschritten",
- "products.selfhost.bullet2": "Überall betreiben",
- "products.selfhost.bullet3": "Volle Kontrolle",
+ "products.box.bullet4": "Basiert auf NixOS",
+ "download.title": "Akzeptiere Zahlungen in wenigen Minuten.",
+ "download.button": "{format} herunterladen",
+ "download.choose": "Download auswählen",
+ "download.select": "Wähle dein Betriebssystem",
+ "download.source": "Aus dem Quellcode erstellen",
+ "download.releases": "Versionen ansehen",
+ "download.fallback": "Verfügbare Installationsdateien findest du in den GitHub-Releases.",
+ "download.unavailable": "Diese Installationsdatei ist noch nicht verfügbar. Sieh dir die Releases an oder erstelle LNbits aus dem Quellcode.",
+ "download.preview": "Vorabversion",
+ "contributors.open_source": "Völlig kostenlos und quelloffen",
"contributors.label": "Mitwirkende",
"features.title": "Deine All-in-One-App für Zahlungen.",
"features.lead": "
LNbits ist eine modulare Zahlungsplattform - Wallet, App-Store und Automatisierungs-Engine in einem.",
diff --git a/assets/i18n/en.json b/assets/i18n/en.json
index a11c826..e62c0c5 100644
--- a/assets/i18n/en.json
+++ b/assets/i18n/en.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Checkout the extensions in LNbits",
"tooltip.store": "Visit the LNbits web store",
"tooltip.github": "Checkout the repo",
- "hero.title": "The world's most powerful suite of bitcoin tools.",
- "hero.subtitle": "Run for yourself, for others, or as part of a stack.",
+ "hero.title": "The world's most powerful payment suite.",
+ "hero.subtitle": "Take payments. Use/build extensions. Integrate into your stack.",
"hero.slide1.title": "User/Wallet System",
"hero.slide1.subtitle": "Fully responsive web wallet
",
"hero.slide1.time": "(43 secs)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Easy",
"products.saas.bullet2": "Fully managed",
"products.saas.bullet3": "99.9% uptime",
+ "products.saas.bullet4": "Backups",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Easy",
"products.box.bullet2": "Runs locally",
"products.box.bullet3": "Plug & play hardware",
- "products.selfhost.title": "Run Yourself",
- "products.selfhost.bullet1": "Advanced",
- "products.selfhost.bullet2": "Run anywhere",
- "products.selfhost.bullet3": "Complete control",
+ "products.box.bullet4": "NixOS based",
+ "download.title": "Start accepting payments in minutes.",
+ "download.button": "Download {format}",
+ "download.choose": "Choose download",
+ "download.select": "Choose your operating system",
+ "download.source": "Build from source",
+ "download.releases": "View releases",
+ "download.fallback": "Find available installers on GitHub releases.",
+ "download.unavailable": "This installer is not available yet. Check releases or build from source.",
+ "download.preview": "Pre-release",
+ "contributors.open_source": "Completely free and open-source",
"contributors.label": "Contributors",
"features.title": "Your Everything App for Payments.",
"features.lead": "
LNbits is a modular payments platform — a wallet, app store, and automation engine in one.",
diff --git a/assets/i18n/es.json b/assets/i18n/es.json
index 8fff5b7..0a9c5a2 100644
--- a/assets/i18n/es.json
+++ b/assets/i18n/es.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Explora las extensiones en LNbits",
"tooltip.store": "Visita la tienda web de LNbits",
"tooltip.github": "Ver el repositorio",
- "hero.title": "La suite de herramientas de bitcoin más poderosa del mundo.",
- "hero.subtitle": "Ejecuta para ti, para otros, o como parte de un stack.",
+ "hero.title": "La suite de pagos más potente del mundo.",
+ "hero.subtitle": "Acepta pagos. Usa/crea extensiones. Integra en tu stack.",
"hero.slide1.title": "Sistema de usuarios/carteras",
"hero.slide1.subtitle": "Billetera web totalmente responsive
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Fácil",
"products.saas.bullet2": "Totalmente gestionado",
"products.saas.bullet3": "99,9 % de uptime",
+ "products.saas.bullet4": "Copias de seguridad",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Fácil",
"products.box.bullet2": "Funciona localmente",
"products.box.bullet3": "Hardware plug & play",
- "products.selfhost.title": "Ejecútalo tú mismo",
- "products.selfhost.bullet1": "Avanzado",
- "products.selfhost.bullet2": "Ejecútalo en cualquier lugar",
- "products.selfhost.bullet3": "Control total",
+ "products.box.bullet4": "Basado en NixOS",
+ "download.title": "Empieza a aceptar pagos en minutos.",
+ "download.button": "Descargar {format}",
+ "download.choose": "Elegir descarga",
+ "download.select": "Elige tu sistema operativo",
+ "download.source": "Compilar desde el código fuente",
+ "download.releases": "Ver versiones",
+ "download.fallback": "Encuentra los instaladores disponibles en las versiones de GitHub.",
+ "download.unavailable": "Este instalador aún no está disponible. Consulta las versiones o compila desde el código fuente.",
+ "download.preview": "Versión preliminar",
+ "contributors.open_source": "Completamente gratis y de código abierto",
"contributors.label": "Colaboradores",
"features.title": "Tu app integral para pagos.",
"features.lead": "
LNbits es una plataforma modular de pagos — una billetera, tienda de apps y motor de automatización en uno.",
diff --git a/assets/i18n/fr.json b/assets/i18n/fr.json
index e9f6a0c..081fd31 100644
--- a/assets/i18n/fr.json
+++ b/assets/i18n/fr.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Voir les extensions dans LNbits",
"tooltip.store": "Visitez la boutique web LNbits",
"tooltip.github": "Voir le dépôt",
- "hero.title": "La suite d'outils bitcoin la plus puissante au monde.",
- "hero.subtitle": "Exécutez-la pour vous, pour d'autres, ou comme partie d'une stack.",
+ "hero.title": "La suite de paiement la plus puissante au monde.",
+ "hero.subtitle": "Acceptez des paiements. Utilisez/créez des extensions. Intégrez à votre stack.",
"hero.slide1.title": "Système utilisateur/portefeuille",
"hero.slide1.subtitle": "Portefeuille web totalement responsive
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Facile",
"products.saas.bullet2": "Entièrement géré",
"products.saas.bullet3": "99,9 % de disponibilité",
+ "products.saas.bullet4": "Sauvegardes",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Facile",
"products.box.bullet2": "Fonctionne en local",
"products.box.bullet3": "Matériel plug & play",
- "products.selfhost.title": "Hébergez-le vous-même",
- "products.selfhost.bullet1": "Avancé",
- "products.selfhost.bullet2": "Exécutez-le partout",
- "products.selfhost.bullet3": "Contrôle total",
+ "products.box.bullet4": "Basé sur NixOS",
+ "download.title": "Commencez à accepter des paiements en quelques minutes.",
+ "download.button": "Télécharger {format}",
+ "download.choose": "Choisir un téléchargement",
+ "download.select": "Choisissez votre système d’exploitation",
+ "download.source": "Compiler depuis les sources",
+ "download.releases": "Voir les versions",
+ "download.fallback": "Retrouvez les programmes d’installation disponibles dans les versions GitHub.",
+ "download.unavailable": "Ce programme d’installation n’est pas encore disponible. Consultez les versions ou compilez depuis les sources.",
+ "download.preview": "Préversion",
+ "contributors.open_source": "Entièrement gratuit et open source",
"contributors.label": "Contributeurs",
"features.title": "Votre application tout-en-un pour les paiements.",
"features.lead": "
LNbits est une plateforme de paiement modulaire — un portefeuille, une boutique d'apps et un moteur d'automatisation en un.",
diff --git a/assets/i18n/it.json b/assets/i18n/it.json
index 8330502..89db1b9 100644
--- a/assets/i18n/it.json
+++ b/assets/i18n/it.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Scopri le estensioni in LNbits",
"tooltip.store": "Visita lo store web di LNbits",
"tooltip.github": "Vai al repository",
- "hero.title": "La suite di strumenti bitcoin più potente al mondo.",
- "hero.subtitle": "Esegui per te, per altri, o come parte di uno stack.",
+ "hero.title": "La suite di pagamento più potente al mondo.",
+ "hero.subtitle": "Accetta pagamenti. Usa/crea estensioni. Integra nel tuo stack.",
"hero.slide1.title": "Sistema utenti/wallet",
"hero.slide1.subtitle": "Wallet web completamente responsive
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Facile",
"products.saas.bullet2": "Completamente gestito",
"products.saas.bullet3": "Uptime al 99,9%",
+ "products.saas.bullet4": "Backup",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Facile",
"products.box.bullet2": "Funziona in locale",
"products.box.bullet3": "Hardware plug & play",
- "products.selfhost.title": "Eseguilo da solo",
- "products.selfhost.bullet1": "Avanzato",
- "products.selfhost.bullet2": "Eseguilo ovunque",
- "products.selfhost.bullet3": "Controllo completo",
+ "products.box.bullet4": "Basato su NixOS",
+ "download.title": "Inizia ad accettare pagamenti in pochi minuti.",
+ "download.button": "Scarica {format}",
+ "download.choose": "Scegli il download",
+ "download.select": "Scegli il tuo sistema operativo",
+ "download.source": "Compila dal codice sorgente",
+ "download.releases": "Vedi le versioni",
+ "download.fallback": "Trova i programmi di installazione disponibili nelle release di GitHub.",
+ "download.unavailable": "Questo programma di installazione non è ancora disponibile. Consulta le release o compila dal codice sorgente.",
+ "download.preview": "Versione preliminare",
+ "contributors.open_source": "Completamente gratuito e open source",
"contributors.label": "Contributori",
"features.title": "La tua app tutto-in-uno per i pagamenti.",
"features.lead": "
LNbits è una piattaforma di pagamenti modulare — un wallet, un app store e un motore di automazione in uno.",
diff --git a/assets/i18n/ja.json b/assets/i18n/ja.json
index 0f2c8d4..40cf626 100644
--- a/assets/i18n/ja.json
+++ b/assets/i18n/ja.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "LNbits の拡張をチェック",
"tooltip.store": "LNbits のウェブストアを見る",
"tooltip.github": "リポジトリを見る",
- "hero.title": "世界で最も強力なビットコインツール群。",
- "hero.subtitle": "自分のため、他者のため、またはスタックの一部として運用。",
+ "hero.title": "世界で最もパワフルな決済スイート。",
+ "hero.subtitle": "決済を受け付ける。拡張機能を使う・開発する。スタックに統合する。",
"hero.slide1.title": "ユーザー/ウォレットシステム",
"hero.slide1.subtitle": "完全レスポンシブなWebウォレット
",
"hero.slide1.time": "(43 秒)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "簡単",
"products.saas.bullet2": "フルマネージド",
"products.saas.bullet3": "99.9% 稼働率",
+ "products.saas.bullet4": "バックアップ",
"products.box.title": "LNbits Box",
"products.box.bullet1": "簡単",
"products.box.bullet2": "ローカルで動作",
"products.box.bullet3": "プラグアンドプレイのハードウェア",
- "products.selfhost.title": "自分で運用",
- "products.selfhost.bullet1": "上級者向け",
- "products.selfhost.bullet2": "どこでも運用可能",
- "products.selfhost.bullet3": "完全なコントロール",
+ "products.box.bullet4": "NixOS ベース",
+ "download.title": "わずか数分で支払いの受け付けを開始。",
+ "download.button": "{format} をダウンロード",
+ "download.choose": "ダウンロードを選択",
+ "download.select": "お使いの OS を選択",
+ "download.source": "ソースからビルド",
+ "download.releases": "リリースを見る",
+ "download.fallback": "利用可能なインストーラーは GitHub のリリースページで確認できます。",
+ "download.unavailable": "このインストーラーはまだ利用できません。リリースを確認するか、ソースからビルドしてください。",
+ "download.preview": "プレリリース",
+ "contributors.open_source": "完全無料・オープンソース",
"contributors.label": "貢献者",
"features.title": "支払いのためのオールインワンアプリ。",
"features.lead": "
LNbits はモジュール型の決済プラットフォーム — ウォレット、アプリストア、自動化エンジンが一体。",
diff --git a/assets/i18n/ko.json b/assets/i18n/ko.json
index a44bbe0..528e50f 100644
--- a/assets/i18n/ko.json
+++ b/assets/i18n/ko.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "LNbits 확장 보기",
"tooltip.store": "LNbits 웹 스토어 방문",
"tooltip.github": "레포지토리 보기",
- "hero.title": "세계에서 가장 강력한 비트코인 도구 모음.",
- "hero.subtitle": "나를 위해, 다른 사람을 위해, 혹은 스택의 일부로 운영하세요.",
+ "hero.title": "세계에서 가장 강력한 결제 도구 모음.",
+ "hero.subtitle": "결제를 받으세요. 확장 기능을 사용/개발하세요. 스택에 통합하세요.",
"hero.slide1.title": "사용자/지갑 시스템",
"hero.slide1.subtitle": "완전 반응형 웹 지갑
",
"hero.slide1.time": "(43초)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "쉬움",
"products.saas.bullet2": "완전 관리형",
"products.saas.bullet3": "99.9% 가동 시간",
+ "products.saas.bullet4": "백업",
"products.box.title": "LNbits Box",
"products.box.bullet1": "쉬움",
"products.box.bullet2": "로컬에서 실행",
"products.box.bullet3": "플러그 앤 플레이 하드웨어",
- "products.selfhost.title": "직접 실행",
- "products.selfhost.bullet1": "고급",
- "products.selfhost.bullet2": "어디서나 실행",
- "products.selfhost.bullet3": "완전한 제어",
+ "products.box.bullet4": "NixOS 기반",
+ "download.title": "몇 분 만에 결제 수락을 시작하세요.",
+ "download.button": "{format} 다운로드",
+ "download.choose": "다운로드 선택",
+ "download.select": "운영체제를 선택하세요",
+ "download.source": "소스에서 빌드",
+ "download.releases": "릴리스 보기",
+ "download.fallback": "GitHub 릴리스에서 사용 가능한 설치 파일을 확인하세요.",
+ "download.unavailable": "이 설치 파일은 아직 제공되지 않습니다. 릴리스를 확인하거나 소스에서 빌드하세요.",
+ "download.preview": "사전 릴리스",
+ "contributors.open_source": "완전 무료 및 오픈 소스",
"contributors.label": "기여자",
"features.title": "결제를 위한 올인원 앱.",
"features.lead": "
LNbits는 모듈형 결제 플랫폼입니다 — 지갑, 앱스토어, 자동화 엔진을 하나로.",
diff --git a/assets/i18n/nl.json b/assets/i18n/nl.json
index 4b950bb..1ef9dc9 100644
--- a/assets/i18n/nl.json
+++ b/assets/i18n/nl.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Bekijk de extensies in LNbits",
"tooltip.store": "Bezoek de LNbits webwinkel",
"tooltip.github": "Bekijk de repo",
- "hero.title": "De krachtigste suite van bitcoin-tools ter wereld.",
- "hero.subtitle": "Draai het voor jezelf, voor anderen, of als onderdeel van een stack.",
+ "hero.title": "De krachtigste betaalsuite ter wereld.",
+ "hero.subtitle": "Ontvang betalingen. Gebruik/bouw extensies. Integreer in je stack.",
"hero.slide1.title": "Gebruikers-/walletsysteem",
"hero.slide1.subtitle": "Volledig responsieve webwallet
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Eenvoudig",
"products.saas.bullet2": "Volledig beheerd",
"products.saas.bullet3": "99,9% uptime",
+ "products.saas.bullet4": "Back-ups",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Eenvoudig",
"products.box.bullet2": "Draait lokaal",
"products.box.bullet3": "Plug & play-hardware",
- "products.selfhost.title": "Zelf draaien",
- "products.selfhost.bullet1": "Geavanceerd",
- "products.selfhost.bullet2": "Draai overal",
- "products.selfhost.bullet3": "Volledige controle",
+ "products.box.bullet4": "Gebaseerd op NixOS",
+ "download.title": "Accepteer binnen enkele minuten betalingen.",
+ "download.button": "{format} downloaden",
+ "download.choose": "Download kiezen",
+ "download.select": "Kies je besturingssysteem",
+ "download.source": "Bouwen vanuit broncode",
+ "download.releases": "Releases bekijken",
+ "download.fallback": "Vind beschikbare installatiebestanden bij de GitHub-releases.",
+ "download.unavailable": "Dit installatiebestand is nog niet beschikbaar. Bekijk de releases of bouw vanuit de broncode.",
+ "download.preview": "Voorlopige versie",
+ "contributors.open_source": "Volledig gratis en open source",
"contributors.label": "Bijdragers",
"features.title": "Jouw alles-in-één app voor betalingen.",
"features.lead": "
LNbits is een modulair betalingsplatform — een wallet, app store en automatiseringsengine in één.",
diff --git a/assets/i18n/pt.json b/assets/i18n/pt.json
index 0a4e79f..0c86a0e 100644
--- a/assets/i18n/pt.json
+++ b/assets/i18n/pt.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Confira as extensões no LNbits",
"tooltip.store": "Visite a loja web do LNbits",
"tooltip.github": "Ver o repositório",
- "hero.title": "O conjunto de ferramentas de bitcoin mais poderoso do mundo.",
- "hero.subtitle": "Execute para você, para outros, ou como parte de uma stack.",
+ "hero.title": "A suíte de pagamentos mais poderosa do mundo.",
+ "hero.subtitle": "Receba pagamentos. Use/crie extensões. Integre à sua stack.",
"hero.slide1.title": "Sistema de usuários/carteiras",
"hero.slide1.subtitle": "Carteira web totalmente responsiva
",
"hero.slide1.time": "(43 s)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Fácil",
"products.saas.bullet2": "Totalmente gerido",
"products.saas.bullet3": "99,9% de uptime",
+ "products.saas.bullet4": "Backups",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Fácil",
"products.box.bullet2": "Roda localmente",
"products.box.bullet3": "Hardware plug & play",
- "products.selfhost.title": "Execute Você Mesmo",
- "products.selfhost.bullet1": "Avançado",
- "products.selfhost.bullet2": "Rode em qualquer lugar",
- "products.selfhost.bullet3": "Controle total",
+ "products.box.bullet4": "Baseado em NixOS",
+ "download.title": "Comece a aceitar pagamentos em minutos.",
+ "download.button": "Baixar {format}",
+ "download.choose": "Escolher download",
+ "download.select": "Escolha seu sistema operacional",
+ "download.source": "Compilar a partir do código-fonte",
+ "download.releases": "Ver versões",
+ "download.fallback": "Encontre os instaladores disponíveis nas versões do GitHub.",
+ "download.unavailable": "Este instalador ainda não está disponível. Confira as versões ou compile a partir do código-fonte.",
+ "download.preview": "Versão de pré-lançamento",
+ "contributors.open_source": "Totalmente gratuito e de código aberto",
"contributors.label": "Contribuidores",
"features.title": "Seu app completo para pagamentos.",
"features.lead": "
LNbits é uma plataforma modular de pagamentos — uma carteira, app store e motor de automação em um só lugar.",
diff --git a/assets/i18n/ru.json b/assets/i18n/ru.json
index 577730b..dedc8e1 100644
--- a/assets/i18n/ru.json
+++ b/assets/i18n/ru.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "Посмотрите расширения в LNbits",
"tooltip.store": "Посетите веб‑магазин LNbits",
"tooltip.github": "Открыть репозиторий",
- "hero.title": "Самый мощный набор инструментов для биткоина в мире.",
- "hero.subtitle": "Запускайте для себя, для других или как часть стека.",
+ "hero.title": "Самый мощный в мире набор платёжных инструментов.",
+ "hero.subtitle": "Принимайте платежи. Используйте/создавайте расширения. Интегрируйте в свой стек.",
"hero.slide1.title": "Система пользователей/кошельков",
"hero.slide1.subtitle": "Полностью адаптивный веб‑кошелек
",
"hero.slide1.time": "(43 сек)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "Просто",
"products.saas.bullet2": "Полностью управляется",
"products.saas.bullet3": "99,9% доступности",
+ "products.saas.bullet4": "Резервные копии",
"products.box.title": "LNbits Box",
"products.box.bullet1": "Просто",
"products.box.bullet2": "Работает локально",
"products.box.bullet3": "Оборудование plug & play",
- "products.selfhost.title": "Запустите сами",
- "products.selfhost.bullet1": "Для продвинутых",
- "products.selfhost.bullet2": "Запускайте где угодно",
- "products.selfhost.bullet3": "Полный контроль",
+ "products.box.bullet4": "На базе NixOS",
+ "download.title": "Начните принимать платежи за считанные минуты.",
+ "download.button": "Скачать {format}",
+ "download.choose": "Выбрать загрузку",
+ "download.select": "Выберите операционную систему",
+ "download.source": "Собрать из исходного кода",
+ "download.releases": "Посмотреть релизы",
+ "download.fallback": "Доступные установщики можно найти в релизах на GitHub.",
+ "download.unavailable": "Этот установщик пока недоступен. Посмотрите релизы или соберите из исходного кода.",
+ "download.preview": "Предварительная версия",
+ "contributors.open_source": "Полностью бесплатно и с открытым исходным кодом",
"contributors.label": "Участники",
"features.title": "Ваше приложение «всё‑в‑одном» для платежей.",
"features.lead": "
LNbits — модульная платформа платежей: кошелек, магазин приложений и движок автоматизации в одном.",
diff --git a/assets/i18n/zh.json b/assets/i18n/zh.json
index 98087c4..4a69c07 100644
--- a/assets/i18n/zh.json
+++ b/assets/i18n/zh.json
@@ -22,8 +22,8 @@
"tooltip.extensions": "查看 LNbits 的扩展",
"tooltip.store": "访问 LNbits 网店",
"tooltip.github": "查看仓库",
- "hero.title": "全球最强大的比特币工具套件。",
- "hero.subtitle": "为你自己、为他人,或作为技术栈的一部分运行。",
+ "hero.title": "全球最强大的支付套件。",
+ "hero.subtitle": "接受付款。使用/构建扩展。集成到你的技术栈。",
"hero.slide1.title": "用户/钱包系统",
"hero.slide1.subtitle": "完全响应式网页钱包
",
"hero.slide1.time": "(43 秒)",
@@ -40,14 +40,22 @@
"products.saas.bullet1": "简单",
"products.saas.bullet2": "全托管",
"products.saas.bullet3": "99.9% 在线率",
+ "products.saas.bullet4": "备份",
"products.box.title": "LNbits Box",
"products.box.bullet1": "简单",
"products.box.bullet2": "本地运行",
"products.box.bullet3": "即插即用硬件",
- "products.selfhost.title": "自行运行",
- "products.selfhost.bullet1": "高级",
- "products.selfhost.bullet2": "可在任何地方运行",
- "products.selfhost.bullet3": "完全控制",
+ "products.box.bullet4": "基于 NixOS",
+ "download.title": "几分钟内即可开始收款。",
+ "download.button": "下载 {format}",
+ "download.choose": "选择下载",
+ "download.select": "选择你的操作系统",
+ "download.source": "从源码构建",
+ "download.releases": "查看发布版本",
+ "download.fallback": "在 GitHub 发布页面查找可用的安装程序。",
+ "download.unavailable": "此安装程序暂不可用。请查看发布版本或从源码构建。",
+ "download.preview": "预发布版本",
+ "contributors.open_source": "完全免费且开源",
"contributors.label": "贡献者",
"features.title": "你的全能支付应用。",
"features.lead": "
LNbits 是一个模块化支付平台——钱包、应用商店和自动化引擎三合一。",
diff --git a/assets/js/download.js b/assets/js/download.js
new file mode 100644
index 0000000..aa939f5
--- /dev/null
+++ b/assets/js/download.js
@@ -0,0 +1,114 @@
+window.addEventListener("DOMContentLoaded", () => {
+ const link = document.getElementById("ln-download-link");
+ const label = document.getElementById("ln-download-label");
+ const status = document.getElementById("ln-download-status");
+ const options = Array.from(document.querySelectorAll("[data-download]"));
+ if (!link || !label || !status) return;
+
+ const releasesUrl = "https://github.com/lnbits/lnbits/releases";
+ const formats = { linux: "AppImage", windows: "EXE", mac: "DMG" };
+ const assets = {};
+ const platform = navigator.userAgentData?.platform || navigator.platform || "";
+ const mobile =
+ /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) ||
+ (/Mac/i.test(platform) && navigator.maxTouchPoints > 1);
+ let selected = null;
+ if (!mobile) {
+ if (/Win/i.test(platform)) selected = "windows";
+ else if (/Mac/i.test(platform)) selected = "mac";
+ else if (/Linux/i.test(platform)) selected = "linux";
+ }
+ let state = "loading";
+
+ // The label depends on the selection as well as the current language.
+ label.removeAttribute("data-i18n");
+
+ function t(key, fallback) {
+ return window.LNbitsI18n?.t(key) || fallback;
+ }
+
+ function render() {
+ const asset = assets[selected];
+ link.href = asset?.browser_download_url || releasesUrl;
+ const unavailable = selected && state === "ready" && !asset;
+
+ if (!selected) {
+ label.textContent = t("download.choose", "Choose download");
+ } else if (unavailable) {
+ label.textContent = t("download.releases", "View releases");
+ } else {
+ label.textContent = t("download.button", "Download {format}").replace(
+ "{format}", formats[selected]
+ );
+ }
+
+ status.textContent = "";
+ if (state === "error") {
+ status.textContent = t("download.fallback", "Find available installers on GitHub releases.");
+ } else if (unavailable) {
+ status.textContent = t(
+ "download.unavailable",
+ "This installer is not available yet. Check releases or build from source."
+ );
+ } else if (asset?.prerelease) {
+ status.textContent = t("download.preview", "Pre-release");
+ }
+
+ options.forEach((option) => {
+ const key = option.dataset.download;
+ option.href = assets[key]?.browser_download_url || releasesUrl;
+ option.classList.toggle("active", key === selected);
+ if (key === selected) option.setAttribute("aria-current", "true");
+ else option.removeAttribute("aria-current");
+ });
+ }
+
+ options.forEach((option) => {
+ option.addEventListener("click", (event) => {
+ if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;
+ event.preventDefault();
+ selected = option.dataset.download;
+ render();
+ link.focus();
+ });
+ });
+ window.LNbitsI18n?.onChange(render);
+ render();
+
+ // Resolve versioned filenames from published releases, preferring stable builds.
+ // Some releases have no installers, so inspect recent releases per format.
+ const controller = new AbortController();
+ const timeout = setTimeout(() => controller.abort(), 8000);
+ fetch("https://api.github.com/repos/lnbits/lnbits/releases?per_page=10", {
+ signal: controller.signal,
+ headers: { Accept: "application/vnd.github+json" }
+ })
+ .then((response) => {
+ if (!response.ok) throw new Error("Could not load releases");
+ return response.json();
+ })
+ .then((releases) => {
+ if (!Array.isArray(releases)) throw new Error("Invalid releases");
+ const published = releases.filter((release) => !release.draft);
+ const ordered = published.filter((release) => !release.prerelease)
+ .concat(published.filter((release) => release.prerelease));
+ Object.entries(formats).forEach(([key, format]) => {
+ for (const release of ordered) {
+ const asset = (release.assets || []).find((candidate) =>
+ candidate.name?.toLowerCase().endsWith("." + format.toLowerCase()) &&
+ candidate.browser_download_url?.startsWith(releasesUrl + "/download/")
+ );
+ if (asset) {
+ assets[key] = { ...asset, prerelease: release.prerelease };
+ break;
+ }
+ }
+ });
+ state = "ready";
+ })
+ .catch(() => { state = "error"; })
+ .finally(() => {
+ clearTimeout(timeout);
+ render();
+ });
+});
diff --git a/assets/js/landing.js b/assets/js/landing.js
index a8aa8f2..d1b696d 100644
--- a/assets/js/landing.js
+++ b/assets/js/landing.js
@@ -23,8 +23,8 @@ window.addEventListener("DOMContentLoaded", () => {
}
function fitHeroText() {
- fitElement(title, "--ln-hero-title-size", 57.6, 36);
- fitElement(desc, "--ln-hero-desc-size", 48, 28);
+ fitElement(title, "--ln-hero-title-size", 64, 36);
+ fitElement(desc, "--ln-hero-desc-size", 40, 20);
}
fitHeroText();
diff --git a/index.html b/index.html
index 4c47a39..67af01a 100644
--- a/index.html
+++ b/index.html
@@ -28,7 +28,6 @@
-
@@ -218,94 +217,112 @@
- Run for yourself, for others, or as part of a stack. + Take payments. Use/build extensions. Integrate into your stack.