PageSourceSearch

https://fanarchy.fans/games/search

html fanarchy.fans collected 2026-10-02 05:36:01 UTC 27,350 bytes, 719 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <meta name="apple-itunes-app" content="app-id=6569229589, app-clip-bundle-id=com.myeviltwin.ballparkplus.Clip, app-clip-display=card">
7    
8    <meta name="description" content="Find any MLB game by describing it. Search by date, team, venue, or event.">
9    <meta property="og:title" content="Find a Game - Fanarchy">
10    <meta property="og:description" content="Search for any MLB game by describing it">
11    <meta property="og:type" content="website">
12    <title>Find a Game - Fanarchy</title>
13    
14    <link rel="icon" type="image/png" sizes="32x32" href="/email-assets/fanarchy-icon-1024.png">
15    <link rel="preconnect" href="https://fonts.googleapis.com">
16    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
17    <link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet">
18    <style>
19        
20        /* ========== SITE HEADER ========== */
21        .site-header {
22            background: #FFFFFF;
23            border-bottom: 1px solid #E9ECEF;
24            position: sticky;
25            top: 0;
26            z-index: 100;
27        }
28        .site-chrome-container {
29            max-width: 1120px;
30            margin: 0 auto;
31            padding: 0 20px;
32        }
33        .nav-inner {
34            display: flex;
35            align-items: center;
36            justify-content: space-between;
37            height: 64px;
38        }
39        .nav-logo {
40            display: flex;
41            align-items: center;
42            gap: 10px;
43            text-decoration: none;
44            color: #041E42;
45        }
46        .nav-logo img {
47            height: 36px;
48            width: 36px;
49            border-radius: 8px;
50        }
51        .nav-logo span {
52            font-family: 'Anton', sans-serif;
53            font-size: 22px;
54            text-transform: uppercase;
55            letter-spacing: 0.5px;
56        }
57        .nav-links {
58            display: none;
59            list-style: none;
60            gap: 24px;
61            align-items: center;
62        }
63        .nav-links a {
64            color: #041E42;
65            font-size: 14px;
66            font-weight: 500;
67            text-decoration: none;
68            transition: color 0.15s;
69        }
70        .nav-links a:hover { color: #BF0D3E; text-decoration: none; }
71        .nav-cta { display: none; }
72        .nav-toggle {
73            display: flex;
74            flex-direction: column;
75            gap: 5px;
76            background: none;
77            border: none;
78            cursor: pointer;
79            padding: 8px;
80        }
81        .nav-toggle span {
82            display: block;
83            width: 24px;
84            height: 2px;
85            background: #041E42;
86            border-radius: 2px;
87            transition: transform 0.2s;
88        }
89        .mobile-menu {
90            display: none;
91            background: #FFFFFF;
92            border-bottom: 1px solid #E9ECEF;
93            padding: 16px 20px;
94        }
95        .mobile-menu.open { display: block; }
96        .mobile-menu a {
97            display: block;
98            padding: 10px 0;
99            color: #041E42;
100            font-size: 16px;
101            font-weight: 500;
102            border-bottom: 1px solid #F8F9FA;
103            text-decoration: none;
104        }
105        .mobile-menu a:last-child { border-bottom: none; }
106        .mobile-menu a:hover { color: #BF0D3E; text-decoration: none; }
107        @media (min-width: 768px) {
108            .nav-links { display: flex; }
109            .nav-cta { display: block; }
110            .nav-toggle { display: none; }
111        }
112
113        
114        /* ========== SITE FOOTER ========== */
115        .site-footer {
116            background: #041E42;
117            color: #FFFFFF;
118            padding: 48px 20px 32px;
119        }
120        .footer-inner {
121            max-width: 1120px;
122            margin: 0 auto;
123        }
124        .footer-grid {
125            display: grid;
126            grid-template-columns: 1fr;
127            gap: 32px;
128            margin-bottom: 32px;
129        }
130        .footer-brand span {
131            font-family: 'Anton', sans-serif;
132            font-size: 24px;
133            text-transform: uppercase;
134            letter-spacing: 0.5px;
135        }
136        .footer-brand p {
137            font-size: 14px;
138            opacity: 0.7;
139            margin-top: 8px;
140            line-height: 1.5;
141        }
142        .footer-col h4 {
143            font-size: 13px;
144            text-transform: uppercase;
145            letter-spacing: 1px;
146            opacity: 0.5;
147            margin-bottom: 12px;
148        }
149        .footer-col ul { list-style: none; }
150        .footer-col li { margin-bottom: 8px; }
151        .footer-col li::before { content: none; }
152        .footer-col a {
153            color: #FFFFFF;
154            font-size: 14px;
155            opacity: 0.8;
156            text-decoration: none;
157        }
158        .footer-col a:hover { opacity: 1; text-decoration: underline; }
159        .footer-bottom {
160            border-top: 1px solid rgba(255,255,255,0.1);
161            padding-top: 24px;
162            display: flex;
163            flex-wrap: wrap;
164            justify-content: space-between;
165            align-items: center;
166            gap: 12px;
167            font-size: 13px;
168            opacity: 0.5;
169        }
170        @media (min-width: 768px) {
171            .footer-grid { grid-template-columns: 2fr 1fr 1fr 1fr; }
172        }
173    </style>
174    <style>
175        * { margin: 0; padding: 0; box-sizing: border-box; }
176        body {
177            font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif;
178            background-color: #1A2B4A;
179            color: #1C1C1E;
180            min-height: 100vh;
181            display: flex;
182            flex-direction: column;
183        }
184        .page-wrapper {
185            width: 100%;
186            max-width: 500px;
187            flex: 1;
188            display: flex;
189            flex-direction: column;
190            align-items: center;
191            padding: 24px 16px;
192            gap: 24px;
193            margin: 0 auto;
194        }
195        .back-nav {
196            width: 100%;
197            text-align: left;
198            margin-bottom: -16px;
199        }
200        .back-nav a {
201            color: #FFFFFF;
202            font-size: 14px;
203            text-decoration: none;
204            display: inline-flex;
205            align-items: center;
206            gap: 4px;
207        }
208        .back-nav a:hover {
209            opacity: 1;
210            text-decoration: underline;
211        }
212        .card-container {
213            width: 100%;
214        }
215        .after-card-links {
216            display: flex;
217            justify-content: center;
218            align-items: center;
219            gap: 8px;
220            margin-top: -12px;
221        }
222        .after-card-links a {
223            color: #FFFFFF;
224            font-size: 13px;
225            text-decoration: none;
226            opacity: 0.85;
227        }
228        .after-card-links a:hover {
229            opacity: 1;
230            text-decoration: underline;
231        }
232        .after-card-links .link-separator {
233            color: #FFFFFF;
234            opacity: 0.4;
235            font-size: 13px;
236        }
237        .team-news-links {
238            text-align: center;
239            margin-top: 12px;
240            font-size: 14px;
241        }
242        .team-news-links a {
243            color: #FFFFFF;
244            opacity: 0.85;
245            text-decoration: none;
246        }
247        .team-news-links a:hover {
248            opacity: 1;
249            text-decoration: underline;
250        }
251        .team-news-label {
252            color: #FFFFFF;
253            opacity: 0.6;
254            margin-right: 6px;
255            font-size: 13px;
256        }
257        .team-news-links .link-separator {
258            color: #FFFFFF;
259            opacity: 0.4;
260            margin: 0 8px;
261        }
262        .cta-section {
263            text-align: center;
264            padding: 16px 0;
265        }
266        .cta-section h2 {
267            font-size: 18px;
268            font-weight: 600;
269            color: #FFFFFF;
270            margin-bottom: 8px;
271        }
272        .cta-section p {
273            color: rgba(255, 255, 255, 0.7);
274            font-size: 14px;
275            line-height: 1.4;
276            margin-bottom: 16px;
277        }
278        .cta-button {
279            display: inline-block;
280            text-decoration: none;
281            transition: transform 0.15s ease, box-shadow 0.15s ease;
282        }
283        .cta-button img {
284            height: 44px;
285            width: auto;
286        }
287        .cta-button:hover {
288            transform: translateY(-2px);
289        }
290        .cta-button:active { transform: translateY(0); }
291        .cta-secondary-link {
292            display: block;
293            margin-top: 16px;
294            color: #FFFFFF;
295            opacity: 0.7;
296            font-size: 14px;
297            text-decoration: none;
298        }
299        .cta-secondary-link:hover {
300            opacity: 1;
301            text-decoration: underline;
302        }
303        @media (max-width: 380px) {
304            .page-wrapper { padding: 16px 12px; }
305        }
306        /* Desktop: scale up ~30% bigger, ~40% wider */
307        @media (min-width: 600px) {
308            .page-wrapper {
309                max-width: 700px;
310                gap: 32px;
311                padding: 32px 24px;
312            }
313            .cta-section h2 { font-size: 22px; }
314            .cta-section p { font-size: 16px; }
315            .cta-button img { height: 54px; }
316            .after-card-links a { font-size: 14px; }
317            .after-card-links .link-separator { font-size: 14px; }
318        }
319    </style>
320    
321    
321<script>
322    !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="S8LPYnDFZhpsWFzFxZWvxxEzi3sFQvGP";analytics.SNIPPET_VERSION="5.2.1";analytics.load("S8LPYnDFZhpsWFzFxZWvxxEzi3sFQvGP");}}();
323    </script>
323
324</head>
325<body>
326    <header class="site-header">
327        <div class="site-chrome-container">
328            <nav class="nav-inner">
329                <a href="/" class="nav-logo" aria-label="Fanarchy Home">
330                    <img src="/email-assets/fanarchy-icon-1024.png" alt="" width="36" height="36">
331                    <span>Fanarchy</span>
332                </a>
333
334                <ul class="nav-links">
335                    <li><a href="/games/search" style="color: #BF0D3E;">Games</a></li>
336                    <li><a href="/players/search">Players</a></li>
337                    <li><a href="/news">News</a></li>
338                    <li><a href="/slack">Slack</a></li>
339                    <li><a href="/discord">Discord</a></li>
340                    <li><a href="/#features">Features</a></li>
341                    <li><a href="/faq">FAQ</a></li>
342                    <li><a href="/about">About</a></li>
343                    <li><a href="/compare">Compare</a></li>
344                </ul>
345
346                <div class="nav-cta">
347                    <a href="https://fanarchy.onelink.me/s9P9/fu1emsnk" target="_blank" rel="noopener noreferrer" data-install-trigger="nav_header">
348                        <img src="/email-assets/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg" alt="Download Fanarchy on the App Store" class="app-store-badge" style="height: 36px;">
349                    </a>
350                </div>
351
352                <button class="nav-toggle" aria-label="Open menu" onclick="document.querySelector('.mobile-menu').classList.toggle('open')">
353                    <span></span><span></span><span></span>
354                </button>
355            </nav>
356        </div>
357        <div class="mobile-menu">
358            <a href="/games/search" style="color: #BF0D3E;">Games</a>
359            <a href="/players/search">Players</a>
360            <a href="/news">News</a>
361            <a href="/slack">Slack</a>
362            <a href="/discord">Discord</a>
363            <a href="/#features">Features</a>
364            <a href="/faq">FAQ</a>
365            <a href="/about">About</a>
366            <a href="/compare">Compare</a>
367            <a href="https://fanarchy.onelink.me/s9P9/fu1emsnk" target="_blank" rel="noopener noreferrer" data-install-trigger="nav_mobile">
368                <img src="/email-assets/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg" alt="Download Fanarchy on the App Store" class="app-store-badge" style="height: 36px;">
369            </a>
370        </div>
371    </header>
372    <div class="page-wrapper">
373        
374        <div class="card-container">
375            
376    <style>
377        .search-card {
378            background: #FFFFFF;
379            border-radius: 10px;
380            padding: 24px 20px;
381            position: relative;
382        }
383        .search-title {
384            font-size: 28px;
385            font-weight: 700;
386            color: #303030;
387            margin-bottom: 8px;
388        }
389        .search-subtitle {
390            font-size: 15px;
391            color: #6C757D;
392            line-height: 1.5;
393            margin-bottom: 24px;
394        }
395        .search-form {
396            display: flex;
397            gap: 8px;
398            margin-bottom: 24px;
399        }
400        .search-input {
401            flex: 1;
402            padding: 12px 16px;
403            font-size: 16px;
404            border: 1px solid #DEE2E6;
405            border-radius: 8px;
406            outline: none;
407            transition: border-color 0.2s;
408        }
409        .search-input:focus {
410            border-color: #C91F42;
411        }
412        .search-button {
413            padding: 12px 24px;
414            background-color: #C91F42;
415            color: white;
416            border: none;
417            border-radius: 8px;
418            cursor: pointer;
419            font-size: 16px;
420            font-weight: 600;
421            transition: background-color 0.2s;
422        }
423        .search-button:hover {
424            background-color: #A81935;
425        }
426        .suggestions-title {
427            font-size: 12px;
428            font-weight: 800;
429            color: #6C757D;
430            text-transform: uppercase;
431            letter-spacing: 0.5px;
432            margin-bottom: 12px;
433        }
434        .suggestions {
435            display: flex;
436            flex-wrap: wrap;
437            gap: 8px;
438        }
439        .suggestion-pill {
440            display: inline-block;
441            padding: 10px 16px;
442            background-color: #F2F1F6;
443            color: #303030;
444            border-radius: 16px;
445            font-size: 14px;
446            text-decoration: none;
447            transition: background-color 0.2s;
448        }
449        .suggestion-pill:hover {
450            background-color: #DEE2E6;
451        }
452        /* Loading overlay — covers the search card while search is in progress */
453        .search-loading-overlay {
454            display: none;
455            position: absolute;
456            top: 0;
457            left: 0;
458            right: 0;
459            bottom: 0;
460            background: rgba(255, 255, 255, 0.95);
461            border-radius: 10px;
462            flex-direction: column;
463            align-items: center;
464            justify-content: center;
465            z-index: 10;
466        }
467        .search-loading-overlay.active {
468            display: flex;
469        }
470        .search-loading-text {
471            font-size: 16px;
472            font-weight: 600;
473            color: #303030;
474        }
475        .search-loading-cancel {
476            position: absolute;
477            bottom: 20px;
478            background: none;
479            border: none;
480            color: #6E6E73;
481            font-size: 15px;
482            cursor: pointer;
483            padding: 8px 16px;
484        }
485    </style>
486    <div class="search-card">
487        <h1 class="search-title">Find a Game</h1>
488        <p class="search-subtitle">Enter any details you remember — when you went, which teams played, or the stadium — and we'll find the game for you.</p>
489
490        <form class="search-form" id="searchForm" action="/games/search" method="GET">
491            <input type="text" name="q" class="search-input" placeholder="What game are you looking for?" autofocus>
492            <input type="hidden" name="tz" id="tzInput">
493            <button type="submit" class="search-button">Search</button>
494        </form>
495
496        <div class="suggestions-section">
497            <div class="suggestions-title">Try searching for</div>
498            <div class="suggestions">
499                <a href="/games/search?q=Angels%20vs%20Athletics%20last%20season&suggestion=true" class="suggestion-pill">Angels vs Athletics last season</a>
500                <a href="/games/search?q=Mark%20Buehrle's%20perfect%20game%20White%20Sox%20vs%20Rays%202009&suggestion=true" class="suggestion-pill">Mark Buehrle&#039;
500s perfect game White Sox vs Rays 2009</a>
501                <a href="/games/search?q=Perez%20walk-off%20in%202014%20Wild%20Card%20Game%20Royals%20vs%20Athletics&suggestion=true" class="suggestion-pill">Perez walk-off in 2014 Wild Card Game Royals vs Athletics</a>
502                <a href="/games/search?q=Cubs%20vs%20Giants%20last%20season&suggestion=true" class="suggestion-pill">Cubs vs Giants last season</a>
503                <a href="/games/search?q=Angels%20comeback%20rally%20in%202002%20World%20Series%20Game%206%20vs%20Giants&suggestion=true" class="suggestion-pill">Angels comeback rally in 2002 World Series Game 6 vs Giants</a>
504                <a href="/games/search?q=Hank%20Aaron's%20715th%20home%20run%20Braves%20vs%20Dodgers%201974&suggestion=true" class="suggestion-pill">Hank Aaron&#039;s 715th home run Braves vs Dodgers 1974</a>
505            </div>
506        </div>
507
508        <!-- Loading overlay shown while search is in progress -->
509        <div class="search-loading-overlay" id="searchLoading">
510            
511    <style>
512        .loading-spinner {
513            position: relative;
514            width: 80px;
515            height: 80px;
516            margin: 0 auto 20px;
517        }
518        .spinner-icon {
519            position: absolute;
520            top: 50%;
521            left: 50%;
522            transform: translate(-50%, -50%);
523            width: 68px;
524            height: 68px;
525            border-radius: 50%;
526            overflow: hidden;
527            background-color: #C91F42;
528        }
529        .spinner-icon img {
530            width: 100%;
531            height: 100%;
532            object-fit: cover;
533        }
534        .spinner-ring {
535            width: 80px;
536            height: 80px;
537            animation: spin 1s linear infinite;
538        }
539        @keyframes spin {
540            0% { transform: rotate(0deg); }
541            100% { transform: rotate(360deg); }
542        }
543    </style>
544    <div class="loading-spinner">
545        <div class="spinner-icon">
546            <img src="/assets/team-appicons/team-mlb-appicon.png" alt="Team"
547               onerror="this.style.display='none'">
548        </div>
549        <svg class="spinner-ring" viewBox="0 0 80 80">
550            <circle cx="40" cy="40" r="36" stroke="#1A2B4A" stroke-width="4"
551                    fill="none" stroke-linecap="round" stroke-dasharray="198 28" />
552        </svg>
553    </div>
554            <div class="search-loading-text">Searching...</div>
555            <button class="search-loading-cancel" id="cancelSearch">Cancel</button>
556        </div>
557    </div>
558        </div>
559        
560
561        <div class="cta-section">
562            <h2>Build Your Scrapbook</h2>
563            <p>Track every game you attend with Fanarchy</p>
564            <a href="https://fanarchy.onelink.me/s9P9/fu1emsnk" class="cta-button" data-install-trigger="page_cta">
565                <img src="/assets/icons/download-on-app-store.svg" alt="Download on the App Store">
566            </a>
567            
567<script>
568            // Screen view — matches iOS trackScreen("Find Past Game")
569            if (typeof analytics !== 'undefined') {
570                analytics.page('Find Past Game', {
571                    surface: 'web',
572                    source: 'direct'
573                });
574            }
575            // Set user timezone for date resolution (e.g., "yesterday" in user's local time)
576            try {
577                var userTz = Intl.DateTimeFormat().resolvedOptions().timeZone;
578                document.getElementById('tzInput').value = userTz;
579                // Also append tz to suggestion pill links
580                document.querySelectorAll('.suggestion-pill').forEach(function(pill) {
581                    var href = pill.getAttribute('href');
582                    if (href && href.indexOf('tz=') === -1) {
583                        pill.setAttribute('href', href + '&tz=' + encodeURIComponent(userTz));
584                    }
585                });
586            } catch(e) {}
587            // Show loading spinner on search submit or suggestion click
588            function showSearchLoading() {
589                document.getElementById('searchLoading').classList.add('active');
590            }
591            document.getElementById('searchForm').addEventListener('submit', function(e) {
592                var input = this.querySelector('.search-input');
593                if (input.value.trim()) { showSearchLoading(); }
594            });
595            document.querySelectorAll('.suggestion-pill').forEach(function(pill) {
596                pill.addEventListener('click', function() { showSearchLoading(); });
597            });
598            // Cancel button: stop navigation and hide overlay
599            document.getElementById('cancelSearch').addEventListener('click', function() {
600                window.stop();
601                document.getElementById('searchLoading').classList.remove('active');
602            });
603            // Hide spinner when returning via back button (bfcache restore)
604            window.addEventListener('pageshow', function(e) {
605                if (e.persisted) {
606                    document.getElementById('searchLoading').classList.remove('active');
607                }
608            });
609        </script>
609
610        </div>
611    </div>
612    <footer class="site-footer">
613        <div class="footer-inner">
614            <div class="footer-grid">
615                <div class="footer-brand">
616                    <span>Fanarchy</span>
617                    <p>The social platform built for baseball fans.<br>Where Fandom Rules.</p>
618                </div>
619                <div class="footer-col">
620                    <h4>Product</h4>
621                    <ul>
622                        <li><a href="/games/search">Game Search</a></li>
623                        <li><a href="/players/search">Player Search</a></li>
624                        <li><a href="/news">Team News</a></li>
625                        <li><a href="/slack">Slack App</a></li>
626                        <li><a href="/discord">Discord App</a></li>
627                        <li><a href="/#features">Features</a></li>
628                        <li><a href="https://fanarchy.onelink.me/s9P9/fu1emsnk" target="_blank" rel="noopener noreferrer" data-install-trigger="footer">App Store</a></li>
629                    </ul>
630                </div>
631                <div class="footer-col">
632                    <h4>Company</h4>
633                    <ul>
634                        <li><a href="/about">About</a></li>
635                        <li><a href="/team">Team</a></li>
636                        <li><a href="/compare">Compare</a></li>
637                        <li><a href="/contact">Contact</a></li>
638                    </ul>
639                </div>
640                <div class="footer-col">
641                    <h4>Legal</h4>
642                    <ul>
643                        <li><a href="/privacy">Privacy Policy</a></li>
644                        <li><a href="/terms">Terms of Service</a></li>
645                        <li><a href="/community-guidelines">Community Guidelines</a></li>
646                        <li><a href="/faq">FAQ</a></li>
647                    </ul>
648                </div>
649            </div>
650            <div class="footer-bottom">
651                <span>&copy; 2026 Fanarchy. All rights reserved.</span>
652                <span>Made with passion in the cheap seats.</span>
653            </div>
654        </div>
655    </footer>
656    
656<script>
657(function() {
658    // --- Identity stitching ---
659    // Reads the Segment anonymousId from the JS API or the ajs_anonymous_id cookie
660    // (cookie persists across pages even without the Segment SDK loaded).
661    function getSegmentAnonId() {
662        if (typeof analytics !== 'undefined' && analytics.user) {
663            try { var id = analytics.user().anonymousId(); if (id) return id; } catch(e) {}
664        }
665        var m = document.cookie.match(/(?:^|;)\s*ajs_anonymous_id=([^;]+)/);
666        if (m) { try { return decodeURIComponent(m[1]).replace(/^"|"$/g, ''); } catch(e) {} }
667        return null;
668    }
669
670    function stitchIdentity() {
671        var anonId = getSegmentAnonId();
672        if (!anonId) return;
673
674        // 1. Append af_sub2 to all OneLink URLs (for App Store install attribution)
675        document.querySelectorAll('a[href*="onelink.me"]').forEach(function(a) {
676            try {
677                var url = new URL(a.href);
678                if (!url.searchParams.has('af_sub2')) {
679                    url.searchParams.set('af_sub2', anonId);
680                    a.href = url.toString();
681                }
682            } catch(e) {}
683        });
684
685        // 2. Embed in the page URL for App Clip invocations — the App Clip receives
686        //    the current page URL via NSUserActivity.webpageURL, so this is the only
687        //    way to pass the web anonymousId to the App Clip session.
688        try {
689            var pageUrl = new URL(window.location.href);
690            if (!pageUrl.searchParams.has('seg_anon')) {
691                pageUrl.searchParams.set('seg_anon', anonId);
692                history.replaceState(null, '', pageUrl.toString());
693            }
694        } catch(e) {}
695    }
696
697    // --- CTA click tracking ---
698    document.addEventListener('click', function(e) {
699        var link = e.target.closest('[data-install-trigger]');
700        if (!link) return;
701        if (typeof analytics !== 'undefined') {
702            try { analytics.track('App Install CTA Clicked', { trigger: link.dataset.installTrigger }); } catch(e) {}
703        }
704    });
705
706    // Run stitching after DOM is ready, and again after Segment loads (for pages
707    // where Segment initializes after DOMContentLoaded).
708    if (document.readyState === 'loading') {
709        document.addEventListener('DOMContentLoaded', stitchIdentity);
710    } else {
711        stitchIdentity();
712    }
713    if (typeof analytics !== 'undefined' && analytics.ready) {
714        analytics.ready(stitchIdentity);
715    }
716})();
717</script>
717
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.