+2
-2
appview/pages/templates/layouts/base.html
+2
-2
appview/pages/templates/layouts/base.html
···
41
41
42
42
{{ block "mainLayout" . }}
43
43
<div class="flex-grow">
44
44
-
<div class="max-w-screen-lg px-4 mx-auto my-6 flex flex-col gap-4">
44
44
+
<div class="max-w-screen-lg mx-auto flex flex-col gap-4">
45
45
{{ block "contentLayout" . }}
46
46
<main>
47
47
{{ block "content" . }}{{ end }}
48
48
</main>
49
49
{{ end }}
50
50
-
50
50
+
51
51
{{ block "contentAfterLayout" . }}
52
52
<main>
53
53
{{ block "contentAfter" . }}{{ end }}
+86
-33
appview/pages/templates/layouts/fragments/footer.html
+86
-33
appview/pages/templates/layouts/fragments/footer.html
···
1
1
{{ define "layouts/fragments/footer" }}
2
2
<div class="w-full p-8">
3
3
-
<div class="max-w-screen-lg mx-auto px-4">
4
4
-
<div class="flex flex-col lg:flex-row justify-between items-start text-gray-600 dark:text-gray-400 text-sm gap-8">
5
5
-
<div class="mb-4 md:mb-0">
6
6
-
<a href="/" hx-boost="true" class="flex gap-2 font-semibold italic no-underline hover:no-underline">
7
7
-
{{ template "fragments/logotypeSmall" }}
8
8
-
</a>
9
9
-
</div>
3
3
+
<div class="mx-auto px-4">
4
4
+
<div class="flex flex-col text-gray-600 dark:text-gray-400 gap-8">
5
5
+
<!-- Desktop layout: grid with 3 columns -->
6
6
+
<div class="hidden lg:grid lg:grid-cols-[1fr_minmax(0,1024px)_1fr] lg:gap-8 lg:items-start">
7
7
+
<!-- Left section -->
8
8
+
<div>
9
9
+
<a href="/" hx-boost="true" class="flex gap-2 font-semibold italic no-underline hover:no-underline">
10
10
+
{{ template "fragments/logotypeSmall" }}
11
11
+
</a>
12
12
+
</div>
10
13
11
11
-
{{ $headerStyle := "text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1" }}
12
12
-
{{ $linkStyle := "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" }}
13
13
-
{{ $iconStyle := "w-4 h-4 flex-shrink-0" }}
14
14
-
<div class="grid grid-cols-1 sm:grid-cols-1 md:grid-cols-4 sm:gap-6 md:gap-2 gap-6 flex-1">
15
15
-
<div class="flex flex-col gap-1">
16
16
-
<div class="{{ $headerStyle }}">legal</div>
17
17
-
<a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} terms of service</a>
18
18
-
<a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} privacy policy</a>
14
14
+
{{ $headerStyle := "text-gray-900 dark:text-gray-200 font-bold text-sm uppercase tracking-wide mb-1" }}
15
15
+
{{ $linkStyle := "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" }}
16
16
+
{{ $iconStyle := "w-4 h-4 flex-shrink-0" }}
17
17
+
18
18
+
<!-- Center section with max-width -->
19
19
+
<div class="grid grid-cols-4 gap-2">
20
20
+
<div class="flex flex-col gap-1">
21
21
+
<div class="{{ $headerStyle }}">legal</div>
22
22
+
<a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} terms of service</a>
23
23
+
<a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} privacy policy</a>
24
24
+
</div>
25
25
+
26
26
+
<div class="flex flex-col gap-1">
27
27
+
<div class="{{ $headerStyle }}">resources</div>
28
28
+
<a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} blog</a>
29
29
+
<a href="https://tangled.org/@tangled.org/core/tree/master/docs" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} docs</a>
30
30
+
<a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} source</a>
31
31
+
<a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} brand</a>
32
32
+
</div>
33
33
+
34
34
+
<div class="flex flex-col gap-1">
35
35
+
<div class="{{ $headerStyle }}">social</div>
36
36
+
<a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} discord</a>
37
37
+
<a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} irc</a>
38
38
+
<a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} bluesky</a>
39
39
+
</div>
40
40
+
41
41
+
<div class="flex flex-col gap-1">
42
42
+
<div class="{{ $headerStyle }}">contact</div>
43
43
+
<a href="mailto:team@tangled.org" class="{{ $linkStyle }}">{{ i "mail" "w-4 h-4 flex-shrink-0" }} team@tangled.org</a>
44
44
+
<a href="mailto:security@tangled.org" class="{{ $linkStyle }}">{{ i "shield-check" "w-4 h-4 flex-shrink-0" }} security@tangled.org</a>
45
45
+
</div>
19
46
</div>
20
47
21
21
-
<div class="flex flex-col gap-1">
22
22
-
<div class="{{ $headerStyle }}">resources</div>
23
23
-
<a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} blog</a>
24
24
-
<a href="https://tangled.org/@tangled.org/core/tree/master/docs" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} docs</a>
25
25
-
<a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} source</a>
26
26
-
<a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} brand</a>
48
48
+
<!-- Right section -->
49
49
+
<div class="text-right">
50
50
+
<div class="text-xs">© 2025 Tangled Labs Oy. All rights reserved.</div>
27
51
</div>
52
52
+
</div>
28
53
29
29
-
<div class="flex flex-col gap-1">
30
30
-
<div class="{{ $headerStyle }}">social</div>
31
31
-
<a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} discord</a>
32
32
-
<a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} irc</a>
33
33
-
<a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} bluesky</a>
54
54
+
<!-- Mobile layout: stacked -->
55
55
+
<div class="lg:hidden flex flex-col gap-8">
56
56
+
{{ $headerStyle := "text-gray-900 dark:text-gray-200 font-bold text-xs uppercase tracking-wide mb-1" }}
57
57
+
{{ $linkStyle := "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:underline inline-flex gap-1 items-center" }}
58
58
+
{{ $iconStyle := "w-4 h-4 flex-shrink-0" }}
59
59
+
60
60
+
<div class="mb-4 md:mb-0">
61
61
+
<a href="/" hx-boost="true" class="flex gap-2 font-semibold italic no-underline hover:no-underline">
62
62
+
{{ template "fragments/logotypeSmall" }}
63
63
+
</a>
34
64
</div>
35
65
36
36
-
<div class="flex flex-col gap-1">
37
37
-
<div class="{{ $headerStyle }}">contact</div>
38
38
-
<a href="mailto:team@tangled.org" class="{{ $linkStyle }}">{{ i "mail" "w-4 h-4 flex-shrink-0" }} team@tangled.org</a>
39
39
-
<a href="mailto:security@tangled.org" class="{{ $linkStyle }}">{{ i "shield-check" "w-4 h-4 flex-shrink-0" }} security@tangled.org</a>
66
66
+
<div class="grid grid-cols-1 sm:grid-cols-1 md:grid-cols-4 sm:gap-6 md:gap-2 gap-6">
67
67
+
<div class="flex flex-col gap-1">
68
68
+
<div class="{{ $headerStyle }}">legal</div>
69
69
+
<a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} terms of service</a>
70
70
+
<a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} privacy policy</a>
71
71
+
</div>
72
72
+
73
73
+
<div class="flex flex-col gap-1">
74
74
+
<div class="{{ $headerStyle }}">resources</div>
75
75
+
<a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} blog</a>
76
76
+
<a href="https://tangled.org/@tangled.org/core/tree/master/docs" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} docs</a>
77
77
+
<a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} source</a>
78
78
+
<a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} brand</a>
79
79
+
</div>
80
80
+
81
81
+
<div class="flex flex-col gap-1">
82
82
+
<div class="{{ $headerStyle }}">social</div>
83
83
+
<a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} discord</a>
84
84
+
<a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} irc</a>
85
85
+
<a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} bluesky</a>
86
86
+
</div>
87
87
+
88
88
+
<div class="flex flex-col gap-1">
89
89
+
<div class="{{ $headerStyle }}">contact</div>
90
90
+
<a href="mailto:team@tangled.org" class="{{ $linkStyle }}">{{ i "mail" "w-4 h-4 flex-shrink-0" }} team@tangled.org</a>
91
91
+
<a href="mailto:security@tangled.org" class="{{ $linkStyle }}">{{ i "shield-check" "w-4 h-4 flex-shrink-0" }} security@tangled.org</a>
92
92
+
</div>
40
93
</div>
41
41
-
</div>
42
94
43
43
-
<div class="text-center lg:text-right flex-shrink-0">
44
44
-
<div class="text-xs">© 2025 Tangled Labs Oy. All rights reserved.</div>
95
95
+
<div class="text-center">
96
96
+
<div class="text-xs">© 2025 Tangled Labs Oy. All rights reserved.</div>
97
97
+
</div>
45
98
</div>
46
99
</div>
47
100
</div>