1<!DOCTYPE html> 2<html lang="fil" dir="ltr"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- Matomo â explicit per-market property; regional traffic never falls back to apex. --><!-- End Matomo Code --><title>Mag-sign In | Wallpapers.com.ph</title> 6<meta name="description" content="Mag-sign in sa Wallpapers.com.ph"> 7<meta name="robots" content="noindex,follow"> 8<link rel="canonical" href="https://wallpapers.com.ph/login/"> 9<link rel="alternate" hreflang="fil" href="https://wallpapers.com.ph/login/">
9<script type="application/ld+json"> 10{ 11 "@context": "https://schema.org", 12 "@graph": [ 13 { 14 "@type": "Organization", 15 "@id": "https://wallpapers.com.ph#organization", 16 "name": "Wallpapers.com.ph", 17 "alternateName": "Wallpapers", 18 "url": "https://wallpapers.com.ph/", 19 "logo": { 20 "@type": "ImageObject", 21 "@id": "https://wallpapers.com.ph#logo", 22 23 "url": "https://wallpapers.com.ph/static/src/Logo-phl.svg", 24 "contentUrl": "https://wallpapers.com.ph/static/src/Logo-phl.svg", 25 "caption": "Wallpapers.com.ph" 26 }, 27 "image": {"@id": "https://wallpapers.com.ph#logo"} 28 }, 29 { 30 "@type": "WebSite", 31 32 "@id": "https://wallpapers.com.ph/#website", 33 "name": "Wallpapers.com.ph", 34 "url": "https://wallpapers.com.ph/", 35 "description": "Libreng HD, 4K at 8K na wallpaper, background, larawan, SVG at PNG.", 36 "publisher": {"@id": "https://wallpapers.com.ph#organization"}, 37 "inLanguage": "fil" 38 } 39 ] 40} 41</script>
41<meta property="og:title" content="Mag-sign In | Wallpapers.com.ph"> 42<meta property="og:description" content="Mag-sign in sa Wallpapers.com.ph"> 43<meta property="og:url" content="https://wallpapers.com.ph/login/"> 44<meta property="og:site_name" content="Wallpapers.com.ph"> 45<meta property="og:locale" content="fil_PH"> 46<meta property="og:type" content="website"> 47<meta property="og:image" content="https://wallpapers.com.ph/static/img/og-default-phl.jpg"> 48<meta property="og:image:type" content="image/jpeg"> 49<meta property="og:image:width" content="1200"> 50<meta property="og:image:height" content="630"> 51<meta name="twitter:card" content="summary_large_image"> 52<meta name="twitter:title" content="Mag-sign In | Wallpapers.com.ph"> 53<meta name="twitter:description" content="Mag-sign in sa Wallpapers.com.ph"> 54<meta name="twitter:image" content="https://wallpapers.com.ph/static/img/og-default-phl.jpg"> 55<link rel="preload" href="/static/res/sprite.svg" as="image" type="image/svg+xml"> 56<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> 57<link rel="preconnect" href="https://fonts.googleapis.com"> 58<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><style> 59 /* Hide the body until critical CSS is in, but only briefly â the 60 `.no-css` class is removed by the inline JS below once the first 61 wp-* stylesheet finishes parsing. */ 62 body { background:#fff; color:#1f2937; 63 font-family:-apple-system, system-ui, "Segoe UI", Roboto, sans-serif; } 64 /* Reserve nav header height so content doesn't jump when wp-main.css 65 lands and adds 1 row of padding + the logo. Width matches the live 66 desktop header; mobile shrinks via wp-main.css media query. */ 67 .nav-skeleton, 68 nav.navbar, header.site-header, .wpc-nav-row { 69 min-height: 56px; 70 } 71</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"> 72<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"> 73<link rel="stylesheet" href="/static/css/wp-main.css?v=20260607b"> 74<link rel="stylesheet" href="/static/css/wp-extras.css"> 75<link rel="stylesheet" href="/static/css/wp-extras2.css"> 76<link rel="stylesheet" href="/static/css/wp-promo.css"> 77<link rel="stylesheet" href="/static/style.css"> 78<link rel="stylesheet" href="/static/css/mobile-nav.css?v=16"> 79<link rel="stylesheet" href="/static/css/wp-nav.css?v=1">
79<script defer src="/static/js/wp-nav.js?v=2"></script>
79<link rel="icon" href="/static/src/fav-icon.svg" type="image/svg+xml"> 80<link rel="icon" type="image/png" sizes="32x32" href="/static/img/favicon/favicon-32x32.png?v=20260619"> 81<link rel="icon" type="image/png" sizes="16x16" href="/static/img/favicon/favicon-16x16.png?v=20260619"> 82<link rel="icon" type="image/png" sizes="192x192" href="/static/img/favicon/favicon-192x192.png?v=20260619"> 83<link rel="apple-touch-icon" sizes="180x180" href="/static/img/favicon/apple-touch-icon.png?v=20260619"> 84<link rel="shortcut icon" href="/favicon.ico"><!-- Google Tag Manager -->
84<script>
vendor: 359 bytes, lines 84-88
84(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 85 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 86 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 87 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 88 })(window,document,'script','dataLayer','
88GTM-WV4522P
vendor: 3 bytes, line 88
88');
88</script>
88<!-- End Google Tag Manager --><link rel="stylesheet" href="/static/css/wpc_ads.css?v=20260907b">
88<script defer src="/static/js/wpc_ads.js?v=20260611b"></script>
88<style> 89 /* Login owns the entire viewport â the minimal-chrome header strip 90 (top-left logo) and footer (© Terms · Privacy · Contact) from 91 base_minimal.html are hidden so the hero gradient runs edge-to-edge. */ 92 body.login .min-header, 93 body.login .min-foot { display: none !important; } 94 body.login { background: #fff; } 95 96 /* 70/30 split â hero panel on the left, form card on the right. 97 Below 880px the hero collapses and the form takes the full width. 98 min-height:100vh now that the minimal header/footer are hidden. */ 99 .auth-shell { 100 display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(380px, 1fr); 101 gap: 0; min-height: 100vh; 102 } 103 /* Hero background â warm cream â sky blue gradient that fully covers 104 the left/non-form region. Slightly deeper stops than the original so 105 it reads as an intentional brand panel, not a near-white wash. */ 106 /* Legacy wp-main wraps `<main>` with a `main aside { max-width: 22rem; }` 107 rule (built for the GDPR sidebar). Without these overrides the grid 108 cell stays wide but the aside element itself clamps to 22rem, leaving 109 a grey gap between the gradient and the form. */ 110 main .auth-hero, .auth-hero { 111 background: linear-gradient(135deg, #fde68a 0%, #fef3c7 30%, #bae6fd 75%, #7dd3fc 100%); 112 color: #1f2937; padding: 3.25rem 3rem; display: flex; flex-direction: column; 113 position: relative; overflow: hidden; 114 width: 100% !important; max-width: none !important; 115 align-self: stretch; justify-self: stretch; 116 } 117 .auth-hero::before { 118 content: ""; position: absolute; inset: 0; 119 background: 120 radial-gradient(circle at 80% 10%, rgba(251,191,36,.35), transparent 50%), 121 radial-gradient(circle at 10% 90%, rgba(56,189,248,.30), transparent 45%); 122 pointer-events: none; 123 } 124 .auth-hero-content { 125 position: relative; z-index: 1; 126 width: 100%; max-width: 520px; min-width: 0; 127 margin: auto 0; 128 } 129 .auth-hero h2 { 130 font-size: clamp(1.65rem, 2.2vw + 1rem, 2.1rem); 131 line-height: 1.15; margin: 0 0 .85rem; color: #111827; 132 word-break: break-word; hyphens: auto; 133 } 134 .auth-hero p { color: #475569; font-size: 1.05rem; line-height: 1.55; margin: 0 0 1.5rem; max-width: 100%; } 135 .auth-hero ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .55rem; } 136 .auth-hero li { display: flex; align-items: flex-start; gap: .6rem; color: #1f2937; font-size: .95rem; } 137 .auth-hero li::before { 138 content: "â"; width: 22px; height: 22px; flex-shrink: 0; 139 border-radius: 50%; background: rgba(31,41,55,.08); color: #d97706; 140 display: inline-flex; align-items: center; justify-content: center; 141 font-weight: 800; font-size: .85rem; 142 } 143 144 .auth-side { padding: 3rem 2.25rem; display: flex; flex-direction: column; 145 justify-content: center; background: #fff; } 146 .auth-wrap { width: 100%; max-width: 420px; margin: 0 auto; padding: 0; } 147 .auth-card { background: transparent; border: 0; border-radius: 0; padding: 0; box-shadow: none; } 148 149 /* Single logo IMG (the full Logo.svg, same as the nav uses), scaled 150 small. No extra wordmark text â Logo.svg already contains it. The 151 prior version used the fav-icon + a hand-written "Wallpapers.com" 152 wordmark, which read inconsistently with the nav. */ 153 .auth-logo { 154 display: inline-flex; align-items: center; 155 margin-bottom: 1.5rem; 156 text-decoration: none; 157 } 158 .auth-logo img { 159 height: 30px; width: auto; display: block; 160 } 161 /* Hero-side logo gets a much bigger treatment â it's the brand 162 anchor of the page. Form-side logo stays compact (30px). */ 163 .auth-hero .auth-logo img { height: 60px; } 164 .auth-hero .auth-logo { margin-bottom: 2.25rem; } 165 166 @media (max-width: 880px) { 167 .auth-shell { grid-template-columns: 1fr; min-height: 0; }
168 /* Mobile: the login/signup FORM goes first (top), the colorful gradient + 169 brand text sits BELOW it. Reorder the grid items and show the hero with 170 lighter mobile padding instead of hiding it. */ 171 .auth-side { order: 1; padding: 2rem 1.25rem; } 172 .auth-hero { 173 display: flex !important; 174 order: 2; 175 padding: 2.25rem 1.5rem; 176 min-height: 0; 177 border-radius: 18px 18px 0 0; 178 } 179 .auth-hero .auth-logo { display: none; } /* form side already has the logo */ 180 .auth-hero h2 { font-size: 1.5rem; } 181 } 182 .auth-tabs { 183 display: flex; gap: .25rem; padding: .3rem; 184 background: #f3f4f6; border-radius: 999px; 185 margin-bottom: 1.5rem; 186 } 187 .auth-tabs button { 188 flex: 1 1 0; padding: .55rem; border: none; background: transparent; 189 border-radius: 999px; font-weight: 700; font-size: .92rem; 190 color: #6b7280; cursor: pointer; transition: background .15s, color .15s; 191 } 192 .auth-tabs button.active { background: #1f2937; color: #fff; } 193 194 .auth-oauth { 195 display: flex; flex-direction: column; gap: .55rem; 196 margin-bottom: 1.25rem; 197 } 198 /* OAuth buttons â slightly more visible than the previous flat white. 199 Subtle grey body + darker hairline border so they read as real 200 interactive surfaces, not "is that a button or a divider?". */ 201 .oauth-btn { 202 display: flex; align-items: center; justify-content: center; gap: .55rem; 203 width: 100%; padding: .8rem 1rem; border-radius: 10px; 204 border: 1.5px solid #d1d5db; background: #f9fafb; 205 font-weight: 700; font-size: .95rem; color: #1f2937; 206 cursor: pointer; text-decoration: none; 207 transition: background .12s, border-color .12s, box-shadow .12s; 208 } 209 .oauth-btn:hover { 210 background: #fff; border-color: #9ca3af; 211 box-shadow: 0 1px 2px rgba(0,0,0,.04); 212 color: #1f2937; 213 } 214 .oauth-btn img { width: 18px; height: 18px; } 215 216 .auth-divider { 217 display: flex; align-items: center; gap: .75rem; 218 color: #9ca3af; font-size: .8rem; margin: 1rem 0; 219 } 220 .auth-divider::before, .auth-divider::after { 221 content: ''; flex: 1 1 auto; height: 1px; background: #e5e7eb; 222 } 223 224 .auth-field { margin-bottom: .85rem; } 225 .auth-field label { 226 display: block; font-size: .85rem; font-weight: 600; 227 color: #374151; margin-bottom: .35rem; 228 } 229 .auth-field input { 230 width: 100%; padding: .7rem .85rem; 231 border: 1px solid #d1d5db; border-radius: 8px; 232 font-size: .95rem; color: #1f2937; background: #fff; 233 box-sizing: border-box; 234 } 235 .auth-field input:focus { outline: none; border-color: #2464c4; } 236 237 .auth-row { display: flex; align-items: center; justify-content: space-between; 238 font-size: .82rem; margin: -.25rem 0 1rem; } 239 .auth-row a { color: #2464c4; text-decoration: none; } 240 241 /* Trial opt-in (EN destinations only â unhidden by the script below). */ 242 .auth-trial { display: flex; gap: .55rem; align-items: flex-start; margin: .1rem 0 .85rem; 243 padding: .7rem .8rem; background: #fffbeb; border: 1px solid #fde68a; border-radius: 10px; 244 font-size: .86rem; line-height: 1.4; color: #374151; cursor: pointer; } 245 .auth-trial[hidden] { display: none; } 246 .auth-trial input { margin: .15rem 0 0; width: 16px; height: 16px; accent-color: #f59e0b; flex: 0 0 auto; } 247 .auth-trial b { color: #111827; } 248 .auth-submit { 249 width: 100%; padding: .85rem; border: none; 250 background: #2464c4; color: #fff; border-radius: 10px; 251 font-weight: 800; font-size: 1rem; cursor: pointer; 252 } 253 .auth-submit:hover { background: #1d4ed8; } 254 .auth-submit:disabled { opacity: .55; cursor: not-allowed; } 255 256 .auth-msg { font-size: .85rem; margin-top: .75rem; min-height: 1.2em; text-align: center; } 257 .auth-msg.err { color: #dc2626; } 258 .auth-msg.ok { color: #15803d; } 259 260 .auth-foot { text-align: center; color: #6b7280; font-size: .85rem; margin-top: 1rem; } 261 .auth-foot a { color: #2464c4; text-decoration: none; font-weight: 600; } 262 .auth-terms { color: #9ca3af; font-size: .72rem; text-align: center; 263 margin-top: 1rem; line-height: 1.45; } 264 .auth-terms a { color: #6b7280; } 265 266 /* Pane swap â CSS Grid trick: all panes share grid cell 1/1, so the 267 wrapper takes the height of the TALLEST pane. Inactive panes are 268 hidden via visibility (kept in layout flow â no height jump when 269 switching Sign up â Log in). */ 270 .pane-stack { display: grid; } 271 .pane-stack > .pane { 272 grid-area: 1 / 1; 273 visibility: hidden; pointer-events: none; 274 opacity: 0; transition: opacity .12s ease; 275 } 276 .pane-stack > .pane.active { 277 visibility: visible; pointer-events: auto; 278 opacity: 1; 279 } 280 /* Legacy: outside the stack, fall back to display:none for non-active. */ 281 .pane:not(.active):not(.pane-stack > .pane) { display: none; } 282</style><style>
283 /* Minimal-chrome layout â used for auth + checkout pages where the 284 full header/nav/footer would distract users from the conversion. */ 285 body { background: #f9fafb; } 286 .min-header { 287 padding: 1.25rem 1rem; text-align: center; 288 border-bottom: 1px solid #e5e7eb; background: #fff; 289 } 290 .min-brand { display: inline-flex; align-items: center; gap: .5rem; } 291 .min-brand-mark { width: 26px; height: 26px; display: block; } 292 /* The wordmark is the SAME Logo-text.svg used in the site footer. */ 293 .min-brand-logo { height: 22px; width: auto; display: block; } 294 .min-foot { 295 text-align: center; color: #9ca3af; font-size: .78rem; 296 padding: 1.25rem 1rem; border-top: 1px solid #e5e7eb; background: #fff; 297 margin-top: 3rem; 298 } 299 .min-foot a { color: #6b7280; text-decoration: none; margin: 0 .5rem; } 300 .min-foot a:hover { color: #1f2937; } 301 </style><!-- Matomo -->
302<script> 303 var _paq = window._paq = window._paq || []; 304 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ 305 _paq.push(['trackPageView']); 306 _paq.push(['enableLinkTracking']); 307 (function() { 308 var u="//tracking.wallpapers.com.ph/"; 309 _paq.push(['setTrackerUrl', u+'matomo.php']); 310 _paq.push(['setSiteId', '4147']); 311 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 312 g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); 313 })(); 314</script>
314 315<!-- End Matomo Code --> 316</head> 317<body class="auth login"> 318<header class="min-header"> 319<span class="min-brand"> 320<img class="min-brand-mark" src="/static/src/fav-icon.svg" alt=""> 321<img class="min-brand-logo" src="/static/src/Logo-text-phl.svg" alt="Wallpapers.com.ph"> 322</span> 323</header> 324<main class="page" style="background:#f8fafc;"> 325<div class="auth-shell"> 326<aside class="auth-hero" aria-hidden="true"> 327<div class="auth-hero-content"> 328<a href="/" class="auth-logo" style="margin-bottom:2rem;"> 329<img src="/static/src/Logo-phl.svg" alt="Wallpapers.com.ph"> 330</a> 331<h2>2+ milyong wallpaper. 50+ AI tool. Isang libreng account.</h2> 332<p>Mga wallpaper, background, PNG at SVG â libreng i-download. Dagdag pa ang mga board para sa organisasyon at isang buong AI toolkit para i-remix ang iyong na-save.</p> 333<ul> 334<li><strong>2M+ assets</strong> â mga wallpaper, background, PNG, SVG, pahina ng pangkulay</li> 335<li><strong>50+ AI tool</strong> â i-upscale, alisin ang background, i-convert, i-generate, i-restyle</li> 336<li><strong>100 libreng AI credits</strong> â bawat buwan, walang kinakailangang card</li> 337<li><strong>Mga Board</strong> â pribado + pampublikong koleksyon, i-save sa isang click</li> 338<li><strong>8K download gamit ang Premium</strong> â 7-araw na libreng trial, kanselahin anumang oras</li> 339</ul> 340</div> 341</aside> 342<section class="auth-side"> 343<div class="auth-wrap"> 344<div class="auth-card"> 345<a href="/" class="auth-logo" style="justify-content:center; display:flex;"> 346<img src="/static/src/Logo-phl.svg" alt="Wallpapers.com.ph"> 347</a> 348<div class="auth-tabs" role="tablist"> 349<button type="button" id="tab-signup" class="" role="tab" aria-selected="false">Mag-sign up</button> 350<button type="button" id="tab-login" class="active" role="tab" aria-selected="true">Mag-log in</button> 351</div> 352<div class="auth-oauth"> 353<button type="button" class="oauth-btn" id="btn-google"> 354<svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"> 355<path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.79 2.72v2.26h2.9c1.7-1.57 2.69-3.88 2.69-6.62z"/> 356<path fill="#34A853" d="M9 18c2.43 0 4.47-.81 5.96-2.18l-2.9-2.26c-.8.54-1.83.86-3.06.86-2.36 0-4.36-1.6-5.07-3.74H.96v2.34A9 9 0 0 0 9 18z"/> 357<path fill="#FBBC05" d="M3.93 10.68A5.4 5.4 0 0 1 3.65 9c0-.59.1-1.16.28-1.68V4.98H.96A9 9 0 0 0 0 9c0 1.45.35 2.83.96 4.02l2.97-2.34z"/> 358<path fill="#EA4335" d="M9 3.58c1.32 0 2.51.45 3.44 1.35l2.58-2.58A9 9 0 0 0 .96 4.98l2.97 2.34C4.64 5.18 6.64 3.58 9 3.58z"/> 359</svg> 360Magpatuloy gamit ang Google 361</button> 362<div id="g-btn" style="display:flex; justify-content:center;"></div> 363<button type="button" class="oauth-btn" id="btn-facebook"> 364<svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"> 365<path fill="#1877F2" d="M18 9c0-5-4-9-9-9S0 4 0 9c0 4.5 3.3 8.2 7.6 8.9V11.6H5.3V9h2.3V7c0-2.3 1.4-3.6 3.5-3.6 1 0 2 .2 2 .2v2.2h-1.1c-1.1 0-1.5.7-1.5 1.4V9h2.5l-.4 2.6h-2.1V18C14.7 17.2 18 13.5 18 9z"/> 366</svg> 367Magpatuloy gamit ang Facebook 368</button> 369</div> 370<div class="auth-divider">o</div> 371<div class="pane-stack"> 372<div class="pane active" id="pane-login"> 373<form id="form-login" novalidate> 374<div class="auth-field"> 375<label for="li-email">Email o Username</label> 376<input type="text" id="li-email" name="username" autocomplete="username" required> 377</div> 378<div class="auth-field"> 379<label for="li-pass">Password</label> 380<input type="password" id="li-pass" name="password" autocomplete="current-password" required> 381</div> 382<div class="auth-row"> 383<span></span> 384<a href="#" id="link-recover" title="Nakalimutan ang password?">Nakalimutan ang password?</a> 385</div> 386<label class="auth-trial" data-trial-opt hidden> 387<input type="checkbox" data-trial-box checked> 388<span><b>Subukan ang Premium nang libre sa loob ng 7 araw</b> after signing in â unlimited 8K, no ads, $0 today.</span> 389</label> 390<button type="submit" class="auth-submit" id="li-submit">Mag-log in</button> 391<p class="auth-msg" id="li-msg"></p> 392</form> 393</div> 394<div class="pane " id="pane-signup"> 395<form id="form-signup" novalidate> 396<div class="auth-field"> 397<label for="su-email">Email</label> 398<input type="email" id="su-email" name="email" autocomplete="email" required> 399</div> 400<div class="auth-field"> 401<label for="su-user">Username</label> 402<input type="text" id="su-user" name="username" autocomplete="username" required> 403</div> 404<div class="auth-field"> 405<label for="su-pass">Password</label> 406<input type="password" id="su-pass" name="password" autocomplete="new-password" minlength="6" required> 407</div> 408<label class="auth-trial" data-trial-opt hidden> 409<input type="checkbox" data-trial-box checked>
409 410<span><b>Start with Premium, free for 7 days</b> â unlimited 8K downloads, no ads. $0 today, cancel anytime.</span> 411</label> 412<button type="submit" class="auth-submit" id="su-submit">Gumawa ng libreng account</button> 413<p class="auth-msg" id="su-msg"></p> 414</form> 415</div> 416<div class="pane" id="pane-recover"> 417<form id="form-recover" novalidate> 418<p style="color:#6b7280; font-size:.88rem; margin:0 0 1rem;"> 419Ilagay ang iyong email at magpapadala kami ng link para i-reset ang password. 420</p> 421<div class="auth-field"> 422<label for="rc-email">Email</label> 423<input type="email" id="rc-email" name="email" autocomplete="email" required> 424</div> 425<button type="submit" class="auth-submit" id="rc-submit">Ipadala ang reset link</button> 426<p class="auth-msg" id="rc-msg"></p> 427<p class="auth-foot"><a href="#" id="link-back-login" title="â Bumalik sa pag-log in">â Bumalik sa pag-log in</a></p> 428</form> 429</div> 430</div> 431<p class="auth-terms"> 432Sa pagpapatuloy, sumasang-ayon ka sa aming 433<a href="/terms" title="Mga Tuntunin">Mga Tuntunin</a> 434at 435<a href="/privacy-policy" title="Patakaran sa Privacy">Patakaran sa Privacy</a>. 436</p> 437</div> 438</div> 439</section> 440</div> 441</main>
441<script> 442(function(){ 443 var nextUrl = "/account/" || '/'; 444 445 // ââ Trial opt-in ââââââââââââââââââââââââââââââââââââââââââââââââ 446 // A ticked box sends the visitor on to where they were going with the 447 // trial checkout already open (?checkout= is honoured by checkout_modal.js 448 // on every base.html page). English destinations only for now: the copy is 449 // not translated yet, and this page also serves the locale subdomains via 450 // the login host. An unticked box is remembered, so a repeat sign-in does 451 // not keep asking. Already-premium accounts are never sent to checkout. 452 var TRIAL_KEY = 'wpc_auth_trial_opt'; 453 var trialOk = false; 454 try { 455 var nh = new URL(nextUrl, location.href).hostname; 456 trialOk = /^(www\.)?wallpapers\.com$/.test(nh) || /^(localhost|127\.0\.0\.1)$/.test(nh); 457 } catch (e) {} 458 var trialPrefOff = false; 459 try { trialPrefOff = localStorage.getItem(TRIAL_KEY) === '0'; } catch (e) {} 460 if (trialOk) { 461 document.querySelectorAll('[data-trial-opt]').forEach(function (el) { 462 el.hidden = false; 463 var box = el.querySelector('[data-trial-box]'); 464 if (box) { 465 box.checked = !trialPrefOff; 466 box.addEventListener('change', function () { 467 try { localStorage.setItem(TRIAL_KEY, box.checked ? '1' : '0'); } catch (e) {} 468 document.querySelectorAll('[data-trial-box]').forEach(function (b) { b.checked = box.checked; }); 469 }); 470 } 471 }); 472 } 473 function trialWanted() { 474 if (!trialOk) return false; 475 var b = document.querySelector('[data-trial-box]'); 476 return !!(b && b.checked); 477 } 478 // Where to go after a successful sign-in. `premium` comes from the auth 479 // endpoint's JSON; missing is treated as free. 480 function afterAuth(via, premium) { 481 var dest = nextUrl; 482 if (trialWanted() && !premium) { 483 try { 484 var u = new URL(nextUrl, location.href); 485 u.searchParams.set('checkout', 'wpc_pro_m'); 486 u.searchParams.set('src', 'auth_trial_' + via); 487 dest = u.toString(); 488 } catch (e) {} 489 } 490 window.location.replace(dest); 491 } 492 493 // ââ Pane / tab switching ââââââââââââââââââââââââââââââââââââââââ 494 function show(paneId, activeTab) { 495 document.querySelectorAll('.pane').forEach(function(p){ p.classList.toggle('active', p.id === paneId); }); 496 if (activeTab) { 497 document.querySelectorAll('.auth-tabs button').forEach(function(b){ 498 var on = b.id === activeTab; 499 b.classList.toggle('active', on); 500 b.setAttribute('aria-selected', on); 501 }); 502 } 503 } 504 document.getElementById('tab-login').addEventListener('click', function(){ show('pane-login', 'tab-login'); }); 505 document.getElementById('tab-signup').addEventListener('click', function(){ show('pane-signup', 'tab-signup'); }); 506 document.getElementById('link-recover').addEventListener('click', function(e){ e.preventDefault(); show('pane-recover'); }); 507 document.getElementById('link-back-login').addEventListener('click', function(e){ e.preventDefault(); show('pane-login', 'tab-login'); }); 508 509 // ââ Login submit ââââââââââââââââââââââââââââââââââââââââââââââââ 510 document.getElementById('form-login').addEventListener('submit', function(e){ 511 e.preventDefault(); 512 var btn = document.getElementById('li-submit'); 513 var msg = document.getElementById('li-msg'); 514 msg.className = 'auth-msg'; msg.textContent = ''; 515 var data = { 516 username: document.getElementById('li-email').value.trim(), 517 password: document.getElementById('li-pass').value, 518 }; 519 if (!data.username || !data.password) { 520 msg.className = 'auth-msg err'; msg.textContent = ("Kinakailangan ang email at password."); return; 521 } 522 btn.disabled = true; btn.textContent = 'â¦'; 523 fetch('/auth/login', { 524 method: 'POST', credentials: 'include', 525 headers: {'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, 526 body: JSON.stringify(data), 527 }).then(function(r){ return r.json().then(function(j){ return {ok:r.ok, body:j}; }); }) 528 .then(function(r){ 529 btn.disabled = false; btn.textContent = ("Mag-log in"); 530 if (r.ok) { 531 msg.className = 'auth-msg ok'; msg.textContent = ("Naka-log in na! Nagre-redirect\u2026"); 532 afterAuth('login', r.body && r.body.premium); 533 } else { 534 msg.className = 'auth-msg err'; msg.textContent = (r.body && r.body.msg) || ("Hindi wasto ang mga kredensyal."); 535 } 536 }).catch(function(){ 537 btn.disabled = false; btn.textContent = ("Mag-log in"); 538 msg.className = 'auth-msg err'; msg.textContent = ("Error sa network \u2014 pakisubukan muli."); 539 }); 540 }); 541 542 // ââ Signup submit âââââââââââââââââââââââââââââââââââââââââââââââ 543 document.getElementById('form-signup').addEventListener('submit', function(e){ 544 e.preventDefault(); 545 var btn = document.getElementById('su-submit'); 546 var msg = document.getElementById('su-msg'); 547 msg.className = 'auth-msg'; msg.textContent = ''; 548 var data = { 549 email: document.getElementById('su-email').value.trim().toLowerCase(), 550 username: document.getElementById('su-user').value.trim(), 551 password: document.getElementById('su-pass').value, 552 }; 553 if (!data.email || !data.username || !data.password) { 554 msg.className = 'auth-msg err'; msg.textContent = ("Kinakailangan ang lahat ng field."); return; 555 } 556 if (data.password.length < 6) { 557 msg.className = 'auth-msg err'; msg.textContent = ("Ang password ay dapat hindi bababa sa 6 na karakter."); return; 558 } 559 btn.disabled = true; btn.textContent = 'â¦'; 560 fetch('/auth/signup', { 561 method: 'POST', credentials: 'include', 562 headers: {'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, 563 body: JSON.stringify(data), 564 }).then(function(r){ return r.json().then(function(j){ return {ok:r.ok, body:j}; }); }) 565 .then(function(r){ 566 btn.disabled = false; btn.textContent = ("Gumawa ng libreng account"); 567 if (r.ok) { 568 msg.className = 'auth-msg ok'; msg.textContent = ("Nagawa na ang account! Nagre-redirect\u2026"); 569 afterAuth('signup', r.body && r.body.premium); 570 } else { 571 msg.className = 'auth-msg err'; msg.textContent = (r.body && r.body.msg) || ("Nabigo ang pag-signup."); 572 } 573 }).catch(function(){ 574 btn.disabled = false; btn.textContent = ("Gumawa ng libreng account"); 575 msg.className = 'auth-msg err'; msg.textContent = ("Error sa network \u2014 pakisubukan muli."); 576 }); 577 }); 578 579 // ââ Recover submit â POST to /auth/customer/reset ââââââââââââââ 580 document.getElementById('form-recover').addEventListener('submit', function(e){ 581 e.preventDefault(); 582 var btn = document.getElementById('rc-submit');
583 var msg = document.getElementById('rc-msg'); 584 msg.className = 'auth-msg'; msg.textContent = ''; 585 var email = document.getElementById('rc-email').value.trim().toLowerCase(); 586 if (!email) { 587 msg.className = 'auth-msg err'; msg.textContent = ("Kinakailangan ang email."); return; 588 } 589 btn.disabled = true; btn.textContent = 'â¦'; 590 fetch('/auth/customer/reset', { 591 method: 'POST', credentials: 'include', 592 headers: {'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, 593 body: JSON.stringify({email: email}), 594 }).then(function(r){ return r.json().catch(function(){ return {}; }); }) 595 .then(function(){ 596 // Always succeed-style â endpoint never confirms whether the email 597 // exists (anti-enumeration). 598 btn.disabled = false; btn.textContent = ("Ipadala ang reset link"); 599 msg.className = 'auth-msg ok'; 600 msg.textContent = ("Kung rehistrado ang email na iyon, makakatanggap ka ng reset link sa ilang sandali."); 601 }).catch(function(){ 602 btn.disabled = false; btn.textContent = ("Ipadala ang reset link"); 603 msg.className = 'auth-msg err'; 604 msg.textContent = ("Error sa network \u2014 pakisubukan muli."); 605 }); 606 }); 607 608 // ââ Google OAuth (Identity Services â rendered button, popup flow) ââ 609 // login.wallpapers.com uses renderButton (not One-Tap prompt(), which is 610 // silently suppressed by FedCM/3p-cookie rules and made the button look 611 // dead). We poll until the GIS SDK (async) is ready, then render Google's 612 // own button into #g-btn and hide the placeholder. 613 614 (function initGoogle(tries){ 615 if (window.google && google.accounts && google.accounts.id) { 616 google.accounts.id.initialize({ 617 client_id: "44812929862-e7k4js1kqb7rdft9m4d2ke2hiov95290.apps.googleusercontent.com", 618 ux_mode: 'popup', 619 callback: function(data){ 620 fetch('/auth/oauth/google', { 621 method: 'POST', credentials: 'include', 622 headers: {'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, 623 body: JSON.stringify(data), 624 }).then(function(r){ 625 if (r.ok) r.json().then(function(j){ afterAuth('google', j && j.premium); }) 626 .catch(function(){ afterAuth('google', false); }); 627 else r.json().then(function(j){ alert((j && j.msg) || "Nabigo ang pag-sign in sa Google."); }) 628 .catch(function(){ alert("Nabigo ang pag-sign in sa Google."); }); 629 }); 630 }, 631 }); 632 var host = document.getElementById('g-btn'); 633 if (host) { 634 google.accounts.id.renderButton(host, { 635 type: 'standard', theme: 'outline', size: 'large', 636 text: 'continue_with', shape: 'rectangular', 637 logo_alignment: 'left', width: Math.min(host.offsetWidth || 320, 400), 638 }); 639 var placeholder = document.getElementById('btn-google'); 640 if (placeholder) placeholder.style.display = 'none'; 641 } 642 return; 643 } 644 if (tries > 0) setTimeout(function(){ initGoogle(tries - 1); }, 200); // ~10s 645 })(50); 646 647 648 // ââ Facebook OAuth (FB.login) âââââââââââââââââââââââââââââââââââ 649 650 var fbBtn = document.getElementById('btn-facebook'); 651 if (fbBtn) { 652 fbBtn.addEventListener('click', function(){ 653 if (!window.FB) { alert("Naglo-load pa ang Facebook \u2014 pakisubukan muli sa ilang sandali."); return; } 654 FB.login(function(resp){ 655 if (resp.status !== 'connected') return; 656 fetch('/auth/oauth/facebook', { 657 method: 'POST', credentials: 'include', 658 headers: {'Content-Type':'application/json','X-Requested-With':'XMLHttpRequest'}, 659 body: JSON.stringify(resp), 660 }).then(function(r){ 661 if (r.ok) r.json().then(function(j){ afterAuth('facebook', j && j.premium); }) 662 .catch(function(){ afterAuth('facebook', false); }); 663 else r.json().then(function(j){ alert((j && j.msg) || "Nabigo ang pag-sign in sa Facebook."); }) 664 .catch(function(){ alert("Nabigo ang pag-sign in sa Facebook."); }); 665 }); 666 }, {scope: 'public_profile,email'}); 667 }); 668 } 669 670})(); 671</script>
671<script src="https://accounts.google.com/gsi/client" async defer></script>
671<script> 672 window.fbAsyncInit = function(){ FB.init({appId: "1356973331851877", version: 'v18.0'}); }; 673 (function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id))return; 674 js=d.createElement(s);js.id=id;js.src='https://connect.facebook.net/en_US/sdk.js'; 675 fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk')); 676</script>
676<footer class="min-foot"> 677© Wallpapers.com.ph · 678<a title="Mga Tuntunin" href="/terms">Mga Tuntunin</a> · 679<a title="Privacy" href="/privacy-policy">Privacy</a> · 680<a title="Contact" href="/contact-us">Contact</a> 681</footer> 682<div id="wpc-toast" role="status" aria-live="polite" 683style="position:fixed; bottom:1.5rem; left:50%; transform:translate(-50%, 200%); 684background:#1f2937; color:#fff; padding:.7rem 1.25rem; border-radius:8px; 685font-size:.92rem; font-weight:600; z-index:10000; pointer-events:none; 686box-shadow:0 8px 24px rgba(0,0,0,.18); transition:transform .28s ease; 687max-width:90vw; text-align:center;"></div>
687<script> 688 (function(){ 689 var el = document.getElementById('wpc-toast'); var hideT = null; 690 window.wpcToast = function(msg, ms){ 691 if (!el) return; el.textContent = msg || ''; 692 el.style.transform = 'translate(-50%, 0)'; 693 if (hideT) clearTimeout(hideT); 694 hideT = setTimeout(function(){ el.style.transform = 'translate(-50%, 200%)'; }, ms || 1800); 695 }; 696 })(); 697 </script>
697<script>
vendor: 333 bytes, lines 697-700
697(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); 698 var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 699 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 700 })(window,document,'script','dataLayer','
700GTM-WV4522P
vendor: 3 bytes, line 700
700');
700</script>
vendor: 63 bytes, line 700
700<script async src="https://www.googletagmanager.com/gtag/js?id=
700G-XNV3LTC37N
vendor: 11 bytes, line 700
700"></script>
700<script> 701
vendor: 141 bytes, lines 701-704
701window.dataLayer = window.dataLayer || []; 702 function gtag(){ dataLayer.push(arguments); } 703 gtag('js', new Date()); 704 gtag('config', '
704G-XNV3LTC37N
vendor: 34 bytes, lines 704-705
704', { 'send_page_view': true }); 705
705</script>
705<script> 706 (function(){ 707 window.wpcTrack = function(eventName, surface, ref, meta) { 708 try { 709 var body = JSON.stringify({event_name:eventName, surface:surface||null, 710 ref:ref||null, meta:meta||null, url:location.href, referrer:document.referrer}); 711 if (navigator.sendBeacon) navigator.sendBeacon('/social/track', new Blob([body], {type:'application/json'})); 712 else fetch('/social/track', {method:'POST', credentials:'include', 713 headers:{'Content-Type':'application/json'}, body:body, keepalive:true}); 714 if (window.gtag) window.gtag('event', eventName, {surface: surface||'', ref: ref||''}); 715 } catch (e) {} 716 }; 717 })(); 718 </script>
718</body> 719</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.