ultimate-jekyll-manager 0.0.95 → 0.0.97

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.
Files changed (35) hide show
  1. package/.playwright-mcp/page-2025-10-22T19-11-27-666Z.png +0 -0
  2. package/.playwright-mcp/page-2025-10-22T19-11-57-357Z.png +0 -0
  3. package/_backup/cover-old.html +55 -0
  4. package/dist/assets/css/core/utilities.scss +3 -1
  5. package/dist/assets/js/pages/app/index.js +16 -32
  6. package/dist/defaults/dist/{redirects/authentication/helpers/well-known-change-password.html → .well-known/change-password.html} +4 -1
  7. package/dist/defaults/dist/.well-known/security.txt +15 -0
  8. package/dist/defaults/dist/_layouts/blueprint/app.html +1 -1
  9. package/dist/defaults/dist/_layouts/modules/utilities/redirect.html +1 -1
  10. package/dist/defaults/dist/_layouts/themes/classy/frontend/core/cover.html +6 -9
  11. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/app.html +83 -0
  12. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/oauth2.html +44 -46
  13. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/reset.html +58 -60
  14. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signin.html +67 -70
  15. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signup.html +79 -81
  16. package/dist/defaults/dist/humans.txt +25 -0
  17. package/dist/defaults/dist/opensearch.xml +26 -0
  18. package/dist/defaults/dist/pages/test/account/dashboard.html +3 -0
  19. package/dist/defaults/dist/pages/test/index.md +2 -2
  20. package/dist/defaults/dist/pages/test/libraries/ads.html +3 -0
  21. package/dist/defaults/dist/pages/test/libraries/bootstrap-components.html +11 -2
  22. package/dist/defaults/dist/pages/test/libraries/cover.html +47 -0
  23. package/dist/defaults/dist/pages/test/libraries/error.html +3 -0
  24. package/dist/defaults/dist/pages/test/libraries/lazy-loading.html +3 -0
  25. package/dist/defaults/dist/pages/test/redirect/external.md +3 -0
  26. package/dist/defaults/dist/pages/test/redirect/internal.md +3 -0
  27. package/dist/defaults/dist/pages/test/translation/index.md +2 -2
  28. package/dist/defaults/dist/redirects/authentication/helpers/change-password.html +1 -1
  29. package/dist/defaults/dist/redirects/authentication/helpers/forgot.html +1 -1
  30. package/dist/defaults/dist/redirects/authentication/helpers/recover.html +1 -1
  31. package/dist/defaults/dist/redirects/authentication/helpers/reset-password.html +1 -1
  32. package/dist/defaults/dist/sitemap.html +112 -28
  33. package/dist/defaults/dist/sitemap.xml +7 -2
  34. package/firebase-debug.log +16 -0
  35. package/package.json +1 -1
@@ -0,0 +1,55 @@
1
+ ---
2
+ ### FULLSCREEN LAYOUT ###
3
+ layout: themes/[ site.theme.id ]/frontend/core/base
4
+
5
+ ### FULLSCREEN PAGES ###
6
+ theme:
7
+ nav:
8
+ enabled: false
9
+ main:
10
+ class: "d-flex align-items-{{ page.resolved.theme.main.align | default: 'center' }} justify-content-center_ pt-0"
11
+ footer:
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
+ ---
18
+
19
+ <!-- Critical inline CSS to prevent FOUC on cover pages -->
20
+ <style>
21
+ main.d-flex {
22
+ display: flex !important;
23
+ min-height: calc(100vh);
24
+ }
25
+
26
+ main.d-flex.align-items-center {
27
+ align-items: center !important;
28
+ }
29
+
30
+ main.d-flex.justify-content-center {
31
+ justify-content: center !important;
32
+ }
33
+ </style>
34
+
35
+ <!-- <div class="w-100">
36
+ <div class="row justify-content-center">
37
+ <div class="col-12 text-center">
38
+ </div>
39
+ </div>
40
+ </div> -->
41
+
42
+ <!-- <div class="w-100">
43
+ <div class="row justify-content-center">
44
+ <div class="col-12 text-center px-0">
45
+ </div>
46
+ </div>
47
+ </div> -->
48
+
49
+ <div class="w-100">
50
+ <div class="d-flex justify-content-center">
51
+ {{ content | uj_content_format }}
52
+ </div>
53
+ </div>
54
+
55
+
@@ -12,7 +12,9 @@
12
12
 
