ultimate-jekyll-manager 0.0.96 → 0.0.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.playwright-mcp/page-2025-10-22T19-11-27-666Z.png +0 -0
- package/.playwright-mcp/page-2025-10-22T19-11-57-357Z.png +0 -0
- package/CLAUDE.md +42 -0
- package/README.md +66 -0
- package/_backup/checkout copy 2.html +392 -0
- package/_backup/checkout copy 3.html +376 -0
- package/_backup/checkout copy 4.html +365 -0
- package/_backup/checkout copy.html +331 -0
- package/_backup/checkout-semi.html +331 -0
- package/_backup/cover-old.html +55 -0
- package/dist/assets/css/core/bindings.scss +7 -2
- package/dist/assets/css/core/utilities.scss +9 -1
- package/dist/assets/css/pages/payment/checkout/index.scss +52 -7
- package/dist/assets/js/core/complete.js +56 -0
- package/dist/assets/js/core/initialize.js +11 -0
- package/dist/assets/js/pages/app/index.js +82 -43
- package/dist/assets/js/pages/download/index.js +0 -6
- package/dist/assets/js/pages/payment/checkout/index.js +58 -52
- package/dist/assets/js/pages/payment/checkout/modules/discount-bindings.js +51 -0
- package/dist/assets/js/pages/payment/checkout/modules/pricing.js +55 -30
- package/dist/assets/js/pages/payment/checkout/modules/state.js +68 -14
- package/dist/assets/js/pages/payment/checkout/modules/ui-bindings.js +160 -0
- package/dist/assets/js/pages/payment/checkout/modules/ui.js +27 -42
- package/dist/assets/js/pages/payment/confirmation/index.js +58 -53
- package/dist/assets/js/pages/payment/confirmation/modules/bindings.js +28 -0
- package/dist/assets/js/pages/payment/confirmation/modules/state.js +19 -0
- package/dist/assets/js/ultimate-jekyll-manager.js +6 -2
- package/dist/assets/themes/classy/css/base/_spacing.scss +27 -0
- package/dist/defaults/dist/{redirects/authentication/helpers/well-known-change-password.html → .well-known/change-password.html} +4 -1
- package/dist/defaults/dist/.well-known/security.txt +15 -0
- package/dist/defaults/dist/_includes/core/body.html +31 -0
- package/dist/defaults/dist/_includes/core/foot.html +35 -0
- package/dist/defaults/dist/_layouts/blueprint/app.html +1 -1
- package/dist/defaults/dist/_layouts/blueprint/payment/checkout.html +6 -1
- package/dist/defaults/dist/_layouts/blueprint/payment/confirmation.html +6 -1
- package/dist/defaults/dist/_layouts/core/root.html +1 -0
- package/dist/defaults/dist/_layouts/modules/utilities/redirect.html +42 -31
- package/dist/defaults/dist/_layouts/themes/classy/backend/core/base.html +0 -35
- package/dist/defaults/dist/_layouts/themes/classy/frontend/core/base.html +0 -34
- package/dist/defaults/dist/_layouts/themes/classy/frontend/core/cover.html +6 -9
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/404.html +35 -44
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +1 -1
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/app.html +83 -0
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/oauth2.html +42 -44
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/reset.html +57 -59
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signin.html +67 -69
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signup.html +76 -78
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/download.html +1 -4
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/checkout.html +291 -240
- package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/confirmation.html +43 -47
- package/dist/defaults/dist/humans.txt +25 -0
- package/dist/defaults/dist/opensearch.xml +26 -0
- package/dist/defaults/dist/pages/test/account/dashboard.html +3 -0
- package/dist/defaults/dist/pages/test/index.md +2 -2
- package/dist/defaults/dist/pages/test/libraries/ads.html +3 -0
- package/dist/defaults/dist/pages/test/libraries/bootstrap-components.html +11 -2
- package/dist/defaults/dist/pages/test/libraries/cover.html +47 -0
- package/dist/defaults/dist/pages/test/libraries/error.html +3 -0
- package/dist/defaults/dist/pages/test/libraries/lazy-loading.html +3 -0
- package/dist/defaults/dist/pages/test/redirect/external.md +3 -0
- package/dist/defaults/dist/pages/test/redirect/internal.md +3 -0
- package/dist/defaults/dist/pages/test/translation/index.md +2 -2
- package/dist/defaults/dist/redirects/authentication/helpers/change-password.html +1 -1
- package/dist/defaults/dist/redirects/authentication/helpers/forgot.html +1 -1
- package/dist/defaults/dist/redirects/authentication/helpers/recover.html +1 -1
- package/dist/defaults/dist/redirects/authentication/helpers/reset-password.html +1 -1
- package/dist/defaults/dist/sitemap.html +112 -28
- package/dist/defaults/dist/sitemap.xml +6 -1
- package/firebase-debug.log +388 -0
- package/package.json +1 -1
- package/dist/assets/js/core/init.js +0 -36
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Confirmation state management
|
|
2
|
+
// This is the SINGLE source of truth - structure matches bindings exactly
|
|
3
|
+
export const state = {
|
|
4
|
+
confirmation: {
|
|
5
|
+
order: {
|
|
6
|
+
id: 'Loading...',
|
|
7
|
+
productName: 'Product',
|
|
8
|
+
total: '$0.00',
|
|
9
|
+
currency: 'USD'
|
|
10
|
+
},
|
|
11
|
+
subscription: {
|
|
12
|
+
show: false,
|
|
13
|
+
hasFreeTrial: false,
|
|
14
|
+
billingCycle: '',
|
|
15
|
+
infoText: ''
|
|
16
|
+
},
|
|
17
|
+
loaded: false
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Static imports for core modules (bundled together for efficiency)
|
|
2
|
-
import
|
|
2
|
+
// import initializeModule from '__main_assets__/js/core/initialize.js';
|
|
3
3
|
import authModule from '__main_assets__/js/core/auth.js';
|
|
4
4
|
import lazyLoadingModule from '__main_assets__/js/core/lazy-loading.js';
|
|
5
5
|
import queryStringsModule from '__main_assets__/js/core/query-strings.js';
|
|
6
6
|
import serviceWorkerModule from '__main_assets__/js/core/service-worker.js';
|
|
7
|
+
import completeModule from '__main_assets__/js/core/complete.js';
|
|
7
8
|
|
|
8
9
|
// Ultimate Jekyll Manager Module
|
|
9
10
|
export default async function (Manager, options) {
|
|
@@ -17,7 +18,7 @@ export default async function (Manager, options) {
|
|
|
17
18
|
console.log('Global module loaded successfully (assets/js/ultimate-jekyll-manager.js)');
|
|
18
19
|
|
|
19
20
|
// Initialize fixed modules synchronously (already loaded via static imports)
|
|
20
|
-
|
|
21
|
+
// initializeModule(Manager, options);
|
|
21
22
|
authModule(Manager, options);
|
|
22
23
|
lazyLoadingModule(Manager, options);
|
|
23
24
|
queryStringsModule(Manager, options);
|
|
@@ -56,4 +57,7 @@ export default async function (Manager, options) {
|
|
|
56
57
|
|
|
57
58
|
// Wait for all conditional modules to load
|
|
58
59
|
await Promise.all(modulePromises);
|
|
60
|
+
|
|
61
|
+
// Run the complete module to finalize page load state
|
|
62
|
+
completeModule(Manager, options);
|
|
59
63
|
}
|
|
@@ -35,3 +35,30 @@
|
|
|
35
35
|
.min-vh-80 { min-height: 80vh !important; }
|
|
36
36
|
.min-vh-90 { min-height: 90vh !important; }
|
|
37
37
|
.min-vh-100 { min-height: 100vh !important; }
|
|
38
|
+
|
|
39
|
+
// ============================================
|
|
40
|
+
// Max Width Utilities (Bootstrap Breakpoints)
|
|
41
|
+
// ============================================
|
|
42
|
+
// Max width utility classes based on Bootstrap grid breakpoints
|
|
43
|
+
// Usage: mw-sm, mw-md, mw-lg, mw-xl, mw-xxl
|
|
44
|
+
// These set the max-width to match Bootstrap's container breakpoints
|
|
45
|
+
|
|
46
|
+
.mw-sm {
|
|
47
|
+
max-width: 576px !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.mw-md {
|
|
51
|
+
max-width: 768px !important;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.mw-lg {
|
|
55
|
+
max-width: 992px !important;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.mw-xl {
|
|
59
|
+
max-width: 1200px !important;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.mw-xxl {
|
|
63
|
+
max-width: 1400px !important;
|
|
64
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
### ALL PAGES ###
|
|
3
|
+
layout: null
|
|
4
|
+
permalink: /.well-known/security.txt
|
|
5
|
+
|
|
6
|
+
### REGULAR PAGES ###
|
|
7
|
+
sitemap:
|
|
8
|
+
include: false
|
|
9
|
+
---
|
|
10
|
+
Contact: mailto:{{ site.brand.email }}
|
|
11
|
+
Contact: {{ site.url }}/contact
|
|
12
|
+
Preferred-Languages: en
|
|
13
|
+
Canonical: {{ site.url }}/.well-known/security.txt
|
|
14
|
+
Policy: {{ site.url }}/privacy
|
|
15
|
+
Expires: {{ site.time | date: "%Y" | plus: 1 }}-12-31T23:59:59.000Z
|
|
@@ -34,3 +34,34 @@
|
|
|
34
34
|
Save <strong>15%</strong> at checkout—today only! <a href="{{ site.url }}/pricing" target="_blank">Claim discount</a>.
|
|
35
35
|
</div>
|
|
36
36
|
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Script to prevent clicks on disabled elements during page load -->
|
|
39
|
+
<script type="text/javascript">
|
|
40
|
+
(function() {
|
|
41
|
+
'use strict';
|
|
42
|
+
// Attach click listener immediately to prevent clicks on disabled elements
|
|
43
|
+
document.addEventListener('click', function(e) {
|
|
44
|
+
var target = e.target;
|
|
45
|
+
|
|
46
|
+
// Check if click is on a disabled element OR a button/form element during page load
|
|
47
|
+
if (
|
|
48
|
+
target.closest('*[disabled], *.disabled, :disabled')
|
|
49
|
+
|| (
|
|
50
|
+
document.documentElement.hasAttribute('data-page-loading')
|
|
51
|
+
&& target.closest('button, input[type="submit"], input[type="button"], input[type="reset"], .btn-action')
|
|
52
|
+
)
|
|
53
|
+
) {
|
|
54
|
+
// Log disabled click attempt in development
|
|
55
|
+
if (window.location.hostname === 'localhost' || window.location.hostname.startsWith('192.168')) {
|
|
56
|
+
console.log('Click prevented (disabled):', target);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Prevent all actions
|
|
60
|
+
e.preventDefault();
|
|
61
|
+
e.stopImmediatePropagation();
|
|
62
|
+
e.stopPropagation();
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}, { capture: true });
|
|
66
|
+
}());
|
|
67
|
+
</script>
|
|
@@ -78,6 +78,41 @@
|
|
|
78
78
|
<!-- JS Bundle -->
|
|
79
79
|
<script type="text/javascript" src="{{ site.url }}/assets/js/main.bundle.js?cb={{ site.uj.cache_breaker }}" async></script>
|
|
80
80
|
|
|
81
|
+
<!-- Script to quickly handle nav user state -->
|
|
82
|
+
<script type="text/javascript">
|
|
83
|
+
try {
|
|
84
|
+
(function() {
|
|
85
|
+
'use strict';
|
|
86
|
+
// Read and parse localStorage data
|
|
87
|
+
var managerData = localStorage.getItem('_manager');
|
|
88
|
+
var parsedData = managerData ? JSON.parse(managerData) : null;
|
|
89
|
+
var isLoggedIn = !!(parsedData && parsedData.auth && parsedData.auth.user && parsedData.auth.user.uid);
|
|
90
|
+
|
|
91
|
+
// Quit if NOT logged in
|
|
92
|
+
if (!isLoggedIn) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Process binds
|
|
97
|
+
var $bindElements = document.querySelectorAll('[data-wm-bind]');
|
|
98
|
+
|
|
99
|
+
$bindElements.forEach(function($el) {
|
|
100
|
+
var bindValue = $el.getAttribute('data-wm-bind');
|
|
101
|
+
|
|
102
|
+
if (bindValue === '@show auth.user') {
|
|
103
|
+
// Show element when user is logged in
|
|
104
|
+
$el.removeAttribute('hidden');
|
|
105
|
+
} else if (bindValue === '@show !auth.user') {
|
|
106
|
+
// Hide element when user is logged in (show when not logged in)
|
|
107
|
+
$el.setAttribute('hidden', '');
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}());
|
|
111
|
+
} catch (error) {
|
|
112
|
+
console.error('Error occurred while selecting elements:', error);
|
|
113
|
+
}
|
|
114
|
+
</script>
|
|
115
|
+
|
|
81
116
|
<!-- Script - Google Analytics Tracking Script -->
|
|
82
117
|
{% iftruthy page.resolved.tracking.google-analytics %}
|
|
83
118
|
<script type="text/javascript" src="https://www.googletagmanager.com/gtag/js?id={{ site.tracking.google-analytics }}" async></script>
|
|
@@ -13,40 +13,51 @@ meta:
|
|
|
13
13
|
{% capture querystring %}{{ page.resolved.redirect.querystring }}{% endcapture %}
|
|
14
14
|
{% capture modifier %}{{ page.resolved.redirect.modifier | default: "" }}{% endcapture %}
|
|
15
15
|
|
|
16
|
-
<
|
|
17
|
-
<div class="
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
<section class="col-12 col-md-8 col-lg-6 col-xl-5 mw-sm">
|
|
17
|
+
<div class="card border-0 shadow-lg">
|
|
18
|
+
<div class="card-body p-3 p-md-5">
|
|
19
|
+
<!-- Logo -->
|
|
20
|
+
<div class="text-center mb-3">
|
|
21
|
+
<a href="{{ site.url }}">
|
|
22
|
+
<div class="avatar avatar-xl">
|
|
23
|
+
<img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }}"/>
|
|
24
|
+
</div>
|
|
25
|
+
</a>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- Header -->
|
|
29
|
+
<div class="text-center mb-4">
|
|
30
|
+
<div class="d-inline-flex align-items-center">
|
|
31
|
+
<h1 class="h3 mb-0">Redirecting...</h1>
|
|
32
|
+
<div class="spinner-border spinner-border-sm text-primary ms-3" role="status">
|
|
33
|
+
<span class="visually-hidden">Loading...</span>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<p class="text-muted mt-2 mb-0">
|
|
37
|
+
Taking you to the page you requested
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<!-- Action Buttons -->
|
|
42
|
+
<div class="d-grid gap-2 d-sm-block text-center">
|
|
43
|
+
<a id="home-button" class="btn btn-outline-adaptive btn-lg mb-2 mb-sm-0 me-sm-2" href="{{ site.url }}">
|
|
44
|
+
<span class="d-inline-flex align-items-center">
|
|
45
|
+
{% uj_icon "house", "fa-lg me-2" %}
|
|
46
|
+
Return home
|
|
47
|
+
</span>
|
|
48
|
+
</a>
|
|
49
|
+
<noscript>
|
|
50
|
+
<a id="redirect-button" class="btn btn-adaptive btn-lg mb-2 mb-sm-0" href="{{ url }}">
|
|
51
|
+
<span class="d-inline-flex align-items-center">
|
|
52
|
+
{% uj_icon "rocket", "fa-lg me-2" %}
|
|
53
|
+
Take me there
|
|
54
|
+
</span>
|
|
55
|
+
</a>
|
|
56
|
+
</noscript>
|
|
21
57
|
</div>
|
|
22
|
-
</a>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="d-inline-flex justify-content-between align-items-center">
|
|
25
|
-
<h1 class="h1">Redirecting...</h1>
|
|
26
|
-
<div class="spinner-border spinner-border-md text-primary ms-3" role="status">
|
|
27
|
-
<span class="visually-hidden">Loading...</span>
|
|
28
58
|
</div>
|
|
29
59
|
</div>
|
|
30
|
-
|
|
31
|
-
Taking you to the page you requested.
|
|
32
|
-
</p>
|
|
33
|
-
<div class="d-grid gap-2 d-sm-block">
|
|
34
|
-
<a id="home-button" class="btn btn-outline-primary btn-lg mb-2 mb-sm-0 me-md-2" href="{{ site.url }}">
|
|
35
|
-
<span class="d-inline-flex align-items-center">
|
|
36
|
-
{% uj_icon "house", "fa-lg me-2" %}
|
|
37
|
-
Return home
|
|
38
|
-
</span>
|
|
39
|
-
</a>
|
|
40
|
-
<noscript>
|
|
41
|
-
<a id="redirect-button" class="btn btn-primary btn-lg mb-2 mb-sm-0 me-md-2" href="{{ url }}">
|
|
42
|
-
<span class="d-inline-flex align-items-center">
|
|
43
|
-
{% uj_icon "rocket", "fa-lg me-2" %}
|
|
44
|
-
Take me there
|
|
45
|
-
</span>
|
|
46
|
-
</a>
|
|
47
|
-
</noscript>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
60
|
+
</section>
|
|
50
61
|
|
|
51
62
|
<!-- Redirect configuration for external script -->
|
|
52
63
|
<div id="redirect-config" style="display: none;"
|
|
@@ -53,38 +53,3 @@ web_manager:
|
|
|
53
53
|
</main>
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
56
|
-
|
|
57
|
-
<!-- Script to quickly handle user state -->
|
|
58
|
-
<script type="text/javascript">
|
|
59
|
-
try {
|
|
60
|
-
(function() {
|
|
61
|
-
'use strict';
|
|
62
|
-
// Read and parse localStorage data
|
|
63
|
-
var managerData = localStorage.getItem('_manager');
|
|
64
|
-
var parsedData = managerData ? JSON.parse(managerData) : null;
|
|
65
|
-
var isLoggedIn = !!(parsedData && parsedData.auth && parsedData.auth.user && parsedData.auth.user.uid);
|
|
66
|
-
|
|
67
|
-
// Quit if NOT logged in
|
|
68
|
-
if (!isLoggedIn) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Process binds
|
|
73
|
-
var $bindElements = document.querySelectorAll('[data-wm-bind]');
|
|
74
|
-
|
|
75
|
-
$bindElements.forEach(function($el) {
|
|
76
|
-
var bindValue = $el.getAttribute('data-wm-bind');
|
|
77
|
-
|
|
78
|
-
if (bindValue === '@show auth.user') {
|
|
79
|
-
// Show element when user is logged in
|
|
80
|
-
$el.removeAttribute('hidden');
|
|
81
|
-
} else if (bindValue === '@show !auth.user') {
|
|
82
|
-
// Hide element when user is logged in (show when not logged in)
|
|
83
|
-
$el.setAttribute('hidden', '');
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}());
|
|
87
|
-
} catch (error) {
|
|
88
|
-
console.error('Error occurred while selecting elements:', error);
|
|
89
|
-
}
|
|
90
|
-
</script>
|
|
@@ -30,37 +30,3 @@ theme:
|
|
|
30
30
|
{%- include /frontend/sections/footer.html -%}
|
|
31
31
|
{% endunless %}
|
|
32
32
|
|
|
33
|
-
<!-- Script to quickly handle nav user state -->
|
|
34
|
-
<script type="text/javascript">
|
|
35
|
-
try {
|
|
36
|
-
(function() {
|
|
37
|
-
'use strict';
|
|
38
|
-
// Read and parse localStorage data
|
|
39
|
-
var managerData = localStorage.getItem('_manager');
|
|
40
|
-
var parsedData = managerData ? JSON.parse(managerData) : null;
|
|
41
|
-
var isLoggedIn = !!(parsedData && parsedData.auth && parsedData.auth.user && parsedData.auth.user.uid);
|
|
42
|
-
|
|
43
|
-
// Quit if NOT logged in
|
|
44
|
-
if (!isLoggedIn) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Process binds
|
|
49
|
-
var $bindElements = document.querySelectorAll('[data-wm-bind]');
|
|
50
|
-
|
|
51
|
-
$bindElements.forEach(function($el) {
|
|
52
|
-
var bindValue = $el.getAttribute('data-wm-bind');
|
|
53
|
-
|
|
54
|
-
if (bindValue === '@show auth.user') {
|
|
55
|
-
// Show element when user is logged in
|
|
56
|
-
$el.removeAttribute('hidden');
|
|
57
|
-
} else if (bindValue === '@show !auth.user') {
|
|
58
|
-
// Hide element when user is logged in (show when not logged in)
|
|
59
|
-
$el.setAttribute('hidden', '');
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}());
|
|
63
|
-
} catch (error) {
|
|
64
|
-
console.error('Error occurred while selecting elements:', error);
|
|
65
|
-
}
|
|
66
|
-
</script>
|
|
@@ -7,13 +7,9 @@ theme:
|
|
|
7
7
|
nav:
|
|
8
8
|
enabled: false
|
|
9
9
|
main:
|
|
10
|
-
class: "d-flex align-items-{{ page.resolved.theme.main.align | default: 'center' }}
|
|
10
|
+
class: "d-flex align-items-{{ page.resolved.theme.main.align | default: 'center' }} py-5"
|
|
11
11
|
footer:
|
|
12
12
|
enabled: false
|
|
13
|
-
### CORE CONFIG ###
|
|
14
|
-
# core:
|
|
15
|
-
# cover:
|
|
16
|
-
# class: "align-top" # USED TO HAVE {{ page.resolved.theme.core.cover.class }} IN THE TOP LEVEL CLASS WITH w-100
|
|
17
13
|
---
|
|
18
14
|
|
|
19
15
|
<!-- Critical inline CSS to prevent FOUC on cover pages -->
|
|
@@ -32,10 +28,11 @@ theme:
|
|
|
32
28
|
}
|
|
33
29
|
</style>
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
<!-- Cover container with flexible column sizing -->
|
|
32
|
+
<div class="container-fluid">
|
|
36
33
|
<div class="row justify-content-center">
|
|
37
|
-
|
|
38
|
-
{{ content | uj_content_format }}
|
|
39
|
-
</div>
|
|
34
|
+
{{ content | uj_content_format }}
|
|
40
35
|
</div>
|
|
41
36
|
</div>
|
|
37
|
+
|
|
38
|
+
|
|
@@ -22,56 +22,47 @@ suggested_pages:
|
|
|
22
22
|
link: "/team"
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
<
|
|
26
|
-
<div class="
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<!-- Main Content -->
|
|
37
|
-
<h1 class="h1 text-primary mb-3">
|
|
38
|
-
404
|
|
39
|
-
</h1>
|
|
40
|
-
<h2 class="h3 mb-3">Oops! Page Not Found</h2>
|
|
41
|
-
<p class="fs-5 text-muted mb-4">
|
|
42
|
-
Sorry, the page you're looking for doesn't exist or has been moved. Don't worry, it happens to the best of us!
|
|
43
|
-
</p>
|
|
25
|
+
<section class="col-12 col-md-10 col-lg-8 col-xl-6 mw-md">
|
|
26
|
+
<div class="card border-0 shadow-lg">
|
|
27
|
+
<div class="card-body p-3 p-md-5">
|
|
28
|
+
<!-- Header -->
|
|
29
|
+
<div class="text-center mb-4">
|
|
30
|
+
<h1 class="display-1 mb-3">404</h1>
|
|
31
|
+
<!-- <h2 class="h3 mb-3">Oops! Page Not Found</h2> -->
|
|
32
|
+
<p class="text-muted">
|
|
33
|
+
Sorry, the page you're looking for doesn't exist or has been moved. Don't worry, it happens to the best of us!
|
|
34
|
+
</p>
|
|
35
|
+
</div>
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
<strong>Requested URL:</strong> <code id="page-url">{{ page.canonical.url }}</code>
|
|
37
|
+
<!-- URL Display -->
|
|
38
|
+
<div class="alert alert-warning text-center mb-4" role="alert">
|
|
39
|
+
<small class="text-body">
|
|
40
|
+
<strong>Requested URL:</strong> <span id="page-url" class="text-break">{{ page.canonical.url }}</span>
|
|
50
41
|
</small>
|
|
51
42
|
</div>
|
|
52
|
-
</div>
|
|
53
43
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
44
|
+
<!-- Primary Actions -->
|
|
45
|
+
<div class="d-grid gap-2 d-sm-block text-center mb-4">
|
|
46
|
+
<a href="{{ site.url }}" class="btn btn-adaptive btn-lg mb-2 mb-sm-0 me-sm-2">
|
|
47
|
+
{% uj_icon "house", "me-2" %}
|
|
48
|
+
Back to Home
|
|
49
|
+
</a>
|
|
50
|
+
<button class="btn btn-outline-adaptive btn-lg mb-2 mb-sm-0" onclick="window.history.back()">
|
|
51
|
+
{% uj_icon "arrow-left", "me-2" %}
|
|
52
|
+
Go Back
|
|
53
|
+
</button>
|
|
54
|
+
</div>
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
56
|
+
<!-- Help Section -->
|
|
57
|
+
<div class="text-center pt-4 border-top">
|
|
58
|
+
<p class="text-muted mb-0">
|
|
59
|
+
Still can't find what you're looking for?
|
|
60
|
+
<a href="/contact" class="text-decoration-none fw-semibold">Contact our support team</a>
|
|
61
|
+
and we'll help you out!
|
|
62
|
+
</p>
|
|
63
|
+
</div>
|
|
73
64
|
</div>
|
|
74
65
|
</div>
|
|
75
|
-
</
|
|
66
|
+
</section>
|
|
76
67
|
|
|
77
68
|
{{ content | uj_content_format }}
|
|
@@ -101,7 +101,7 @@ badges:
|
|
|
101
101
|
---
|
|
102
102
|
|
|
103
103
|
<!-- Fixed Header -->
|
|
104
|
-
<header class="position-fixed top-0 start-0 w-100 bg-body-secondary border-bottom" style="z-index: 1030;">
|
|
104
|
+
<header class="position-fixed top-0 start-0 w-100 bg-body-secondary border-bottom shadow-sm" style="z-index: 1030;">
|
|
105
105
|
<div class="container-fluid px-4">
|
|
106
106
|
<div class="d-flex align-items-center justify-content-between py-3">
|
|
107
107
|
<!-- Left: Brand -->
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
### ALL PAGES ###
|
|
3
|
+
layout: themes/[ site.theme.id ]/frontend/core/cover
|
|
4
|
+
asset_path: app/index
|
|
5
|
+
|
|
6
|
+
### PAGE CONFIG ###
|
|
7
|
+
app:
|
|
8
|
+
protocol: "{{ site.brand.id | default: site.brand.name | slugify }}://"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<!-- App Launch Section -->
|
|
12
|
+
<section class="col-12 col-md-8 col-lg-6 col-xl-5 mw-sm">
|
|
13
|
+
<div class="card border-0 shadow-lg">
|
|
14
|
+
<div class="card-body p-3 p-md-5">
|
|
15
|
+
<!-- Logo -->
|
|
16
|
+
<div class="text-center mb-3">
|
|
17
|
+
<div class="avatar avatar-xl">
|
|
18
|
+
<img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }} Logo"/>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- Header -->
|
|
23
|
+
<div class="text-center mb-4">
|
|
24
|
+
<h1 class="h3 mb-2">Opening {{ site.brand.name }}...</h1>
|
|
25
|
+
<p class="text-muted">Launching your desktop application</p>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- Loading Spinner -->
|
|
29
|
+
<div class="text-center mb-4">
|
|
30
|
+
<div class="spinner-border text-primary" role="status">
|
|
31
|
+
<span class="visually-hidden">Loading...</span>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<!-- Error Alert (Hidden by default) -->
|
|
36
|
+
<div id="error-alert" class="alert alert-warning mb-4" role="alert" hidden>
|
|
37
|
+
<div class="d-flex align-items-center">
|
|
38
|
+
{% uj_icon "triangle-exclamation", "me-2" %}
|
|
39
|
+
<div>
|
|
40
|
+
<strong>App not installed?</strong><br>
|
|
41
|
+
<small>Download {{ site.brand.name }} for your platform below.</small>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<!-- Action Buttons -->
|
|
47
|
+
<div class="d-grid gap-2 mb-4">
|
|
48
|
+
<a id="launch-button" href="{{ page.resolved.app.protocol }}" class="btn btn-primary">
|
|
49
|
+
{% uj_icon "rocket", "me-2" %}
|
|
50
|
+
<span>Launch App</span>
|
|
51
|
+
</a>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<!-- Download Section -->
|
|
55
|
+
<div class="text-center">
|
|
56
|
+
<p class="text-muted small mb-3">Don't have the app?</p>
|
|
57
|
+
|
|
58
|
+
<a id="download-button" href="/download" class="btn btn-adaptive">
|
|
59
|
+
{% uj_icon "download", "me-2" %}
|
|
60
|
+
<span>Download App</span>
|
|
61
|
+
</a>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<!-- Alternative Actions -->
|
|
65
|
+
<div class="mt-4 pt-4 border-top text-center">
|
|
66
|
+
<p class="text-muted small mb-2">Having trouble?</p>
|
|
67
|
+
<div class="btn-group" role="group">
|
|
68
|
+
<a href="/" class="btn btn-sm btn-outline-adaptive">
|
|
69
|
+
{% uj_icon "house", "me-1" %}
|
|
70
|
+
<span>Go to Website</span>
|
|
71
|
+
</a>
|
|
72
|
+
<a href="/contact" class="btn btn-sm btn-outline-adaptive">
|
|
73
|
+
{% uj_icon "headset", "me-1" %}
|
|
74
|
+
<span>Get Help</span>
|
|
75
|
+
</a>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</section>
|
|
81
|
+
|
|
82
|
+
{{ content | uj_content_format }}
|
|
83
|
+
|