PageSourceSearch

https://trading-tracker-9923.taskade.app/

html trading-tracker-9923.taskade.app collected 2026-10-03 15:06:35 UTC 23,922 bytes, 570 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8" />
5    <link rel="icon" href="/_genesis/assets/favicon" />
6    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7    <title>Trading Tracker - Built with Taskade</title>
8    
9    
9<script>
10      (function() {
11        var esc = function(s) { return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); };
12        var errorHtml = function(msg, id) {
13          return '<div style="position:fixed;inset:0;background:#000;padding:2rem;font-family:system-ui,sans-serif;color:#fff;overflow:auto">' +
14            '<div style="max-width:600px;margin:0 auto">' +
15            '<h2 style="margin:0 0 0.5rem;font-size:1.25rem">Something went wrong</h2>' +
16            '<p style="color:#999;margin:0 0 1rem;font-size:0.95rem">The app failed to load. Try refreshing the page.</p>' +
17            '<pre style="background:#1a1a1a;padding:1rem;border-radius:8px;overflow:auto;font-size:0.8rem;color:#f87171;margin:0;white-space:pre-wrap;word-break:break-word">' +
18            esc(msg) + '<\/pre>' +
19            '<p style="color:#666;margin:1rem 0 0;font-size:0.75rem">Error ID: <code>' + esc(id) + '<\/code><\/p>' +
20            '<\/div><\/div>';
21        };
22        var reported = false;
23        var errorId = null;
24        function getErrorId() {
25          if (errorId != null) return errorId;
26          try {
27            if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { errorId = crypto.randomUUID().replace(/-/g, ''); return errorId; }
28          } catch (e) { /* Fall through to the time+random id below */ }
29          errorId = Date.now().toString(36) + Math.random().toString(36).slice(2, 12);
30          return errorId;
31        }
32        function reportError(code, msg, stack) {
33          if (reported) return;
34          reported = true;
35          try {
36            var logger = window.__TASKADE_APP_LIFECYCLE_LOGGER__;
37            if (typeof logger?.log === 'function') {
38              logger.log({ level: 'error', message: 'Runtime Error', data: { code: code, message: msg, stack: stack || '' } });
39              return;
40            }
41            // Published: no logger, so beacon to the Taskade gateway instead of
42            // dropping the crash on the floor (#27626). Relative path — the
43            // Director proxy injects the gateway token server-side. Once per page
44            // session (the latch above) so a crash loop cannot flood the sink.
45            fetch('/api/taskade/telemetry/errors', {
46              method: 'POST',
47              headers: { 'Content-Type': 'application/json' },
48              body: JSON.stringify({
49                errorId: getErrorId(),
50                code: code,
51                message: String(msg || 'Unknown error').slice(0, 4000),
52                stack: String(stack || '').slice(0, 20000),
53                path: location.pathname.slice(0, 1000),
54                userAgent: navigator.userAgent.slice(0, 512)
55              }),
56              keepalive: true
57              // Default same-origin credentials: a password-protected app gates
58              // /api/taskade/* on its signed access cookie, so omitting them
59              // would redirect the beacon to the password page.
60            }).catch(function() {});
61          } catch (e) { /* Swallow — never block the fallback error UI */ }
62        }
63        function showError(code, msg, stack) {
64          var root = document.getElementById('root');
65          if (!root) return;
66          var spinner = root.querySelector('.genesis__spinner-container');
67          if (spinner) {
68            // Scenario 1: React never mounted — replace spinner
69            reportError('error.fatal', msg, stack);
70            spinner.outerHTML = errorHtml(msg, getErrorId());
71          } else if (!root.childElementCount) {
72            // Scenario 2: React crashed and unmounted — #root is empty
73            reportError('error.fatal', msg, stack);
74            root.innerHTML = errorHtml(msg, getErrorId());
75          } else {
76            // React is running fine — don't interfere with the DOM,
77            // but still report with the original code for diagnostics
78            reportError(code, msg, stack);
79          }
80        }
81        window.addEventListener('error', function(e) {
82          var msg = e.message || String(e.error) || 'Unknown error';
83          var stack = e.error && e.error.stack ? e.error.stack : (e.filename ? e.filename + ':' + e.lineno + ':' + e.colno : '');
84          showError('error.runtime_error', msg, stack);
85        });
86        window.addEventListener('unhandledrejection', function(e) {
87          var msg = e.reason ? String(e.reason) : 'Unhandled promise rejection';
88          var stack = e.reason && e.reason.stack ? e.reason.stack : '';
89          showError('error.unhandled_promise', msg, stack);
90        });
91        // A dead <img> degrades to a neutral placeholder instead of painting its
92        // raw alt string across the page (#27730) — the symptom half of the
93        // fabricated-hot-link fix, and the only half that helps an ALREADY
94        // published app, whose images can rot long after generation.
95        //
96        // Resource load errors do not bubble, so they reach window only in the
97        // CAPTURE phase. That is why neither handler above has ever seen one, and
98        // why this cannot disturb them: a broken image must never render the fatal
99        // error overlay or spend the once-per-session crash beacon.
100        //
101        // Swapping in a 1x1 transparent GIF is what actually stops the alt text —
102        // the element becomes a SUCCESSFUL load, so the browser has no broken image
103        // to caption, while the alt attribute stays for assistive tech. Layout is
104        // untouched: the app's own width/height/aspect classes still apply. The grey
105        // is translucent so it reads correctly on a light or a dark surface without
106        // this script having to know the app's theme.
107        var deadImagePixel = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
108        window.addEventListener('error', function(e) {
109          var el = e.target;
110          if (!el || el.tagName !== 'IMG') return;
111          // The swap fires a fresh load on the same element, so the latch is what
112          // keeps a failing data URI from looping.
113          if (el.getAttribute('data-genesis-image-fallback') !== null) return;
114          el.setAttribute('data-genesis-image-fallback', '');
115          el.removeAttribute('srcset');
116          el.src = deadImagePixel;
117          el.style.background = 'linear-gradient(135deg, rgba(127,127,127,0.16), rgba(127,127,127,0.28))';
118        }, true);
119      })();
120    </script>
120
121    <style>
122      /* Genesis spinner styles */
123      .genesis__spinner-container {
124        position: fixed;
125        inset: 0;
126        background: #000000;
127        display: flex;
128        align-items: center;
129        justify-content: center;
130        z-index: 9999;
131      }
132
133      .genesis__spinner-ring {
134        width: 20px;
135        height: 20px;
136        border: 1.5px solid transparent;
137        border-top: 1.5px solid rgba(255, 255, 255, 0.6);
138        border-radius: 50%;
139        animation: genesis__spin 1s linear infinite;
140      }
141
142      @keyframes genesis__spin {
143        0% { transform: rotate(0deg); }
144        100% { transform: rotate(360deg); }
145      }
146
147      /* Respect reduced motion preferences */
148      @media (prefers-reduced-motion: reduce) {
149        .genesis__spinner-ring {
150          animation: none;
151          border-top-color: rgba(255, 255, 255, 0.9);
152        }
153      }
154    </style>
155    
156
157
158<script type="module" src="/assets/main-TEHRZUIO.js"></script>
vendor: 1 bytes, line 158
158
159<script type="module" src="/chunks/highlighted-body-OFNGDK62-42TLYF6L.js"></script>
vendor: 1 bytes, line 159
159
160<script type="module" src="/chunks/mermaid-GHXKKRXX-A4AAMARR.js"></script>
vendor: 1 bytes, line 160
160
161<script type="module" src="/chunks/HomePage-B2URLAOA.js"></script>
vendor: 1 bytes, line 161
161
162<script type="module" src="/chunks/chunk-NBZUXRLJ.js"></script>
vendor: 1 bytes, line 162
162
163<script type="module" src="/chunks/chunk-WGBE7G63.js"></script>
vendor: 1 bytes, line 163
163
164<script type="module" src="/chunks/chunk-6VKH6YVR.js"></script>
164
165
166
167<link rel="stylesheet" href="/assets/main-PAIAFUM7.css" />
168  <meta charset="utf-8" /><meta name="language" content="en-US" /><meta name="robots" content="index" /><meta name="author" content="Taskade" /><link rel="icon" sizes="32x32" href="/_genesis/assets/favicon" /><link rel="apple-touch-icon" sizes="180x180" href="/_genesis/assets/favicon" /><meta name="title" content="Trading Tracker - Built with Taskade" /><meta property="og:title" content="Trading Tracker - Built with Taskade" /><meta name="twitter:title" content="Trading Tracker - Built with Taskade" /><meta name="description" content="A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and workflows move." /><meta property="og:description" content="A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and workflows move." /><meta name="twitter:description" content="A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and workflows move." /><meta property="og:type" content="website" /><meta property="og:url" content="https://trading-tracker-9923.taskade.app" /><meta property="og:site_name" content="Taskade" /><meta property="og:image" content="https://trading-tracker-9923.taskade.app/_internal/screenshot" /><meta property="og:image:alt" content="Trading Tracker - Built with Taskade - A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and w..." /><meta property="og:locale" content="en_US" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:site" content="@taskade" /><meta name="twitter:creator" content="@taskade" /><meta name="twitter:image" content="https://trading-tracker-9923.taskade.app/_internal/screenshot" /><meta name="twitter:image:alt" content="Trading Tracker - Built with Taskade - A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and w..." /><meta name="format-detection" content="telephone=no" /><meta name="mobile-web-app-capable" content="yes" /><meta name="apple-mobile-web-app-capable" content="yes" /><meta name="apple-mobile-web-app-status-bar-style" content="default" /><meta name="apple-mobile-web-app-title" content="Trading Tracker - Built with Taskade" /><meta name="application-name" content="Taskade" /><link rel="canonical" href="https://trading-tracker-9923.taskade.app" />
168<script type="application/ld+json">
169  {
170    "@context": "https://schema.org",
171    "@type": "WebSite",
172    "name": "Taskade",
173    "alternateName": "Trading Tracker - Built with Taskade",
174    "description": "A living app built with Taskade Genesis. One prompt, one app. Projects remember, agents learn, and workflows move.",
175    "image": "https://trading-tracker-9923.taskade.app/_internal/screenshot",
176    "url": "https://trading-tracker-9923.taskade.app",
177    "author": {
178      "@type": "Organization",
179      "name": "Taskade"
180    },
181    "publisher": {
182      "@type": "Organization",
183      "name": "Taskade",
184      "url": "https://trading-tracker-9923.taskade.app",
185      "logo": {
186        "@type": "ImageObject",
187        "url": "https://trading-tracker-9923.taskade.app/_internal/screenshot"
188      }
189    }
190  }
191</script>
191<script defer src="/_genesis/vendor/flock.min.js" data-proxy-url="/_genesis/api/events" data-tenant-id="ninnvma73neu9a8u:default" data-domain="trading-tracker-9923.taskade.app"></script>
191<script defer src="/_genesis/vendor/scroll-guard.js"></script>
191</head>
192  <body>
193    <div id="root">
194      <div class="genesis__spinner-container">
195        <div class="genesis__spinner-ring"></div>
196      </div>
197    </div>
198  
198<script>
199  (function() {
200    if (typeof window === 'undefined' || typeof document === 'undefined') {
201      return;
202    }
203    if (typeof window.gtag === 'function') {
204      return;
205    }
206    window.dataLayer = window.dataLayer || [];
207    function gtag(){window.dataLayer.push(arguments);}
208    window.gtag = gtag;
209    gtag('js', new Date());
210    gtag('config', 'G-WWJTNN1SFE');
211    const script = document.createElement('script');
212    script.async = true;
213    script.src = 'https://www.googletagmanager.com/gtag/js?id=G-WWJTNN1SFE';
214    document.head.appendChild(script);
215  })();
216</script>
216
217
218<style>
219  @import url('https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600&display=swap');
220
221  :root {
222    /* Onboarding Black Glass - optimized for dark mode */
223    --badge-black: rgba(0, 0, 0, 0.75);
224    --badge-black-hover: rgba(0, 0, 0, 0.85);
225    --badge-text: rgba(255, 255, 255, 0.9);
226    --badge-text-hover: rgba(255, 255, 255, 1);
227    --badge-border: rgba(255, 255, 255, 0.15);
228    --badge-border-hover: rgba(255, 255, 255, 0.25);
229    --badge-shadow: rgba(0, 0, 0, 0.4);
230    
231    /* Rainbow gradient colors from Taskade Upgrade button */
232    --rainbow-color-1: #5cb2f9;  /* Blue */
233    --rainbow-color-2: #8787f7;  /* Purple-Blue */
234    --rainbow-color-3: #a774f7;  /* Purple */
235    --rainbow-color-4: #e376a8;  /* Pink */
236    --rainbow-color-5: #eb7551;  /* Orange */
237    --rainbow-color-6: #19bd59;  /* Green */
238    --rainbow-color-7: #dee325;  /* Yellow-Green */
239    --rainbow-color-8: #e32545;  /* Red */
240    
241    /* Cinematic easing */
242    --ease-cinematic: cubic-bezier(0.22, 1, 0.36, 1);
243    --ease-cinematic-slow: cubic-bezier(0.16, 1, 0.3, 1);
244  }
245
246  [data-theme="light"] {
247    --badge-black: rgba(0, 0, 0, 0.8);
248    --badge-black-hover: rgba(0, 0, 0, 0.9);
249    --badge-text: rgba(255, 255, 255, 0.95);
250    --badge-text-hover: rgba(255, 255, 255, 1);
251    --badge-border: rgba(255, 255, 255, 0.2);
252    --badge-border-hover: rgba(255, 255, 255, 0.3);
253    --badge-shadow: rgba(0, 0, 0, 0.5);
254  }
255
256  @media (prefers-color-scheme: light) {
257    :root {
258      --badge-black: rgba(0, 0, 0, 0.8);
259      --badge-black-hover: rgba(0, 0, 0, 0.9);
260      --badge-text: rgba(255, 255, 255, 0.95);
261      --badge-text-hover: rgba(255, 255, 255, 1);
262      --badge-border: rgba(255, 255, 255, 0.2);
263      --badge-border-hover: rgba(255, 255, 255, 0.3);
264      --badge-shadow: rgba(0, 0, 0, 0.5);
265    }
266  }
267
268  /* Onboarding Black Glass Badge - Bottom Center Position */
269  #taskade-badge {
270    position: fixed;
271    bottom: 24px;
272    left: 50%;
273    transform: translateX(-50%) scale(0.9);
274    z-index: 10001;
275    font-family: 'Geist', -apple-system, BlinkMacSystemFont, sans-serif;
276    animation: badgeGeistFadeIn 1.2s var(--ease-cinematic) forwards;
277    opacity: 0;
278    display: inline-flex;
279    align-items: center;
280    gap: 7px;
281    padding: 7px 12px;
282    font-size: 0.8125rem;
283    font-weight: 500;
284    letter-spacing: -0.01em;
285    line-height: 1;
286    color: var(--badge-text);
287    text-decoration: none;
288    background: var(--badge-black);
289    border: 1px solid var(--badge-border);
290    border-radius: 9999px;
291    backdrop-filter: blur(20px) saturate(1.4);
292    -webkit-backdrop-filter: blur(20px) saturate(1.4);
293    cursor: pointer;
294    transition: all 0.3s var(--ease-cinematic);
295    overflow: hidden;
296    will-change: transform, box-shadow;
297    white-space: nowrap;
298  }
299
300  #taskade-badge a {
301    display: flex;
302    align-items: center;
303    gap: 7px;
304    color: inherit;
305    text-decoration: none;
306  }
307
308  /* Default state with subtle rainbow glow */
309  #taskade-badge {
310    box-shadow: 
311      0 4px 16px var(--badge-shadow),
312      0 0 8px rgba(227, 118, 168, 0.2),
313      0 0 16px rgba(163, 116, 247, 0.15);
314  }
315
316  /* Black glass hover with enhanced rainbow glow */
317  #taskade-badge:hover {
318    background: var(--badge-black-hover);
319    border-color: var(--badge-border-hover);
320    color: var(--badge-text-hover);
321    box-shadow: 
322      0 8px 24px var(--badge-shadow),
323      0 0 16px rgba(227, 118, 168, 0.4),
324      0 0 32px rgba(163, 116, 247, 0.3),
325      inset 0 1px 0 rgba(255, 255, 255, 0.12);
326    transform: translateY(-3px) scale(1.03);
327  }
328
329  /* Taskade sheep mascot - optimized for dark mode */
330  #taskade-badge #taskade-logo {
331    width: 16px;
332    height: 16px;
333    flex-shrink: 0;
334    opacity: 0.95;
335    transition: all 0.3s var(--ease-cinematic);
336    filter: invert(1) brightness(1.1) contrast(1.05);
337  }
338
339  #taskade-badge:hover #taskade-logo {
340    opacity: 1;
341    transform: scale(1.08) rotate(-2deg);
342    filter: invert(1) brightness(1.2) contrast(1.1);
343  }
344
345  /* Light mode adjustments */
346  [data-theme="light"] #taskade-badge #taskade-logo {
347    filter: invert(0) brightness(1.1);
348  }
349
350  [data-theme="light"] #taskade-badge:hover #taskade-logo {
351    filter: invert(0) brightness(1.2);
352  }
353
354  @media (prefers-color-scheme: light) {
355    :root #taskade-badge #taskade-logo {
356      filter: invert(0) brightness(1.1);
357    }
358
359    :root #taskade-badge:hover #taskade-logo {
360      filter: invert(0) brightness(1.2);
361    }
362  }
363
364  /* Geist typography */
365  #taskade-badge .badge-text {
366    font-weight: 500;
367    letter-spacing: 0.005em;
368    transition: all 0.3s var(--ease-cinematic);
369    -webkit-font-smoothing: antialiased;
370    -moz-osx-font-smoothing: grayscale;
371  }
372
373  #taskade-badge.hidden {
374    display: none;
375  }
376
377  /* Geist fade-in animation */
378  @keyframes badgeGeistFadeIn {
379    0% {
380      opacity: 0;
381      transform: translateX(-50%) translateY(8px) scale(0.85);
382      filter: blur(6px);
383    }
384    60% {
385      opacity: 0.7;
386      filter: blur(2px);
387    }
388    100% {
389      opacity: 1;
390      transform: translateX(-50%) translateY(0) scale(0.9);
391      filter: blur(0);
392    }
393  }
394
395  /* Responsive */
396  @media (max-width: 768px) {
397    #taskade-badge {
398      bottom: 80px; /* Above mobile nav/TAA chat */
399      left: 50%;
400      transform: translateX(-50%) scale(0.85);
401      padding: 6px 10px;
402      font-size: 0.75rem;
403      gap: 5px;
404    }
405
406    #taskade-badge #taskade-logo {
407      width: 14px;
408      height: 14px;
409    }
410  }
411
412  /* Reduced motion */
413  @media (prefers-reduced-motion: reduce) {
414    #taskade-badge {
415      animation: none;
416      opacity: 1;
417    }
418
419    #taskade-badge a,
420    #taskade-badge #taskade-logo,
421    #taskade-badge .badge-text {
422      transition: none;
423      animation: none;
424    }
425  }
426
427  /* High contrast */
428  @media (prefers-contrast: high) {
429    #taskade-badge a {
430      border-width: 2px;
431      border-color: currentColor;
432    }
433  }
434
435  /* Hide when printing */
436  @media print {
437    #taskade-badge {
438      display: none !important;
439    }
440  }
441</style>
442
443<div id="taskade-badge" data-badge-mode="edit">
444  <a href="https://www.taskade.com/app/o5jej9j684e6lvhg?utm_source=genesis_badge&utm_medium=app_badge&utm_campaign=p
444owered_by&utm_content=o5jej9j684e6lvhg" target="_blank" rel="noopener noreferrer">
445    <img id="taskade-logo" src="./_assets/logo.png" alt="Taskade" />
446    <span class="badge-text" data-community-text="Edit in Taskade" data-default-text="Powered by Taskade">Edit in Taskade</span>
447  </a>
448</div>
449
450<script>
451  (function() {
452    // Geist theme detection - matching wait.html
453    function applyTheme() {
454      const urlParams = new URLSearchParams(window.location.search);
455      let theme = urlParams.get('theme');
456      
457      if (!theme) {
458        try {
459          if (window.parent !== window) {
460            const parentTheme = window.parent.document.documentElement.getAttribute('data-theme');                                                              
461            if (parentTheme) theme = parentTheme;
462          }
463        } catch (e) {}
464        
465        if (!theme) {
466          theme = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';                                                                
467        }
468      }
469      
470      document.documentElement.setAttribute('data-theme', theme === 'light' ? 'light' : 'dark');                                                                
471    }
472
473    // Apply theme immediately
474    applyTheme();
475
476    // Theme change listener
477    window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', (e) => {                                                                      
478      const urlParams = new URLSearchParams(window.location.search);
479      if (!urlParams.get('theme')) {
480        document.documentElement.setAttribute('data-theme', e.matches ? 'light' : 'dark');                                                                      
481      }
482    });
483
484    // Analytics tracking and postMessage communication
485    const badgeLink = document.querySelector('#taskade-badge a');
486    if (badgeLink) {
487      let parentOrigin = '*';
488      let parentHostname = '';
489      if (document.referrer) {
490        try {
491          const referrerUrl = new URL(document.referrer);
492          parentOrigin = referrerUrl.origin;
493          parentHostname = referrerUrl.hostname;
494        } catch (err) {
495          parentOrigin = '*';
496          parentHostname = '';
497        }
498      }
499      // Taskade itself is framing us (the share page at /app/{id}, which
500      // iframes the app). parentOrigin stays '*' when there is no usable
501      // referrer, and then the framer is unknowable.
502      const framedByTaskade =
503        parentOrigin !== '*' &&
504        (parentHostname === 'taskade.com' || parentHostname.endsWith('.taskade.com'));
505
506      const badge = document.getElementById('taskade-badge');
507      const badgeText = document.querySelector('#taskade-badge .badge-text');
508      const communityText = badgeText ? badgeText.getAttribute('data-community-text') : null;
509      const badgeHref = badgeLink.getAttribute('href') || '';
510      const badgeMode = badge ? badge.getAttribute('data-badge-mode') : null;
511      const isCommunityShare =
512        badgeMode === 'edit' ||
513        (badgeText &&
514          communityText &&
515          badgeText.textContent &&
516          badgeText.textContent.trim() === communityText) ||
517        badgeHref.indexOf('/app/') !== -1;
518
519      if (window.parent !== window) {
520        // Hide only when embedded: on the standalone domain this badge IS the
521        // viral return path into Taskade, so it must stay visible there.
522        // Scope note, two independent reasons to hide inside a frame:
523        // 1. The Taskade share page frames the app and already renders its own
524        //    Clone CTA, so ANY badge mode is a duplicate there. A buyer of a
525        //    non-template listing stays on /app/{id} and sees exactly that.
526        // 2. An edit-mode badge hides in any frame, because its /app/{id} link
527        //    just points back at the framing page.
528        // A powered_by badge in an unrelated third-party embed still renders -
529        // there it is the only way back to Taskade. With no referrer the
530        // framer is unknowable, so only the mode-based reason applies.
531        if ((isCommunityShare || framedByTaskade) && badge) {
532          badge.classList.add('hidden');
533        }
534
535        const notifyParent = () => {
536          window.parent.postMessage(
537            {
538              type: 'TASKADE_BADGE_MODE',
539              source: 'taskade_badge',
540              mode: isCommunityShare ? 'edit' : 'powered_by',
541            },
542            parentOrigin
543          );
544        };
545
546        try {
547          notifyParent();
548          setTimeout(notifyParent, 500);
549        } catch (err) {
550          // Ignore postMessage failures.
551        }
552      }
553
554      badgeLink.addEventListener('click', function() {
555        // Track badge engagement
556        if (typeof window.gtag === 'function') {
557          window.gtag('event', 'genesis_badge_clicked', {
558            event_category: 'engagement',
559            event_label: 'edit_in_taskade'
560          });
561        }
562
563      });
564    }
565
566  })();
567</script>
vendor: 1 bytes, line 567
567
568<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8d4254f20c524f6fbf6ecde0b2c89fb4","spa":2}' crossorigin="anonymous"></script>
568
569</body>
570</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.