13
13
  .disabled,
14
14
  [disabled],
15
- :disabled {
15
+ :disabled,
16
+ .data-page-loading a,
17
+ .data-page-loading button {
16
18
  cursor: not-allowed !important;
17
19
  pointer-events: all !important;
18
20
 
@@ -2,7 +2,6 @@
2
2
  let webManager = null;
3
3
 
4
4
  // Global variables
5
- let hasLostFocus = false;
6
5
  let launchTimeout;
7
6
  let errorTimeout;
8
7
 
@@ -10,6 +9,7 @@ let errorTimeout;
10
9
  let $launchButton;
11
10
  let $downloadButton;
12
11
  let $errorAlert;
12
+ let $spinner;
13
13
 
14
14
  // Module
15
15
  export default (Manager, options) => {
@@ -33,27 +33,17 @@ function setupPage() {
33
33
  $launchButton = document.getElementById('launch-button');
34
34
  $downloadButton = document.getElementById('download-button');
35
35
  $errorAlert = document.getElementById('error-alert');
36
+ $spinner = document.querySelector('.spinner-border');
36
37
  const urlParams = window.location.search;
37
38
 
38
39
  // Enable both buttons
39
40
  [$launchButton, $downloadButton].forEach(button => {
40
- button.removeAttribute('disabled');
41
- button.classList.remove('disabled');
41
+ if (button) {
42
+ button.removeAttribute('disabled');
43
+ button.classList.remove('disabled');
44
+ }
42
45
  });
43
46
 
44
- // window.addEventListener('blur', () => {
45
- // hasLostFocus = true;
46
- // if (launchTimeout) {
47
- // clearTimeout(launchTimeout);
48
- // }
49
- // });
50
-
51
- // window.addEventListener('focus', () => {
52
- // if (hasLostFocus) {
53
- // window.close();
54
- // }
55
- // });
56
-
57
47
  // Build app URL with parameters
58
48
  const baseUrl = $launchButton.getAttribute('href');
59
49
  const appUrl = `${baseUrl}${urlParams}`;
@@ -67,14 +57,6 @@ function setupPage() {
67
57
  event.preventDefault();
68
58
  launchApp(appUrl);
69
59
  });
70
-
71
- // Close window after 5 seconds regardless
72
- // launchTimeout = setTimeout(() => {
73
- // if (!hasLostFocus) {
74
- // console.log('App did not launch, closing window');
75
- // }
76
- // window.close();
77
- // }, 5000)
78
60
  }
79
61
 
80
62
  function launchApp(appUrl) {
@@ -86,13 +68,15 @@ function launchApp(appUrl) {
86
68
  clearTimeout(errorTimeout);
87
69
  $errorAlert.setAttribute('hidden', true);
88
70
 
89
- // Check if deep link failed after 2 seconds
71
+ // Check if deep link failed after a delay
72
+ // Since browser prompts don't trigger blur, we can't reliably detect if app launched
73
+ // We'll show download options after a delay - user can dismiss if app actually launched
90
74
  errorTimeout = setTimeout(() => {
91
- if (hasLostFocus) {
92
- console.log('Deep link launched app successfully');
93
- } else {
94
- console.log('Deep link failed to launch app');
95
- $errorAlert.removeAttribute('hidden');
96
- }
97
- }, 1000);
75
+ // Hide spinner
76
+ $spinner.setAttribute('hidden', true);
77
+
78
+ // Show download options
79
+ console.log('Showing download options after timeout');
80
+ $errorAlert.removeAttribute('hidden');
81
+ }, 2000);
98
82
  }
@@ -4,6 +4,9 @@ layout: modules/utilities/redirect
4
4
  permalink: /.well-known/change-password
5
5
 
6
6
  ### REGULAR PAGES ###
7
+ sitemap:
8
+ include: false
9
+
7
10
  redirect:
8
- url: /reset?signout=true
11
+ url: /reset?authSignout=true
9
12
  ---
@@ -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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  ### ALL PAGES ###
3
- layout: themes/[ site.theme.id ]/frontend/core/cover
3
+ layout: themes/[ site.theme.id ]/frontend/pages/app
4
4
 
5
5
  ### REGULAR PAGES ###
6
6
  meta:
@@ -58,4 +58,4 @@ meta:
58
58
  </div>
59
59
 
60
60
  <!-- Load redirect module script -->
61
- <script type="text/javascript" src="{{ site.url }}/assets/js/modules/redirect.bundle.js?cb={{ site.uj.cache_breaker }}" async></script>
61
+ <!-- <script type="text/javascript" src="{{ site.url }}/assets/js/modules/redirect.bundle.js?cb={{ site.uj.cache_breaker }}" async></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' }} justify-content-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
- <div class="w-100">
31
+ <!-- Cover container with flexible column sizing -->
32
+ <div class="container-fluid">
36
33
  <div class="row justify-content-center">
37
- <div class="col-12 text-center">
38
- {{ content | uj_content_format }}
39
- </div>
34
+ {{ content | uj_content_format }}
40
35
  </div>
41
36
  </div>
37
+
38
+
@@ -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" style="max-width: 540px;">
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" disabled>
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" disabled>
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
+
@@ -5,60 +5,58 @@ layout: themes/[ site.theme.id ]/frontend/core/cover
5
5
  ### PAGE CONFIG ###
6
6
  ---
7
7
 
8
- <div class="d-flex justify-content-center align-items-center flex-column">
9
- <div class="col-12 col-md-8 col-lg-6 col-xl-5">
10
- <div class="card border-0 shadow-lg">
11
- <div class="card-body p-5">
12
- <!-- Logo -->
13
- <div class="text-center mb-3">
14
- <div class="avatar avatar-xl">
15
- <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }} Logo"/>
16
- </div>
8
+ <section class="col-12 col-md-8 col-lg-6 col-xl-5" style="max-width: 540px;">
9
+ <div class="card border-0 shadow-lg">
10
+ <div class="card-body p-3 p-md-5">
11
+ <!-- Logo -->
12
+ <div class="text-center mb-3">
13
+ <div class="avatar avatar-xl">
14
+ <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }} Logo"/>
17
15
  </div>
