PageSourceSearch

https://www.citypng.com/contact

html citypng.com collected 2026-10-04 00:09:59 UTC 84,510 bytes, 3,162 lines download raw bytes

1<!doctype html>
2<html lang="en">
3
4<head>
5    <!-- Required meta tags -->
6    <meta charset="utf-8">
7    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
10
11    <meta name="csrf-token" content="Oigci8MUB9tVQpZMpb8IhqwqlCrL8dDmrzptluXG">
12        
13    
14        <link rel="canonical" href="https://www.citypng.com/contact" />
15
16            <meta name="description" content="CityPNG provides millions of free high quality transparent images. Including transparent png clip art, cartoon, icon, logo, silhouette, watercolors, outlines, etc.">
17            <meta name="keywords" content="png,free png,download premium png free,hd png,transparent png,png image,png pictures,download png,png arrow,png heart,png flower,png smoke,png star,pngtree,png circle,png background,png effects" />
18
19    
20        
21        
22    
23
24    
25    
26
27
28    
29        <meta name="robots" content="noindex, nofollow">
vendor: 105 bytes, lines 29-35
29
30    
31    
32    <script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
33 
34
35    
35<!-- Bootstrap CSS v5.2.1 -->
36    <link rel="stylesheet" href="https://city-png.b-cdn.net/new-design/bootstrap/css/bootstrap.min.css">
37
38    <!-- ArialMT Fonts -->
39    <link rel="stylesheet" href="https://city-png.b-cdn.net/new-design/fonts/style.css">
40
41    <!-- Custom Css -->
42    <link rel="stylesheet" href="https://city-png.b-cdn.net/new-design/custom_css/main.css">
43
44    <!-- Bootstrap Icons -->
45    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
46    <noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"></noscript>
47
48    <!-- Font-awesome Icons -->
49    
50
51    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/all.min.css"
52        integrity="sha512-gMjQeDaELJ0ryCI+FtItusU9MkAifCZcGq789FrzkiM49D8lbDhoaUaIX4ASU187wofMNlgBJ4ckbrXM9sE6Pg=="
53        crossorigin="anonymous" referrerpolicy="no-referrer" />
54
55<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
56        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
57        crossorigin="anonymous" referrerpolicy="no-referrer" />
58        
59
60    <!-- Jquery CDN -->
61    
61<script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
61
62
63    <!-- Favicon -->
64    <link rel="shortcut icon" href="https://city-png.b-cdn.net/new-design/images/favicon/favicon.png">
65   
66    <!-- Title Default -->
67    <title> CityPNG | Download FREE HD PNG Images </title>
68
69
70    
71    <!-- Sweet Alert -->
72    <link href="https://city-png.b-cdn.net/sweetalert.css" rel="stylesheet" type="text/css" media="none"
73        onload="if(media!='all')media='all'" />
74
75    <link href="https://city-png.b-cdn.net/vivify.min.css" rel="stylesheet" type="text/css" media="none"
76        onload="if(media!='all')media='all'" />
77
78        
79        <!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 79-80
79
80<script async src="https://www.googletagmanager.com/gtag/js?id=
80G-3V4FXQ8QYZ
vendor: 13 bytes, line 80
80"></script>
81<script>
82  
vendor: 138 bytes, lines 82-86
82window.dataLayer = window.dataLayer || [];
83  function gtag(){dataLayer.push(arguments);}
84  gtag('js', new Date());
85
86  gtag('config', '
86G-3V4FXQ8QYZ
vendor: 5 bytes, line 86
86');
87</script>
87
88<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 88-89
88
89<script async src="https://www.googletagmanager.com/gtag/js?id=
89G-V6C2J5TSJQ
vendor: 13 bytes, line 89
89"></script>
90<script>
91  
vendor: 138 bytes, lines 91-95
91window.dataLayer = window.dataLayer || [];
92  function gtag(){dataLayer.push(arguments);}
93  gtag('js', new Date());
94
95  gtag('config', '
95G-V6C2J5TSJQ
vendor: 5 bytes, line 95
95');
96</script>
96        
97</head>
98
99<body class="google-anno-skip">
100<div id="cookie-law-info-bar" data-nosnippet="true" style="background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: inherit; bottom: 0px; position: fixed;">
101	<span>This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish.
102		<a role="button" data-bs-toggle="modal" data-bs-target="#cookie" tabindex="0" style="margin: 5px 20px; color: rgb(20, 182, 148);">Cookie settings</a>
103		<a role="button" class="accept_cookies" tabindex="0" style="display: inline-block; margin: 5px; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);padding:4px 10px">ACCEPT</a>
104	</span>
105</div>
106
107<style>
108/* Toast (gentle success) */
109.pwDlToast {
110  pointer-events: auto;
111  display:flex;
112  align-items:flex-start;
113  gap:10px;
114  min-width: 280px;
115  max-width: 420px;
116
117  background: #F1FBF5;
118  border: 1px solid #D7F2E1;
119  color: #113B25;
120
121  border-radius: 14px;
122  box-shadow: 0 10px 26px rgba(0,0,0,.10);
123  padding: 12px 12px;
124
125  opacity: 0;
126  transform: translateY(-8px);
127  transition: opacity 180ms ease, transform 180ms ease;
128}
129.pwDlToast.show {
130  opacity: 1;
131  transform: translateY(0);
132}
133
134.pwDlToastIcon {
135  width: 18px;
136  height: 18px;
137  border-radius: 999px;
138  display:flex;
139  align-items:center;
140  justify-content:center;
141
142  background: #E2F6EA;
143  border: 1px solid #C9EED8;
144  color:#1f7a3a;
145
146  font-size: 12px;
147  font-weight: 900;
148  flex: 0 0 auto;
149  margin-top: 2px;
150}
151
152.pwDlToastTitle {
153  font-size: 13px;
154  font-weight: 700;
155  line-height: 1.25;
156  margin: 0;
157  color:#113B25;
158}
159
160.pwDlToastText {
161  font-size: 12px;
162  line-height: 1.25;
163  margin: 2px 0 0;
164  color: rgba(17,59,37,.70);
165}
166
167.pwDlToastClose {
168  margin-left:auto;
169  border:0;
170  background: transparent;
171  cursor: pointer;
172  opacity: .45;
173  padding: 6px;
174  border-radius: 10px;
175  transition: opacity 140ms ease, background 140ms ease;
176  line-height:1;
177}
178.pwDlToastClose:hover {
179  opacity: .85;
180  background: rgba(17,59,37,.08);
181}
182
183@media (max-width: 640px) {
184  #pwDlToastRoot { right: 12px !important; top: 76px !important; }
185  .pwDlToast { max-width: calc(100vw - 24px); min-width: 0; }
186}
187</style>
188
189
190<div id="pwDlToastRoot"
191     aria-live="polite"
192     aria-atomic="true"
193     style="position:fixed;top:140px;right:24px;left:auto;transform:none;
194            z-index:100000;pointer-events:none;">
195</div>
196
197
198
199
200 
201<style>
202
203    
204    
205  @media (min-width: 768px) {
206
207}
208
209/* Style for smaller screens */
210/*@media (max-width: 767px) {
211   header{position:relative;top:50px;}
212   .homePage{margin-top:50px;}
213 .imagePage-single{position:relative;top:30px;}
214 .latestPage{margin-top:50px;}
215 .searchResultPage{margin-top:50px;}
216 .searchResultPageImages {margin-top:50px;}
217 .downloadPage{margin-top:70px;}
218 .loginPage{margin-top:20px;}
219 .signUpPage{margin-top:80px;}
220 .categoriesPage{margin-top:50px;}
221 .categoriePage{margin-top:50px;}
222 footer{position:relative;top:50px;}
223}*/
224
225</style>
226
227<!-- Account issue notice -->
228<!--<div class="up-message" style="background:#ffe5e5; color:#b30000; text-align:center; padding:10px; font-weight:bold; position:sticky; top:0; z-index:9999; border-bottom:2px solid #b30000;">
229  ⚠️ We are currently experiencing an issue with account registration. 
230  Our team is working on a fix. Downloads are working normally. 
231  Thank you for your patience. ⚠️
232</div>-->
233
234
235
236<!-- Issue case -->
237<!--<div style="background:#ffcc00; color:#000; text-align:center; padding:10px; font-weight:bold; position:sticky; top:0; z-index:9999;">
238  🚧 We are currently experiencing technical issues. Our team is working on a fix. Thank you for your patience. 🚧
239</div>-->
240
241<!-- Not 100% stable -->
242<!--<div style="background:#00c4ff; color:#000; text-align:center; padding:10px; font-weight:bold; position:sticky; top:0; z-index:9999;">
243  💡 The website is currently mostly stable, but users may occasionally experience brief service interruptions that recover quickly.
244</div>-->
245
246<!-- Stable -->
247<!--<div style="background:#4CAF50; color:#fff; text-align:center; padding:10px; font-weight:bold; position:sticky; top:0; z-index:9999;">
248  ✅ The website is operating normally. If you notice any issue, please contact us.
249</div>-->
250
251
252
253<div class="modal fade" style="display:none" id="cookie">
254	<div class="modal-dialog">
255		<div class="modal-content">
256			<div class="modal-header">
257				<h4 class="modal-title">Privacy overview</h4>
258				<button type="button" class="close btn" data-dismiss="modal">
259					<span aria-hidden="true">&times;</span>
260					<span class="sr-only">Close</span>
261				</button>
262				
263			</div>
264			<div class="modal-body">
265				<p>This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent.</p>
266				<div>
267				    <button data-toggle="collapse" data-target="#necessary" style="width: 100%;border:none;text-align: left;padding: 10px 26px;display:flex;justify-content:space-between;align-items-center;margin-bottom:8px">Necessary <span style="font-size:12px">Always Enabled</span></button>
268				    <div id="necessary" class="collapse" style="padding: 10px 24px">
269				        <p>Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.</p>
270				    </div>
271				    <button data-toggle="collapse" data-target="#non-necessary" style="width: 100%;border:none;text-align: left;padding: 10px 26px;display:flex;justify-content:space-between;">
272				        Non-Necessary
273				        <div class="cli-switch">
274                        <input type="checkbox" id="wt-cli-checkbox-non-necessary" class="cli-user-preference-checkbox" data-id="checkbox-non-necessary" checked="checked">
275                        <label for="wt-cli-checkbox-non-necessary" class="cli-slider" data-cli-enable="Enabled" data-cli-disable="Disabled"></label>
276                        </div>
277				    </button>
278				    <div id="non-necessary" class="collapse" style="padding: 10px 24px">
279				        <p>Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.</p>
280				    </div>
281				</div>
282			</div>
283			<div class="modal-footer">
284				<button data-bs-dismiss="modal" class="accept_cookies btn btn-success">Accept</button>
285			</div>
286		</div>
287	</div>
288</div>
289
290    <header>
291     
292
293<script>
294 document.addEventListener("DOMContentLoaded", function() {
295    const elementsToStyle = document.querySelector(".for-message");
296    
297    // Listen for close event
298    document.getElementById("imageAlert").addEventListener('close.bs.alert', function () {
299      elementsToStyle.classList.remove("active");
300    });
301
302    // Initialize (assuming the alert starts as shown)
303    elementsToStyle.classList.add("active");
304  });
305
306    
307</script>
307
308        
309                <!-- Navbar start -->
310        
311              
312       
313        <div class="container ">
314            
315            <style>
316/* ===== NV2 Modern Admin Dev Navbar (Clean, No Duplicates) ===== */
317:root{
318  --nv2-secondary:#df5858;
319  --nv2-bg: rgba(255,255,255,0.78);
320  --nv2-border: rgba(0,0,0,0.08);
321  --nv2-text:#121212;
322  --nv2-muted:#6b6b6b;
323  --nv2-radius:12px;
324  --nv2-barRadius:14px;
325  --nv2-t:120ms;
326  --nv2-shadow:0 6px 20px rgba(0,0,0,0.04);
327  --nv2-shadowScroll:0 10px 28px rgba(0,0,0,0.06);
328}
329
330/* Reset Bootstrap/theme navbar visuals (we render our own bar) */
331nav.nv2.navbar{
332  background: transparent !important;
333  border: 0 !important;
334  box-shadow: none !important;
335  padding: 0 !important;
336  margin: 0 !important;
337}
338
339/* Global box sizing inside NV2 navbar */
340nav.nv2.navbar,
341nav.nv2.navbar *{
342  box-sizing: border-box;
343}
344
345/* Top spacing must be on nav to survive theme/Bootstrap resets */
346nav.nv2.navbar{ margin-top: 16px !important; }
347@media (min-width: 1200px){ nav.nv2.navbar{ margin-top: 18px !important; } }
348@media (max-width: 767.98px){ nav.nv2.navbar{ margin-top: 12px !important; } }
349
350/* Sticky wrapper */
351.nv2{
352  position: sticky;
353  top: 0;
354  z-index: 1030;
355  padding: 0 24px;
356}
357@media (max-width: 767.98px){
358  .nv2{ padding: 0 16px; }
359}
360
361/* Inner container */
362.nv2__shell{
363  max-width: 1280px;
364  width: 100%;
365  margin: 0 auto;
366}
367
368/* Hard fix: prevent RTL/theme from flipping NV2 layout */
369nav#nv2,
370nav#nv2 .nv2__bar{
371  direction: ltr !important;
372}
373
374
375/* Main bar */
376.nv2__bar{
377  position: relative;
378  display:flex;
379  align-items:center;
380  gap: 14px;
381  padding: 12px 24px;
382  min-height: 64px;
383
384  border: 1px solid var(--nv2-border);
385  border-bottom: 1px solid #eee;
386  border-radius: var(--nv2-barRadius);
387
388  background: var(--nv2-bg);
389  backdrop-filter: blur(10px);
390  -webkit-backdrop-filter: blur(10px);
391
392  box-shadow: var(--nv2-shadow);
393  transition: box-shadow var(--nv2-t) ease, background var(--nv2-t) ease, transform var(--nv2-t) ease;
394}
395.nv2.is-scrolled .nv2__bar{ box-shadow: var(--nv2-shadowScroll); }
396
397.nv2.is-scrolled .nv2__bar{
398  background: rgba(255,255,255,0.92); /* previously 0.78 */
399  border-color: rgba(0,0,0,0.10);
400}
401
402/* On tablets/mobile: keep bar row, brand left, icons right (RTL-safe) */
403@media (max-width: 991.98px){
404  nav#nv2 .nv2__bar{ flex-direction: row !important; }
405
406  nav#nv2 .nv2__brand{
407    order: 1 !important;
408    margin-right: auto !important;
409    margin-left: 0 !important;
410  }
411
412  nav#nv2 .nv2__mActions{
413    order: 2 !important;
414    margin-left: auto !important;
415    margin-right: 0 !important;
416  }
417}
418
419/* Responsive bar sizing */
420@media (max-width: 991.98px){
421  .nv2__bar{
422    gap: 12px;
423    padding: 12px 16px;     /* 14→16 premium */
424    min-height: 68px;       /* 56→68 */
425    border-radius: 18px;    /* SaaS feel */
426  }
427}
428
429/* Brand */
430.nv2__brand{
431  display:flex;
432  align-items:center;
433  gap: 10px;
434  text-decoration:none;
435  flex: 0 0 auto;
436}
437.nv2__logo{
438  height: 28px;
439  width:auto;
440  display:block;
441}
442
443/* Mobile actions (toggler/search icon area) */
444.nv2__mActions{
445  margin-left:auto;
446  display:flex;
447  gap: 8px;
448  align-items:center;
449  flex: 0 0 auto;
450}
451
452/* Icon buttons (shared) */
453.nv2__iconBtn{
454  height: 40px;
455  width: 40px;
456  display:inline-flex;
457  align-items:center;
458  justify-content:center;
459  border-radius: var(--nv2-radius);
460  border: 1px solid rgba(0,0,0,0.08);
461  background: rgba(255,255,255,0.75);
462
463  color: #111 !important;                  /* iOS Safari: avoid blue tint */
464  -webkit-appearance: none;
465  appearance: none;
466  -webkit-tap-highlight-color: transparent; /* optional: remove tap highlight */
467
468  transition: transform var(--nv2-t) ease, background var(--nv2-t) ease, border-color var(--nv2-t) ease;
469}
470.nv2__iconBtn i{ color: inherit !important; }
471
472.nv2__iconBtn:hover{
473  transform: translateY(-1px);
474  background: rgba(255,255,255,0.95);
475  border-color: rgba(0,0,0,0.12);
476}
477
478.nv2__iconBtn:focus,
479.nv2__iconBtn:active{
480  color:#111 !important;
481  outline: none !important;
482  box-shadow: none !important;
483}
484
485/* ===== Mobile burger should be 44x44 (tap target + importance) ===== */
486@media (max-width: 991.98px){
487  .nv2__mActions .nv2__iconBtn{
488    width: 44px !important;
489    height: 44px !important;
490    border-radius: 14px !important;
491  }
492
493  .nv2 .navbar-toggler{
494    background: rgba(255,255,255,0.70) !important;
495    border: 1px solid rgba(0,0,0,0.14) !important;
496  }
497
498  .nv2 .navbar-toggler:active{
499    transform: scale(0.98);
500    background: rgba(0,0,0,0.04) !important;
501  }
502}
503
504/* ===== Burger toggler (fix: border returns after close) ===== */
505.nv2 .navbar-toggler{
506  border: 1px solid rgba(0,0,0,0.14) !important;
507  box-shadow: none !important;
508  outline: none !important;
509}
510.nv2 .navbar-toggler:focus,
511.nv2 .navbar-toggler:focus-visible{
512  border: 1px solid rgba(0,0,0,0.14) !important;
513  box-shadow: none !important;
514  outline: none !important;
515}
516
517/* When expanded: show active background and hide border */
518.nv2 .navbar-toggler[aria-expanded="true"]{
519  border-color: transparent !important;
520  background: rgba(0,0,0,0.03) !important;
521}
522.nv2 .navbar-toggler[aria-expanded="true"]:focus,
523.nv2 .navbar-toggler[aria-expanded="true"]:focus-visible{
524  border-color: transparent !important;
525  box-shadow: none !important;
526}
527.nv2 .navbar-toggler-icon{ filter: none; opacity: .85; }
528
529/* ===== Burger -> X state (clear open/close) ===== */
530.nv2 .navbar-toggler{
531  position: relative;
532}
533.nv2 .navbar-toggler .navbar-toggler-icon{
534  opacity: 0 !important; /* hide default */
535}
536
537.nv2 .navbar-toggler::before,
538.nv2 .navbar-toggler::after{
539  content:"";
540  position:absolute;
541  left:50%;
542  top:50%;
543  width: 20px;
544  height: 2px;
545  background: rgba(0,0,0,0.75);
546  border-radius: 999px;
547  transform: translate(-50%, -50%) rotate(0deg);
548  transition: transform 160ms ease, width 160ms ease, opacity 160ms ease;
549}
550
551/* 3rd middle line (burger) */
552.nv2 .navbar-toggler span.nv2__mid{
553  position:absolute;
554  left:50%;
555  top:50%;
556  width: 20px;
557  height: 2px;
558  background: rgba(0,0,0,0.75);
559  border-radius: 999px;
560  transform: translate(-50%, -50%);
561  transition: opacity 160ms ease;
562}
563
564/* burger layout (3 lines) */
565.nv2 .navbar-toggler::before{ transform: translate(-50%, -50%) translateY(-6px); }
566.nv2 .navbar-toggler::after { transform: translate(-50%, -50%) translateY( 6px); }
567
568/* expanded => X */
569.nv2 .navbar-toggler[aria-expanded="true"]::before{
570  transform: translate(-50%, -50%) rotate(45deg);
571}
572.nv2 .navbar-toggler[aria-expanded="true"]::after{
573  transform: translate(-50%, -50%) rotate(-45deg);
574}
575.nv2 .navbar-toggler[aria-expanded="true"] span.nv2__mid{
576  opacity: 0;
577}
578
579/* Mobile Search toggle button: keep border, add active bg */
580#nv2SearchToggler{
581  border: 1px solid rgba(0,0,0,0.08) !important;
582  background: rgba(255,255,255,0.75) !important;
583  color:#111 !important;
584  box-shadow:none !important;
585  outline:none !important;
586  -webkit-appearance:none;
587  appearance:none;
588}
589#nv2SearchToggler:focus,
590#nv2SearchToggler:focus-visible,
591#nv2SearchToggler:active{
592  border: 1px solid rgba(0,0,0,0.08) !important;
593  box-shadow:none !important;
594  outline:none !important;
595}
596#nv2SearchToggler i{ color: inherit !important; }
597
598/* Active state when mobile search is open */
599.nv2.is-msearch-open #nv2SearchToggler{
600  background: rgba(0,0,0,0.06) !important;
601  border-color: rgba(0,0,0,0.12) !important;
602}
603
604/* Collapse area layout */
605#nv2Collapse{
606  flex: 1 1 auto;
607  min-width: 0;
608}
609@media (min-width: 992px){
610  #nv2Collapse{
611    display:flex !important;
612    align-items:center;
613    min-width: 0;
614  }
615}
616@media (max-width: 991.98px){
617
618  /* Navbar dropdown containers */
619  .nv2__bar{
620    overflow: visible;
621  }
622
623  /* Collapse dropdown panel below the navbar */
624  #nv2Collapse{
625    position: absolute;
626    left: 14px;
627    right: 14px;
628    top: 100%;
629    z-index: 1040 !important;
630
631    margin-top: 10px;
632
633    background: rgba(255,255,255,0.96);
634    border: 1px solid rgba(0,0,0,0.08);
635    border-radius: 14px;
636    box-shadow: 0 14px 40px rgba(0,0,0,0.10);
637
638    padding: 10px 12px;
639
640    /* Important: keep auto width to avoid layout issues */
641    width: auto !important;
642  }
643
644  /* Bootstrap collapse visibility overrides */
645  .navbar-collapse.collapse{ display:none !important; }
646  .navbar-collapse.collapse.show{ display:block !important; }
647
648  /* Dropdown content spacing */
649  .nv2__nav{
650    margin-top: 0 !important;
651    padding-top: 0 !important;
652  }
653
654  .nv2__right{
655    margin-top: 10px !important;
656    padding-top: 10px !important;
657  }
658}
659
660/* Center nav */
661.nv2__nav{
662  list-style:none;
663  display:flex;
664  gap: 28px;
665  align-items:center;
666  margin: 0;
667  padding: 0;
668}
669.nv2__item{ display:flex; }
670
671@media (min-width: 992px){
672  .nv2__nav{
673    position:absolute;
674    left:50%;
675    top:50%;
676    transform: translate(-50%, -50%);
677    z-index: 2;
678
679    /* More room on the right side (actions/tools) */
680    max-width: calc(100% - 560px);
681    overflow:hidden;
682    white-space:nowrap;
683  }
684}
685@media (max-width: 991.98px){
686  .nv2__nav{
687    position: static;
688    transform: none;
689    flex-direction: column;
690    align-items: stretch;
691    gap: 6px;
692    width: 100%;
693    margin-top: 10px;
694    padding: 8px 0 0;
695  }
696  .nv2__item{ width: 100%; }
697}
698
699/* Nav links */
700.nv2__link{
701  position:relative;
702  display:inline-flex;
703  align-items:center;
704  height: 40px;
705  padding: 0 8px;
706  border-radius: var(--nv2-radius);
707  color: #222;
708  text-decoration:none;
709  font-weight: 500;
710  background: transparent !important;
711  transition: color var(--nv2-t) ease;
712}
713.nv2__link:hover{ color:#111; background: transparent !important; }
714
715.nv2__link::after{
716  content:"";
717  position:absolute;
718  left:50%;
719  bottom: 4px;
720  height: 2px;
721  width: 0%;
722  transform: translateX(-50%);
723  background: rgba(223,88,88,0.85);
724  border-radius: 999px;
725  transition: width 180ms ease;
726}
727.nv2__link:hover::after{ width: 50%; opacity:.7; }
728.nv2__link.is-active{ color: var(--nv2-secondary); }
729.nv2__link.is-active::after{ width: 70%; }
730
731@media (max-width: 991.98px){
732  .nv2__link{
733    width: 100%;
734    justify-content: space-between;
735    padding: 0 12px;
736  }
737  .nv2__link::after{
738    left: 12px;
739    transform: none;
740  }
741  .nv2__link:hover::after,
742  .nv2__link.is-active::after{
743    width: 56px;
744  }
745}
746
747/* Right side area */
748.nv2__right{
749  margin-left:auto;
750  display:flex;
751  align-items:center;
752  gap: 16px;
753  padding: 0;
754  flex: 0 0 auto;
755}
756@media (min-width: 992px){
757  .nv2__right{ position: relative; z-index: 3; }
758}
759@media (max-width: 991.98px){
760  .nv2__right{
761    width: 100%;
762    justify-content: flex-end;
763    gap: 12px;
764    margin-top: 10px;
765    padding-top: 10px;
766    border-top: 1px solid rgba(0,0,0,0.06);
767  }
768}
769@media (max-width: 767.98px){
770  .nv2__right{ justify-content: space-between; }
771}
772
773/* Tools (hidden on mobile) */
774.nv2__tools{
775  display:flex;
776  align-items:center;
777  gap: 16px;
778}
779@media (max-width: 991.98px){
780  .nv2__tools{ display:none !important; }
781}
782
783/* Notification badge */
784.nv2__badge{
785  position:absolute;
786  top: 6px;
787  right: 6px;
788  min-width: 18px;
789  height: 18px;
790  padding: 0 5px;
791  border-radius: 999px;
792  background: var(--nv2-secondary);
793  color:#fff;
794  font-size: 11px;
795  display:flex;
796  align-items:center;
797  justify-content:center;
798}
799
800/* Desktop search wrapper */
801.nv2SearchWrap{
802  width:auto;
803  display:flex;
804  align-items:center;
805}
806.nv2SearchWrap.is-hidden{ visibility:hidden; }
807
808/* Search pill (closed => icon only; open => input) */
809.nv2Search{
810  display:flex;
811  align-items:center;
812  height:40px;
813  gap:8px;
814  padding:0 6px;
815  border-radius: var(--nv2-radius);
816  border:1px solid rgba(0,0,0,0.08);
817  background: rgba(255,255,255,0.70);
818  transition: background var(--nv2-t) ease, border-color var(--nv2-t) ease;
819  width: 44px;       /* closed width */
820  overflow:hidden;   /* keep everything inside */
821}
822.nv2Search:hover{
823  background: rgba(255,255,255,0.92);
824  border-color: rgba(0,0,0,0.12);
825}
826
827/* Open widths by breakpoint */
828.nv2Search.is-open{ width: 180px; }
829@media (min-width: 1400px){ .nv2Search.is-open{ width: 200px; } }
830@media (max-width: 1199.98px){ .nv2Search.is-open{ width: 165px; } }
831
832/* Search icon button */
833.nv2Search__btn{
834  height:40px;
835  width:40px;
836  border-radius: calc(var(--nv2-radius) - 2px);
837  border:0;
838  background:transparent;
839  display:flex;
840  align-items:center;
841  justify-content:center;
842  transition: transform var(--nv2-t) ease, opacity var(--nv2-t) ease, width 160ms ease;
843}
844.nv2Search__btn:hover{ transform: translateY(-1px); }
845
846/* When open, hide icon to save space */
847.nv2Search.is-open .nv2Search__btn{
848  width:0 !important;
849  opacity:0 !important;
850  padding:0 !important;
851  margin:0 !important;
852  pointer-events:none !important;
853}
854
855/* Input holder (use opacity/transform; avoid width animations that break layout) */
856.nv2Search__box{
857  flex: 1 1 auto;
858  min-width: 0;
859  opacity: 0;
860  transform: translateX(-4px);
861  transition: opacity var(--nv2-t) ease, transform 160ms ease;
862}
863.nv2Search.is-open .nv2Search__box{
864  opacity: 1;
865  transform: translateX(0);
866}
867
868/* Search input */
869.nv2Search__input{
870  width:100%;
871  height:38px;
872  border-radius: calc(var(--nv2-radius) - 4px);
873  border:1px solid rgba(0,0,0,0.10);
874  background: rgba(255,255,255,0.92);
875  padding:0 12px;
876  outline:none;
877  font-weight:650;
878  color:#222;
879}
880.nv2Search__input:focus{
881  border-color: rgba(223,88,88,0.45);
882  box-shadow: 0 0 0 4px rgba(223,88,88,0.10);
883}
884
885/* CTA button: always reserves its space (prevents input resizing) */
886.nv2Search__go{
887  height:34px;
888  width:34px;
889  flex: 0 0 34px;
890  border-radius: calc(var(--nv2-radius) - 2px);
891  border:0;
892  background: rgba(223,88,88,0.12);
893  color: var(--nv2-secondary);
894
895  display:flex;               /* always in layout */
896  align-items:center;
897  justify-content:center;
898
899  transition: transform var(--nv2-t) ease, background var(--nv2-t) ease, opacity var(--nv2-t) ease;
900  opacity: 0;                 /* hidden by default */
901  pointer-events: none;       /* not clickable when empty */
902}
903.nv2Search__go:hover{
904  transform: translateY(-1px);
905  background: rgba(223,88,88,0.18);
906}
907
908/* Show CTA only when there is text (without changing widths) */
909.nv2Search.is-open.has-text .nv2Search__go{
910  opacity: 1;
911  pointer-events: auto;
912}
913
914/* ===== Mobile Search (inside navbar bar) ===== */
915.nv2SearchMobile{ display:none; }
916
917@media (max-width: 991.98px){
918  .nv2SearchMobile{
919    display:flex;
920    align-items:center;
921    gap: 10px;
922    height: 44px;
923    padding: 0 10px;
924
925    border-radius: calc(var(--nv2-radius) + 2px);
926    border: 1px solid rgba(0,0,0,0.08);
927    background: rgba(255,255,255,0.78);
928
929    /* Key fix: position the mobile search panel below the navbar bar */
930    position: absolute;
931    left: 14px;
932    right: 14px;
933    top: 100%;
934    z-index: 1040 !important;
935
936    /* hidden state */
937    opacity: 0;
938    pointer-events:none;
939    transform: translateY(0);
940    max-height: 0;
941    overflow: hidden;
942
943    transition: opacity 160ms ease, transform 160ms ease, max-height 160ms ease;
944  }
945
946  /* open state */
947  .nv2.is-msearch-open .nv2SearchMobile{
948    max-height: 44px;
949    opacity: 1;
950    pointer-events:auto;
951    transform: translateY(10px);
952  }
953
954  .nv2SearchMobile__input{
955    flex: 1 1 auto;
956    min-width: 0;
957    height: 38px;
958    border-radius: calc(var(--nv2-radius) - 2px);
959    border: 1px solid rgba(0,0,0,0.10);
960    background: rgba(255,255,255,0.92);
961    padding: 0 12px;
962    outline: none;
963    font-weight: 650;
964    color:#222;
965  }
966
967  .nv2SearchMobile__input:focus{
968    border-color: rgba(223,88,88,0.45);
969    box-shadow: 0 0 0 4px rgba(223,88,88,0.10);
970  }
971
972  /* CTA is hidden by default */
973  .nv2SearchMobile__go{
974    flex: 0 0 38px;
975    width: 38px;
976    height: 38px;
977    border-radius: 10px;
978    border: 0;
979
980    background: rgba(223,88,88,0.14);
981    color: var(--nv2-secondary);
982
983    display:flex;
984    align-items:center;
985    justify-content:center;
986
987    opacity: 0;
988    transform: translateX(6px);
989    pointer-events: none;
990
991    transition: opacity 140ms ease, transform 140ms ease, background var(--nv2-t) ease;
992  }
993
994  /* Show only when the input contains text */
995  .nv2.is-msearch-open .nv2SearchMobile.is-ready .nv2SearchMobile__go{
996    opacity: 1;
997    transform: translateX(0);
998    pointer-events: auto;
999  }
1000
1001  .nv2SearchMobile__go:active{
1002    transform: translateX(0) scale(0.98);
1003  }
1004}
1005
1006/* Upload button */
1007.nv2__upload{
1008  position:relative;
1009  height: 40px;
1010  display:inline-flex;
1011  align-items:center;
1012  gap: 8px;
1013  padding: 0 12px;
1014  border-radius: var(--nv2-radius);
1015  background: var(--nv2-secondary);
1016  color:#fff !important;
1017  text-decoration:none !important;
1018  font-weight: 700;
1019  box-shadow: 0 6px 14px rgba(223,88,88,0.18);
1020  transition: transform var(--nv2-t) ease, background var(--nv2-t) ease, box-shadow var(--nv2-t) ease, opacity var(--nv2-t) ease;
1021}
1022#nv2UploadBtn,
1023#nv2UploadBtn:link,
1024#nv2UploadBtn:visited,
1025#nv2UploadBtn:hover,
1026#nv2UploadBtn:focus,
1027#nv2UploadBtn:active{
1028  color:#fff !important;
1029  text-decoration:none !important;
1030}
1031#nv2UploadBtn *{ color:#fff !important; }
1032#nv2UploadBtn .nv2__uploadIcon i,
1033#nv2UploadBtn .nv2__uploadIcon svg{
1034  color:#fff !important;
1035  fill:#fff !important;
1036}
1037.nv2__upload:hover{
1038  background: #cf4f4f !important;
1039  transform: translateY(-1px);
1040  box-shadow: 0 10px 20px rgba(223,88,88,0.22);
1041}
1042.nv2__upload:active{
1043  transform: translateY(0);
1044  box-shadow: 0 4px 10px rgba(223,88,88,0.15);
1045}
1046.nv2__upload:focus{
1047  outline:none !important;
1048  box-shadow: 0 0 0 4px rgba(223,88,88,0.18), 0 6px 14px rgba(223,88,88,0.18) !important;
1049}
1050.nv2__uploadIcon{ display:inline-flex; transition: transform var(--nv2-t) ease; }
1051.nv2__upload:hover .nv2__uploadIcon{ transform: translateY(-1px); }
1052
1053/* Upload loading spinner */
1054.nv2__spinner{
1055  display:none;
1056  width: 14px;
1057  height: 14px;
1058  border-radius: 999px;
1059  border: 2px solid rgba(255,255,255,0.35);
1060  border-top-color: #fff;
1061  animation: nv2spin .7s linear infinite;
1062}
1063.nv2__upload.is-loading{ pointer-events:none; opacity:.7; }
1064.nv2__upload.is-loading .nv2__spinner{ display:inline-block; }
1065@keyframes nv2spin{ to{ transform: rotate(360deg); } }
1066
1067@media (max-width: 767.98px){
1068  .nv2__upload{
1069    width: 40px;
1070    padding: 0;
1071    justify-content:center;
1072  }
1073  .nv2__uploadText{ display:none !important; }
1074}
1075
1076/* Avatar + dropdown */
1077.nv2__userBtn{
1078  height: 40px;
1079  display:inline-flex;
1080  align-items:center;
1081  gap: 8px;
1082  padding: 0 10px 0 6px;
1083  border-radius: var(--nv2-radius);
1084  border: 1px solid rgba(0,0,0,0.08);
1085  background: rgba(255,255,255,0.75);
1086  text-decoration:none;
1087  transition: background var(--nv2-t) ease, transform var(--nv2-t) ease, border-color var(--nv2-t) ease;
1088}
1089.nv2__userBtn:hover{
1090  transform: translateY(-1px);
1091  background: rgba(0,0,0,0.03);
1092  border-color: rgba(0,0,0,0.12);
1093}
1094.nv2__avatar{
1095  width: 36px;
1096  height: 36px;
1097  border-radius: 999px;
1098  border: 1px solid #eee;
1099  object-fit: cover;
1100  display:block;
1101}
1102.nv2__chev{
1103  color: var(--nv2-muted);
1104  font-size: 12px;
1105  transition: transform var(--nv2-t) ease;
1106}
1107.nv2__user.show .nv2__chev{ transform: rotate(180deg); }
1108
1109/* Dropdown menu */
1110.nv2__menu{
1111  min-width: 210px;
1112  padding: 10px;
1113  border-radius: 14px;
1114  border: 1px solid #eee;
1115  background: #fff;
1116  box-shadow: 0 10px 30px rgba(0,0,0,0.08);
1117  margin-top: 10px !important;
1118  transform-origin: top right;
1119  animation: nv2dropIn 120ms ease forwards;
1120}
1121@keyframes nv2dropIn{
1122  from{ opacity: 0; transform: translateY(6px) scale(0.97); }
1123  to{ opacity: 1; transform: translateY(0) scale(1); }
1124}
1125
1126.nv2__groupTitle{
1127  font-size: 10.5px;
1128  font-weight: 800;
1129  letter-spacing: .35px;
1130  color: var(--nv2-muted);
1131  padding: 6px 10px 4px;
1132  text-transform: uppercase;
1133  opacity: .85;
1134}
1135.nv2__divider{
1136  height: 1px;
1137  background: rgba(0,0,0,0.06);
1138  margin: 6px 6px;
1139  border-radius: 999px;
1140}
1141
1142.nv2__row{
1143  display:flex;
1144  align-items:center;
1145  gap: 10px;
1146  padding: 9px 10px;
1147  border-radius: 12px;
1148  color: var(--nv2-text);
1149  text-decoration:none;
1150  transition: background var(--nv2-t) ease, color var(--nv2-t) ease;
1151}
1152.nv2__rowIcon,
1153.nv2__rowIcon i,
1154.nv2__rowIcon svg{
1155  color: rgba(0,0,0,0.55);
1156  fill: rgba(0,0,0,0.55);
1157  opacity: 1;
1158  transition: transform var(--nv2-t) ease, opacity var(--nv2-t) ease, color var(--nv2-t) ease;
1159}
1160.nv2__row:hover{
1161  background: rgba(0,0,0,0.03);
1162  color: #111;
1163}
1164.nv2__row:hover .nv2__rowIcon,
1165.nv2__row:hover .nv2__rowIcon i,
1166.nv2__row:hover .nv2__rowIcon svg{
1167  color: rgba(0,0,0,0.70);
1168  fill: rgba(0,0,0,0.70);
1169  opacity: .95;
1170  transform: translateX(1px);
1171}
1172.nv2__rowMeta{ margin-left:auto; font-size: 12px; color: var(--nv2-muted); }
1173
1174.nv2__row.active,
1175.nv2__row.is-active{
1176  background: rgba(223,88,88,0.10);
1177  color: var(--nv2-secondary);
1178}
1179.nv2__row.active .nv2__rowIcon,
1180.nv2__row.active .nv2__rowIcon i,
1181.nv2__row.active .nv2__rowIcon svg,
1182.nv2__row.is-active .nv2__rowIcon,
1183.nv2__row.is-active .nv2__rowIcon i,
1184.nv2__row.is-active .nv2__rowIcon svg{
1185  color: var(--nv2-secondary);
1186  fill: var(--nv2-secondary);
1187}
1188
1189.nv2__row--danger{
1190  color: rgba(223,88,88,0.85);
1191  font-weight: 600;
1192}
1193.nv2__row--danger .nv2__rowIcon,
1194.nv2__row--danger .nv2__rowIcon i,
1195.nv2__row--danger .nv2__rowIcon svg{
1196  color: rgba(223,88,88,0.60);
1197  fill: rgba(223,88,88,0.60);
1198}
1199.nv2__row--danger:hover{
1200  background: rgba(223,88,88,0.08);
1201  color: var(--nv2-secondary);
1202}
1203.nv2__row--danger:hover .nv2__rowIcon,
1204.nv2__row--danger:hover .nv2__rowIcon i,
1205.nv2__row--danger:hover .nv2__rowIcon svg{
1206  color: var(--nv2-secondary);
1207  fill: var(--nv2-secondary);
1208}
1209
1210/* Optional: breathing space for anchors after sticky nav */
1211.nv2 + *{ scroll-margin-top: 96px; }
1212
1213/* ===== Guest actions (responsive conversion) ===== */
1214.nv2__gActions{
1215  display:flex;
1216  align-items:center;
1217  gap: 12px;
1218}
1219
1220/* Base guest button */
1221.nv2__gBtn{
1222  height: 44px;
1223  display:inline-flex;
1224  align-items:center;
1225  justify-content:center;
1226  gap: 10px;
1227  padding: 0 16px;
1228  border-radius: var(--nv2-radius);
1229  border: 1px solid rgba(0,0,0,0.16);
1230  background: #fff;
1231  color:#121212;
1232  text-decoration:none !important;
1233  font-weight: 800;
1234  line-height: 1;
1235  white-space: nowrap;
1236  transition: transform var(--nv2-t) ease,
1237              background var(--nv2-t) ease,
1238              border-color var(--nv2-t) ease,
1239              color var(--nv2-t) ease,
1240              box-shadow var(--nv2-t) ease;
1241}
1242.nv2__gBtn i{ font-size: 16px; opacity: .92; }
1243
1244.nv2__gBtn:hover{
1245  border-color: rgba(223,88,88,0.55);
1246  color: var(--nv2-secondary);
1247  background:#fff;
1248  transform: translateY(-1px);
1249  box-shadow: 0 8px 18px rgba(0,0,0,0.06);
1250}
1251
1252/* Sign up button (primary) */
1253.nv2__gBtn--primary{
1254  border-color: transparent;
1255  background: var(--nv2-secondary);
1256  color:#fff !important;
1257  box-shadow: 0 10px 20px rgba(223,88,88,0.18);
1258}
1259.nv2__gBtn--primary:hover{
1260  background:#cf4f4f;
1261  transform: translateY(-1px);
1262  box-shadow: 0 14px 26px rgba(223,88,88,0.22);
1263}
1264
1265/* ===== Desktop Guest: if Desktop search exists => compact Sign up (icon-only) ===== */
1266@media (min-width: 992px){
1267  /* only when desktop search is visible (nv2--ds-show) */
1268  nav#nv2.nv2--ds-show .nv2__gBtn--signup{
1269    width: 48px;           /*  hit-area */
1270    padding: 0 !important; /* icon-only */
1271    gap: 0 !important;
1272  }
1273
1274  nav#nv2.nv2--ds-show .nv2__gBtn--signup .nv2__gText{
1275    display: none !important;
1276  }
1277
1278  nav#nv2.nv2--ds-show .nv2__gBtn--signup i{
1279    margin: 0 !important;
1280  }
1281}
1282
1283/* Mobile: stack full width */
1284/* ===== Guest actions: 360 → 767.98 side-by-side ===== */
1285@media (min-width: 360px) and (max-width: 767.98px){
1286  .nv2__gActions{
1287    width: 100%;
1288    flex-direction: row;
1289    align-items: center;
1290    gap: 10px;
1291    margin-top: 6px;
1292    padding-top: 6px;
1293  }
1294
1295  .nv2__gBtn{
1296    width: 50%;
1297    flex: 1 1 0;
1298    justify-content: center;
1299    padding: 0 12px; /* prevents crowding */
1300  }
1301
1302  .nv2__gBtn span{
1303    font-size: 14px; /* slightly tighter */
1304  }
1305}
1306
1307/* Optional: <360 keep stacked (tiny phones) */
1308@media (max-width: 359.98px){
1309  .nv2__gActions{
1310    width: 100%;
1311    flex-direction: column;
1312    align-items: stretch;
1313    gap: 10px;
1314    margin-top: 6px;
1315    padding-top: 6px;
1316  }
1317  .nv2__gBtn{ width: 100%; }
1318}
1319
1320/* Tap / press feedback */
1321.nv2__gBtn:active{
1322  transform: translateY(0);
1323  box-shadow: none;
1324  background: rgba(0,0,0,0.02);
1325}
1326.nv2__gBtn--primary:active{
1327  background:#c54848;
1328  box-shadow: 0 6px 14px rgba(223,88,88,0.18);
1329}
1330
1331
1332
1333/* ===== User Drawer (Offcanvas) ===== */
1334.nv2UserDrawer{
1335  width: 360px;
1336  max-width: 360px;
1337  border-left: 1px solid rgba(0,0,0,0.08);
1338  background: #fff;
1339}
1340@media (max-width: 767.98px){
1341  .nv2UserDrawer{
1342    width: 85vw;
1343    max-width: 360px;
1344  }
1345}
1346
1347/* <480px: bottom sheet behavior */
1348@media (max-width: 479.98px){
1349  .nv2UserDrawer.offcanvas-end{
1350    top: auto;
1351    bottom: 0;
1352    right: 0;
1353    left: 0;
1354    width: 100% !important;
1355    max-width: 100% !important;
1356    height: 70vh;
1357    border-left: 0;
1358    border-top: 1px solid rgba(0,0,0,0.08);
1359    border-radius: 16px 16px 0 0;
1360    transform: translateY(100%); /* override Bootstrap end drawer */
1361  }
1362  .nv2UserDrawer.offcanvas-end.show{
1363    transform: translateY(0);
1364  }
1365}
1366
1367.nv2UserDrawer__header{
1368  display:flex;
1369  align-items:center;
1370  justify-content:space-between;
1371  padding: 14px 16px;
1372  border-bottom: 1px solid rgba(0,0,0,0.06);
1373}
1374.nv2UserDrawer__title{
1375  font-weight: 800;
1376  color: #111;
1377  letter-spacing: .2px;
1378}
1379.nv2UserDrawer__close{
1380  height: 38px;
1381  width: 38px;
1382  border: 1px solid rgba(0,0,0,0.10);
1383  border-radius: 12px;
1384  background:#fff;
1385  color:#111;
1386}
1387
1388.nv2UserDrawer__profile{
1389  display:flex;
1390  align-items:center;
1391  gap: 12px;
1392  padding: 14px 16px;
1393  border-bottom: 1px solid rgba(0,0,0,0.06);
1394}
1395.nv2UserDrawer__avatar{
1396  width: 44px;
1397  height: 44px;
1398  border-radius: 999px;
1399  object-fit: cover;
1400  border: 1px solid rgba(0,0,0,0.08);
1401}
1402.nv2UserDrawer__name{ font-weight: 800; color:#111; }
1403.nv2UserDrawer__email{ font-size: 13px; color: #6b6b6b; }
1404
1405.nv2UserDrawer__body{ padding: 10px 10px 14px; }
1406.nv2UserDrawer__sectionTitle{
1407  padding: 10px 10px 6px;
1408  font-size: 11px;
1409  font-weight: 900;
1410  letter-spacing: .35px;
1411  color: #6b6b6b;
1412  text-transform: uppercase;
1413}
1414
1415/* Drawer links */
1416.nv2UserDrawer__link{
1417  display:flex;
1418  align-items:center;
1419  gap: 10px;
1420  padding: 12px 14px;
1421  border-radius: 12px;
1422  text-decoration:none;
1423  color:#121212;
1424  font-weight: 600;
1425  transition: background var(--nv2-t) ease,
1426              color var(--nv2-t) ease,
1427              transform var(--nv2-t) ease;
1428}
1429.nv2UserDrawer__link i{
1430  color: rgba(0,0,0,0.55);
1431  transition: color var(--nv2-t) ease, opacity var(--nv2-t) ease;
1432}
1433.nv2UserDrawer__link:hover{
1434  background: rgba(223,88,88,0.06);
1435  color:#111;
1436}
1437.nv2UserDrawer__link:hover i{ color: rgba(0,0,0,0.75); }
1438
1439.nv2UserDrawer__link.is-active{
1440  background: rgba(223,88,88,0.10);
1441  color: var(--nv2-secondary);
1442  font-weight: 700;
1443}
1444.nv2UserDrawer__link.is-active i{ color: var(--nv2-secondary); }
1445
1446/* Drawer footer */
1447.nv2UserDrawer__footer{
1448  padding: 12px 10px 16px;
1449  border-top: 1px solid rgba(0,0,0,0.06);
1450}
1451
1452/* Drawer logout (fixed hover) */
1453.nv2UserDrawer__logout{
1454  display:flex;
1455  align-items:center;
1456  justify-content:center;
1457  gap: 10px;
1458  padding: 14px 12px;
1459  border-radius: 14px;
1460  text-decoration:none !important;
1461  font-weight: 800;
1462  color: var(--nv2-secondary) !important;
1463  background: rgba(223,88,88,0.10);
1464  transition: background var(--nv2-t) ease,
1465              transform var(--nv2-t) ease,
1466              box-shadow var(--nv2-t) ease;
1467}
1468.nv2UserDrawer__logout i{ color: var(--nv2-secondary) !important; }
1469
1470.nv2UserDrawer__logout:hover{
1471  background: rgba(223,88,88,0.18);
1472  color: var(--nv2-secondary) !important;
1473  box-shadow: 0 6px 16px rgba(223,88,88,0.15);
1474  transform: translateY(-1px);
1475}
1476.nv2UserDrawer__logout:active{
1477  transform: translateY(0);
1478  box-shadow: 0 3px 8px rgba(223,88,88,0.12);
1479}
1480</style>
1481
1482<nav class="navbar navbar-expand-lg navbar-light nv2 nv2--admin nv2--sticky nv2--ds-show" id="nv2">
1483    
1484  <div class="nv2__shell">
1485    <div class="nv2__bar">
1486
1487      
1488      <a class="nv2__brand" href="https://www.citypng.com" aria-label="CityPNG Home">
1489        <img class="nv2__logo nvLogo"
1490          src="https://imagedelivery.net/5MYSbk45M80qAwecrlKzdQ/1df3913a-3012-43f5-e509-c60d81362700/thumbnail"
1491          alt="Brand Logo">
1492        
1493      </a>
1494
1495      
1496      <div class="nv2__mActions d-lg-none">
1497          <button id="nv2SearchToggler" class="nv2__iconBtn nv2__iconBtn--search" type="button" aria-label="Search">
1498    <i class="fa fa-search"></i>
1499  </button>
1500
1501       <button class="nv2__iconBtn navbar-toggler" type="button"
1502  data-bs-toggle="collapse" data-bs-target="#nv2Collapse"
1503  aria-controls="nv2Collapse" aria-expanded="false" aria-label="Open menu">
1504  <span class="navbar-toggler-icon"></span>
1505  <span class="nv2__mid" aria-hidden="true"></span>
1506</button>
1507      </div>
1508      
1509      
1510  <form class="nv2SearchMobile js-nv2SearchMobile d-lg-none" action="https://www.citypng.com/search" method="GET" role="search">
1511    <input
1512      type="text"
1513      class="nv2SearchMobile__input js-nv2SearchMobileInput"
1514      name="q"
1515      placeholder="Search..."
1516      autocomplete="off"
1517    />
1518    <button class="nv2SearchMobile__go" type="submit" aria-label="Search">
1519      <i class="fa fa-arrow-right"></i>
1520    </button>
1521  </form>
1522
1523      
1524      <div class="collapse navbar-collapse" id="nv2Collapse">
1525
1526        
1527        <ul class="nv2__nav">
1528          <li class="nv2__item">
1529            <a class="nv2__link " href="https://www.citypng.com/latest">Latest</a>
1530          </li>
1531          <li class="nv2__item">
1532            <a class="nv2__link " href="https://www.citypng.com/categories">Categories</a>
1533          </li>
1534          <li class="nv2__item">
1535            <a class="nv2__link " href="https://www.citypng.com/page/about-us">About</a>
1536          </li>
1537          <li class="nv2__item">
1538            <a class="nv2__link is-active" href="https://www.citypng.com/contact">Contact</a>
1539          </li>
1540        </ul>
1541
1542        
1543        <div class="nv2__right">
1544
1545
1546<div class="nv2__tools d-none d-lg-flex">
1547
1548  <div class="nv2SearchWrap ">
1549    <form class="nv2Search js-nv2Search" action="https://www.citypng.com/search" method="GET" role="search">
1550      <button class="nv2Search__btn js-nv2SearchBtn" type="button" aria-label="Open search">
1551        <i class="fa fa-search"></i>
1552      </button>
1553
1554      <div class="nv2Search__box">
1555       <input
1556  type="text"
1557  class="nv2Search__input js-nv2SearchInput"
1558  name="q"
1559  placeholder="Search..."
1560  autocomplete="off"
1561>
1562      </div>
1563
1564      
1565      <button class="nv2Search__go" type="submit" aria-label="Search" title="Search">
1566        <i class="fa fa-arrow-right"></i>
1567      </button>
1568    </form>
1569  </div>
1570
1571</div>
1572
1573
1574
1575
1576<div class="nv2__gActions">
1577
1578  
1579  <a class="nv2__gBtn" href="https://www.citypng.com/login">
1580    <i class="fa fa-sign-in" aria-hidden="true"></i>
1581    <span>Log in</span>
1582  </a>
1583
1584  
1585  <a class="nv2__gBtn nv2__gBtn--primary nv2__gBtn--signup" href="https://www.citypng.com/signup" aria-label="Sign up">
1586  <i class="fa fa-user-plus" aria-hidden="true"></i>
1587  <span class="nv2__gText">Sign up</span>
1588</a>
1589
1590</div>
1591
1592
1593        </div>
1594      </div>
1595
1596    </div>
1597  </div>
1598</nav>
1599
1600
1601<script>
1602(function(){
1603  document.querySelectorAll('.js-nv2Search').forEach(function(form){
1604    // Prevent duplicate binding if the partial is included more than once
1605    if(form.dataset.bound === '1') return;
1606    form.dataset.bound = '1';
1607
1608    var btn   = form.querySelector('.js-nv2SearchBtn');
1609    var input = form.querySelector('.js-nv2SearchInput');
1610    if(!btn || !input) return;
1611
1612    function syncText(){
1613      var q = (input.value || '').trim();
1614      if(q.length) form.classList.add('has-text');
1615      else form.classList.remove('has-text');
1616    }
1617
1618    function openSearch(){
1619      form.classList.add('is-open');
1620      syncText();
1621      setTimeout(function(){ try{ input.focus(); }catch(e){} }, 10);
1622    }
1623
1624    function closeSearch(){
1625      form.classList.remove('is-open');
1626      form.classList.remove('has-text');
1627      try{ input.blur(); }catch(e){}
1628    }
1629
1630    btn.addEventListener('click', function(e){
1631      e.preventDefault();
1632      e.stopPropagation();
1633      if(form.classList.contains('is-open')) closeSearch();
1634      else openSearch();
1635    });
1636
1637    form.addEventListener('click', function(e){ e.stopPropagation(); });
1638
1639    document.addEventListener('click', function(){
1640      if(form.classList.contains('is-open')) closeSearch();
1641    });
1642
1643    document.addEventListener('keydown', function(e){
1644      if(e.key === 'Escape' && form.classList.contains('is-open')) closeSearch();
1645    });
1646
1647    input.addEventListener('input', syncText);
1648
1649// Prevent empty form submission
1650form.addEventListener('submit', function(e){
1651  var q = (input.value || '').trim();
1652  if(!q){
1653    e.preventDefault();
1654    openSearch();
1655    input.focus();
1656  }
1657});
1658
1659  });
1660  
1661    // ===== Fix burger button border by removing focus after collapse closes =====
1662  try{
1663    var collapseEl = document.getElementById('nv2Collapse');
1664    if(collapseEl){
1665      collapseEl.addEventListener('hidden.bs.collapse', function(){
1666        var btn = document.querySelector('[data-bs-target="#nv2Collapse"]');
1667        if(btn) btn.blur();
1668      });
1669    }
1670  }catch(e){}
1671  
1672 // ===== Mobile search toggle (prevent interference from old theme scripts) =====
1673try{
1674  var nav   = document.getElementById('nv2');
1675  var mBtn  = document.getElementById('nv2SearchToggler');
1676  var mForm = document.querySelector('.js-nv2SearchMobile');
1677  var mInput= document.querySelector('.js-nv2SearchMobileInput');
1678
1679  function safeFocus(el){
1680    if(!el) return;
1681    try{
1682      if(el.focus) el.focus({ preventScroll:true });
1683      else el.focus();
1684    }catch(e){
1685      try{ el.focus(); }catch(e2){}
1686    }
1687  }
1688
1689function openMobileSearch(){
1690  if(!nav || !mForm) return;
1691
1692  // Close any other search inputs outside the navbar search form
1693  try{
1694    document.querySelectorAll('input[name="q"]').forEach(function(x){
1695      if(!mForm.contains(x)) x.blur();
1696    });
1697  }catch(e){}
1698
1699  // Close the mobile menu first if it is currently open
1700  try{
1701    var collapse = document.getElementById('nv2Collapse');
1702    if(collapse && collapse.classList.contains('show')){
1703      try{
1704        if(window.bootstrap && bootstrap.Collapse){
1705          bootstrap.Collapse.getOrCreateInstance(collapse, { toggle:false }).hide();
1706        }else{
1707          // Fallback: force close without Bootstrap instance
1708          collapse.classList.remove('show');
1709          collapse.style.height = '';
1710        }
1711      }catch(err){
1712        collapse.classList.remove('show');
1713        collapse.style.height = '';
1714      }
1715    }
1716  }catch(e){}
1717
1718  // Open the mobile search panel
1719  nav.classList.add('is-msearch-open');
1720
1721  // Remove focus from the button to avoid iOS/Bootstrap focus border issues
1722  try{ mBtn && mBtn.blur(); }catch(e){}
1723
1724  // Focus the mobile search input
1725  setTimeout(function(){ safeFocus(mInput); }, 10);
1726}
1727
1728  function closeMobileSearch(){
1729    if(!nav) return;
1730    nav.classList.remove('is-msearch-open');
1731    try{ mInput && mInput.blur(); }catch(e){}
1732  }
1733
1734  if(mBtn && nav && mForm){
1735    // Use a capture-phase listener to intercept the click before legacy scripts
1736    mBtn.addEventListener('click', function(e){
1737      e.preventDefault();
1738      e.stopPropagation();
1739      if(e.stopImmediatePropagation) e.stopImmediatePropagation();
1740
1741      if(nav.classList.contains('is-msearch-open')) closeMobileSearch();
1742      else openMobileSearch();
1743    }, true);
1744
1745    // Prevent closing when clicking inside the mobile search form
1746    mForm.addEventListener('click', function(e){
1747      e.stopPropagation();
1748      if(e.stopImmediatePropagation) e.stopImmediatePropagation();
1749    }, true);
1750
1751    // Close on outside click
1752    document.addEventListener('click', function(){
1753      if(nav.classList.contains('is-msearch-open')) closeMobileSearch();
1754    });
1755
1756    // Close on Escape key
1757    document.addEventListener('keydown', function(e){
1758      if(e.key === 'Escape' && nav.classList.contains('is-msearch-open')) closeMobileSearch();
1759    });
1760    
1761  }
1762}catch(e){}
1763
1764// ===== Mobile menu close logic (independent from Account Offcanvas state) =====
1765try{
1766  var nav      = document.getElementById('nv2');
1767  var collapse = document.getElementById('nv2Collapse');
1768  var drawer   = document.getElementById('nv2UserDrawer'); // Account panel
1769
1770  if(!nav || !collapse) return;
1771
1772  // Prevent duplicate binding
1773  if(nav.dataset.menuBound === '1') return;
1774  nav.dataset.menuBound = '1';
1775
1776  function isMobile(){
1777    return window.matchMedia && window.matchMedia('(max-width: 991.98px)').matches;
1778  }
1779
1780  function isDrawerOpen(){
1781    return !!(drawer && drawer.classList.contains('show'));
1782  }
1783
1784  function closeMenu(){
1785    if(!isMobile()) return;
1786    if(!collapse.classList.contains('show')) return;
1787
1788    try{
1789      if(window.bootstrap && bootstrap.Collapse){
1790        bootstrap.Collapse.getOrCreateInstance(collapse, { toggle:false }).hide();
1791        return;
1792      }
1793    }catch(e){}
1794
1795    // Fallback: force close without Bootstrap instance
1796    collapse.classList.remove('show');
1797    collapse.style.height = '';
1798  }
1799
1800  // 1) Close when clicking a link inside the menu (mobile only)
1801  collapse.addEventListener('click', function(e){
1802    if(!isMobile()) return;
1803
1804    if(isDrawerOpen()) return;
1805
1806    var a = e.target.closest('a');
1807    if(!a) return;
1808    if(a.getAttribute('data-bs-toggle') || a.getAttribute('data-toggle')) return;
1809
1810    closeMenu();
1811  }, true);
1812
1813  // 2) Close when clicking outside the navbar (mobile only)
1814  document.addEventListener('pointerdown', function(e){
1815    if(!isMobile()) return;
1816    if(!collapse.classList.contains('show')) return;
1817
1818    if(isDrawerOpen()) return;
1819
1820    if(nav.contains(e.target)) return;
1821
1822    closeMenu();
1823  }, true);
1824
1825}catch(e){}
1826
1827// ===== Mobile search CTA: show only when the input has text =====
1828try{
1829  var mForm  = document.querySelector('.js-nv2SearchMobile');
1830  var mInput = document.querySelector('.js-nv2SearchMobileInput');
1831
1832  function syncMobileCTA(){
1833    if(!mForm || !mInput) return;
1834    var q = (mInput.value || '').trim();
1835    if(q.length) mForm.classList.add('is-ready');
1836    else mForm.classList.remove('is-ready');
1837  }
1838
1839  if(mForm && mInput){
1840    mInput.addEventListener('input', syncMobileCTA);
1841    mInput.addEventListener('change', syncMobileCTA);
1842    syncMobileCTA();
1843
1844    // prevent empty submit
1845    mForm.addEventListener('submit', function(e){
1846      var q = (mInput.value || '').trim();
1847      if(!q){
1848        e.preventDefault();
1849        try{ mInput.focus({ preventScroll:true }); }catch(err){ try{ mInput.focus(); }catch(e2){} }
1850      }
1851    });
1852  }
1853}catch(e){}
1854
1855
1856
1857  
1858  
1859})();
1860</script>
1860
1861           
1862            
1863            
1864            <div class="mt-3 header-search-main" style="display: none;">
1865                <body class=" google-anno-skip">
1866
1867<style>
1868    /* ===========================
1869   CityPNG search hero
1870   Applied to legacy include
1871   =========================== */
1872
1873.cpSearchHero{
1874  width: 100%;
1875  max-width: 780px;
1876  margin: 0 auto;
1877  padding: 0 12px; /* Small horizontal spacing on the sides */
1878  text-align: center;
1879}
1880
1881.cpSearchForm{ width: 100%; margin: 0; }
1882
1883.cpSearchBar{
1884  display: flex;
1885  align-items: stretch;
1886  width: 100%;
1887  height: 56px;
1888  border-radius: 14px;
1889  overflow: hidden;
1890  background: rgba(255,255,255,0.94);
1891  border: 1px solid rgba(0,0,0,0.08);
1892  box-shadow: none;
1893  transition: box-shadow 120ms ease, border-color 120ms ease, transform 120ms ease;
1894}
1895
1896.cpSearchInput{
1897  flex: 1 1 auto;
1898  width: 100%;
1899  height: 100%;
1900  border: 0;
1901  outline: 0;
1902  padding: 0 16px;
1903  font-size: 16px;
1904  color: #121212;
1905  background: transparent;
1906}
1907
1908.cpSearchInput::placeholder{
1909  color: rgba(0,0,0,0.45);
1910}
1911
1912.cpSearchBtn{
1913  width: 72px;
1914  height: 100%;
1915  border: 0;
1916  cursor: pointer;
1917  background: #df5858;
1918  color: #fff;
1919  display: inline-flex;
1920  align-items: center;
1921  justify-content: center;
1922  transition: background 120ms ease, transform 120ms ease, opacity 120ms ease;
1923}
1924
1925.cpSearchBtn:hover{ background: #d94a4a; }
1926.cpSearchBtn:active{ transform: scale(0.98); }
1927
1928.cpSearchBtn__icon i{
1929  font-size: 20px;
1930  line-height: 1;
1931}
1932
1933.cpSearchBtn:disabled{
1934  opacity: 0.55;
1935  cursor: not-allowed;
1936  transform: none;
1937}
1938
1939/* Hide the hero search below 992px only on photo and png-download pages */
1940@media (max-width: 991.98px){
1941  .hide-hero-search-mobile .cpSearchHero{
1942    display: none !important;
1943  }
1944}
1945</style> 
1946
1947<div class="cpSearchHero">
1948  <form role="search" autocomplete="off" action="https://www.citypng.com/search" method="get" class="cpSearchForm">
1949    <div class="cpSearchBar" aria-label="Search">
1950      <input
1951        type="text"
1952        name="q"
1953        class="cpSearchInput"
1954        aria-label="Search PNG"
1955        placeholder="Search PNG"
1956      />
1957
1958      <button class="cpSearchBtn" type="submit" aria-label="Search" disabled>
1959        <span class="cpSearchBtn__icon" aria-hidden="true">
1960          <i class="bi-search"></i>
1961        </span>
1962      </button>
1963    </div>
1964  </form>
1965</div>
1966
1967<script>
1968document.querySelectorAll('.cpSearchForm').forEach(function(form){
1969
1970  const input = form.querySelector('.cpSearchInput');
1971  const btn   = form.querySelector('.cpSearchBtn');
1972
1973  if(!input || !btn) return;
1974
1975  function toggleButton(){
1976    const hasText = input.value.trim().length > 0;
1977    btn.disabled = !hasText;
1978  }
1979
1980  toggleButton();
1981  input.addEventListener('input', toggleButton);
1982
1983});
1984</script>
1984            </div>
1985        </div>
1986
1987        <!-- Navbar end -->
1988
1989    </header>
1990
1991
1992    <main>
1993
1994        
1995    <!-- Main Content Starts -->
1996
1997    <div class="container">
1998        <div class="row justify-content-center align-items-center">
1999            <div class="col-lg-9 col-md-10 ">
2000                <div class="row">
2001                    <div class="col-12 mt-5">
2002                                                                                            </div>
2003
2004                    <div class="col-12 mt-5 d-flex justify-content-center">
2005                        <h4 class="FPIheading">CONTACT US</h4>
2006                    </div>
2007
2008                    <div class="col-12 mt-5 text-center">
2009                        <p class="whh mb-0">We're here to help!</p>
2010                    </div>
2011                </div>
2012
2013                <form class="mt-4 mb-3" action="https://www.citypng.com/contact" method="post">
2014                    <input type="hidden" name="_token" value="Oigci8MUB9tVQpZMpb8IhqwqlCrL8dDmrzptluXG">                    
2015                    <input type="hidden" name="captchaToken" id="hidden-token" />
2016                    <input type="hidden" name="captchaAction" id="hidden-action" />
2017                    
2018                    <div class="row align-items-center justify-content-between">
2019                        <div class="col-lg-6 col-md-6 col-12">
2020                            <input class="form-control cuInpFields" type="text" name="full_name" value="" required placeholder="*Name">
2021                        </div>
2022
2023                        <div class="col-lg-6 col-md-6 col-12 mt-lg-0 mt-md-0 mt-4">
2024                            <input class="form-control cuInpFields" type="email" name="email" value="" required placeholder="*Email">
2025                        </div>
2026
2027                        <div class="col-12 mt-4">
2028                            <input class="form-control cuInpFields" type="text" value="" name="subject" required placeholder="*Subject">
2029                        </div>
2030
2031                        <div class="col-12 mt-4">
2032                            <textarea class="form-control cuInpFields cuTxtArea" maxlength="100" name="message" rows="5" type="text" required placeholder="* Please enter your problem in detail. We will get back to you via email in 24-48 business hours."></textarea>
2033                        </div>
2034                        
2035                        <div class="form-group mt-4" style="display:flex;justify-content:center;">
2036                            <div class="g-recaptcha" data-sitekey="6LfJ684iAAAAAOg8tC-59ugFEbNmpBIzjU6-VJCL" data-action="register"></div>
2037                        </div>
2038
2039                        <div class="col-12 mt-3 text-center">
2040                            <button type="submit" class="regisBtn sndBtn p-2">Send</button>
2041                        </div>
2042                    </div>
2043                </form>
2044            </div>
2045        </div>
2046    </div>
2047    
2048    <!-- Main Content Ends -->
2049
2050    
2050<script>
2051        function alertHide(){
2052            document.getElementsByClassName("myAlert-danger")[0].style.display = "none";
2053        }
2054        
2055        $(document).ready(function(){
2056            $('.cuInpFields[name="full_name"], .cuInpFields[name="subject"]').on('keypress', function(e){
2057                var regex = new RegExp("^[a-zA-Z0-9]+$");
2058                var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
2059                if (regex.test(str)) {
2060                    return true;
2061                }
2062        
2063                e.preventDefault();
2064                return false;
2065            });
2066        });
2067    </script>
2067
2068
2069
2070
2071
2072    </main>
2073
2074    <style>
2075/* ===== FTD Footer (FINAL STRUCTURE) ===== */
2076:root{
2077  --ftd-secondary:#df5858;
2078  --ftd-bg: rgba(255,255,255,0.78);
2079  --ftd-border: rgba(0,0,0,0.08);
2080  --ftd-text:#121212;
2081  --ftd-muted:#6b6b6b;
2082  --ftd-radius:14px;
2083  --ftd-t:120ms;
2084  --ftd-shadow: 0 10px 28px rgba(0,0,0,0.06);
2085}
2086
2087.ftd{
2088  margin-top: 20px;
2089  padding: 0 24px 18px;
2090}
2091@media (max-width: 767.98px){
2092  .ftd{ padding: 0 16px 16px; }
2093}
2094
2095/* ===== Match navbar spacing (container + NV2 padding) on 576px → 767.98px ===== */
2096@media (min-width: 576px) and (max-width: 767.98px){
2097  /* Navbar padding = container gutter/2 + NV2 horizontal padding (16px) */
2098  .ftd{
2099    padding-left: calc(16px + (var(--bs-gutter-x, 24px) / 2));
2100    padding-right: calc(16px + (var(--bs-gutter-x, 24px) / 2));
2101  }
2102
2103  /* Optional but recommended: use the same container max width */
2104  .ftd__shell{
2105    max-width: 540px;
2106  }
2107}
2108
2109/* Keep footer alignment after 768px (md container range) */
2110@media (min-width: 768px) and (max-width: 991.98px){
2111  .ftd__shell{ max-width: 720px; }
2112}
2113
2114.ftd__shell{
2115  max-width: 1280px;
2116  width: 100%;
2117  margin: 0 auto;
2118}
2119
2120/* ===== Align footer width with Bootstrap container (same as navbar look) ===== */
2121/* sm: 576 → 767.98  => container max-width: 540px */
2122@media (min-width: 576px) and (max-width: 767.98px){
2123  .ftd__shell{ max-width: 513px; }
2124}
2125
2126/* md: 768 → 991.98 => keep footer aligned after crossing the 768px breakpoint */
2127@media (min-width: 768px) and (max-width: 991.98px){
2128  .ftd__shell{ max-width: 100%; }
2129  .ftd {padding:0px 12px;}
2130}
2131
2132@media (min-width: 1091px) and (max-width: 1399.98px){
2133  .ftd__shell{
2134    max-width: 81vw;
2135  }
2136}
2137
2138/* ===== 900 → 1090 keep same width ===== */
2139@media (min-width: 900px) and (max-width: 1090.98px){
2140  .ftd__shell{
2141    max-width: 92%;
2142  }
2143}
2144
2145/* Footer card */
2146.ftd__card{
2147  border: 1px solid var(--ftd-border);
2148  border-radius: var(--ftd-radius);
2149  background: var(--ftd-bg);
2150  backdrop-filter: blur(10px);
2151  -webkit-backdrop-filter: blur(10px);
2152  box-shadow: var(--ftd-shadow);
2153  padding: 18px 20px;
2154}
2155@media (max-width: 767.98px){
2156  .ftd__card{ padding: 16px 16px; }
2157}
2158
2159/* Top layout:
2160   Desktop: left brand area + right link columns
2161   Mobile: stacked layout with accordion sections */
2162.ftd__top{
2163  display:grid;
2164  grid-template-columns: 0.9fr 1.1fr; /* ✅ left slightly narrower */
2165  gap: 18px;
2166  align-items:start;
2167}
2168@media (max-width: 991.98px){
2169  .ftd__top{ grid-template-columns: 1fr; }
2170}
2171
2172/* LEFT (Brand Area) */
2173.ftd__brand{
2174  display:flex;
2175  flex-direction:column;
2176  gap: 10px;
2177  min-width: 0;
2178}
2179.ftd__logoLink{
2180  display:inline-flex;
2181  align-items:center;
2182  text-decoration:none;
2183}
2184.ftd__logo{
2185  height: 28px;
2186  width:auto;
2187  display:block;
2188}
2189
2190/* Brand tagline */
2191.ftd__tagline{
2192  margin: 0;
2193  color: rgba(18,18,18,0.70);
2194  font-size: 14px;
2195  line-height: 1.45;
2196  max-width: 420px;
2197  font-weight: 620;
2198}
2199
2200/* Care line */
2201.ftd__care{
2202  margin: 0;
2203  font-size: 13px;
2204  line-height: 1.35;
2205  color: rgba(18,18,18,0.55);
2206  font-weight: 600;
2207}
2208
2209/* Heart icon: clearer and independent from text opacity */
2210.ftd__heart{
2211  display:inline-flex;
2212  align-items:center;
2213  justify-content:center;
2214
2215  width: 16px;     
2216  height: 16px;
2217  margin: 0 6px;
2218
2219  color: #df5858;  /* Accent color */
2220  line-height: 1;
2221  transform: translateY(2px); /* baseline align */
2222
2223  opacity: 1;     
2224}
2225.ftd__heart svg{
2226  width: 16px;
2227  height: 16px;
2228  display:block;
2229  fill: currentColor;
2230
2231    /* Slight sharpening */
2232  filter: drop-shadow(0 1px 0 rgba(0,0,0,0.06));
2233}
2234
2235/* ===== Right section (desktop columns only) ===== */
2236.ftd__colsDesktop{ display:block; }
2237@media (max-width: 767.98px){
2238  .ftd__colsDesktop{ display:none !important; } /* Hide desktop columns on mobile */
2239}
2240
2241.ftd__cols{
2242  display:grid;
2243  grid-template-columns: repeat(3, minmax(0, 1fr)); /* Equal-width columns */
2244  gap: 16px;
2245}
2246
2247/* Section headings: uppercase with subtle underline */
2248.ftd__colTitle{
2249  display:inline-flex;
2250  align-items:center;
2251
2252  font-size: 11px;
2253  font-weight: 650;          /* Medium weight */
2254  letter-spacing: .55px;
2255  text-transform: uppercase;
2256
2257  color: rgba(18,18,18,0.84);
2258  margin-bottom: 8px;
2259
2260  position: relative;
2261  padding-bottom: 7px;
2262}
2263.ftd__colTitle::after{
2264  content:"";
2265  position:absolute;
2266  left: 0;
2267  bottom: 1px;
2268  width: 20px;
2269  height: 1px;              /* Very thin underline */
2270  border-radius: 999px;
2271  background: rgba(223,88,88,0.52);
2272  opacity: .75;
2273}
2274
2275/* Link lists: compact spacing */
2276.ftd__list{
2277  list-style:none;
2278  margin: 0;
2279  padding: 0;
2280  display:flex;
2281  flex-direction:column;
2282  gap: 7px;                 /* Compact spacing */
2283}
2284
2285/* Links: subtle motion with soft underline on hover */
2286.ftd__link{
2287  display:inline-flex;
2288  align-items:center;
2289  color: rgba(18,18,18,0.62) !important;
2290  text-decoration:none !important;
2291  font-size: 14px;
2292  line-height: 1.30;
2293  font-weight: 640;
2294  transition: color var(--ftd-t) ease,
2295              transform var(--ftd-t) ease,
2296              text-decoration-color var(--ftd-t) ease;
2297}
2298.ftd__link:hover{
2299  color: var(--ftd-secondary) !important;
2300  transform: translateX(1px);
2301  text-decoration: underline !important;
2302  text-decoration-color: rgba(223,88,88,0.22) !important;
2303  text-underline-offset: 3px;
2304}
2305.ftd__link:focus{
2306  outline: none !important;
2307  box-shadow: 0 0 0 4px rgba(223,88,88,0.10) !important;
2308  border-radius: 10px;
2309}
2310.ftd__link:visited{ color: rgba(18,18,18,0.62) !important; }
2311
2312/* ===== Mobile accordion only ===== */
2313.ftd__acc{ display:none; }
2314@media (max-width: 767.98px){
2315  .ftd__acc{ display:block; margin-top: 12px; } /* Mobile only */
2316}
2317
2318.ftdAcc{
2319  border: 1px solid rgba(0,0,0,0.06);
2320  border-radius: 14px;
2321  background: rgba(255,255,255,0.70);
2322  padding: 10px 12px;
2323}
2324.ftdAcc + .ftdAcc{ margin-top: 10px; }
2325
2326.ftdAcc summary{
2327  cursor:pointer;
2328  list-style:none;
2329  display:flex;
2330  align-items:center;
2331  justify-content:space-between;
2332  gap: 10px;
2333
2334  font-weight: 650;
2335  letter-spacing: .55px;
2336  text-transform: uppercase;
2337  font-size: 11px;
2338  color: rgba(18,18,18,0.84);
2339
2340  padding: 4px 2px;
2341}
2342.ftdAcc summary::-webkit-details-marker{ display:none; }
2343
2344/* ===== Modern SVG chevron ===== */
2345.ftdAcc__chev{
2346  display:inline-flex;
2347  align-items:center;
2348  justify-content:center;
2349
2350  width: 38px;
2351  height: 38px;
2352
2353  border-radius: 10px;
2354
2355  transition: transform var(--ftd-t) ease,
2356              background var(--ftd-t) ease;
2357}
2358
2359.ftdAcc__chev svg{
2360  width: 18px;  /* Larger icon size */
2361  height: 18px;
2362  stroke: rgba(0,0,0,0.65);
2363  stroke-width: 2.5;
2364  fill: none;
2365  stroke-linecap: round;
2366  stroke-linejoin: round;
2367}
2368
2369.ftdAcc[open] .ftdAcc__chev{
2370  transform: rotate(180deg);
2371}
2372
2373.ftdAcc summary:hover .ftdAcc__chev{
2374  background: rgba(0,0,0,0.05);
2375}
2376
2377.ftdAcc__body{
2378  padding-top: 10px;
2379  border-top: 1px solid rgba(0,0,0,0.06);
2380  margin-top: 10px;
2381}
2382
2383/* ===== Bottom section ===== */
2384.ftd__bottom{
2385  margin-top: 14px;
2386  padding-top: 12px;
2387  border-top: 1px solid rgba(0,0,0,0.06);
2388}
2389
2390/* Follow section row */
2391.ftd__social{
2392  display:flex;
2393  align-items:center;
2394  justify-content:space-between;
2395  gap: 14px;
2396}
2397@media (max-width: 767.98px){
2398  .ftd__social{
2399    flex-direction:column;
2400    align-items:flex-start;
2401  }
2402}
2403
2404.ftd__follow{
2405  font-weight: 800;
2406  letter-spacing: .15px;
2407  color: rgba(18,18,18,0.86);
2408}
2409
2410/* Social link chips with subtle borders */
2411.ftd__socialRow{
2412  display:flex;
2413  gap: 10px;
2414  flex-wrap: wrap;
2415}
2416
2417.ftd__iconLink{
2418  height: 44px;
2419  min-width: 44px;
2420  padding: 0 12px;
2421  border-radius: 12px;
2422
2423  border: 1px solid rgba(0,0,0,0.045); /* Lower contrast border */
2424  background: rgba(255,255,255,0.80);
2425
2426  color: #111 !important;
2427  text-decoration:none !important;
2428
2429  display:inline-flex;
2430  align-items:center;
2431  justify-content:center;
2432  gap: 10px;
2433
2434  transition: transform var(--ftd-t) ease,
2435              background var(--ftd-t) ease,
2436              border-color var(--ftd-t) ease,
2437              box-shadow var(--ftd-t) ease;
2438}
2439.ftd__iconLink i{ font-size: 16px; opacity: .92; }
2440.ftd__iconLabel{
2441  font-size: 13px;
2442  font-weight: 780;
2443  color: rgba(18,18,18,0.70);
2444  text-decoration: underline;
2445  text-decoration-color: rgba(223,88,88,0.0);
2446  text-underline-offset: 3px;
2447  transition: color var(--ftd-t) ease, text-decoration-color var(--ftd-t) ease;
2448}
2449.ftd__iconLink:hover{
2450  transform: translateY(-1px);
2451  background: rgba(255,255,255,0.95);
2452  border-color: rgba(0,0,0,0.07);
2453  box-shadow: 0 10px 20px rgba(0,0,0,0.05);
2454}
2455.ftd__iconLink:hover .ftd__iconLabel{
2456  color: var(--ftd-secondary);
2457  text-decoration-color: rgba(223,88,88,0.26);
2458}
2459.ftd__iconLink:focus{
2460  outline:none !important;
2461  box-shadow: 0 0 0 4px rgba(223,88,88,0.10) !important;
2462}
2463
2464/* Copyright text */
2465.ftd__copy{
2466  margin: 10px 0 0;
2467  font-size: 13px;
2468  color: rgba(18,18,18,0.70);
2469  font-weight: 650;
2470}
2471</style>
2472
2473
2474<footer class="ftd" id="ftdFooter" aria-label="Site footer">
2475  <div class="ftd__shell">
2476    <div class="ftd__card">
2477
2478      <div class="ftd__top">
2479
2480        
2481        <div class="ftd__brand">
2482          <a class="ftd__logoLink" href="https://www.citypng.com" aria-label="CityPNG Home">
2483            <img
2484              class="ftd__logo"
2485              src="https://imagedelivery.net/5MYSbk45M80qAwecrlKzdQ/1df3913a-3012-43f5-e509-c60d81362700/thumbnail"
2486              alt="CityPNG">
2487          </a>
2488
2489          <p class="ftd__tagline">
2490            High-quality transparent PNGs — fast, clean, and free.
2491          </p>
2492
2493          <p class="ftd__care">
2494  Made with care
2495  <span class="ftd__heart" aria-hidden="true">
2496    <svg viewBox="0 0 24 24" focusable="false" aria-hidden="true">
2497      <path d="M12.1 21.35l-1.1-1.02C5.14 14.99 2 12.14 2 8.5 2 6 4 4 6.5 4c1.74 0 3.41.81 4.5 2.09C12.09 4.81 13.76 4 15.5 4 18 4 20 6 20 8.5c0 3.64-3.14 6.49-8.9 11.83l-1 1.02z"/>
2498    </svg>
2499  </span>
2500  for designers worldwide.
2501</p>
2502        </div>
2503
2504        
2505        <div class="ftd__colsDesktop" aria-label="Footer links">
2506          <div class="ftd__cols">
2507
2508            <div class="ftd__col" id="ftdColProduct">
2509              <div class="ftd__colTitle">Product</div>
2510              <ul class="ftd__list">
2511                <li><a class="ftd__link" href="https://www.citypng.com/latest">Latest</a></li>
2512                <li><a class="ftd__link" href="https://www.citypng.com/categories">Categories</a></li>
2513                <li><a class="ftd__link" href="https://www.citypng.com/png-to-jpg">PNG to JPG</a></li>
2514              </ul>
2515            </div>
2516
2517            <div class="ftd__col" id="ftdColCompany">
2518              <div class="ftd__colTitle">Company</div>
2519              <ul class="ftd__list">
2520                <li><a class="ftd__link" href="https://www.citypng.com/page/about-us">About</a></li>
2521                <li><a class="ftd__link" href="https://www.citypng.com/contact">Contact</a></li>
2522              </ul>
2523            </div>
2524
2525            <div class="ftd__col" id="ftdColLegal">
2526              <div class="ftd__colTitle">Legal</div>
2527              <ul class="ftd__list">
2528                <li><a class="ftd__link" href="https://www.citypng.com/page/terms-of-service">Terms</a></li>
2529                <li><a class="ftd__link" href="https://www.citypng.com/page/privacy-policy">Privacy</a></li>
2530                <li><a class="ftd__link" href="https://www.citypng.com/page/dmca">DMCA</a></li>
2531              </ul>
2532            </div>
2533
2534          </div>
2535        </div>
2536
2537      </div>
2538
2539      
2540      <div class="ftd__acc" id="ftdAccordions">
2541        <details class="ftdAcc" open>
2542          <summary><span>Product</span><span class="ftdAcc__chev" aria-hidden="true">
2543  <svg viewBox="0 0 24 24">
2544    <path d="M6 9l6 6 6-6"/>
2545  </svg>
2546</span></summary>
2547          <div class="ftdAcc__body">
2548            <ul class="ftd__list">
2549              <li><a class="ftd__link" href="https://www.citypng.com/latest">Latest</a></li>
2550              <li><a class="ftd__link" href="https://www.citypng.com/categories">Categories</a></li>
2551              <li><a class="ftd__link" href="https://www.citypng.com/latest">Trending</a></li>
2552              <li><a class="ftd__link" href="https://www.citypng.com/png-to-jpg">PNG to JPG</a></li>
2553            </ul>
2554          </div>
2555        </details>
2556
2557        <details class="ftdAcc">
2558          <summary><span>Company</span><span class="ftdAcc__chev" aria-hidden="true">
2559  <svg viewBox="0 0 24 24">
2560    <path d="M6 9l6 6 6-6"/>
2561  </svg>
2562</span></summary>
2563          <div class="ftdAcc__body">
2564            <ul class="ftd__list">
2565              <li><a class="ftd__link" href="https://www.citypng.com/page/about-us">About</a></li>
2566              <li><a class="ftd__link" href="https://www.citypng.com/contact">Contact</a></li>
2567              <li><a class="ftd__link" href="https://www.citypng.com/support">Support</a></li>
2568            </ul>
2569          </div>
2570        </details>
2571
2572        <details class="ftdAcc">
2573          <summary><span>Legal</span><span class="ftdAcc__chev" aria-hidden="true">
2574  <svg viewBox="0 0 24 24">
2575    <path d="M6 9l6 6 6-6"/>
2576  </svg>
2577</span></summary>
2578          <div class="ftdAcc__body">
2579            <ul class="ftd__list">
2580              <li><a class="ftd__link" href="https://www.citypng.com/page/terms-of-service">Terms</a></li>
2581              <li><a class="ftd__link" href="https://www.citypng.com/page/privacy-policy">Privacy</a></li>
2582              <li><a class="ftd__link" href="https://www.citypng.com/page/dmca">DMCA</a></li>
2583            </ul>
2584          </div>
2585        </details>
2586      </div>
2587
2588      
2589      <div class="ftd__bottom" id="ftdBottom">
2590        <div class="ftd__social" id="ftdSocial">
2591          <div class="ftd__follow"><span>Follow Us</span></div>
2592
2593          <div class="ftd__socialRow" role="list">
2594            <a class="ftd__iconLink" role="listitem" target="_blank" rel="noopener"
2595               href="https://www.facebook.com/City-PNG-100368688224730/" aria-label="CityPNG on Facebook">
2596              <i class="fa-brands fa-facebook-f" aria-hidden="true"></i>
2597              <span class="ftd__iconLabel">Facebook</span>
2598            </a>
2599
2600            <a class="ftd__iconLink" role="listitem" target="_blank" rel="noopener"
2601               href="https://www.pinterest.com/citypng/" aria-label="CityPNG on Pinterest">
2602              <i class="fa-brands fa-pinterest" aria-hidden="true"></i>
2603              <span class="ftd__iconLabel">Pinterest</span>
2604            </a>
2605
2606            <a class="ftd__iconLink" role="listitem" target="_blank" rel="noopener"
2607               href="https://www.instagram.com/citypng.web/" aria-label="CityPNG on Instagram">
2608              <i class="fa-brands fa-instagram" aria-hidden="true"></i>
2609              <span class="ftd__iconLabel">Instagram</span>
2610            </a>
2611          </div>
2612        </div>
2613
2614        <p class="ftd__copy">© 2026 CityPNG. All rights reserved.</p>
2615      </div>
2616
2617    </div>
2618  </div>
2619</footer>
2620    <!-- Bootstrap JavaScript Library -->
2621    
2621<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
2621
2622    
2623    
2623<script src="https://city-png.b-cdn.net/new-design/bootstrap/Javascript/bootstrap.bundle.min.js"></script>
2623
2624
2625    
2625<script src="https://city-png.b-cdn.net/cookies.min.js"></script>
2625
2626    
2626<script>
2627    
2628    $(function() {
2629        const accepted = window.localStorage.getItem('cookie_accepted')
2630        if(!accepted) {
2631            $('#cookie-law-info-bar').show()
2632        }
2633        $('.accept_cookies').on('click', function () {
2634            window.localStorage.setItem('cookie_accepted', 1)
2635            $('#cookie-law-info-bar').hide();
2636             $('#float_box').animate({
2637        bottom: "10px"
2638    }, 1500);
2639        })
2640    })
2641    
2642        document.querySelector('.schBarInp').addEventListener('keypress', function(e) {
2643            var regex = new RegExp("^[a-zA-Z0-9 ]+$");
2644            var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
2645            if (regex.test(str)) {
2646                return true;
2647            }
2648
2649            e.preventDefault();
2650            return false;
2651        });
2652        
2653        document.querySelector('input[name="q"]').addEventListener('keyup', (e) => {
2654            if (e.keyCode === 13) {
2655                document.querySelector('form[role="search"]').submit();
2656            }
2657        });
2658        
2659        function toggleLike(id) {
2660            try {
2661                event.preventDefault();
2662                var token = $('meta[name="csrf-token"]').attr('content')
2663                $.post('/ajax/like', {
2664                    id: id,
2665                    '_token': token
2666                }).then(() => {
2667                    $(`#heart_icon_${id}`).toggleClass("heart-icon-red");
2668                })
2669            } catch (error) {
2670                console.log(error);
2671            }
2672        }
2673        
2674        $(".search-toggler").click(function(){
2675            $(".header-search-main").slideToggle(300);
2676        });
2677
2678    </script>
2678
2679    
2680        
2681    
2681<script>
2682        Cookies.set('cookieBanner');
2683
2684		$(document).ready(function() {
2685            if (Cookies('cookiePolicySite'));
2686            else {
2687            	$('.showBanner').fadeIn();
2688                $("#close-banner").click(function() {
2689                    $(".showBanner").slideUp(50);
2690                    Cookies('cookiePolicySite', true);
2691                });
2692            }
2693        });
2694    </script>
2694
2695
2696<script type="text/javascript" async src="//c.pubguru.net/pg.citypng.js"></script>
2696
2697
2698
2699<style>
2700/* Start V2 */
2701/* Close X button (top-right) */
2702.cpx-floatbox__x{
2703  position: absolute;
2704  top: 10px;
2705  right: 10px;
2706  width: 34px;
2707  height: 34px;
2708  border-radius: 10px;
2709  border: 0;
2710  background: rgba(0,0,0,.04);
2711  cursor: pointer;
2712  display: inline-flex;
2713  align-items: center;
2714  justify-content: center;
2715  transition: background .15s ease, transform .15s ease, opacity .15s ease;
2716}
2717
2718.cpx-floatbox__x:hover{
2719  background: rgba(0,0,0,.08);
2720  transform: translateY(-1px);
2721}
2722
2723.cpx-floatbox__x:active{ transform: translateY(0px); }
2724
2725.cpx-floatbox__x svg{
2726  width: 16px;
2727  height: 16px;
2728  opacity: .7;
2729}
2730
2731/* Smooth hide animation */
2732.cpx-floatbox.is-hiding{
2733  opacity: 0;
2734  transform: translateY(12px);
2735  transition: opacity .22s ease, transform .22s ease;
2736}
2737
2738.cpx-floatbox{
2739  transition: opacity .22s ease, transform .22s ease;
2740}
2741
2742/* End V2 */
2743  .cpx-floatbox{
2744    position: fixed;
2745    right: 20px;
2746    bottom: 20px;
2747    width: 240px;
2748    z-index: 9999;
2749    display: none;
2750    font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
2751  }
2752
2753  .cpx-floatbox__inner{
2754    position: relative;
2755    background: #fff;
2756    border-radius: 18px;
2757    box-shadow: 0 12px 30px rgba(0,0,0,.18);
2758    border: 1px solid rgba(0,0,0,.06);
2759
2760        /* Leave space for the icon that extends above the card */
2761    padding: 52px 16px 16px;
2762  }
2763
2764    /* Icon positioned above the card with no background */
2765  .cpx-floatbox__icon{
2766    position: absolute;
2767    top: -55px;
2768    left: 50%;
2769    transform: translateX(-50%);
2770    background: transparent;
2771    padding: 0;
2772    border: 0;
2773    box-shadow: none;
2774    pointer-events: none; /* Decorative icon only */
2775  }
2776
2777  .cpx-floatbox__icon img{
2778    display: block;
2779    width: 100px;
2780    height: auto;
2781  }
2782
2783  .cpx-floatbox__title{
2784    font-weight: 800;
2785    font-size: 18px;
2786    margin-bottom: 6px;
2787    text-align: center;
2788    color: #111;
2789  }
2790
2791  .cpx-floatbox__desc{
2792    font-size: 14px;
2793    opacity: .75;
2794    line-height: 1.4;
2795    text-align: center;
2796    margin-bottom: 6px;
2797  }
2798
2799  .cpx-floatbox__actions{
2800    margin-top: 16px;
2801    display: flex;
2802    flex-direction: column;
2803    gap: 12px;
2804  }
2805
2806  .cpx-floatbox__btn{
2807    display: inline-flex;
2808    justify-content: center;
2809    align-items: center;
2810    height: 48px;
2811    border-radius: 14px;
2812    text-decoration: none;
2813    font-weight: 800;
2814    font-size: 16px;
2815    background: #df5858;
2816    color: #fff;
2817    transition: transform .15s ease, box-shadow .15s ease, opacity .15s ease;
2818  }
2819
2820  .cpx-floatbox__btn:hover{
2821    opacity: .95;
2822    transform: translateY(-1px);
2823    box-shadow: 0 6px 16px rgba(223,88,88,.35);
2824    color:#FFF;
2825  }
2826
2827  .cpx-floatbox__link{
2828    background: transparent;
2829    border: 0;
2830    padding: 6px 0;
2831    cursor: pointer;
2832    font-size: 16px;
2833    opacity: .45;
2834    text-decoration:underline;
2835  }
2836
2837  .cpx-floatbox__link:hover{ opacity: .9; }
2838
2839  @media (max-width: 1023px){
2840    .cpx-floatbox{ display: none !important; }
2841  }
2842</style>
2843
2844<!-- CPX Float Box (DEV only: privacy-policy) -->
2845<div id="cpx-floatbox" class="cpx-floatbox" aria-hidden="true">
2846  <div class="cpx-floatbox__inner">
2847      
2848      <button id="cpx-floatbox-x" class="cpx-floatbox__x" type="button" aria-label="Close">
2849  <svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
2850    <path d="M6 6l12 12M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
2851  </svg>
2852</button>
2853
2854
2855    <div class="cpx-floatbox__icon">
2856      <img
2857        src="https://www.citypng.com/public/png-jpg-converter-icon.png"
2858        alt="PNG to JPG Converter"
2859        loading="lazy"
2860      >
2861    </div>
2862
2863    <div class="cpx-floatbox__text">
2864      <div class="cpx-floatbox__title">Need JPG version?</div>
2865      <div class="cpx-floatbox__desc">Convert PNG → JPG in seconds</div>
2866    </div>
2867
2868    <div class="cpx-floatbox__actions">
2869      <a
2870        id="cpx-floatbox-cta"
2871        class="cpx-floatbox__btn"
2872        href="https://www.citypng.com/png-to-jpg"
2873        rel="nofollow"
2874      >
2875        Convert PNG → JPG
2876      </a>
2877
2878      <button id="cpx-floatbox-close" class="cpx-floatbox__link" type="button">
2879        Maybe later
2880      </button>
2881    </div>
2882
2883  </div>
2884</div>
2885
2886
2887
2888<script>
2889(function () {
2890  // ----------------------------
2891  // Safe GA4 helper
2892  // ----------------------------
2893  function trackGA(eventName, params) {
2894    try {
2895      if (typeof gtag === 'function') {
2896        params = params || {};
2897        params.debug_mode = false;
2898        gtag('event', eventName, params);
2899      }
2900    } catch (e) {}
2901  }
2902
2903  // DEV: show only on privacy-policy page
2904  var DEV_ONLY_PRIVACY_PAGE = false; // Keep false in production
2905  var TARGET_PATH = "/page/privacy-policy";
2906
2907  var DESKTOP_MIN_WIDTH = 1024;
2908  var SHOW_AFTER_SECONDS = 6;
2909  var SHOW_AFTER_SCROLL_RATIO = 0.40;
2910
2911  // Storage keys and durations
2912  var STORAGE_KEY = "cpx_floatbox_hide_until";       // 7 days (Maybe later)
2913  var CONVERTED_KEY = "cpx_floatbox_converted";      // forever (Convert click)
2914  var SESSION_CLOSE_KEY = "cpx_floatbox_closed_session"; // X close = per session
2915  var HIDE_DAYS = 7;
2916
2917  function cookieBarVisible() {
2918    var bar = document.getElementById("cookie-law-info-bar");
2919    if (!bar) return false;
2920    return bar.offsetParent !== null && getComputedStyle(bar).display !== "none";
2921  }
2922
2923  function isDesktop() { return window.innerWidth >= DESKTOP_MIN_WIDTH; }
2924
2925  function isAllowedPage() {
2926    if (!DEV_ONLY_PRIVACY_PAGE) return true;
2927    return window.location.pathname === TARGET_PATH;
2928  }
2929
2930  function nowMs() { return Date.now(); }
2931
2932  function getHideUntil() {
2933    try {
2934      var v = localStorage.getItem(STORAGE_KEY);
2935      if (!v) return 0;
2936      var n = parseInt(v, 10);
2937      return Number.isFinite(n) ? n : 0;
2938    } catch(e) { return 0; }
2939  }
2940
2941  function setHideForDays(days) {
2942    try {
2943      localStorage.setItem(STORAGE_KEY, String(nowMs() + days*24*60*60*1000));
2944    } catch(e) {}
2945  }
2946
2947  function hasConverted() {
2948    try {
2949      return localStorage.getItem(CONVERTED_KEY) === "1";
2950    } catch(e) { return false; }
2951  }
2952
2953  function setConvertedForever() {
2954    try {
2955      localStorage.setItem(CONVERTED_KEY, "1");
2956    } catch(e) {}
2957  }
2958
2959  function hasClosedThisSession() {
2960    try { return sessionStorage.getItem(SESSION_CLOSE_KEY) === "1"; }
2961    catch(e) { return false; }
2962  }
2963
2964  function setClosedThisSession() {
2965    try { sessionStorage.setItem(SESSION_CLOSE_KEY, "1"); }
2966    catch(e) {}
2967  }
2968
2969  function scrollRatio() {
2970    var doc = document.documentElement;
2971    var scrollTop = window.pageYOffset || doc.scrollTop || 0;
2972    var scrollHeight = doc.scrollHeight || 0;
2973    var clientHeight = doc.clientHeight || 0;
2974    var maxScroll = Math.max(scrollHeight - clientHeight, 1);
2975    return scrollTop / maxScroll;
2976  }
2977
2978  var box = document.getElementById("cpx-floatbox");
2979  if (!box) return;
2980
2981  // Guard conditions
2982  if (!isAllowedPage()) return;
2983  if (!isDesktop()) return;
2984  if (hasConverted()) return;                 // Convert action => never show again
2985  if (getHideUntil() > nowMs()) return;       // Maybe later => hide for 7 days
2986  if (hasClosedThisSession()) return;        // X close => current session only
2987
2988  var shown = false;
2989
2990  function applyBottomOffset() {
2991    box.style.bottom = cookieBarVisible() ? "90px" : "20px";
2992  }
2993
2994  function hideBoxNice() {
2995    box.classList.add("is-hiding");
2996    setTimeout(function(){
2997      box.style.display = "none";
2998      box.setAttribute("aria-hidden", "true");
2999      box.classList.remove("is-hiding");
3000    }, 230);
3001  }
3002
3003  function showBox() {
3004    if (shown) return;
3005    if (!isDesktop()) return;
3006    if (hasConverted()) return;
3007    if (getHideUntil() > nowMs()) return;
3008    if (hasClosedThisSession()) return;
3009
3010    shown = true;
3011    applyBottomOffset();
3012    box.style.display = "block";
3013    box.setAttribute("aria-hidden", "false");
3014
3015    trackGA('floatbox_impression', {
3016      placement: 'bottom_right',
3017      page: window.location.pathname,
3018      tool: 'png_to_jpg'
3019    });
3020
3021    window.removeEventListener("scroll", onScroll, { passive: true });
3022    window.removeEventListener("resize", onResize);
3023  }
3024
3025  function onScroll() {
3026    if (scrollRatio() >= SHOW_AFTER_SCROLL_RATIO) showBox();
3027  }
3028
3029  function onResize() {
3030    if (!isDesktop()) {
3031      box.style.display = "none";
3032      box.setAttribute("aria-hidden", "true");
3033    } else if (shown) {
3034      applyBottomOffset();
3035    }
3036  }
3037
3038    // Maybe later: hide for 7 days
3039  var closeBtn = document.getElementById("cpx-floatbox-close");
3040  if (closeBtn) {
3041    closeBtn.addEventListener("click", function () {
3042      trackGA('floatbox_dismiss', {
3043        placement: 'bottom_right',
3044        page: window.location.pathname,
3045        hide_days: HIDE_DAYS
3046      });
3047
3048      setHideForDays(HIDE_DAYS);
3049      hideBoxNice();
3050    });
3051  }
3052
3053    // X close: hide for the current session only
3054  var xBtn = document.getElementById("cpx-floatbox-x");
3055  if (xBtn) {
3056    xBtn.addEventListener("click", function () {
3057      trackGA('floatbox_close_click', {
3058        placement: 'bottom_right',
3059        page: window.location.pathname,
3060        scope: 'session'
3061      });
3062
3063      setClosedThisSession();
3064      hideBoxNice();
3065    });
3066  }
3067
3068  // CTA click: mark as converted and hide permanently
3069  var ctaBtn = document.getElementById("cpx-floatbox-cta");
3070  if (ctaBtn) {
3071    ctaBtn.addEventListener("click", function () {
3072      trackGA('floatbox_cta_click', {
3073        placement: 'bottom_right',
3074        page: window.location.pathname,
3075        destination: 'png_to_jpg'
3076      });
3077
3078      setConvertedForever();
3079      hideBoxNice();
3080    });
3081  }
3082
3083  window.addEventListener("scroll", onScroll, { passive: true });
3084  window.addEventListener("resize", onResize);
3085
3086  setTimeout(showBox, SHOW_AFTER_SECONDS * 1000);
3087
3088  document.addEventListener("click", function(e){
3089    if (e.target && e.target.classList && e.target.classList.contains("accept_cookies")) {
3090      setTimeout(function(){
3091        if (shown) applyBottomOffset();
3092      }, 200);
3093    }
3094  });
3095
3096})();
3097</script>
3097
3098
3099<script>
3100(function(){
3101  function showToast(opts){
3102    opts = opts || {};
3103    var title = opts.title || 'Done';
3104    var text  = opts.text || '';
3105    var ms    = Number(opts.ms || 8000);
3106
3107    var root = document.getElementById('pwDlToastRoot');
3108    if(!root) return;
3109
3110    root.innerHTML = '';
3111
3112    var toast = document.createElement('div');
3113    toast.className = 'pwDlToast';
3114    toast.setAttribute('role', 'status');
3115
3116    toast.innerHTML =
3117      '<div class="pwDlToastIcon" aria-hidden="true">✓</div>' +
3118      '<div style="flex:1;min-width:0;">' +
3119      '  <p class="pwDlToastTitle"></p>' +
3120      (text ? '  <p class="pwDlToastText"></p>' : '') +
3121      '</div>' +
3122      '<button type="button" class="pwDlToastClose" aria-label="Close">✕</button>';
3123
3124    root.appendChild(toast);
3125
3126    toast.querySelector('.pwDlToastTitle').textContent = title;
3127    if(text){
3128      toast.querySelector('.pwDlToastText').textContent = text;
3129    }
3130
3131    requestAnimationFrame(function(){ toast.classList.add('show'); });
3132
3133    var closeBtn = toast.querySelector('.pwDlToastClose');
3134    var t1, t2;
3135
3136    function dismiss(){
3137      toast.classList.remove('show');
3138      clearTimeout(t1); clearTimeout(t2);
3139      t2 = setTimeout(function(){
3140        if (toast && toast.parentNode) toast.parentNode.removeChild(toast);
3141      }, 220);
3142    }
3143
3144    if(closeBtn) closeBtn.addEventListener('click', dismiss);
3145    t1 = setTimeout(dismiss, ms);
3146
3147    return { dismiss: dismiss };
3148  }
3149
3150  window.CityPNGToast = { show: showToast };
3151
3152    // Server-driven toast (reset password success)
3153  })();
3154</script>
3154
3155
3156
3157
3158
3159
3160</body>
3161
3162</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.