1+ <!DOCTYPE html>
2+ < html lang ="{{ .Site.LanguageCode | default "en " }}" class="h-full ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+
7+ <!-- Google Tag Manager -->
8+ {{ partial "google-tag-manager" . }}
9+
10+ <!-- Google Analytics -->
11+ {{ partial "google-analytics" . }}
12+
13+ <!-- Title -->
14+ < title > {{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</ title >
15+
16+ <!-- Meta Tags -->
17+ < meta name ="description " content ="{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }} ">
18+ < meta name ="author " content ="{{ .Site.Params.author | default .Site.Title }} ">
19+ < meta name ="robots " content ="{{ with .Params.robots }}{{ . }}{{ else }}index, follow{{ end }} ">
20+
21+ <!-- Open Graph -->
22+ < meta property ="og:title " content ="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }} ">
23+ < meta property ="og:description " content ="{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }} ">
24+ < meta property ="og:type " content ="{{ if .IsHome }}website{{ else }}article{{ end }} ">
25+ < meta property ="og:url " content ="{{ .Permalink }} ">
26+ < meta property ="og:site_name " content ="{{ .Site.Title }} ">
27+ {{ with .Params.image }}
28+ < meta property ="og:image " content ="{{ . | absURL }} ">
29+ {{ else }}
30+ {{ with .Site.Params.image }}
31+ < meta property ="og:image " content ="{{ . | absURL }} ">
32+ {{ end }}
33+ {{ end }}
34+
35+ <!-- Twitter Card -->
36+ < meta name ="twitter:card " content ="summary_large_image ">
37+ < meta name ="twitter:title " content ="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }} ">
38+ < meta name ="twitter:description " content ="{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }} ">
39+ {{ with .Site.Params.twitter }}
40+ < meta name ="twitter:site " content ="@{{ . }} ">
41+ {{ end }}
42+ {{ with .Params.image }}
43+ < meta name ="twitter:image " content ="{{ . | absURL }} ">
44+ {{ else }}
45+ {{ with .Site.Params.image }}
46+ < meta property ="twitter:image " content ="{{ . | absURL }} ">
47+ {{ end }}
48+ {{ end }}
49+
50+ <!-- Favicons -->
51+ < link rel ="icon " type ="image/x-icon " href ="{{ "images /favicon.ico" | relURL }}">
52+ < link rel ="icon " type ="image/png " sizes ="16x16 " href ="{{ "images /favicon-16x16.png" | relURL }}">
53+ < link rel ="icon " type ="image/png " sizes ="32x32 " href ="{{ "images /favicon-32x32.png" | relURL }}">
54+ < link rel ="apple-touch-icon " sizes ="180x180 " href ="{{ "images /apple-touch-icon.png" | relURL }}">
55+ < meta name ="theme-color " content ="#5573df ">
56+
57+ <!-- Canonical URL -->
58+ < link rel ="canonical " href ="{{ .Permalink }} ">
59+
60+ <!-- Fonts -->
61+ < link rel ="preconnect " href ="https://fonts.googleapis.com ">
62+ < link rel ="preconnect " href ="https://fonts.gstatic.com " crossorigin >
63+ < link href ="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@600;700;800&display=swap " rel ="stylesheet ">
64+
65+ <!-- FontAwesome Icons -->
66+ < link rel ="preconnect " href ="https://cdnjs.cloudflare.com ">
67+ < link rel ="stylesheet " href ="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css " integrity ="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw== " crossorigin ="anonymous " referrerpolicy ="no-referrer ">
68+
69+ <!-- Main CSS -->
70+ {{ $css := resources.Get "css/main.css" }}
71+ {{ $css = $css | css.PostCSS }}
72+ {{ if hugo.IsProduction }}
73+ {{ $css = $css | minify | fingerprint | resources.PostProcess }}
74+ {{ end }}
75+ < link rel ="stylesheet " href ="{{ $css.RelPermalink }} ">
76+
77+ <!-- Additional Meta Tags from Front Matter -->
78+ {{ with .Params.customMeta }}
79+ {{ range . }}
80+ < meta {{ range $key, $value : = . }} {{ $key }} ="{{ $value }} "{{ end }} >
81+ {{ end }}
82+ {{ end }}
83+ </ head >
84+ < body class ="min-h-screen flex flex-col ">
85+ <!-- Google Tag Manager (noscript) -->
86+ {{ if and hugo.IsProduction .Site.Params.googleTagManager }}
87+ < noscript > < iframe src ="https://www.googletagmanager.com/ns.html?id={{ .Site.Params.googleTagManager }} "
88+ height ="0 " width ="0 " style ="display:none;visibility:hidden "> </ iframe > </ noscript >
89+ {{ end }}
90+ <!-- End Google Tag Manager (noscript) -->
91+ <!-- Header -->
92+ < div class ="fixed top-0 left-0 right-0 z-50 ">
93+ {{ partial "header" . }}
94+ </ div >
95+
96+ <!-- Main Content -->
97+ < div class ="pt-20 ">
98+ {{ block "main" . }}{{ end }}
99+ </ div >
100+
101+ <!-- Footer -->
102+ {{ partial "footer" . }}
103+
104+ <!-- Mobile Menu Script -->
105+ < script >
106+ const mobileMenuButton = document . getElementById ( 'mobile-menu-button' ) ;
107+ if ( mobileMenuButton ) {
108+ mobileMenuButton . addEventListener ( 'click' , function ( ) {
109+ const mobileMenu = document . getElementById ( 'mobile-menu' ) ;
110+ if ( mobileMenu ) {
111+ mobileMenu . classList . toggle ( 'hidden' ) ;
112+ }
113+ } ) ;
114+ }
115+ </ script >
116+ </ body >
117+ </ html >
0 commit comments