16
+ </div>
18
17
 
19
- <!-- Loading State -->
20
- <div id="oauth2-loading" class="text-center">
21
- <h1 class="h3 mb-2">Authorizing <span id="oauth2-provider">Provider</span>...</h1>
22
- <p class="text-muted">Please wait while we complete the connection.</p>
23
- <div class="spinner-border text-primary mb-0" role="status">
24
- <span class="visually-hidden">Loading...</span>
25
- </div>
26
- </div>
18
+ <!-- Loading State -->
19
+ <div id="oauth2-loading" class="text-center">
20
+ <h1 class="h3 mb-2">Authorizing <span id="oauth2-provider">Provider</span>...</h1>
21
+ <p class="text-muted">Please wait while we complete the connection.</p>
22
+ <div class="spinner-border text-primary mb-0" role="status">
23
+ <span class="visually-hidden">Loading...</span>
24
+ </div>
25
+ </div>
27
26
 
28
- <!-- Result State -->
29
- <div id="oauth2-result" class="d-none">
30
- <!-- Success -->
31
- <div id="result-success" class="d-none text-center">
32
- <h1 class="h3 mb-2">Success!</h1>
33
- <p class="text-muted mb-4">Your account has been connected. Redirecting you now...</p>
34
- </div>
27
+ <!-- Result State -->
28
+ <div id="oauth2-result" class="d-none">
29
+ <!-- Success -->
30
+ <div id="result-success" class="d-none text-center">
31
+ <h1 class="h3 mb-2">Success!</h1>
32
+ <p class="text-muted mb-4">Your account has been connected. Redirecting you now...</p>
33
+ </div>
35
34
 
