diff --git a/assets/css/custom.css b/assets/css/custom.css index 7a75b3730..3695df795 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -1,9 +1,16 @@ /* custom classes: */ .header-bg { - background-image: url(/img/home/header-background.avif), linear-gradient(to bottom, rgb(4.31% 5.88% 9.02%) 0%, rgb(7.84% 20.39% 32.94%) 38%, rgb(24.71% 54.51% 85.1%) 72%, rgb(60.39% 78.04% 96.08%) 90%); + background-image: url(/img/home/header-background.avif), linear-gradient(to bottom, #1e2b33 0%, rgb(7.84% 20.39% 32.94%) 38%, rgb(24.71% 54.51% 85.1%) 72%, rgb(60.39% 78.04% 96.08%) 90%); background-size: auto 100%; } +.header-bg-hub { + background-image: url(/img/hub/header-clouds.png), url(/img/home/header-background.avif), linear-gradient(to bottom, #ffffff 0%, #eef3f7 55%, #dce8ee 100%); + background-size: auto 240px, auto 620px, 100% 100%; + background-repeat: repeat-x; + background-position: 50% 70px, bottom, center; +} + .container-prose { @apply w-full mx-auto; max-width: 768px; @@ -62,6 +69,15 @@ @apply bg-primary text-white transition transform duration-200 ease-in-out; } +.btn-outline-tertiary2 { + @apply border border-tertiary2 text-tertiary2; +} + +.btn-outline-tertiary2:hover, +.btn-outline-tertiary2:focus { + @apply bg-tertiary2 text-white transition transform duration-200 ease-in-out; +} + .btn-outline-secondary { @apply border border-secondary text-secondary; } @@ -99,6 +115,10 @@ @apply text-primary no-underline hover:underline; } +.text-link-tertiary2 { + @apply text-tertiary2 no-underline hover:underline; +} + .font-h1 { @apply font-headline font-medium text-3xl md:text-4xl leading-tight text-balance; } diff --git a/assets/css/finder-hero.css b/assets/css/finder-hero.css new file mode 100644 index 000000000..430593dff --- /dev/null +++ b/assets/css/finder-hero.css @@ -0,0 +1,75 @@ +/* Finder-window hero styles — loaded only by layouts/for-individuals/single.html + as a separate Tailwind sheet, so other pages do not ship the split-flap rules. + + @reference imports Tailwind and the shared theme/utilities for @apply + resolution only — nothing from them is re-emitted here. Hugo pipes this file + to the Tailwind CLI with the project root as cwd and does not rewrite + @reference like it does @import, so the theme path is root-relative. The + @layer components wrapper keeps these rules in the same cascade layer they + would have inside main.css, so utility classes in the markup still win over + component rules. */ +@reference "tailwindcss"; +@reference "./assets/css/theme.css"; + +/* Re-declare main.css's cascade layer order: layer order is fixed by first + occurrence per document, so without this a bare `@layer components` block + would corrupt the order if this sheet were ever loaded before main.css. */ +@layer properties, theme, base, components, utilities; + +@layer components { + /* Two stacked icons per slot; `.is-locked` on the .finder-hero root decides + which face shows. finder-hero.js toggles the class on each flap cycle. */ + .finder-swap-icon { + position: relative; + display: inline-flex; + flex: 0 0 auto; + width: 1.25rem; + height: 1.25rem; + } + + .finder-swap-icon i, + .finder-swap-icon img { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + object-fit: contain; + transition: opacity 0.4s ease; + } + + .finder-hero.is-locked .finder-when-unlocked, + .finder-hero:not(.is-locked) .finder-when-locked { + opacity: 0; + } + + .finder-hero.is-locked .finder-flap-name { + @apply font-mono text-[13px] text-gray-600; + } + + /* The title-bar path flips as one whole panel (departure-board segment) + between its locked and unlocked label instead of per-letter flapping. */ + .finder-path { + display: inline-flex; + min-width: 0; + perspective: 400px; + } + + .finder-path-inner { + transform-style: preserve-3d; + transition: transform 0.6s ease-in-out; + } + + .finder-path-front, + .finder-path-back { + backface-visibility: hidden; + } + + .finder-path-back { + transform: rotateX(180deg); + } + + .finder-hero:not(.is-locked) .finder-path-inner { + transform: rotateX(180deg); + } +} diff --git a/assets/css/hub-scene.css b/assets/css/hub-scene.css new file mode 100644 index 000000000..0764752e3 --- /dev/null +++ b/assets/css/hub-scene.css @@ -0,0 +1,51 @@ +/* Page-scoped sheet for the for-teams hero, so other pages do not ship these + rules. See assets/css/finder-hero.css for the @reference/@layer rationale. */ +@reference "tailwindcss"; +@reference "./assets/css/theme.css"; + +@layer properties, theme, base, components, utilities; + +@layer components { + /* Crossfade rotator for exactly three children: the 12s cycle is carved into + 4s slots by the :nth-child delays, so a fourth child would never show. */ + .idp-swap { + display: inline-grid; + place-items: center; + } + + .idp-swap > * { + grid-area: 1 / 1; + opacity: 0; + animation: idp-cycle 12s infinite backwards; + } + + .idp-swap > :nth-child(2) { + animation-delay: 4s; + } + + .idp-swap > :nth-child(3) { + animation-delay: 8s; + } + + @keyframes idp-cycle { + 0% { opacity: 0; } + 4% { opacity: 1; } + 33% { opacity: 1; } + 37% { opacity: 0; } + 100% { opacity: 0; } + } + + @media (prefers-reduced-motion: reduce) { + .ad-pulse { + display: none; + } + + .idp-swap > * { + animation: none; + } + + .idp-swap > :first-child { + opacity: 1; + } + } +} diff --git a/assets/js/finder-hero.js b/assets/js/finder-hero.js new file mode 100644 index 000000000..dd7780735 --- /dev/null +++ b/assets/js/finder-hero.js @@ -0,0 +1,87 @@ +/* Split-flap animation for the for-individuals finder hero: every element with + a `finder-flap` class cycles between its data-locked and data-unlocked text + like an airport departure board, while `.is-locked` on the `.finder-hero` + root swaps the accompanying icons and flips the title-bar path panel (see + finder-hero.css). */ + +class FinderFlap { + constructor(el) { + this.el = el; + this.chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + this.raf = null; + } + + setText(newText) { + const oldText = this.el.textContent; + const length = Math.max(oldText.length, newText.length); + this.queue = []; + for (let i = 0; i < length; i++) { + const from = oldText[i] || ''; + const to = newText[i] || ''; + const start = Math.floor(i * 0.8); + const end = start + 8 + Math.floor(Math.random() * 8); + this.queue.push({ from, to, start, end, char: null }); + } + cancelAnimationFrame(this.raf); + this.frame = 0; + this.update(); + } + + update() { + let output = ''; + let complete = 0; + for (const item of this.queue) { + if (this.frame >= item.end) { + complete++; + output += item.to; + } else if (this.frame >= item.start) { + if (!item.char || Math.random() < 0.35) { + item.char = this.chars[Math.floor(Math.random() * this.chars.length)]; + } + output += item.char; + } else { + output += item.from; + } + } + this.el.textContent = output; + if (complete < this.queue.length) { + this.frame++; + this.raf = requestAnimationFrame(() => this.update()); + } + } +} + +document.addEventListener('DOMContentLoaded', () => { + const root = document.querySelector('.finder-hero'); + if (!root) { + return; + } + const flaps = Array.from(root.querySelectorAll('.finder-flap')).map((el) => ({ el, flap: new FinderFlap(el) })); + const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + const providers = [ + { name: 'Google Drive', src: '/img/clouds/google-drive.svg' }, + { name: 'iCloud Drive', src: '/img/clouds/icloud.svg' }, + { name: 'OneDrive', src: '/img/clouds/onedrive.svg' }, + { name: 'Dropbox', src: '/img/clouds/dropbox.svg' }, + ]; + const providerName = root.querySelector('[data-finder-provider-name]'); + const providerIcon = root.querySelector('[data-finder-provider-icon]'); + if (reducedMotion) { + return; + } + let providerIndex = 0; + let locked = true; + setInterval(() => { + locked = !locked; + if (locked && providerName && providerIcon) { + providerIndex = (providerIndex + 1) % providers.length; + providerName.textContent = providers[providerIndex].name; + providerIcon.src = providers[providerIndex].src; + } + root.classList.toggle('is-locked', locked); + flaps.forEach(({ el, flap }, index) => { + const text = locked ? el.dataset.locked : el.dataset.unlocked; + setTimeout(() => flap.setText(text), index * 140); + }); + }, 5000); +}); diff --git a/content/for-individuals.de.html b/content/for-individuals.de.html index 82885156c..81e49ae00 100644 --- a/content/for-individuals.de.html +++ b/content/for-individuals.de.html @@ -1,4 +1,6 @@ --- title: "Cryptomator" type: for-individuals +darkNav: true +flushHero: true --- diff --git a/content/for-individuals.en.html b/content/for-individuals.en.html index 82885156c..81e49ae00 100644 --- a/content/for-individuals.en.html +++ b/content/for-individuals.en.html @@ -1,4 +1,6 @@ --- title: "Cryptomator" type: for-individuals +darkNav: true +flushHero: true --- diff --git a/content/for-teams.de.html b/content/for-teams.de.html index ec6251bd3..6379dd8ce 100644 --- a/content/for-teams.de.html +++ b/content/for-teams.de.html @@ -1,5 +1,6 @@ --- title: "Cryptomator Hub" type: for-teams +hubNav: true aliases: ["/hub"] --- diff --git a/content/for-teams.en.html b/content/for-teams.en.html index ec6251bd3..6379dd8ce 100644 --- a/content/for-teams.en.html +++ b/content/for-teams.en.html @@ -1,5 +1,6 @@ --- title: "Cryptomator Hub" type: for-teams +hubNav: true aliases: ["/hub"] --- diff --git a/i18n/de.yaml b/i18n/de.yaml index 7f9db8e59..6058fbf97 100644 --- a/i18n/de.yaml +++ b/i18n/de.yaml @@ -225,13 +225,64 @@ - id: for_individuals_header_title translation: "Deine Daten in der Cloud gehören dir allein" - id: for_individuals_header_description - translation: "Daten in der Cloud sind oft nicht ausreichend geschützt. Cryptomator verschlüsselt deine Dokumente, Fotos und persönlichen Dateien mit wenigen Klicks – so hast nur du Zugriff. Niemand sonst." + translation: "Cryptomator verschlüsselt deine Dokumente, Fotos und persönlichen Dateien mit wenigen Klicks – so hast nur du Zugriff. Niemand sonst." - id: for_individuals_header_cta translation: "Jetzt herunterladen" - id: for_individuals_header_cta_description translation: "Verfügbar für Windows, macOS, Linux, Android und iOS." -- id: for_individuals_header_woman_laptop_alt - translation: "Person, die vor einem Laptop sitzt, während Cryptobot neben der Person auf den Laptop zeigt" +- id: for_individuals_header_link + translation: "So funktioniert's" + +- id: for_individuals_finder_locked_path_suffix + translation: " › Tresor" +- id: for_individuals_finder_unlocked_path + translation: "Dein Laufwerk › Tresor" +- id: for_individuals_finder_col_name + translation: "Name" +- id: for_individuals_finder_col_size + translation: "Größe" +- id: for_individuals_finder_col_modified + translation: "Geändert" +- id: for_individuals_finder_file_1_name + translation: "Urlaubsfotos" +- id: for_individuals_finder_file_1_modified + translation: "Heute, 09:41" +- id: for_individuals_finder_file_2_name + translation: "Steuererklärung-2025.pdf" +- id: for_individuals_finder_file_2_size + translation: "2,4 MB" +- id: for_individuals_finder_file_2_modified + translation: "Gestern, 18:07" +- id: for_individuals_finder_file_3_name + translation: "Reisepass-Scan.jpg" +- id: for_individuals_finder_file_3_size + translation: "1,8 MB" +- id: for_individuals_finder_file_3_modified + translation: "12.07.2026" +- id: for_individuals_finder_file_4_name + translation: "Finanzen.xlsx" +- id: for_individuals_finder_file_4_size + translation: "96 KB" +- id: for_individuals_finder_file_4_modified + translation: "08.07.2026" +- id: for_individuals_finder_file_5_name + translation: "Mietvertrag.pdf" +- id: for_individuals_finder_file_5_size + translation: "640 KB" +- id: for_individuals_finder_file_5_modified + translation: "27.06.2026" +- id: for_individuals_finder_file_7_name + translation: "Bewerbung.docx" +- id: for_individuals_finder_file_7_size + translation: "88 KB" +- id: for_individuals_finder_file_7_modified + translation: "05.06.2026" +- id: for_individuals_hero_pill + translation: "Ende-zu-Ende verschlüsselt – nur du hast den Schlüssel" +- id: for_individuals_finder_items + translation: "6 Objekte" +- id: for_individuals_stats_title + translation: "Vertraut von Millionen weltweit" - id: for_individuals_downloads_title translation: "3M+" @@ -403,15 +454,49 @@ - id: hub_header_title translation: "Souveräne Zusammenarbeit in der Cloud" - id: hub_header_description - translation: "Cryptomator Hub verschlüsselt deine vertraulichen Unternehmensdaten wie personenbezogene Kundendaten oder interne Geschäftsdokumente – DSGVO-konform, einfach und unter deiner Kontrolle." + translation: "Cryptomator Hub verschlüsselt die vertraulichen Daten deines Unternehmens – DSGVO-konform, einfach und unter deiner Kontrolle." - id: hub_header_managed_cta - translation: "Jetzt anmelden" + translation: "Kostenlos testen" - id: hub_header_managed_cta_description translation: "Startet eure kostenlose 30-Tage-Testversion noch heute, keine Kreditkarte erforderlich." - id: hub_header_kicker_early_access translation: "Hub 2.0.0 Early Access*" - id: hub_header_early_access_note translation: "Early Access beinhaltet brandneue Features und eine verlängerte kostenlose 60-Tage-Testphase." +- id: hub_header_link + translation: "So funktioniert's" +- id: hub_hero_scene_vault + translation: "Gemeinsamer Tresor" +- id: hub_hero_card_vault_name + translation: "Finanzen" +- id: hub_hero_group_name + translation: "Team Buchhaltung" +- id: hub_hero_group_subtitle + translation: "Gruppe · 8 Mitglieder" +- id: hub_hero_tile_audit + translation: "Audit-Log" +- id: hub_hero_tile_devices + translation: "Geräte" +- id: hub_hero_ad_row_users + translation: "128 Benutzer" +- id: hub_hero_ad_row_groups + translation: "12 Gruppen" +- id: hub_hero_node_revoked + translation: "Zugriff entzogen" +- id: hub_hero_audit_row_1 + translation: "Zugriff erteilt · Lena" +- id: hub_hero_audit_row_2 + translation: "Gerät registriert · Jonas" +- id: hub_hero_audit_row_3 + translation: "Zugriff entzogen · Michael" +- id: hub_hero_row_owner_desc + translation: "CFO" +- id: hub_hero_tag_external + translation: "Extern" +- id: hub_hero_tag_owner + translation: "Owner" +- id: hub_hero_row_external_desc + translation: "Steuerberaterin" - id: hub_header_group_magic_alt translation: "Cryptobot verbindet eine Gruppe von Menschen mit seinen magischen Fähigkeiten durch Zero-Knowledge-Verschlüsselung" @@ -438,6 +523,12 @@ translation: "Ladet euren Tresor über Cryptomator Hub herunter und öffnet ihn direkt in der Cryptomator App als bestehenden Tresor. Statt ein Passwort einzugeben, erfolgt die Authentifizierung sicher über Hub – so bleibt alles geschützt und trotzdem komfortabel zugänglich." - id: hub_workflow_step_3_alt translation: "Cryptomator-App-Oberfläche mit mehreren Tresoren" +- id: hub_workflow_step_4_title + translation: "4. Lückenlos nachvollziehbar" +- id: hub_workflow_step_4_description + translation: "Wer hat wann welchen Tresor entsperrt, ein Gerät registriert oder Zugriff erhalten? Das Audit-Log protokolliert alle sicherheitsrelevanten Ereignisse. Compliance-Nachweise gibt es damit auf Knopfdruck." +- id: hub_workflow_step_4_alt + translation: "Audit-Log in Cryptomator Hub mit protokollierten Ereignissen" - id: hub_features_title translation: "Warum Cryptomator Hub?" @@ -719,6 +810,38 @@ - id: hub_demo_contact_us_button translation: "Kontaktiere uns" +# Hub CE Registration +- id: hub_ce_registration_description + translation: "Registriere deine Cryptomator-Hub-Instanz für eine kostenlose Community-Edition-Lizenz." + +- id: hub_ce_registration_steps_title + translation: "Schritt von " +- id: hub_ce_registration_steps_next + translation: "Weiter" + +- id: hub_ce_registration_step_1_nav_title + translation: "E-Mail-Adresse" +- id: hub_ce_registration_step_1_title + translation: "Wie lautet deine E-Mail-Adresse?" +- id: hub_ce_registration_step_1_email_placeholder + translation: "E-Mail-Adresse" + +- id: hub_ce_registration_step_2_confirmation_nav_title + translation: "Bestätigung" +- id: hub_ce_registration_step_2_confirmation_title + translation: "Bitte bestätige deine E-Mail-Adresse" +- id: hub_ce_registration_step_2_instructions + translation: "Wir senden eine Bestätigungs-E-Mail an " +- id: hub_ce_registration_step_2_check_email + translation: "Bitte prüfe deine E-Mails." + +- id: hub_ce_registration_step_3_license_nav_title + translation: "Lizenzschlüssel" +- id: hub_ce_registration_step_3_license_title + translation: "Deine Community-Edition-Lizenz" +- id: hub_ce_registration_step_3_success + translation: "Deine E-Mail-Adresse wurde erfolgreich verifiziert. Kehre zu deiner Hub-Instanz zurück, sie holt deinen Lizenzschlüssel automatisch ab." + # Hub Managed - id: hub_managed_description translation: "Beantrage Zugang zu einer Managed-Instanz von Cryptomator Hub und hol dein Team mit der clientseitigen Verschlüsselung für deinen Cloud-Speicher an Bord." diff --git a/i18n/en.yaml b/i18n/en.yaml index 5bff01f76..0cdf0f71e 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -225,13 +225,64 @@ - id: for_individuals_header_title translation: "Keep your cloud data truly yours" - id: for_individuals_header_description - translation: "Data in the cloud is often not sufficiently protected. Cryptomator encrypts your documents, photos, and personal files with just a few clicks – ensuring that only you have access. No one else." + translation: "Cryptomator encrypts your documents, photos, and personal files in just a few clicks – so only you have access. No one else." - id: for_individuals_header_cta translation: "Download Now" - id: for_individuals_header_cta_description translation: "Available for Windows, macOS, Linux, Android, and iOS." -- id: for_individuals_header_woman_laptop_alt - translation: "Person sitting in front of a laptop while Cryptobot next to the person is pointing at the laptop" +- id: for_individuals_header_link + translation: "See how it works" + +- id: for_individuals_finder_locked_path_suffix + translation: " › Vault" +- id: for_individuals_finder_unlocked_path + translation: "Your Drive › Vault" +- id: for_individuals_finder_col_name + translation: "Name" +- id: for_individuals_finder_col_size + translation: "Size" +- id: for_individuals_finder_col_modified + translation: "Date Modified" +- id: for_individuals_finder_file_1_name + translation: "Vacation Photos" +- id: for_individuals_finder_file_1_modified + translation: "Today, 9:41 AM" +- id: for_individuals_finder_file_2_name + translation: "Tax-Return-2025.pdf" +- id: for_individuals_finder_file_2_size + translation: "2.4 MB" +- id: for_individuals_finder_file_2_modified + translation: "Yesterday, 6:07 PM" +- id: for_individuals_finder_file_3_name + translation: "Passport-Scan.jpg" +- id: for_individuals_finder_file_3_size + translation: "1.8 MB" +- id: for_individuals_finder_file_3_modified + translation: "07/12/2026" +- id: for_individuals_finder_file_4_name + translation: "Finances.xlsx" +- id: for_individuals_finder_file_4_size + translation: "96 KB" +- id: for_individuals_finder_file_4_modified + translation: "07/08/2026" +- id: for_individuals_finder_file_5_name + translation: "Lease-Agreement.pdf" +- id: for_individuals_finder_file_5_size + translation: "640 KB" +- id: for_individuals_finder_file_5_modified + translation: "06/27/2026" +- id: for_individuals_finder_file_7_name + translation: "Resume.docx" +- id: for_individuals_finder_file_7_size + translation: "88 KB" +- id: for_individuals_finder_file_7_modified + translation: "06/05/2026" +- id: for_individuals_hero_pill + translation: "End-to-end encrypted – only you hold the key" +- id: for_individuals_finder_items + translation: "6 items" +- id: for_individuals_stats_title + translation: "Trusted by millions worldwide" - id: for_individuals_downloads_title translation: "3M+" @@ -403,15 +454,49 @@ - id: hub_header_title translation: "Secure collaboration in the cloud" - id: hub_header_description - translation: "Cryptomator Hub encrypts your company's confidential data, from personal customer information to internal documents – fully GDPR-compliant, simple to use, and always under your control." + translation: "Cryptomator Hub encrypts your company's confidential data – GDPR-compliant, simple to use, and always under your control." - id: hub_header_managed_cta - translation: "Sign Up Now" + translation: "Start Free Trial" - id: hub_header_managed_cta_description translation: "Start your free 30-day trial today, no credit card required." - id: hub_header_kicker_early_access translation: "Hub 2.0.0 Early Access*" - id: hub_header_early_access_note translation: "Early access includes brand new features and an extended 60-day free trial." +- id: hub_header_link + translation: "See how it works" +- id: hub_hero_scene_vault + translation: "Shared Vault" +- id: hub_hero_card_vault_name + translation: "Finance" +- id: hub_hero_group_name + translation: "Accounting Team" +- id: hub_hero_group_subtitle + translation: "Group · 8 members" +- id: hub_hero_tile_audit + translation: "Audit Log" +- id: hub_hero_tile_devices + translation: "Devices" +- id: hub_hero_ad_row_users + translation: "128 users" +- id: hub_hero_ad_row_groups + translation: "12 groups" +- id: hub_hero_node_revoked + translation: "Access revoked" +- id: hub_hero_audit_row_1 + translation: "Access granted · Lena" +- id: hub_hero_audit_row_2 + translation: "Device registered · Jonas" +- id: hub_hero_audit_row_3 + translation: "Access revoked · Michael" +- id: hub_hero_row_owner_desc + translation: "CFO" +- id: hub_hero_tag_external + translation: "External" +- id: hub_hero_tag_owner + translation: "Owner" +- id: hub_hero_row_external_desc + translation: "Tax Advisor" - id: hub_header_group_magic_alt translation: "Cryptobot connects a group of people with its magical abilities through zero-knowledge encryption" @@ -438,6 +523,12 @@ translation: "Download your vault via Cryptomator Hub and open it directly in the Cryptomator app as an existing vault. Instead of entering a password, authentication is securely handled through Hub – keeping everything protected while ensuring easy access." - id: hub_workflow_step_3_alt translation: "Cryptomator app interface with multiple vaults" +- id: hub_workflow_step_4_title + translation: "4. Fully Traceable" +- id: hub_workflow_step_4_description + translation: "Who unlocked which vault, registered a device, or was granted access, and when? The audit log records all security-relevant events and gives you compliance evidence at the push of a button." +- id: hub_workflow_step_4_alt + translation: "Audit log in Cryptomator Hub with recorded events" - id: hub_features_title translation: "Why Cryptomator Hub?" diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 8dee484d9..4d85a931c 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -49,14 +49,7 @@ {{ end }} - {{ if hugo.IsDevelopment }} - {{ $css := resources.Get "css/main.css" | css.TailwindCSS }} - - {{ else }} - {{ $tailwindOpts := dict "minify" true }} - {{ $css := resources.Get "css/main.css" | css.TailwindCSS $tailwindOpts | fingerprint }} - - {{ end }} + {{ partial "page-css.html" "css/main.css" }} {{ block "styles" . }} {{ end }} diff --git a/layouts/for-individuals/single.html b/layouts/for-individuals/single.html index b871b534a..90fc79a05 100644 --- a/layouts/for-individuals/single.html +++ b/layouts/for-individuals/single.html @@ -1,40 +1,159 @@ {{ define "preloads" }} + + {{- /* Rotation icons for the finder hero; google-drive.svg is the initial src in the markup. */ -}} + + + {{ partial "altcha-css.html" . }} {{ end }} +{{ define "styles" }} + {{ partial "page-css.html" "css/finder-hero.css" }} +{{ end }} {{ define "main" }} -
-
- -
-
-
- Logo - CRYPTOMATOR + {{- /* baseof emits no padding for flush heroes, so the hero self-clears the fixed nav + banners (mirrors index.html). */ -}} + {{- $showWebinarBanner := .Scratch.Get "webinarBannerActive" -}} + {{- $showSaleBanner := .Scratch.Get "saleBannerActive" -}} + {{- $showAnniversaryBanner := .Scratch.Get "anniversaryBannerActive" -}} + {{- $showThinStrip := or $showWebinarBanner $showSaleBanner -}} + {{- $heroTopPad := "pt-16 md:pt-20" -}} + {{- if and $showThinStrip $showAnniversaryBanner -}} + {{- $heroTopPad = "pt-40 md:pt-40" -}} + {{- else if or $showThinStrip $showAnniversaryBanner -}} + {{- $heroTopPad = "pt-28 md:pt-28" -}} + {{- end -}} + {{- /* The webinar banner hides itself client-side when no webinar is live/upcoming; collapse its reserved padding to match (mirrors baseof.html). */ -}} + {{- $webinarIsThinStrip := and $showWebinarBanner (not $showSaleBanner) -}} + {{- $heroPadNoStrip := cond $showAnniversaryBanner "pt-28 md:pt-28" "pt-16 md:pt-20" -}} +
+
+ {{ if .Site.Params.paddleDesktopSalePriceId }} +
+ {{ i18n "for_individuals_header_kicker_sale" . }} +
+ {{ end }} +

{{ i18n "for_individuals_header_title" . | safeHTML }}

+

{{ i18n "for_individuals_header_description" . | safeHTML }}

+ +

{{ i18n "for_individuals_header_cta_description" . | safeHTML }}

+ {{ if .Site.Params.paddleDesktopSalePriceId }} +

* {{ i18n "pricing_discount_note" }}

+ {{ end }} +
+ + + {{- $finderRow := "grid grid-cols-[minmax(0,1fr)_4.5rem_6.5rem] md:grid-cols-[minmax(0,1fr)_5rem_8.5rem] gap-3 items-center px-5" -}} +
+
+
-
+ + -
+
+

{{ i18n "for_individuals_stats_title" }}

{{ i18n "for_individuals_downloads_title" }}

@@ -59,7 +178,10 @@

{{ i18n "for_individu

-
+
+ +
+
{{i18n @@ -89,6 +211,9 @@

{{ i18n "for_individuals_workflow_step_3_title" }}

{{ i18n "for_individuals_workflow_step_3_description" }}

+
+ +
@@ -213,6 +338,8 @@

{{ i18n "home_newsletter_title" . }} {{ $newsletterJs := resources.Get "js/newsletter.js" }} {{ $altchaJs := resources.Get "js/altcha/altcha.js" }} @@ -220,6 +347,8 @@

{{ i18n "home_newsletter_title" . }} {{ else }} + {{ $finderJs := resources.Get "js/finder-hero.js" | minify | fingerprint }} + {{ $newsletterJs := resources.Get "js/newsletter.js" | minify | fingerprint }} {{ $altchaJs := resources.Get "js/altcha/altcha.js" }} diff --git a/layouts/for-teams/single.html b/layouts/for-teams/single.html index 49f66c73e..49cfeca41 100644 --- a/layouts/for-teams/single.html +++ b/layouts/for-teams/single.html @@ -3,34 +3,156 @@ {{ partial "altcha-css.html" . }} {{ end }} +{{ define "styles" }} + {{ partial "page-css.html" "css/hub-scene.css" }} +{{ end }} {{ define "main" }} -
-
- -
-
-
- Logo - CRYPTOMATOR HUB +
+
+
+ {{ i18n "hub_header_kicker_early_access" . }} +
+

{{ i18n "hub_header_title" . | safeHTML }}

+

{{ i18n "hub_header_description" . | safeHTML }}

+ +

* {{ i18n "hub_header_early_access_note" . | safeHTML }}

+ +
+
+ + + +
+ + + + + {{ i18n "hub_hero_card_vault_name" }} + {{ i18n "hub_hero_scene_vault" }} + +
+ +
+ + + + + Anna + {{ i18n "hub_hero_row_owner_desc" }} + {{ i18n "hub_hero_tag_owner" }}
-
- {{ i18n "hub_header_kicker_early_access" . }} + +
+ + + + + Lena + {{ i18n "hub_hero_row_external_desc" }} + {{ i18n "hub_hero_tag_external" }}
+ +
+ + + + + Jonas +
+ +
Jonas' {{ i18n "hub_hero_tile_devices" }}
+
MacBook Pro
+
iPhone 15
+
+
+ +
+ + + + + {{ i18n "hub_hero_group_name" }} + {{ i18n "hub_hero_group_subtitle" }} +
+ +
+ + + Active DirectoryEntra IDOkta + {{ i18n "hub_hero_ad_row_users" }} · {{ i18n "hub_hero_ad_row_groups" }} +
+ +
+ + + + + Michael + {{ i18n "hub_hero_node_revoked" }} +
+ +
+
+
{{ i18n "hub_hero_tile_audit" }}
+
{{ i18n "hub_hero_audit_row_1" }}
+
{{ i18n "hub_hero_audit_row_2" }}
+
{{ i18n "hub_hero_audit_row_3" }}
+
+
+
-

{{ i18n "hub_header_title" . | safeHTML }}

-

{{ i18n "hub_header_description" . | safeHTML }}

- -

{{ i18n "hub_header_managed_cta_description" . | safeHTML }}

-

- * {{ i18n "hub_header_early_access_note" . | safeHTML }} -

-
-
-
+ + + + {{ $walbuschPage := .Site.GetPage (printf "/success-stories/walbusch.%s.html" .Language.Lang) }} {{ if $walbuschPage }} @@ -48,7 +170,7 @@

{{ i18n "hub_header_title" . | safeHTML }}

- + {{ i18n "success_story_read_link" . }}

@@ -58,7 +180,7 @@

{{ i18n "hub_header_title" . | safeHTML }}

-

{{ i18n "hub_video_title" . }}

+

{{ i18n "hub_video_title" . }}

{{ i18n "hub_video_description" . }}

@@ -72,7 +194,7 @@

{{ i18n "hub_video_title" . }}

- {{i18n + {{i18n

{{ i18n "hub_workflow_step_1_title" }}

@@ -82,7 +204,7 @@

{{ i18n "hub_workflow_step_1_title" }}

- {{i18n + {{i18n

{{ i18n "hub_workflow_step_2_title" }}

@@ -92,13 +214,23 @@

{{ i18n "hub_workflow_step_2_title" }}

- {{i18n + {{i18n

{{ i18n "hub_workflow_step_3_title" }}

{{ i18n "hub_workflow_step_3_description" }}

+ +
+
+ {{i18n +
+
+

{{ i18n "hub_workflow_step_4_title" }}

+

{{ i18n "hub_workflow_step_4_description" }}

+
+
@@ -109,8 +241,8 @@

{{ i18n "hub_features_title" . }}

-
-

{{ i18n "hub_features_feature_1_title" . }}

+
+

{{ i18n "hub_features_feature_1_title" . }}

{{ i18n "hub_features_feature_1_description" . | safeHTML }}

@@ -118,8 +250,8 @@

{{ i18n "hub_fe

-
-

{{ i18n "hub_features_feature_2_title" . }}

+
+

{{ i18n "hub_features_feature_2_title" . }}

{{ i18n "hub_features_feature_2_description" . | safeHTML }}

@@ -127,8 +259,8 @@

{{ i18

-
-

{{ i18n "hub_features_feature_3_title" . }}

+
+

{{ i18n "hub_features_feature_3_title" . }}

{{ i18n "hub_features_feature_3_description" . | safeHTML }}

@@ -136,8 +268,8 @@

{{ i18n "h

-
-

{{ i18n "hub_features_feature_4_title" . }}

+
+

{{ i18n "hub_features_feature_4_title" . }}

{{ i18n "hub_features_feature_4_description" . | safeHTML }}

@@ -145,8 +277,8 @@

{{ i18n "hub_

-
-

{{ i18n "hub_features_feature_5_title" . }}

+
+

{{ i18n "hub_features_feature_5_title" . }}

{{ i18n "hub_features_feature_5_description" . | safeHTML }}

@@ -154,8 +286,8 @@

{{ i18n "hub_f

-
-

{{ i18n "hub_features_feature_6_title" . }}

+
+

{{ i18n "hub_features_feature_6_title" . }}

{{ i18n "hub_features_feature_6_description" . | safeHTML }}

@@ -168,7 +300,7 @@

{{ i18n

{{ i18n "hub_pricing_title" . }}

{{ i18n "hub_pricing_description" . }}

- + {{ i18n "hub_pricing_button" . }}
@@ -179,9 +311,9 @@

{{ i18n "hub_deployment_tit
-
+

- {{ i18n "pricing_hub_managed_title" . }} + {{ i18n "pricing_hub_managed_title" . }}

@@ -195,29 +327,29 @@

  • - + {{ i18n "hub_deployment_managed_benefit_1" . }}
  • - + {{ i18n "hub_deployment_managed_benefit_2" . }}
  • - + {{ i18n "hub_deployment_managed_benefit_3" . }}
- + {{ i18n "pricing_hub_managed_cta" . }}
-
+

- {{ i18n "pricing_hub_self_hosted_title" . }} + {{ i18n "pricing_hub_self_hosted_title" . }}

@@ -227,20 +359,20 @@

  • - + {{ i18n "hub_deployment_self_hosted_benefit_1" . }}
  • - + {{ i18n "hub_deployment_self_hosted_benefit_2" . }}
  • - + {{ i18n "hub_deployment_self_hosted_benefit_3" . }}
- + {{ i18n "pricing_hub_self_hosted_cta" . }}
@@ -272,7 +404,7 @@

{{ i18n "faq_title" . }}

{{ i18n "hub_contact_us_title" . }}

{{ i18n "hub_contact_us_description" . | safeHTML }}

- + {{ i18n "hub_contact_us_button" . }}
@@ -284,7 +416,7 @@

{{ i18n "hub_newsletter_title" . }}

{{ i18n "hub_newsletter_instruction" . | safeHTML }}

- @@ -300,8 +432,8 @@

{{ i18n "hub_newsletter_title" . }}

- - + +

{{ end }} diff --git a/layouts/hub-billing/single.html b/layouts/hub-billing/single.html index 5c2b7e5e5..585387433 100644 --- a/layouts/hub-billing/single.html +++ b/layouts/hub-billing/single.html @@ -60,7 +60,7 @@

{{ i18n "hub_billing_createsession_found_description" . }}

- @@ -74,7 +74,7 @@

- @@ -148,7 +148,7 @@

{{ .Title }}

{{ i18n "hub_billing_manage_status_quantity_description" . }}:

- @@ -175,11 +175,11 @@

{{ .Title }}

- - @@ -212,7 +212,7 @@

{{ .Title }}

- @@ -229,10 +229,10 @@

{{ i18n "hub_billing_manage_license_key_instruction" . }}

- -