PageSourceSearch

https://wallpapers.com.ph/auth/login?next=/account/

html wallpapers.com.ph collected 2026-10-09 23:24:54 UTC 35,296 bytes, 719 lines download raw bytes

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.