36
- <!-- Error -->
37
- <div id="result-error" class="d-none mb-3">
38
- <div class="text-center mb-3">
39
- <h1 class="h3 mb-2">Connection Failed</h1>
35
+ <!-- Error -->
36
+ <div id="result-error" class="d-none mb-3">
37
+ <div class="text-center mb-3">
38
+ <h1 class="h3 mb-2">Connection Failed</h1>
39
+ </div>
40
+ <div class="alert alert-danger mb-3" role="alert">
41
+ <p id="error-message" class="mb-0">An error occurred while connecting your account.</p>
42
+ </div>
43
+ <div class="text-center mb-0">
44
+ <a id="return-button" href="/account#connections" class="btn btn-primary">
45
+ {% uj_icon "arrow-left", "me-2" %}<span class="button-text">Return to Account</span>
46
+ </a>
47
+ </div>
48
+ </div>
40
49
  </div>
41
- <div class="alert alert-danger mb-3" role="alert">
42
- <p id="error-message" class="mb-0">An error occurred while connecting your account.</p>
43
- </div>
44
- <div class="text-center mb-0">
45
- <a id="return-button" href="/account#connections" class="btn btn-primary">
46
- {% uj_icon "arrow-left", "me-2" %}<span class="button-text">Return to Account</span>
47
- </a>
48
- </div>
49
- </div>
50
- </div>
51
50
 
52
- <!-- Footer Links -->
53
- <div class="mt-3 pt-4 border-top text-center">
54
- <p class="text-muted small mb-2">Need help?</p>
55
- <a href="/contact" class="btn btn-outline-adaptive btn-sm">
56
- {% uj_icon "headset", "me-1" %}<span class="button-text">Contact Support</span>
57
- </a>
58
- </div>
51
+ <!-- Footer Links -->
52
+ <div class="mt-3 pt-4 border-top text-center">
53
+ <p class="text-muted small mb-2">Need help?</p>
54
+ <a href="/contact" class="btn btn-outline-adaptive btn-sm">
55
+ {% uj_icon "headset", "me-1" %}<span class="button-text">Contact Support</span>
56
+ </a>
59
57
  </div>
60
58
  </div>
61
59
  </div>
62
- </div>
60
+ </section>
63
61
 
64
62
  {{ content | uj_content_format }}
@@ -5,75 +5,73 @@ layout: themes/[ site.theme.id ]/frontend/core/cover
5
5
  ### PAGE CONFIG ###
6
6
  ---
7
7
 
8
- <div class="d-flex justify-content-center align-items-center flex-column">
9
- <div class="col-12 col-md-8 col-lg-6 col-xl-5">
10
- <div class="card border-0 shadow-lg">
11
- <div class="card-body p-5">
12
- <!-- Logo -->
13
- <div class="text-center mb-3">
14
- <div class="avatar avatar-xl">
15
- <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }} Logo"/>
16
- </div>
8
+ <section class="col-12 col-md-8 col-lg-6 col-xl-5" style="max-width: 540px;">
9
+ <div class="card border-0 shadow-lg">
10
+ <div class="card-body p-3 p-md-5">
11
+ <!-- Logo -->
12
+ <div class="text-center mb-3">
13
+ <div class="avatar avatar-xl">
14
+ <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" alt="{{ site.brand.name }} Logo"/>
17
15
  </div>
16
+ </div>
18
17
 
19
- <!-- Header -->
20
- <div class="text-center mb-4">
21
- <h1 class="h3 mb-2">Reset Your Password</h1>
22
- <p class="text-muted">Enter your email address and we'll send you a link to reset your password.</p>
23
- </div>
18
+ <!-- Header -->
19
+ <div class="text-center mb-4">
20
+ <h1 class="h3 mb-2">Reset Your Password</h1>
21
+ <p class="text-muted">Enter your email address and we'll send you a link to reset your password.</p>
22
+ </div>
24
23
 
