PageSourceSearch

https://www.dollarsandsense.org/signin/

html dollarsandsense.org collected 2026-10-02 03:23:02 UTC 21,618 bytes, 702 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" data-color-scheme="system">
3  <head>
4    <meta charset="utf-8">
5    <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
7    <title>Dollars &amp; Sense</title>
8
9    <meta name="HandheldFriendly" content="True">
10    <meta name="viewport" content="width=device-width, initial-scale=1.0">
11    
12    <meta name="theme-color" content="#5d6735">
13
14
15    <link rel="preload" href="https://www.dollarsandsense.org/assets/dist/app.min.js?v=4-xWwC_R-kEIQpp-" as="script">
16    <link rel="preload" href="https://www.dollarsandsense.org/assets/dist/app.min.css?v=-k2eQ3U9ZDqbLzxQ" as="style">
17
18      <link rel="preconnect" href="https://fonts.googleapis.com">
19  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
20
21
22
23
24
25
26
27
28
29  <link rel="preload stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Playfair+Display:ital,wght@0,600;0,700;0,800;0,900;1,600;1,700;1,800;1,900&display=swap" 
30        as="style" onload="this.onload=null;this.rel='stylesheet'" crossorigin>
31  <style>
32    body { --font-body: var(--gh-font-body, 'Inter'), sans-serif; --font-headings: var(--gh-font-heading, 'Playfair Display'), serif; }
33    body h1, body h2, body h3 { font-weight: var(--font-weight-extra-bold); }
34  </style>
35
36
37    
37<script async defer src="https://www.dollarsandsense.org/assets/dist/app.min.js?v=4-xWwC_R-kEIQpp-"></script>
37
38
39    <link rel="stylesheet" type="text/css" href="https://www.dollarsandsense.org/assets/dist/app.min.css?v=-k2eQ3U9ZDqbLzxQ">
40
41    <style>
42  :root {
43    --global-max-width: 1400px; /* site max width */
44    --global-content-width: 700px; /* post-content-width */
45    --global-wide-width: 960px; /* site max width */
46    --global-radius: 0px; /* default radius */
47    --global-gallery-gap: 1em; /* Image gallery distance between images */
48    --global-hyphens: none; /* none/auto */
49    --global-header-height: 92px;
50    --global-theme-notifications: visible; /* visible/hidden */
51    --global-progress-bar: visible; /* visible/hidden */
52    --global-content-preview-fading: 0%; /* 50%-100% for fading effect */
53    --global-scroll-behavior: smooth;
54  }
55</style>
56
57<script>
58  let preferredTheme = localStorage.getItem('PREFERRED_COLOR_SCHEME') || `system`;
59  document.documentElement.setAttribute('data-color-scheme', preferredTheme);
60  
61  // Global values needed
62  const themeGlobal = {
63    currentPage: parseInt(''),
64    nextPage: parseInt(''),
65    nextPageLink: '',
66    maxPages: parseInt(''), 
67    lastPage: `` === `` ? true : false,
68    postsPerPage: parseInt('12'),
69    scrollPos: 0,
70    imageLightbox: false
71  }
72
73  // Calculate contrast & HSL value;
74  function getBrandColorInfo(hexcolor) {
75    // get contrast
76    if (hexcolor.slice(0, 1) === '#') { hexcolor = hexcolor.slice(1); }
77    if (hexcolor.length === 3) { hexcolor = hexcolor.split('').map(function (hex) { return hex + hex;}).join(''); }
78    let r = parseInt(hexcolor.substr(0,2),16), g = parseInt(hexcolor.substr(2,2),16), b = parseInt(hexcolor.substr(4,2),16);
79    let yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
80    const colorContrast = (yiq >= 128) ? '#000' : '#fff';
81
82    //get HSL
83    r /= 255, g /= 255, b /= 255;
84    const max = Math.max(r, g, b), min = Math.min(r, g, b);
85    let h, s, l = (max + min)  /  2;  
86    if ( max == min ) { h = s = 0; } else {
87      let d = max - min;
88      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
89      switch(max){
90        case r: h = (g - b) / d + (g < b ? 6 : 0); break;
91        case g: h = (b - r) / d + 2; break;
92        case b: h = (r - g) / d + 4; break;
93      }
94      h /= 6;
95    }
96    const colorHSL = [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];
97
98    // return
99    return { colorContrast, colorHSL }
100  };
101
102  const brandColor = getBrandColorInfo("#5d6735");
103  let style = document.createElement('style');
104  style.innerHTML = `:root { 
105    --color-brand-contrast: ${brandColor.colorContrast}; 
106    --color-brand-h: ${brandColor.colorHSL[0]};
107    --color-brand-s: ${brandColor.colorHSL[1]}%;
108    --color-brand-l: ${brandColor.colorHSL[2]}%;
109    --color-brand-hsl: ${brandColor.colorHSL[0]} ${brandColor.colorHSL[1]}% ${brandColor.colorHSL[2]}%;
110  }`
111  document.getElementsByTagName('head')[0].appendChild(style);
112</script>
112
113
114    
115    
116     
117
118    <link rel="icon" href="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w256h256/2025/06/D_S_logo_for_Donorbox__1_-removebg-preview.png" type="image/png">
119    <link rel="canonical" href="https://www.dollarsandsense.org/signin/">
120    <meta name="referrer" content="no-referrer-when-downgrade">
121    
122    <meta property="og:site_name" content="Dollars &amp; Sense">
123    <meta property="og:type" content="website">
124    <meta property="og:title" content="Dollars &amp; Sense">
125    <meta property="og:url" content="https://www.dollarsandsense.org/signin/">
126    <meta property="article:publisher" content="https://www.facebook.com/dollarsandsenseeconomics/">
127    <meta name="twitter:card" content="summary">
128    <meta name="twitter:title" content="Dollars &amp; Sense">
129    <meta name="twitter:url" content="https://www.dollarsandsense.org/signin/">
130    <meta name="twitter:site" content="@Dollars_Sense">
131    
132    <meta name="generator" content="Ghost 6.68">
133    <link rel="alternate" type="application/rss+xml" title="Dollars &amp; Sense" href="https://www.dollarsandsense.org/latest/rss/">
134    
134<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://www.dollarsandsense.org/" data-key="2d04fc49de79352c3befed1dc2" data-api="https://dollarsandsense.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
134<style id="gh-members-styles">.gh-post-upgrade-cta-content,
135.gh-post-upgrade-cta {
136    display: flex;
137    flex-direction: column;
138    align-items: center;
139    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
140    text-align: center;
141    width: 100%;
142    color: #ffffff;
143    font-size: 16px;
144}
145
146.gh-post-upgrade-cta-content {
147    border-radius: 8px;
148    padding: 40px 4vw;
149}
150
151.gh-post-upgrade-cta h2 {
152    color: #ffffff;
153    font-size: 28px;
154    letter-spacing: -0.2px;
155    margin: 0;
156    padding: 0;
157}
158
159.gh-post-upgrade-cta p {
160    margin: 20px 0 0;
161    padding: 0;
162}
163
164.gh-post-upgrade-cta small {
165    font-size: 16px;
166    letter-spacing: -0.2px;
167}
168
169.gh-post-upgrade-cta a {
170    color: #ffffff;
171    cursor: pointer;
172    font-weight: 500;
173    box-shadow: none;
174    text-decoration: underline;
175}
176
177.gh-post-upgrade-cta a:hover {
178    color: #ffffff;
179    opacity: 0.8;
180    box-shadow: none;
181    text-decoration: underline;
182}
183
184.gh-post-upgrade-cta a.gh-btn {
185    display: block;
186    background: #ffffff;
187    text-decoration: none;
188    margin: 28px 0 0;
189    padding: 8px 18px;
190    border-radius: 4px;
191    font-size: 16px;
192    font-weight: 600;
193}
194
195.gh-post-upgrade-cta a.gh-btn:hover {
196    opacity: 0.92;
197}</style>
197<script async src="https://js.stripe.com/v3/"></script>
197
198    
198<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="2d04fc49de79352c3befed1dc2" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://dollarsandsense.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
198
199    
200    <link href="https://www.dollarsandsense.org/webmentions/receive/" rel="webmention">
201    
201<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
201
202    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
203    
203<script defer src="/public/comment-counts.min.js?v=oFYkaGLdiMqB8VN9" data-ghost-comments-counts-api="https://www.dollarsandsense.org/members/api/comments/counts/"></script>
203
204    
204<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
204
205    
205<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://www.dollarsandsense.org/.ghost/analytics/api/v1/page_hit"  tb_site_uuid="1774418b-e0eb-4470-b29b-ceb3f0599dab" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
205<style>:root {--ghost-accent-color: #5d6735;}</style>
206    <style>
207
208  .header__brand img { height: 80px; max-height: none; }
209
210  .post-info__avatars { display: none; }
211
212  iframe.gh-portal-notification-iframe { display: none; }
213
214</style>
215
216<style>
217       .post-hero__img {
218        border: 2px solid #000;      
219    }
220    </style>
221
222
223<style>
224  /* Migrate Styles */
225  .ds-sources-box {
226    font-size: 80%;
227    opacity: 0.8;
228  }
229  
230  #features ul,
231  #toclist {
232    padding-left: 0;
233  }
234  
235  #features li,
236  #toclist li {
237    display: grid;
238    grid-template-columns: repeat(5, 1fr);
239    column-gap: 20px;
240    margin-bottom: 20px;
241  }
242  
243  #features li>img,
244  #toclist li a:nth-child(1) {
245    grid-row-start: 1;
246    grid-row-end: 5;
247  }
248  
249  #features li>img,
250  #toclist li a:nth-child(1) img {
251    display: block;
252    width: 100%;
253  }
254  
255  #features li *:nth-child(2),
256  #toclist li *:nth-child(2),
257  #features li .author,
258  #toclist li .author,
259  #features li .teaserweb,
260  #toclist li .teaserweb,
261  #features li .teaserprint {
262    grid-column-start: 2;
263    grid-column-end: 6;
264  }
265  
266  #toclist .headline,
267  #features .headline {
268    font-weight: bold;
269    margin-bottom: 0;
270  }
271  
272  #toclist .author,
273  #features .author {
274    font-size: smaller;
275    text-transform: small-caps;
276    opacity: 0.5;
277    margin-bottom: 0;
278  }
279  
280  #subbuttons {
281    display: flex;
282    justify-content: center;
283    margin-top: 3em;
284    margin-bottom: 3em;
285  }
286  
287  #subbuttons li {
288    margin: 0.5em;
289    list-style: none;
290  }
291  
292  #subbuttons a {
293    display: inline-block;
294    font-weight: bold;
295    color: #fff;
296    background: var(--ghost-accent-color, #000);
297    padding: 0.2em 0.6em;
298    text-decoration: none;
299    border-radius: 3px;
300  }
301  
302  #regulars ul {
303    padding-left: 0;
304  }
305  
306  #regulars li {
307    list-style: none;
308  }
309  
310  #regulars .section {
311    font-weight: bold;
312    display: block;
313  }
314  
315  /* .tag-hash-wp .gh-content .kg-card.kg-callout-card {
316    background: #eee;
317    font-size: 90%;
318  }
319  
320  .tag-hash-wp .gh-content .kg-card.kg-callout-card p {
321    margin-top: 1em;
322  } */
323
324</style>
325
326
327<style>  
328    /* This is so the from snippet floats right. */
329.float-left-half figure,
330.float-left-two-thirds figure {
331    float: left;
332    margin: 8px 20px 6px 0;
333
334}
335.float-right-half figure,
336.float-right-two-thirds figure {
337    float: right;
338    margin: 8px 0 6px 20px;
339}
340.float-left-half figure,
341.float-right-half figure {
342    max-width: 50%;
343}
344@media (min-width: 64em) {
345	.float-left-two-thirds figure,
346	.float-right-two-thirds figure {
347    	max-width: 67%;
348    }
349}
350
351  
352  
353</style>
354
355
356<style>
357  /* Styling for regular sidebar */
358  .custom-sidebar2 {
359    width: 100%;
360    padding: 1.5em 1.5em 0 1.5em;
361    margin-bottom: 2em;
362    background-color: #ebf1e0;
363    border: 3px solid #ccc;
364    border-radius: 5px;
365}
366
367  /* Dark-mode specific styles */
368@media (prefers-color-scheme: dark) {
369  .custom-sidebar2 {
370    background-color: #727A61; /* New dark-mode background color */
371    border-color: #555; /* New dark-mode border color */
372  }
373}
374
375@media (max-width: 768px) {
376    .custom-sidebar2 {
377        width: 100%;
378        margin-left: 0;
379        margin-top: 2em;
380    }
381}
382</style>
383
384<style>
385  /* Styling for old UAWSJ sidebar */
386.custom-sidebar {
387    float: right;
388    width: 100%;
389    margin-bottom: 2em;
390    padding: 1.5em 1.5em 0 1.5em;
391    background-color: #f8f8f8;
392    border: 3px solid #ccc;
393    border-radius: 5px;
394    font-family: "Tinos" 
395}
396
397
398    /* Dark-mode specific styles */
399@media (prefers-color-scheme: dark) {
400  .custom-sidebar {
401    background-color: #3b3b3b; /* New dark-mode background color */
402    border-color: #555; /* New dark-mode border color */
403  }
404}
405
406@media (max-width: 768px) {
407    .custom-sidebar {
408        float: none;
409        width: 100%;
410        margin-left: 0;
411        margin-top: 2em;
412    }
413}
414    
415
416    figure figcaption {
417	text-align: center;
418	font-size: medium;
419	font-weight: bold;
420	font-style: regular;
421}
422</style>
423
424<style>
425   /* Styling for new UAWSJ sidebar */
426.custom-sidebar-uawsj {
427    float: right;
428    width: 100%;
429    margin-bottom: 2em;
430    padding: 1.5em 1.5em 0 1.5em;
431    background-color: #D3D3D3;
432    border: 3px solid #ccc;
433    border-radius: 5px;
434    font-family: "Tinos" 
435}
436
437      /* Dark-mode specific styles */
438@media (prefers-color-scheme: dark) {
439  .custom-sidebar-uawsj {
440    background-color: #3b3b3b; /* New dark-mode background color */
441    border-color: #555; /* New dark-mode border color */
442  }
443}
444
445@media (max-width: 768px) {
446    .custom-sidebar-uawsj {
447        float: none;
448        width: 100%;
449        margin-left: 0;
450        margin-top: 2em;
451    }
452}
453    
454
455    figure figcaption {
456	text-align: center;
457	font-size: medium;
458	font-weight: bold;
459	font-style: regular;
460}
461</style>
462
463
464
465<style>
466
467.kg-html-card figcaption,
468.post-full-content .kg-image-card figcaption {
469    font-style: italic;
470    font-size: 1.4rem;
471    line-height: 1.6em;
472    color: var(--color-caption);
473    text-align: center;
474    margin-top: 1em;
475}
476  
477  /* This is so the From caption looks right. */
478.custom-caption {
479    text-align: center;
480	font-weight: bold;
481    font-size: small;
482	font-style: normal;
483
484}
485
486  .custom-caption a {
487  color: #5d6735; 
488  text-decoration: none !important; 
489  font-weight: bold; 
490}
491
492.kg-html-card .custom-caption a {
493  text-decoration: none !important;
494}
495  
496</style>
497
498<style>
499  .tag-hero__media .tag-hero__img {
500    aspect-ratio: auto;
501    object-fit: none;
502    width: auto;
503    border: 1px solid black;
504  }
505</style>
506
507
508
509<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 509-510
509
510<script async src="https://www.googletagmanager.com/gtag/js?id=
510G-7WWSC5PBSQ
vendor: 12 bytes, line 510
510"></script>
511<script>
512  
vendor: 134 bytes, lines 512-516
512window.dataLayer = window.dataLayer || [];
513  function gtag(){dataLayer.push(arguments);}
514  gtag('js', new Date());
515
516  gtag('config', '
516G-7WWSC5PBSQ
vendor: 4 bytes, line 516
516');
517</script>
517
518
519
520    <link rel="preconnect" href="https://fonts.bunny.net"><link rel="stylesheet" href="https://fonts.bunny.net/css?family=roboto:400,500,700"><style>:root {--gh-font-heading: Roboto;--gh-font-body: Roboto;}</style>
521  </head>
522  <body class="gh-font-heading-roboto gh-font-body-roboto "  data-excerpts="true">
523    
524
525
526    <main class="main flex-1">
527      
528<div class="signin-page flex flex-cc" data-image-style="right">
529    <div class="signin-page__content">
530      <a href="https://www.dollarsandsense.org" class="signin-page__brand">
531          <picture class="">
532  <source 
533    sizes="200px"
534    data-sizes="auto"
535    srcset="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w30/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png 30w"
536    data-srcset="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w300/format/webp/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png 300w"
537    type="image/webp"
538  >
539  <img class="lazyload"
540    sizes="200px"
541    data-sizes="auto"
542    data-srcset="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w300/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png 300w"
543    srcset="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w30/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png 30w"
544    data-src="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w100/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png"
545    src="https://storage.ghost.io/c/17/74/1774418b-e0eb-4470-b29b-ceb3f0599dab/content/images/size/w30/2025/07/Dollars-Sense_Primary_CMYK1_med--750.png"
546    alt="Dollars &amp; Sense"
547    
548  >
549</picture>      </a>
550
551      <div class="signin-page__box">
552        <h1 class="signin-page__title">Sign in</h1>
553        <p id="form-input-label" class="opacity-080">Sign into your account again.</p>
554        <form class="subscribe-form" 
555  data-members-form="signin" data-style="">
556  <input data-members-email class="" 
557    type="email" autocomplete="email" placeholder="Your email address" 
558    aria-labelledby="form-input-label" required> 
559  <button class="btn uppercase btn--brand" type="submit">
560    <span>Send login link</span>
561  </button>
562  <div class="msg-success">Great! Check your inbox and click the link.</div>
563  <div class="msg-error">Sorry, something went wrong. Please try again.</div>
564</form>        <p class="m-0 mt text-center">
565          <small>Don&#x27;t have an account yet?
566            <a href="/signup/">Sign up</a>
567          </small>
568        </p>
569      </div>
570    </div>
571</div>
572    </main>
573    
574
575    <dialog class="notification">
576  <i class="icon icon-success notification-icon">
577  <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-circle-check" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
578  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
579  <circle cx="12" cy="12" r="9" />
580  <path d="M9 12l2 2l4 -4" />
581</svg>
582
583
584
585</i>  <i class="icon icon-error notification-icon">
586  <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-octagon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
587  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
588  <path d="M8.7 3h6.6c.3 0 .5 .1 .7 .3l4.7 4.7c.2 .2 .3 .4 .3 .7v6.6c0 .3 -.1 .5 -.3 .7l-4.7 4.7c-.2 .2 -.4 .3 -.7 .3h-6.6c-.3 0 -.5 -.1 -.7 -.3l-4.7 -4.7c-.2 -.2 -.3 -.4 -.3 -.7v-6.6c0 -.3 .1 -.5 .3 -.7l4.7 -4.7c.2 -.2 .4 -.3 .7 -.3z" />
589  <line x1="12" y1="8" x2="12" y2="12" />
590  <line x1="12" y1="16" x2="12.01" y2="16" />
591</svg>
592
593
594
595</i>  <i class="icon icon-warning notification-icon">
596  <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
597  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
598  <path d="M12 9v2m0 4v.01" />
599  <path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" />
600</svg>
601
602
603
604</i>  <p class="notification-msg signup-success">
604Great! You’ve successfully signed up.</p> 
605  <p class="notification-msg signin-success">Welcome back! You&#x27;ve successfully signed in.</p> 
606  <p class="notification-msg subscribe-success">You&#x27;ve successfully subscribed to Dollars &amp; Sense.</p> 
607  <p class="notification-msg link-expired">Your link has expired.</p> 
608  <p class="notification-msg checkout-success">Success! Check your email for magic link to sign-in.</p> 
609  <p class="notification-msg billing-success">Success! Your billing info has been updated.</p> 
610  <p class="notification-msg billing-cancel">Your billing was not updated.</p> 
611  <button class="notification-close js-notification-close" aria-label="Close" onclick="closeNotification(event.currentTarget.parentNode);">
612    <i class="icon icon-x">
613  <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
614  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
615  <line x1="18" y1="6" x2="6" y2="18" />
616  <line x1="6" y1="6" x2="18" y2="18" />
617</svg>
618</i>  </button>
619</dialog>
620
621      
622    
623
624      
624<script>
625    // Give the parameter a variable name
626    const qsParams = new URLSearchParams(window.location.search);
627    const isAction = qsParams.has('action');
628    const isStripe = qsParams.has('stripe');
629    const success = qsParams.get('success');
630    const action = qsParams.get('action');
631    const stripe = qsParams.get('stripe');
632
633    if (qsParams && isAction) {
634      if (success === "true") {
635        switch (action) {
636          case 'subscribe':
637            openNotification('subscribe-success');
638            break;
639          case 'signup': 
640            openNotification('signup-success');
641            break;
642          case 'signin':
643            openNotification('signin-success');
644            break;
645          default:
646            break;
647        }
648      } else {
649        openNotification('link-expired');
650      }
651    }
652
653    if (qsParams && isStripe) {
654      switch (stripe) {
655        case 'success':
656          openNotification('checkout-success');
657          break;
658        case 'billing-update-success':
659          openNotification('billing-success');
660          break;
661        case 'billing-update-cancel':
662          openNotification('billing-cancel');
663          break;
664        default:
665          break;
666      }
667    }
668
669    /**
670    * Handle Notifications
671    */
672    function openNotification(type) {
673      const notification = document.querySelector('dialog.notification');
674      if (notification) { 
675        notification.setAttribute('data-msg-type', type);
676        notification.show();
677        setTimeout(function(){ closeNotification(notification); }, 3000);
678      }
679    }
680    
681    /**
682    * Clean URI
683    */
684    function clearURI() {
685      window.history.replaceState({}, '', `${window.location.pathname}`);
686    }
687
688    function closeNotification(notification) {
689      notification.close();
690      clearURI();
691      setTimeout(function(){ notification.removeAttribute('data-msg-type') }, 500);
692    }
693  </script>
693
694
695
696    
696<script>
697
698document.querySelector('.header .signup-link').innerText = 'Get updates'
699  
700</script>
700
701  </body>
702</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.