25
- <!-- Reset Form -->
26
- <form id="reset-form" autocomplete="on" novalidate>
27
- <div class="mb-4 text-start">
28
- <label for="email" class="form-label fw-semibold">
29
- Email <span class="text-danger">*</span>
30
- </label>
31
- <input type="email" class="form-control form-control-md" id="email" name="email" placeholder="Enter your email" autocomplete="email" autofocus required>
32
- </div>
24
+ <!-- Reset Form -->
25
+ <form id="reset-form" autocomplete="on" novalidate>
26
+ <div class="mb-4 text-start">
27
+ <label for="email" class="form-label fw-semibold">
28
+ Email <span class="text-danger">*</span>
29
+ </label>
30
+ <input type="email" class="form-control form-control-md" id="email" name="email" placeholder="Enter your email" autocomplete="email" autofocus required>
31
+ </div>
33
32
 
34
- <button type="submit" class="btn btn-success _btn-lg w-100 mb-4" data-provider="email" disabled>
35
- {% uj_icon "paper-plane", "me-2" %}
36
- <span class="button-text">Send Reset Link</span>
37
- </button>
38
- </form>
33
+ <button type="submit" class="btn btn-success _btn-lg w-100 mb-4" data-provider="email" disabled>
34
+ {% uj_icon "paper-plane", "me-2" %}
35
+ <span class="button-text">Send Reset Link</span>
36
+ </button>
37
+ </form>
39
38
 
40
- <!-- Back to Sign In -->
41
- <div class="text-center">
42
- <p class="text-muted mb-0">
43
- Remember your password?
44
- <a href="/signin" class="text-decoration-none fw-semibold">
45
- Sign in
46
- </a>
47
- </p>
48
- </div>
39
+ <!-- Back to Sign In -->
40
+ <div class="text-center">
41
+ <p class="text-muted mb-0">
42
+ Remember your password?
43
+ <a href="/signin" class="text-decoration-none fw-semibold">
44
+ Sign in
45
+ </a>
46
+ </p>
47
+ </div>
49
48
 
50
- <!-- Help Section -->
51
- <div class="mt-4 pt-4 border-top text-center">
52
- <p class="text-muted small mb-2">Need help?</p>
53
- <a href="/contact" class="btn btn-outline-adaptive btn-sm">
54
- {% uj_icon "headset", "me-1" %}
55
- Contact Support
56
- </a>
57
- </div>
49
+ <!-- Help Section -->
50
+ <div class="mt-4 pt-4 border-top text-center">
51
+ <p class="text-muted small mb-2">Need help?</p>
52
+ <a href="/contact" class="btn btn-outline-adaptive btn-sm">
53
+ {% uj_icon "headset", "me-1" %}
54
+ Contact Support
55
+ </a>
56
+ </div>
58
57
 
59
- <!-- Additional Info -->
60
- {% comment %}
61
- <div class="text-center mt-4">
62
- <div class="bg-body rounded-3 p-4">
63
- <div class="d-flex align-items-center justify-content-center mb-3">
64
- {% uj_icon "shield-check", "text-success fs-3 me-2" %}
65
- <h3 class="h6 fw-bold mb-0">Secure & Private</h3>
58
+ <!-- Additional Info -->
59
+ {% comment %}
60
+ <div class="text-center mt-4">
61
+ <div class="bg-body rounded-3 p-4">
62
+ <div class="d-flex align-items-center justify-content-center mb-3">
63
+ {% uj_icon "shield-check", "text-success fs-3 me-2" %}
64
+ <h3 class="h6 fw-bold mb-0">Secure & Private</h3>
65
+ </div>
66
+ <p class="text-muted small mb-0">
67
+ We'll only send a password reset link to your registered email address.
68
+ The link expires in 1 hour for your security.
69
+ </p>
70
+ </div>
66
71
  </div>
67
- <p class="text-muted small mb-0">
68
- We'll only send a password reset link to your registered email address.
69
- The link expires in 1 hour for your security.
70
- </p>
71
- </div>
72
- </div>
73
- {% endcomment %}
74
- </div>
72
+ {% endcomment %}
75
73
  </div>
76
74
  </div>
77
- </div>
75
+ </section>
78
76
 
79
77
  {{ content | uj_content_format }}