PageSourceSearch

https://www.tomfrazier.com/

html tomfrazier.com collected 2026-10-04 05:04:38 UTC 93,637 bytes, 1,758 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en"  data-theme="Fancy" data-font="Neco / Switzer">
3<head>
4    <meta charset="utf-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Tom Frazier | The Long Arc | The Idea Chose You | AI, Bitcoin &amp; Startup Strategies</title>
7    <link rel="preload" as="style" href="https://www.tomfrazier.com/assets/built/style.css?v=xyeqQ_TVRX1HZg3m">
8<link rel="preload" as="script" href="https://www.tomfrazier.com/assets/built/global.js?v=Pxny4Whd8be1LHeY">
9            <link rel="preload" as="font" type="font/woff2" href="https://www.tomfrazier.com/assets/fonts/neco.woff2?v=l64MUfYbeyeVP67j" crossorigin="anonymous">
10<style>
11    @font-face {
12        font-family: "Neco";
13        font-style: normal;
14        font-weight: 400 700;
15        font-display: swap;
16        src: url(https://www.tomfrazier.com/assets/fonts/neco.woff2?v=l64MUfYbeyeVP67j) format('woff2');
17    }
18</style>            <link rel="preload" as="font" type="font/woff2" href="https://www.tomfrazier.com/assets/fonts/switzer.woff2?v=0b-AH_saYJbe9wp8" crossorigin="anonymous">
19<style>
20    @font-face {
21        font-family: "Switzer";
22        font-style: normal;
23        font-weight: 400 700;
24        font-display: swap;
25        src: url(https://www.tomfrazier.com/assets/fonts/switzer.woff2?v=0b-AH_saYJbe9wp8) format('woff2');
26    }
27</style><link rel="stylesheet" type="text/css" href="https://www.tomfrazier.com/assets/built/style.css?v=xyeqQ_TVRX1HZg3m">
28    
28<script>
29        try {
30            if (localStorage.darkMode === "true" || (!("darkMode" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches)) {
31                document.documentElement.classList.add("dark");
32            }
33        } catch (_) {}
34    </script>
34
35    <meta name="description" content="My public notebook of long-term thinking. Ideas I’m curious about, lessons I’m learning, and the principles I’m pressure-testing over time.">
36    <link rel="icon" href="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w256h256/2026/05/icon-512-maskable.png" type="image/png">
37    <link rel="canonical" href="https://www.tomfrazier.com/">
38    <meta name="referrer" content="no-referrer-when-downgrade">
39    <link rel="next" href="https://www.tomfrazier.com/page/2/">
40    
41    <meta property="og:site_name" content="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup">
42    <meta property="og:type" content="website">
43    <meta property="og:title" content="The Long Arc by Tom Frazier">
44    <meta property="og:description" content="My public notebook of long-term thinking. Ideas I’m curious about, lessons I’m learning, and the principles I’m pressure-testing over time.">
45    <meta property="og:url" content="https://www.tomfrazier.com/">
46    <meta property="og:image" content="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1200/2026/05/[email protected]">
47    <meta name="twitter:card" content="summary_large_image">
48    <meta name="twitter:title" content="The Long Arc by Tom Frazier">
49    <meta name="twitter:description" content="My public notebook of long-term thinking. Ideas I’m curious about, lessons I’m learning, and the principles I’m pressure-testing over time.">
50    <meta name="twitter:url" content="https://www.tomfrazier.com/">
51    <meta name="twitter:image" content="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1200/2026/05/[email protected]">
52    <meta name="twitter:site" content="@tomfrazier">
53    <meta property="og:image:width" content="1200">
54    <meta property="og:image:height" content="630">
55    
56    
56<script type="application/ld+json">
57{
58    "@context": "https://schema.org",
59    "@type": "WebSite",
60    "publisher": {
61        "@type": "Organization",
62        "name": "Tom Frazier | The Long Arc — AI, Bitcoin & Startup",
63        "url": "https://www.tomfrazier.com/",
64        "logo": {
65            "@type": "ImageObject",
66            "url": "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-light-header.png"
67        }
68    },
69    "url": "https://www.tomfrazier.com/",
70    "name": "Tom Frazier | The Long Arc — AI, Bitcoin & Startup",
71    "image": {
72        "@type": "ImageObject",
73        "url": "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/03/Frazier_7253-small-3-1.jpeg",
74        "width": 1147,
75        "height": 1147
76    },
77    "mainEntityOfPage": "https://www.tomfrazier.com/",
78    "description": "My public notebook of long-term thinking. Ideas I’m curious about, lessons I’m learning, and the principles I’m pressure-testing over time."
79}
80    </script>
80
81
82    <meta name="generator" content="Ghost 6.68">
83    <link rel="alternate" type="application/rss+xml" title="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" href="https://www.tomfrazier.com/rss/">
84    
84<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://www.tomfrazier.com/" data-key="8a44318de0c96d9988088066c6" data-api="https://tom-frazier.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
84
85    
85<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="8a44318de0c96d9988088066c6" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://tom-frazier.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
85
86    
86<script defer src="https://cdn.jsdelivr.net/ghost/announcement-bar@~1.1/umd/announcement-bar.min.js" data-announcement-bar="https://www.tomfrazier.com/" data-api-url="https://www.tomfrazier.com/members/api/announcement/" crossorigin="anonymous"></script>
86
87    <link href="https://www.tomfrazier.com/webmentions/receive/" rel="webmention">
88    
88<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
88
89    
89<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.tomfrazier.com/.ghost/analytics/api/v1/page_hit"  tb_site_uuid="55ddb45d-694f-462b-9dc8-c6c46460a521" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
89<style>:root {--ghost-accent-color: #E2741D;}</style>
90    <meta name="google-site-verification" content="JEWw23u3aeE--RnVlUcK3hWVKDUSAv1jg4_yLSkAyTg" />
91<!-- Google Tag Manager -->
92<script>
vendor: 327 bytes, lines 92-96
92(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
93new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
94j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
95'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
96})(window,document,'script','dataLayer','
96GTM-5T6JRMGN
vendor: 3 bytes, line 96
96');
96</script>
96
97<!-- End Google Tag Manager -->
98
99<style>
100/* === Tom Frazier — Fancy theme, brand palette === */
101:root:is([data-theme="Fancy"]) {
102  /* Light */
103  --base: #B5560F;          /* ember, deepened so links stay legible on paper */
104  --primary: #F2EDE3;       /* Paper */
105  --secondary: #E6DFD0;
106  --tertiary: #DAD1BF;
107  --heading: #231F20;       /* Ink */
108  --text: #231F20;
109  --meta: #6F675E;
110  --submenu: #231F20;
111  --submenu-text: #F2EDE3;
112  --border: var(--secondary);
113  --overlay: #231F20;
114  --shadow: #231F20;
115  --link: #B5560F;
116
117  /* Dark */
118  --dark-primary: #231F20;  /* Ink */
119  --dark-secondary: #2D2928;
120  --dark-tertiary: #38332F;
121  --dark-heading: #F2EDE3;  /* Paper */
122  --dark-text: #F2EDE3;
123  --dark-meta: #A79E91;
124  --dark-submenu: #2D2928;
125  --dark-submenu-text: var(--dark-text);
126  --dark-border: var(--dark-tertiary);
127  --dark-link: #E2741D;     /* bright ember on ink */
128
129  /* Callouts — warmed + muted to sit with the brand */
130  --color-blue:   #4C6B7A;  /* info     */
131  --color-green:  #6E7F57;  /* success  */
132  --color-yellow: #D6A33C;  /* note     */
133  --color-red:    #C0502E;  /* warning  */
134  --color-pink:   #C0727B;
135  --color-purple: #836C8E;
136}
137
138/* Highlight (==text==) — was neon yellow */
139.prose mark {
140  background-color: rgba(226, 116, 29, .30);  /* ember tint */
141  color: inherit;
142}
143</style>
144
145<style>
146/* ── Alt-Quote (Blockquote Alt) override ────────────────── */
147
148.kg-blockquote-alt {
149    font-size: 1.5rem;          /* text-2xl — below h2's text-3xl */
150    line-height: 1.4;
151    color: color-mix(in srgb, var(--heading) 62%, var(--primary) 38%);
152    /* font-family and font-weight intentionally untouched — inherits
153       heading utility already applied by the theme               */
154}
155
156@media (min-width: 640px) {
157    .kg-blockquote-alt {
158        font-size: 1.75rem;     /* sm: text-[1.75rem] — still below h2 */
159    }
160}
161
162/* Curly double quotes via pseudo-elements */
163.kg-blockquote-alt::before {
164    content: "\201C";           /* " */
165}
166
167.kg-blockquote-alt::after {
168    content: "\201D";           /* " */
169}
170</style>
171
172<!-- License definitions -->
173<script>
174(function () {
175  const path = window.location.pathname.toLowerCase().replace(/\/$/, "");
176
177  const isHome = path === "";
178  const isRestricted =
179    isHome ||
180    path.includes("operators-edge") ||
181    path.startsWith("/about") ||
182    path.startsWith("/contact") ||
183    path.startsWith("/media-kit") ||
184    path.startsWith("/faq/who-is-tom-frazier") ||
185    path.startsWith("/satoshi-settlement") ||
186    path.startsWith("/the-idea-chose-you") ||
187    path.startsWith("/advance-reader") ||
188    path.startsWith("/arc-access") ||
189    path.startsWith("/private-reader-page") ||
190    path.startsWith("/the-idea-chose-you-founders-field-kit") ||
191    path.startsWith("/book-buyer-earn-the-build-bundle") ||
192    path.startsWith("/execution-is-scaling-faster-than-judgment");
193
194  if (!isRestricted) {
195    const script = document.createElement("script");
196    script.type = "application/ld+json";
197    script.text = JSON.stringify({
198      "@context": "https://schema.org",
199      "@type": "CreativeWork",
200      "license": "https://creativecommons.org/licenses/by/4.0/"
201    });
202    document.head.appendChild(script);
203  }
204
205  document.documentElement.classList.add(
206    isRestricted ? "license-restricted" : "license-ccby"
207  );
208})();
209</script>
209
210
211<style>
212  .post-tag,
213  .tag-sm,
214  .tag,
215  .gh-tag,
216  .gh-card-tag,
217  [class*="tag"] a {
218    text-transform: uppercase;
219    letter-spacing: 0.06em;
220  }
221
222  .kg-callout-card a,.gh-content .kg-callout-card a {
223    text-decoration: underline !important;
224    text-underline-offset: 0.12em;
225  }
226  
227  .kg-callout-card a:hover,
228  .gh-content .kg-callout-card a:hover {
229    text-decoration: underline !important;
230  }
231  
232  header.navbar a[href*="/the-idea-chose-you"] {
233    display: inline-flex;
234    align-items: center;
235    justify-content: center;
236    padding: 0.45rem 0.9rem;
237    margin-left: 0.6rem;
238    border-radius: 999px;
239    border: 2px solid #E2741D;
240    color: #E2741D;
241    background: transparent;
242    text-decoration: none;
243    font-weight: 600;
244    line-height: 1;
245    box-sizing: border-box;
246    transition: all 0.15s ease;
247  }
248
249  header.navbar a[href*="/the-idea-chose-you"]:focus-visible,
250  footer a[href*="/the-idea-chose-you"]:focus-visible,
251  .navbar .nav a[href*="/the-idea-chose-you"]:focus-visible {
252    outline: 2px solid #E2741D;
253    outline-offset: 2px;
254  }
255
256  header.navbar a[href*="/the-idea-chose-you"]:hover, .navbar .nav a[href*="/the-idea-chose-you"]:hover {
257    background: #E2741D;
258    color: #fff;
259  }
260
261  footer a[href*="/the-idea-chose-you"]:hover {
262    background: transparent;
263    color: #E2741D;
264    text-decoration: underline;
265  }
266
267  
268  @media (max-width: 768px) {
269    footer nav,
270    footer .nav,
271    footer ul {
272      display: flex;
273      justify-content: center;
274      align-items: center;
275      gap: 1.5rem;
276      flex-wrap: wrap;
277    }
278
279    footer li,
280    footer .nav-item {
281      display: flex;
282      align-items: center;
283      justify-content: center;
284      margin: 0;
285    }
286
287    footer a[href*="/the-idea-chose-you"] {
288      display: inline-flex;
289      align-items: center;
290      justify-content: center;
291      padding: 0.45rem 0.9rem;
292      margin: 0;
293      border-radius: 999px;
294      border: 2px solid #E2741D;
295      color: #E2741D;
296      background: transparent;
297      text-decoration: none;
298      font-weight: 600;
299      line-height: 1;
300      box-sizing: border-box;
301      vertical-align: middle;
302      transition: all 0.15s ease;
303    }
304
305    .navbar .nav a[href*="/the-idea-chose-you"] {
306      display: inline-flex;
307      align-items: center;
308      justify-content: center;
309      padding: 0.55rem 1rem;
310      margin-top: 0.6rem;
311      border-radius: 999px;
312      border: 2px solid #E2741D;
313      color: #E2741D;
314      background: transparent;
315      text-decoration: none;
316      font-weight: 600;
317      line-height: 1;
318      box-sizing: border-box;
319      transition: all 0.15s ease;
320    }
321  }
322
323  .cc-license-global {
324    font-size: 0.85rem;
325    color: #6b7280;
326    text-align: center;
327    margin-top: 40px;
328  }
329  
330  .cc-license-global a {
331    color: inherit;
332    text-decoration: underline;
333  }
334</style>
335
336<!-- Alli snippet -->
337<script type="text/javascript" src="data:text/javascript;base64,
338LyogQWxsaSBBSSB3aWRnZXQgZm9yIHRvbWZyYXppZXIuY29tICovCihmdW5jdGlvbiAodyxkLHMsbyxmLGpzLGZqcykge3dbJ0FsbGlKU1dpZGdldCddPW87d1tvXSA9IHdbb10gfHwgZnVuY3Rpb24gKCkgeyAod1tvXS5xID0gd1tvXS5xIHx8IFtdKS5wdXNoKGFyZ3VtZW50cykgfTtqcyA9IGQuY3JlYXRlRWxlbWVudChzKSwgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTtqcy5pZCA9IG87IGpzLnNyYyA9IGY7IGpzLmFzeW5jID0gMTsgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpO30od2luZG93LCBkb2N1bWVudCwgJ3NjcmlwdCcsICdhbGxpJywgJ2h0dHBzOi8vc3RhdGljLmFsbGlhaS5jb20vd2lkZ2V0L3YxLmpzJykpO2FsbGkoJ2luaXQnLCAnc2l0ZV9IVDJBcGJBWmplWGkyWkxkJyk7YWxsaSgnb3B0aW1pemUnLCAnYWxsJyk7"></script>
338
339</head>
340<body class="bg-primary font-body text-text font-weight-body">
341    <div class="viewport">
342        <header class="navbar relative z-50 pt-4 sm:pt-8">
343    <a class="skip-link" href="#main">Skip to content</a>
344    <div class="container">
345        <div class="grid items-center gap-x-6 w-full lg:grid-cols-[1fr_auto_1fr]">
346            <nav class=" justify-self-start flex w-full not-lg:hidden">
347                            <ul class="flex items-center gap-x-6">
348                    <li><a class="text-decoration not-submenu:font-medium" href="https://www.tomfrazier.com/the-idea-chose-you/" >The Idea Chose You</a></li>
349                    <li><a class="text-decoration not-submenu:font-medium" href="https://tomfrazier.com/about/" >About Tom</a></li>
350        
351    </ul>
352
353            </nav>
354            <div class=" justify-self-center grid-cols-[1fr_auto_1fr] items-center gap-x-4 w-full not-lg:grid">
355                <div class="justify-self-start lg:hidden">
356                    <button class="icon-sm var-secondary" aria-label="Menu" data-menu-toggle>
357        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 6l16 0" /><path d="M4 12l16 0" /><path d="M4 18l16 0" /></svg></button>                </div>
358                <div class="justify-self-center">
359                    <a class="group/logo flex items-center h-logo" href="https://www.tomfrazier.com">
360                <img 
361    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 dark:hidden" 
362    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-light-header.png" 
363    width="180" 
364    height="60" 
365    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
366    fetchpriority="high" 
367    loading="eager"
368>                    <img 
369    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 hidden dark:block" 
370    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-dark-header.png" 
371    width="180" 
372    height="60" 
373    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
374    fetchpriority="high" 
375    loading="lazy"
376></a>                </div>
377                <div class="justify-self-end flex items-center gap-x-4 lg:hidden">
378                        <button class="relative flex justify-center items-center size-8 text-xl transition-opacity hover:opacity-85 not-lg:hidden" aria-label="Dark Mode" data-theme-toggle>
379        <span class="transition-opacity will-change-[opacity] duration-300 dark:opacity-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /><path d="M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" /></svg></span>
380        <span class="absolute opacity-0 transition-opacity duration-300 will-change-[opacity] dark:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /><path d="M17 4a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2" /><path d="M19 11h2m-1 -1v2" /></svg></span>
381    </button>
382                    <button class="icon-sm var-secondary" aria-label="Search" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /><path d="M21 21l-6 -6" /></svg></button>                </div>
383            </div>
384            <div class="justify-self-end flex items-center gap-x-4 not-lg:hidden">
385                    <button class="relative flex justify-center items-center size-8 text-xl transition-opacity hover:opacity-85 not-lg:hidden" aria-label="Dark Mode" data-theme-toggle>
386        <span class="transition-opacity will-change-[opacity] duration-300 dark:opacity-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /><path d="M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" /></svg></span>
387        <span class="absolute opacity-0 transition-opacity duration-300 will-change-[opacity] dark:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /><path d="M17 4a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2" /><path d="M19 11h2m-1 -1v2" /></svg></span>
388    </button>
389                <button class="icon-sm var-secondary" aria-label="Search" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /><path d="M21 21l-6 -6" /></svg></button>                        <div class="flex items-center gap-x-6">
390                    <a class="btn-sm var-primary" href="#/portal/signup" data-portal="signup">Subscribe</a>
391        </div>
392            </div>
393        </div>
394    </div>
395</header>        <main class="py-20 md:py-32" id="main">
396
397    <div class="container">
398        <div class="space-y-20 md:space-y-32">
399            <div>
400    <div class="max-w-xl mx-auto">
401        <div class="flex flex-col items-center gap-8 text-center">
402                <picture class="block size-48 bg-secondary rounded-fancy overflow-hidden">
403    <source 
404        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/03/Frazier_7253-small-3-1.jpeg 320w,
405                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/03/Frazier_7253-small-3-1.jpeg 640w"
406        sizes="192px"
407        type="image/avif"
408    >
409    <img 
410        class="size-full object-cover"
411        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/03/Frazier_7253-small-3-1.jpeg 320w,
412                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/03/Frazier_7253-small-3-1.jpeg 640w"
413        sizes="192px"
414        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/03/Frazier_7253-small-3-1.jpeg"
415        alt="The Long Arc"
416        fetchpriority="high"
417        loading="eager"
418    >
419</picture>            <div class="space-y-6">
420                <div class="space-y-4">
421                    <h1 class="heading-4xl md:heading-5xl">
422                            The Long Arc
423                    </h1>
424                        <p class="text-lg">
425                            My public notebook of long-term thinking. Ideas I’m curious about, lessons I’m learning, and the principles I’m pressure-testing over time.
426                        </p>
427                </div>
428                            <div class="flex justify-center flex-wrap items-center gap-4 not-has-child:hidden">
429</div>
430            </div>
431        </div>
432    </div>
433</div>        </div>
434    </div>
435
436    
437<style>
438/* ── Theses Section (full-bleed wrapper, matches .thesis-section) ── */
439.theses-section {
440    background:
441        radial-gradient(ellipse at 65% 50%,
442            color-mix(in srgb, var(--color-accent) 7%, transparent) 0%,
443            transparent 65%),
444        var(--color-secondary);
445    border-top:    1px solid color-mix(in srgb, var(--color-accent) 22%, transparent);
446    border-bottom: 1px solid color-mix(in srgb, var(--color-accent) 22%, transparent);
447    padding: 4rem 0;
448    margin: 2rem 0 4rem 0;
449}
450
451/* ── Section label ── */
452.theses-label {
453    font-family: var(--font-body);
454    font-size: 0.7rem;
455    letter-spacing: 0.14em;
456    text-transform: uppercase;
457    color: var(--color-heading, #1a1a1a);
458    font-weight: 500;
459    display: block;
460    margin-bottom: 1.5rem;
461}
462
463/* ── Shell / responsive ── */
464thesis-selector { display: block; font-family: inherit; }
465thesis-selector * { box-sizing: border-box; }
466
467.ts-desktop { display: none; }
468.ts-mobile  {
469    display: grid;
470    grid-auto-flow: column;
471    grid-auto-columns: 85%;
472    gap: 12px;
473    overflow-x: auto;
474    scroll-snap-type: x mandatory;
475    scroll-behavior: smooth;
476    padding: 4px 4px 16px;
477    scrollbar-width: none;
478}
479.ts-mobile::-webkit-scrollbar { display: none; }
480
481@media (min-width: 768px) {
482    .ts-desktop { display: grid; }
483    .ts-mobile  { display: none; }
484}
485
486/* ── Desktop grid — hero left, sidebar right ── */
487.ts-grid {
488    grid-template-columns: 1fr 300px;
489    align-items: stretch;
490    border-radius: var(--radius-custom, 0.75rem);
491    overflow: hidden;
492    border: 1px solid var(--color-border, rgba(0,0,0,0.08));
493    background: var(--color-primary, #fff);
494    min-height: 460px;
495}
496
497/* ── Hero (left panel) ── */
498.ts-hero {
499    position: relative;
500    overflow: hidden;
501    background: var(--color-overlay, #1a1a1a);
502    text-decoration: none;
503    color: #fff;
504    display: block;
505    min-height: 460px;
506}
507.ts-hero-img {
508    position: absolute;
509    inset: 0;
510    background-size: cover;
511    background-position: center;
512    background-color: var(--color-overlay, #1a1a1a);
513    transition: transform 0.75s cubic-bezier(0.25, 0.46, 0.45, 0.94);
514}
515.ts-hero:hover .ts-hero-img { transform: scale(1.05); }
516.ts-hero::after {
517    content: '';
518    position: absolute;
519    inset: 0;
520    background: linear-gradient(
521        to bottom,
522        rgba(0,0,0,0.08) 0%,
523        rgba(0,0,0,0.15) 35%,
524        rgba(0,0,0,0.72) 100%
525    );
526}
527
528/* ── Pill ── */
529.ts-pill {
530    position: absolute;
531    top: 1.75rem;
532    left: 2rem;
533    z-index: 2;
534    display: inline-flex;
535    align-items: center;
536    padding: 0.25rem 1rem;
537    border-radius: 9999px;
538    background: color-mix(in srgb, var(--color-overlay) 10%, transparent);
539    backdrop-filter: blur(12px) saturate(150%);
540    -webkit-backdrop-filter: blur(12px) saturate(150%);
541    font-family: var(--font-body);
542    font-size: 0.68rem;
543    letter-spacing: 0.13em;
544    text-transform: uppercase;
545    color: rgba(255,255,255,0.92);
546    font-weight: 500;
547    white-space: nowrap;
548}
549
550/* ── Hero body ── */
551.ts-hero-body {
552    position: absolute;
553    left: 2rem;
554    right: 2rem;
555    bottom: 2rem;
556    z-index: 2;
557    display: flex;
558    flex-direction: column;
559    gap: 0.75rem;
560}
561.ts-hero-title {
562    font-family: var(--font-heading);
563    font-size: clamp(1.6rem, 3vw, 2.25rem);
564    line-height: 1.08;
565    letter-spacing: -0.03em;
566    color: #fff;
567    font-weight: var(--font-weight-weight-heading);
568    margin: 0;
569    max-width: 22ch;
570    text-shadow: 0 1px 14px rgba(0,0,0,0.4);
571}
572.ts-hero-excerpt {
573    font-size: clamp(0.875rem, 1.4vw, 1rem);
574    line-height: 1.6;
575    color: rgba(255,255,255,0.75);
576    margin: 0;
577    max-width: 54ch;
578}
579.ts-read-btn {
580    display: inline-flex;
581    align-items: center;
582    gap: 6px;
583    background: #fff;
584    align-self: flex-start;
585    color: #1a1a1a;
586    padding: 11px 20px;
587    border-radius: 999px;
588    font-size: 12px;
589    font-weight: 500;
590    letter-spacing: 0.01em;
591    margin-top: 0.25rem;
592    text-decoration: none;
593    transition: background 0.15s ease;
594}
595.ts-hero:hover .ts-read-btn,
596.ts-card:hover .ts-read-btn { background: #f3f3f3; }
597.ts-read-btn svg { width: 1em; height: 1em; flex-shrink: 0; }
598
599/* ── Sidebar (right panel) ── */
600.ts-sidebar {
601    background: color-mix(in srgb, var(--color-secondary) 70%, var(--color-overlay));
602    padding: 1.5rem 1.5rem 1.5rem 1.5rem;
603    overflow-y: auto;
604    border-left: 1px solid var(--color-border, rgba(0,0,0,0.06));
605    display: flex;
606    flex-direction: column;
607}
608.ts-sidebar-title {
609    font-size: 10px;
610    letter-spacing: 0.14em;
611    text-transform: uppercase;
612    color: #fff;
613    font-weight: 500;
614    padding-bottom: 12px;
615    border-bottom: 1px solid var(--color-border, rgba(0,0,0,0.08));
616    margin-bottom: 10px;
617}
618.ts-item {
619    display: block;
620    width: 100%;
621    text-align: left;
622    background: transparent;
623    border: none;
624    padding: 18px 10px;
625    border-bottom: 1px solid var(--color-border, rgba(0,0,0,0.05));
626    cursor: pointer;
627    position: relative;
628    transition: background 0.15s ease;
629    font: inherit;
630    color: inherit;
631    border-radius: 0;
632}
633.ts-item:last-child { border-bottom: none; }
634.ts-item:hover { background: var(--color-tertiary, rgba(0,0,0,0.03)); border-radius: 8px; }
635.ts-item-pill {
636    font-size: 9px;
637    letter-spacing: 0.14em;
638    text-transform: uppercase;
639    color: var(--color-meta, rgba(0,0,0,0.55));
640    font-weight: 500;
641    margin-bottom: 4px;
642}
643.ts-item-title {
644    font-size: 14px;
645    line-height: 1.4;
646    color: var(--color-heading, #1a1a1a);
647    font-weight: 500;
648}
649.ts-item-active {
650    background: var(--color-primary, #fff);
651    border-radius: 8px;
652    box-shadow: 0 1px 4px rgba(0,0,0,0.06);
653}
654.ts-item-active::before {
655    content: '';
656    position: absolute;
657    left: -6px;
658    top: 50%;
659    transform: translateY(-50%);
660    width: 0;
661    height: 0;
662    border-top: 7px solid transparent;
663    border-bottom: 7px solid transparent;
664    border-right: 7px solid var(--color-primary, #fff);
665}
666
667/* ── Mobile cards ── */
668.ts-card {
669    scroll-snap-align: start;
670    position: relative;
671    aspect-ratio: 4 / 5;
672    overflow: hidden;
673    background: var(--color-overlay, #1a1a1a);
674    text-decoration: none;
675    color: #fff;
676    border-radius: var(--radius-custom, 0.75rem);
677    display: block;
678}
679.ts-card-img {
680    position: absolute;
681    inset: 0;
682    background-size: cover;
683    background-position: center;
684    background-color: var(--color-overlay, #1a1a1a);
685}
686.ts-card::after {
687    content: '';
688    position: absolute;
689    inset: 0;
690    background: linear-gradient(to bottom, rgba(0,0,0,0.08) 0%, rgba(0,0,0,0.15) 35%, rgba(0,0,0,0.72) 100%);
691}
692.ts-card-body {
693    position: absolute;
694    left: 1.5rem;
695    right: 1.5rem;
696    bottom: 1.5rem;
697    z-index: 2;
698    display: flex;
699    flex-direction: column;
700    gap: 0.75rem;
701}
702.ts-card-title {
703    font-family: var(--font-heading);
704    font-size: 1.375rem;
705    line-height: 1.2;
706    font-weight: 500;
707    margin: 0;
708    color: #fff;
709    text-shadow: 0 1px 14px rgba(0,0,0,0.5);
710}
711.ts-ic { width: 1em; height: 1em; flex: none; }
712</style>
713
714
715<script>window.__tsImg_ai = "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/05/thesis-clean-20260522-133355-7a0cbdc2.jpg";</script>
715
716
717
718
719<script>window.__tsImg_econ = "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/03/image-clean-20260308-232057-efc0fa1f.png";</script>
719
720
721
722
723<script>window.__tsImg_ops = "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/03/image-clean-20260308-231232-be9b30cc-1.png";</script>
723
724
725
726<script>window.__tsImg_ticy = "https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/08/ticy-clean-20260819-090530-ffdc8193.jpg";</script>
726
727
728<script>
729window.THESES_DATA = [
730  {
731    pill:    'My AI Thesis',
732    title:   'Execution Is Scaling Faster Than Judgment',
733    excerpt: 'The agents are working. What the metrics don\'t capture is direction.',
734    url:     '/execution-is-scaling-faster-than-judgment/',
735    image:   window.__tsImg_ai || '',
736    cta:     'Read my full argument'
737  },
738  {
739    pill:    'My Economic Thesis',
740    title:   'The Satoshi Settlement Is Coming',
741    excerpt: 'The dollar has held the world\'s reserve currency crown longer than any empire before it. What comes next is mathematics.',
742    url:     '/satoshi-settlement/',
743    image:   window.__tsImg_econ || '',
744    cta:     'Read my position'
745  },
746  {
747    pill:    'My Business Thesis',
748    title:   'Builders Beat Spectators',
749    excerpt: 'Real advantage comes from execution, judgment, cadence, and decision systems. Not from watching the game.',
750    url:     '/operators-edge/',
751    image:   window.__tsImg_ops || '',
752    cta:     'Explore my series'
753  },
754  {
755    pill:    'My Book',
756    title:   'The Idea Chose You',
757    excerpt: 'It didn\'t arrive by accident. Twenty-two decisions, made in order, are what you owe the idea that picked you. A playbook built for the AI era.',
758    url:     '/the-idea-chose-you/',
759    image:   window.__tsImg_ticy || '',
760    cta:     'See the playbook'
761  }
762];
763</script>
763
764
765<script>
766(function () {
767  'use strict';
768
769  class ThesisSelector extends HTMLElement {
770    connectedCallback() {
771      if (document.readyState === 'loading') {
772        document.addEventListener('DOMContentLoaded', this._init.bind(this), { once: true });
773      } else {
774        this._init();
775      }
776    }
777    _init() {
778      if (this._inited) return;
779      this._inited = true;
780      this.items = window.THESES_DATA || [];
781      this.activeIndex = 0;
782      if (!this.items.length) return;
783      this.render();
784    }
785    render() {
786      const active = this.items[this.activeIndex];
787      this.innerHTML =
788        '<div class="ts-desktop ts-grid">' + renderHero(active) + renderSidebar(this.items, this.activeIndex) + '</div>' +
789        '<div class="ts-mobile">'  + this.items.map(renderMobileCard).join('') + '</div>';
790      const me = this;
791      this.querySelectorAll('.ts-item').forEach(function (btn) {
792        btn.addEventListener('click', function (e) {
793          e.preventDefault();
794          const idx = parseInt(this.getAttribute('data-i'), 10);
795          if (idx === me.activeIndex) return;
796          me.activeIndex = idx;
797          me.render();
798        });
799      });
800    }
801  }
802
803  function renderHero(item) {
804    return '<a class="ts-hero" href="' + escAttr(item.url) + '">' +
805      '<div class="ts-hero-img" style="background-image:url(\'' + escAttr(item.image) + '\')"></div>' +
806      '<span class="ts-pill">' + esc(item.pill) + '</span>' +
807      '<div class="ts-hero-body">' +
808        '<h2 class="ts-hero-title">' + esc(item.title) + '</h2>' +
809        '<p class="ts-hero-excerpt">' + esc(item.excerpt) + '</p>' +
810        '<span class="ts-read-btn">' + esc(item.cta) +
811          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="ts-ic"><path fill-rule="evenodd" d="M3 10a.75.75 0 01.75-.75h10.638L10.23 5.29a.75.75 0 111.04-1.08l5.5 5.25a.75.75 0 010 1.08l-5.5 5.25a.75.75 0 11-1.04-1.08l4.158-3.96H3.75A.75.75 0 013 10z" clip-rule="evenodd"/></svg>' +
812        '</span>' +
813      '</div>' +
814    '</a>';
815  }
816
817  function renderSidebar(items, activeIndex) {
818    let html = '<aside class="ts-sidebar"><div class="ts-sidebar-title">Where I stand</div>';
819    items.forEach(function (it, i) {
820      html += '<button type="button" class="ts-item' + (i === activeIndex ? ' ts-item-active' : '') + '" data-i="' + i + '">' +
821        '<div class="ts-item-pill">' + esc(it.pill) + '</div>' +
822        '<div class="ts-item-title">' + esc(it.title) + '</div>' +
823      '</button>';
824    });
825    return html + '</aside>';
826  }
827
828  function renderMobileCard(item) {
829    return '<a class="ts-card" href="' + escAttr(item.url) + '">' +
830      '<div class="ts-card-img" style="background-image:url(\'' + escAttr(item.image) + '\')"></div>' +
831      '<span class="ts-pill">' + esc(item.pill) + '</span>' +
832      '<div class="ts-card-body">' +
833        '<h2 class="ts-card-title">' + esc(item.title) + '</h2>' +
834        '<span class="ts-read-btn">' + esc(item.cta) +
835          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="ts-ic"><path fill-rule="evenodd" d="M3 10a.75.75 0 01.75-.75h10.638L10.23 5.29a.75.75 0 111.04-1.08l5.5 5.25a.75.75 0 010 1.08l-5.5 5.25a.75.75 0 11-1.04-1.08l4.158-3.96H3.75A.75.75 0 013 10z" clip-rule="evenodd"/></svg>' +
836        '</span>' +
837      '</div>' +
838    '</a>';
839  }
840
841  function esc(s)     { return String(s == null ? '' : s).replace(/[&<>"']/g, function(c) { return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]; }); }
842  function escAttr(s) { return String(s == null ? '' : s).replace(/"/g, '&quot;'); }
843
844  if (!customElements.get('thesis-selector')) customElements.define('thesis-selector', ThesisSelector);
845})();
846</script>
846
847
848<section class="theses-section">
849    <div class="container">
850        <span class="theses-label">Core Convictions</span>
851        <thesis-selector></thesis-selector>
852    </div>
853</section>
854
855    <div class="container">
856        <div class="space-y-20 md:space-y-32">
857            <div>
858                <div class="space-y-12 md:space-y-20">
859    <div class="grid gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4" data-feed>
860                    <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
861    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
862    <source 
863        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 320w,
864                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 640w,
865                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 1024w"
866        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
867        type="image/avif"
868    >
869    <img 
870        class="size-full object-cover"
871        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 320w,
872                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 640w,
873                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg 1024w"
874        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
875        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/05/faster-clean-20260521-184734-a1fc77b5-1.jpg"
876        alt="Your Agents Moving Faster Than Your Judgment Is A Problem"
877        fetchpriority="high"
878        loading="lazy"
879    >
880</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
881    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
882        <div class="flex items-center gap-x-2">
883                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/leadership/">Leadership</a>
884        </div>
885        <div class="space-y-1">
886                <h2 class="heading-2xl text-current">
887                    <a class="block after:absolute after:inset-0 after:z-5" href="/ai-agents-lag-leadership-judgment/">Your Agents Moving Faster Than Your Judgment Is A Problem</a>
888                </h2>
889            <time class="block text-sm text-current/80" datetime="2026-09-29T11:16:21-07:00">Sep 29, 2026</time>
890        </div>
891    </div>
892</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
893    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
894    <source 
895        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 320w,
896                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 640w,
897                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 1024w"
898        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
899        type="image/avif"
900    >
901    <img 
902        class="size-full object-cover"
903        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 320w,
904                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 640w,
905                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg 1024w"
906        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
907        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/09/content-market-fit-clean-20260914-132116-746530ed-1.jpg"
908        alt="Content Market Fit Is Cheaper Than Product Market Fit."
909        fetchpriority="high"
910        loading="lazy"
911    >
912</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
913    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
914        <div class="flex items-center gap-x-2">
915                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/entrepreneur/">Entrepreneur</a>
916        </div>
917        <div class="space-y-1">
918                <h2 class="heading-2xl text-current">
919                    <a class="block after:absolute after:inset-0 after:z-5" href="/content-market-fit-before-product-market-fit/">Content Market Fit Is Cheaper Than Product Market Fit.</a>
920                </h2>
921            <time class="block text-sm text-current/80" datetime="2026-09-15T08:34:50-07:00">Sep 15, 2026</time>
922        </div>
923    </div>
924</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
925    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
926    <source 
927        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 320w,
928                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 640w,
929                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 1024w"
930        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
931        type="image/avif"
932    >
933    <img 
934        class="size-full object-cover"
935        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 320w,
936                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 640w,
937                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg 1024w"
938        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
939        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/09/ambassador-threshold-clean-20260903-115153-98b66284-1.jpg"
940        alt="Dre &amp; Druckenmiller Just Crossed AI&#x27;
940s Ambassador Threshold"
941        fetchpriority="high"
942        loading="lazy"
943    >
944</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
945    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
946        <div class="flex items-center gap-x-2">
947                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/ai/">AI</a>
948        </div>
949        <div class="space-y-1">
950                <h2 class="heading-2xl text-current">
951                    <a class="block after:absolute after:inset-0 after:z-5" href="/ai-acceptance-dre-druckenmiller/">Dre &amp; Druckenmiller Just Crossed AI&#x27;s Ambassador Threshold</a>
952                </h2>
953            <time class="block text-sm text-current/80" datetime="2026-09-03T12:07:31-07:00">Sep 03, 2026</time>
954        </div>
955    </div>
956</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
957    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
958    <source 
959        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 320w,
960                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 640w,
961                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 1024w"
962        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
963        type="image/avif"
964    >
965    <img 
966        class="size-full object-cover"
967        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 320w,
968                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 640w,
969                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg 1024w"
970        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
971        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/05/execution-clean-20260521-200848-6e78763f-1.jpg"
972        alt="Agents Solved Execution. Nobody Told Your Company."
973        fetchpriority="high"
974        loading="lazy"
975    >
976</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
977    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
978        <div class="flex items-center gap-x-2">
979                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/leadership/">Leadership</a>
980        </div>
981        <div class="space-y-1">
982                <h2 class="heading-2xl text-current">
983                    <a class="block after:absolute after:inset-0 after:z-5" href="/ai-agents-solved-execution-leadership-bottleneck/">Agents Solved Execution. Nobody Told Your Company.</a>
984                </h2>
985            <time class="block text-sm text-current/80" datetime="2026-08-25T17:07:49-07:00">Aug 25, 2026</time>
986        </div>
987    </div>
988</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
989    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
990    <source 
991        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 320w,
992                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 640w,
993                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 1024w"
994        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
995        type="image/avif"
996    >
997    <img 
998        class="size-full object-cover"
999        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 320w,
1000                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 640w,
1001                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg 1024w"
1002        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1003        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/founder-paycheck-clean-20260821-121852-f25efa97-1.jpg"
1004        alt="The Capital Path Should Pay You Too"
1005        fetchpriority="high"
1006        loading="lazy"
1007    >
1008</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
1009    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
1010        <div class="flex items-center gap-x-2">
1011                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/entrepreneur/">Entrepreneur</a>
1012        </div>
1013        <div class="space-y-1">
1014                <h2 class="heading-2xl text-current">
1015                    <a class="block after:absolute after:inset-0 after:z-5" href="/should-founders-pay-themselves/">The Capital Path Should Pay You Too</a>
1016                </h2>
1017            <time class="block text-sm text-current/80" datetime="2026-08-21T17:27:21-07:00">Aug 21, 2026</time>
1018        </div>
1019    </div>
1020</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
1021    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
1022    <source 
1023        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 320w,
1024                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 640w,
1025                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 1024w"
1026        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1027        type="image/avif"
1028    >
1029    <img 
1030        class="size-full object-cover"
1031        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 320w,
1032                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 640w,
1033                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg 1024w"
1034        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1035        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/volume-scaling-clean-20260818-111517-3260a0c7-1.jpg"
1036        alt="Volume Scaling: AI&#x27;
1036s First Killer App With Three Dimensions"
1037        fetchpriority="high"
1038        loading="lazy"
1039    >
1040</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
1041    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
1042        <div class="flex items-center gap-x-2">
1043                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/ai/">AI</a>
1044        </div>
1045        <div class="space-y-1">
1046                <h2 class="heading-2xl text-current">
1047                    <a class="block after:absolute after:inset-0 after:z-5" href="/agentic-ai-killer-app-volume-scaling/">Volume Scaling: AI&#x27;s First Killer App With Three Dimensions</a>
1048                </h2>
1049            <time class="block text-sm text-current/80" datetime="2026-08-18T11:43:40-07:00">Aug 18, 2026</time>
1050        </div>
1051    </div>
1052</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
1053    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
1054    <source 
1055        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 320w,
1056                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 640w,
1057                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 1024w"
1058        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1059        type="image/avif"
1060    >
1061    <img 
1062        class="size-full object-cover"
1063        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 320w,
1064                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 640w,
1065                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg 1024w"
1066        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1067        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/eu-marking-clean-20260813-142925-83c8a200-1.jpg"
1068        alt="Marking Is Not the Story"
1069        fetchpriority="high"
1070        loading="lazy"
1071    >
1072</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
1073    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
1074        <div class="flex items-center gap-x-2">
1075                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/eu-ai-act/">EU AI Act</a>
1076        </div>
1077        <div class="space-y-1">
1078                <h2 class="heading-2xl text-current">
1079                    <a class="block after:absolute after:inset-0 after:z-5" href="/eu-ai-act-marking-ownership-infrastructure/">Marking Is Not the Story</a>
1080                </h2>
1081            <time class="block text-sm text-current/80" datetime="2026-08-13T14:54:25-07:00">Aug 13, 2026</time>
1082        </div>
1083    </div>
1084</article>            <article class="group relative flex flex-col w-full aspect-custom bg-secondary overflow-hidden text-white rounded-custom">
1085    <picture class="block size-full z-5 transition-opacity group-hover:opacity-85">
1086    <source 
1087        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 320w,
1088                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 640w,
1089                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 1024w"
1090        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1091        type="image/avif"
1092    >
1093    <img 
1094        class="size-full object-cover"
1095        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 320w,
1096                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 640w,
1097                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg 1024w"
1098        sizes="(min-width: 1024px) 320px, (min-width: 768px) 33vw, (min-width: 640px) 50vw, 100vw"
1099        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/08/playbook-clean-20260812-101949-27dd0ef6-5.jpg"
1100        alt="The Old Startup Playbook Is Dead. Sequence Is the Only Thing Left."
1101        fetchpriority="high"
1102        loading="lazy"
1103    >
1104</picture>    <div class="absolute inset-0 bg-linear-to-t from-black/50 from-0% to-transparent to-70% z-10"></div>
1105    <div class="absolute inset-0 flex flex-col justify-between gap-6 p-6 z-15">
1106        <div class="flex items-center gap-x-2">
1107                <a class="tag-sm var-blur z-10 hover:opacity-100" href="https://www.tomfrazier.com/tag/startup/">Startup</a>
1108        </div>
1109        <div class="space-y-1">
1110                <h2 class="heading-2xl text-current">
1111                    <a class="block after:absolute after:inset-0 after:z-5" href="/the-old-startup-playbook-is-dead/">The Old Startup Playbook Is Dead. Sequence Is the Only Thing Left.</a>
1112                </h2>
1113            <time class="block text-sm text-current/80" datetime="2026-08-12T10:24:01-07:00">Aug 12, 2026</time>
1114        </div>
1115    </div>
1116</article>    </div>
1117        <div class="flex justify-center" data-pagination>
1118        <button class="btn-md var-primary" data-next="/page/2/">
1119            <span class="transition-opacity will-change-[opacity] loading:opacity-0">Load More</span>
1120            <span class="absolute text-xl opacity-0 transition-opacity will-change-[opacity] loading:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="animate-spin"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a9 9 0 1 0 9 9" /></svg></span>
1121        </button>
1122    </div>
1123
1124</div>            </div>
1125                <div>
1126        <div class="group relative w-full bg-secondary overflow-hidden py-20 px-6 rounded-custom md:py-32 md:px-12">
1127                <div class="absolute inset-0">
1128                    <figure class="block size-full">
1129    <source 
1130        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/avif/2026/07/tom-frazier-pattern-nodefield.jpg 320w,
1131                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/avif/2026/07/tom-frazier-pattern-nodefield.jpg 640w,
1132                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/avif/2026/07/tom-frazier-pattern-nodefield.jpg 1024w,
1133                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1280/format/avif/2026/07/tom-frazier-pattern-nodefield.jpg 1280w,
1134                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1920/format/avif/2026/07/tom-frazier-pattern-nodefield.jpg 1920w"
1135        sizes="(min-width: 1024px) 1024px, 100vw"
1136        type="image/avif"
1137    >
1138    <img 
1139        class="size-full object-cover"
1140        srcset="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w320/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg 320w,
1141                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w640/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg 640w,
1142                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg 1024w,
1143                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1280/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg 1280w,
1144                https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1920/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg 1920w"
1145        sizes="(min-width: 1024px) 1024px, 100vw"
1146        src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/size/w1024/format/webp/2026/07/tom-frazier-pattern-nodefield.jpg"
1147        alt="Join The Long Arc"
1148        fetchpriority="high"
1149        loading="eager"
1150    >
1151</figure>                    <div class="absolute inset-0 bg-overlay/34 z-1"></div>
1152                </div>
1153            <div class="relative flex flex-col items-center gap-y-8 w-full max-w-xl mx-auto z-20 text-white">
1154                <div class="space-y-4 text-center">
1155                    <h2 class="heading-3xl md:heading-4xl text-white!">
1156                            Join The Long Arc
1157                    </h2>
1158                    <p class="text-lg">
1159                        Public long-term thinking. When I publish something worth keeping, you’ll get it here.     Enter your email, then click the confirmation link.
1160                    </p>
1161                </div>
1162                <form class="flex gap-1 w-full max-w-md bg-primary p-1 mx-auto rounded-full inset-ring inset-ring-transparent transition-shadow error:inset-ring-red/50 success:pointer-events-none" data-members-form>
1163    <input class="flex-1 w-full bg-transparent px-4 text-lg text-text placeholder:opacity-60 focus:outline-none" name="email" type="email" placeholder="Enter your email" autocomplete="email" required data-members-email>
1164    <button class="relative btn-base var-primary *:transition-opacity" type="submit" aria-label="Subscribe">
1165        <span class="loading:opacity-0 success:opacity-0">Subscribe</span>
1166        <span class="absolute opacity-0 loading:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="animate-spin"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a9 9 0 1 0 9 9" /></svg></span>
1167        <span class="absolute opacity-0 success:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l5 5l10 -10" /></svg></span>
1168    </button>
1169</form>            </div>
1170        </div>
1171    </div>
1172        </div>
1173    </div>
1174
1175</main>
1176
1177        <footer class="footer">
1178    <div class="container">
1179        <div class="text-center space-y-12 md:space-y-20">
1180            <div class="flex flex-col items-center gap-y-8">
1181                <a class="group/logo flex items-center h-logo" href="https://www.tomfrazier.com">
1182                <img 
1183    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 dark:hidden" 
1184    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-light-header.png" 
1185    width="180" 
1186    height="60" 
1187    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
1188    fetchpriority="high" 
1189    loading="eager"
1190>                    <img 
1191    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 hidden dark:block" 
1192    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-dark-header.png" 
1193    width="180" 
1194    height="60" 
1195    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
1196    fetchpriority="high" 
1197    loading="lazy"
1198></a>                        <div class="flex justify-center flex-wrap items-center gap-4 not-has-child:hidden">
1199</div>
1200                            <nav class="flex justify-center flex-wrap gap-y-2 gap-x-6 not-has-child:hidden">
1201                    <a class="font-medium hover:underline" href="https://www.tomfrazier.com/the-idea-chose-you/">The Idea Chose You</a>
1202                                <a class="font-medium hover:underline" href="https://tomfrazier.com/operators-edge/">The Operator&#x27;s Edge</a>
1203                                <a class="font-medium hover:underline" href="https://www.tomfrazier.com/llm-usage/">LLM Usage</a>
1204                                <a class="font-medium hover:underline" href="https://www.tomfrazier.com/contact/">Contact</a>
1205                                <a class="font-medium hover:underline" href="https://www.tomfrazier.com/media-kit/">Media Kit</a>
1206                                <a class="font-medium hover:underline" href="https://tomfrazier.com/about/">About Tom</a>
1207                </nav>
1208
1209            </div>
1210            <div class="flex justify-center items-center pb-8">
1211                <p class="text-center a:text-decoration">
1212                        © 2026 Tom Frazier
1213                </p>
1214            </div>
1215        </div>
1216    </div>
1217</footer>    </div>
1218    <div class="group fixed inset-0 z-50 bg-linear-to-br from-overlay/20 to-overlay/10 backdrop-blur-2xs invisible opacity-0 transition-[visibility,opacity] duration-300 not-lg:aria-expanded:visible not-lg:aria-expanded:opacity-100" aria-expanded="false" data-mobile-menu>
1219    <div class="flex flex-col size-full bg-primary overflow-hidden" data-sidebar>
1220        <div class="grid grid-cols-[1fr_auto_1fr] items-center gap-x-4 py-4 px-4 sm:py-8">
1221            <div class="justify-self-start">
1222                <button class="icon-sm var-secondary" aria-label="Close" data-menu-toggle>
1223        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg></button>            </div>
1224            <div class="justify-self-center">
1225                <a class="group/logo flex items-center h-logo" href="https://www.tomfrazier.com">
1226                <img 
1227    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 dark:hidden" 
1228    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-light-header.png" 
1229    width="180" 
1230    height="60" 
1231    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
1232    fetchpriority="high" 
1233    loading="lazy"
1234>                    <img 
1235    class="block w-auto h-full transition-opacity group-hover/logo:opacity-85 hidden dark:block" 
1236    src="https://storage.ghost.io/c/55/dd/55ddb45d-694f-462b-9dc8-c6c46460a521/content/images/2026/06/logo-tomfrazier-dark-header.png" 
1237    width="180" 
1238    height="60" 
1239    alt="Tom Frazier | The Long Arc — AI, Bitcoin &amp; Startup" 
1240    fetchpriority="high" 
1241    loading="lazy"
1242></a>            </div>
1243            <div class="justify-self-end flex items-center gap-x-4 lg:hidden">
1244                    <button class="relative flex justify-center items-center size-8 text-xl transition-opacity hover:opacity-85 " aria-label="Dark Mode" data-theme-toggle>
1245        <span class="transition-opacity will-change-[opacity] duration-300 dark:opacity-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /><path d="M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" /></svg></span>
1246        <span class="absolute opacity-0 transition-opacity duration-300 will-change-[opacity] dark:opacity-100"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /><path d="M17 4a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2" /><path d="M19 11h2m-1 -1v2" /></svg></span>
1247    </button>
1248                <button class="icon-sm var-secondary" aria-label="Search" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /><path d="M21 21l-6 -6" /></svg></button>            </div>
1249        </div>
1250        <div class="flex-1 flex flex-col gap-y-4 p-4 pt-0 overflow-hidden sm:gap-y-8">
1251            <div class="flex-1 overflow-hidden group-aria-expanded:animate-fade-in-up">
1252                <div class="relative flex flex-col justify-center h-full overflow-hidden">
1253                    <div class="absolute top-0 inset-x-0 h-6 bg-linear-to-b from-primary to-transparent pointer-events-none"></div>
1254                    <nav class="max-h-full overflow-hidden overflow-y-auto py-4" aria-label="Menu">
1255                                    <ul class="heading-xl text-current text-center space-y-3">
1256                <li><a class="text-decoration" href="https://www.tomfrazier.com/the-idea-chose-you/">The Idea Chose You</a></li>
1257                            <li><a class="text-decoration" href="https://tomfrazier.com/about/">About Tom</a></li>
1258                </ul>
1259
1260                    </nav>
1261                    <div class="absolute bottom-0 inset-x-0 h-6 bg-linear-to-t from-primary to-transparent pointer-events-none"></div>
1262                </div>
1263            </div>
1264                        <a class="btn-md var-primary w-full" href="#/portal/signup" data-portal="signup">Subscribe</a>
1265        </div>
1266    </div>
1267</div>        
1267<script src="https://www.tomfrazier.com/assets/built/global.js?v=Pxny4Whd8be1LHeY"></script>
1267
1268    <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1268-1269
1268
1269<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1269GTM-5T6JRMGN
vendor: 83 bytes, lines 1269-1270
1269"
1270height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1271<!-- End Google Tag Manager (noscript) -->
1272
1273<div class="cc-license-global license-ccby-only">
1274  Licensed under 
1275  <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="license noopener noreferrer">
1276    CC BY 4.0
1277  </a>.
1278</div>
1279
1280<style>
1281.license-restricted .license-ccby-only {
1282  display: none;
1283}
1284  
1285.gh-portal-powered {
1286  display:none;
1287}
1288</style>
1289
1290
1291<!-- Delphi popup modal -->
1292<!--
1293<div id="delphi-modal" style="display:none;position:fixed; inset:0;background:rgba(0,0,0,0.6);z-index:9999; align-items:center; justify-content:center;">
1294  <div style="background:#fff; max-width:900px; width:95%; height:80vh;border-radius:8px; overflow:hidden; position:relative;">
1295    <button id="delphi-close" style="position:absolute; top:8px; right:12px;border:none; background:transparent; font-size:24px; cursor:pointer;">×</button>
1296    <iframe src="https://www.delphi.ai/tomfrazier" style="border:0; width:100%; height:100%;" loading="lazy"></iframe>
1297  </div>
1298</div>
1299-->
1300<!--
1301<script>
1302  (function () {
1303    const openPopup = function (e) {
1304      if (e) e.preventDefault();
1305      const modal = document.getElementById('delphi-modal');
1306      if (modal) modal.style.display = 'flex';
1307    };
1308
1309    const closePopup = function () {
1310      const modal = document.getElementById('delphi-modal');
1311      if (modal) modal.style.display = 'none';
1312    };
1313
1314    document.addEventListener('click', function (e) {
1315      const target = e.target.closest('[data-delphi-popup], .nav-ask-tom a');
1316      if (target) openPopup(e);
1317    });
1318
1319    document.addEventListener('DOMContentLoaded', function () {
1320      const closeBtn = document.getElementById('delphi-close');
1321      const modal = document.getElementById('delphi-modal');
1322      if (closeBtn) closeBtn.addEventListener('click', closePopup);
1323      if (modal) {
1324        modal.addEventListener('click', function (e) {
1325          if (e.target === modal) closePopup();
1326        });
1327      }
1328    });
1329  })();
1330</script>
1330
1331-->
1332
1333<!-- custom module for series content -->
1334<script>
1335  window.PHASE_ARTICLES_CONFIG = {
1336    apiUrl: 'https://tom-frazier.ghost.io',
1337    apiKey: 'ef11a8085150e691a7320ac48d'
1338  };
1339</script>
1339
1340
1341<style>
1342phase-articles { display: block; margin: 0 0 6rem 0; font-family: inherit; }
1343phase-articles * { box-sizing: border-box; }
1344phase-articles placeholders, phase-articles placeholder { display: none; }
1345
1346.pa-empty-subscribe { background: none; border: none; padding: 0; font: inherit; font-size: inherit; color: inherit; letter-spacing: inherit; text-decoration: underline; cursor: pointer; }
1347  
1348/* Wide layout — promote out of Fancy's narrow `regular` canvas column. */
1349.canvas > phase-articles { grid-column: wide; }
1350.canvas > phase-articles[width="regular"] { grid-column: regular; }
1351.canvas > phase-articles[width="full"] { grid-column: full; }
1352
1353.pa-shell { width: 100%; }
1354.pa-status-row { display: flex; justify-content: flex-end; margin-bottom: 0.75rem; padding: 0 2px; }
1355.pa-status { font-size: 12px; color: var(--color-meta, rgba(0,0,0,0.55)); letter-spacing: 0.02em; }
1356
1357phase-articles .pa-desktop { display: none; }
1358phase-articles .pa-mobile { display: grid; grid-auto-flow: column; grid-auto-columns: 85%; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; padding: 4px 4px 16px; scrollbar-width: none; }
1359phase-articles .pa-mobile::-webkit-scrollbar { display: none; }
1360@media (min-width: 768px) {
1361  phase-articles .pa-desktop { display: grid; }
1362  phase-articles .pa-mobile { display: none; }
1363}
1364
1365.pa-grid { grid-template-columns: 1fr 340px; align-items: stretch; max-height: 600px; border-radius: var(--radius-custom, 12px); overflow: hidden; border: 1px solid var(--color-border, rgba(0,0,0,0.08)); background: var(--color-primary, #fff); }
1366
1367.pa-hero { position: relative; min-height: 420px; overflow: hidden; background: var(--color-overlay, #1a1a1a); text-decoration: none; color: #fff; display: block; }
1368.pa-hero-img { position: absolute; inset: 0; background-size: cover; background-position: center; background-color: var(--color-overlay, #1a1a1a); transition: transform 0.6s ease; }
1369.pa-hero:hover .pa-hero-img { transform: scale(1.04); }
1370.pa-hero-soon { cursor: default; }
1371.pa-hero-soon:hover .pa-hero-img { transform: none; }
1372.pa-pill { position: absolute; top: 22px; left: 24px; z-index: 2; display: inline-flex; align-items: center; gap: 5px; font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: #fff; font-weight: 500; padding: 6px 14px; background: rgba(255,255,255,0.18); backdrop-filter: blur(10px) saturate(180%); -webkit-backdrop-filter: blur(10px) saturate(180%); border-radius: 999px; border: 0.5px solid rgba(255,255,255,0.28); }
1373.pa-hero-body { position: absolute; left: 30px; right: 30px; bottom: 28px; z-index: 2; }
1374.pa-hero-title { font-family: var(--font-heading, Georgia, 'Times New Roman', serif); font-size: 32px; line-height: 1.18; font-weight: 500; margin: 0 0 20px; max-width: 86%; color: #fff; text-shadow: 0 1px 14px rgba(0,0,0,0.5); }
1375.pa-read-btn { display: inline-flex; align-items: center; gap: 6px; background: #fff; color: #1a1a1a; border: none; padding: 11px 20px; border-radius: 999px; font-size: 12px; font-weight: 500; cursor: pointer; transition: background 0.15s ease; }
1376.pa-hero:hover .pa-read-btn, .pa-card:hover .pa-read-btn { background: #f3f3f3; }
1377.pa-soon-tag { display: inline-flex; align-items: center; gap: 6px; border: 1px solid rgba(255,255,255,0.45); color: #fff; padding: 10px 18px; border-radius: 999px; font-size: 12px; font-weight: 500; }
1378
1379.pa-sidebar { background: var(--color-secondary, #fafaf8); padding: 20px 20px 20px 22px; overflow-y: auto; border-left: 1px solid var(--color-border, rgba(0,0,0,0.06)); }
1380.pa-sidebar-title { font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-meta, rgba(0,0,0,0.55)); font-weight: 500; padding-bottom: 12px; border-bottom: 1px solid var(--color-border, rgba(0,0,0,0.08)); margin-bottom: 10px; }
1381.pa-item { display: block; width: 100%; text-align: left; background: transparent; border: none; padding: 13px 8px; border-bottom: 1px solid var(--color-border, rgba(0,0,0,0.05)); cursor: pointer; position: relative; transition: background 0.15s ease; font: inherit; color: inherit; }
1382.pa-item:last-child { border-bottom: none; }
1383.pa-item:hover { background: var(--color-tertiary, rgba(0,0,0,0.03)); }
1384.pa-item-pill { display: flex; align-items: center; gap: 5px; font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-meta, rgba(0,0,0,0.55)); font-weight: 500; margin-bottom: 4px; }
1385.pa-item-title { font-size: 14px; line-height: 1.4; color: var(--color-heading, #1a1a1a); font-weight: 500; }
1386.pa-item-soon .pa-item-title { color: var(--color-meta, rgba(0,0,0,0.55)); }
1387.pa-item-active { background: var(--color-primary, #fff); border-radius: 8px; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
1388.pa-item-active::before { content: ''; position: absolute; left: -6px; top: 50%; transform: translateY(-50%); width: 0; height: 0; border-top: 7px solid transparent; border-bottom: 7px solid transparent; border-right: 7px solid var(--color-primary, #fff); }
1389.pa-item-active:hover::before { border-right-color: var(--color-tertiary, rgba(0,0,0,0.03)); }
1390
1391.pa-card { scroll-snap-align: start; position: relative; aspect-ratio: 4 / 5; overflow: hidden; background: var(--color-overlay, #1a1a1a); text-decoration: none; color: #fff; border-radius: var(--radius-custom, 12px); display: block; }
1392.pa-card-img { position: absolute; inset: 0; background-size: cover; background-position: center; background-color: var(--color-overlay, #1a1a1a); }
1393.pa-card-body { position: absolute; left: 22px; right: 22px; bottom: 22px; z-index: 2; }
1394.pa-card-title { font-family: var(--font-heading, Georgia, 'Times New Roman', serif); font-size: 22px; line-height: 1.2; font-weight: 500; margin: 0 0 16px; color: #fff; text-shadow: 0 1px 14px rgba(0,0,0,0.5); }
1395
1396.pa-ic { width: 1em; height: 1em; flex: none; }
1397
1398.pa-empty { border: 1px solid var(--color-border, rgba(0,0,0,0.08)); border-radius: var(--radius-custom, 12px); padding: 32px 24px; text-align: center; background: var(--color-secondary, #fafaf8); color: var(--color-meta, rgba(0,0,0,0.6)); font-size: 14px; letter-spacing: 0.01em; display: flex; align-items: center; justify-content: center; gap: 10px; }
1399.pa-loading { padding: 40px 24px; text-align: center; color: var(--color-meta, rgba(0,0,0,0.35)); font-size: 13px; }
1400
1401.pa-new-badge { display: inline-flex; align-items: center; font-size: 8px; font-weight: 800; letter-spacing: 0.13em; text-transform: uppercase; padding: 3px 7px; border-radius: 4px; vertical-align: middle; }
1402.pa-pill .pa-new-badge { background: #fff; color: #1a1a1a; margin-left: 8px; }
1403.pa-item-pill .pa-new-badge { background: var(--color-new, #e8420b); color: #fff; margin-left: 6px; }
1404</style>
1405
1406<script>
1407(function () {
1408  'use strict';
1409
1410  const _paReg = {};
1411  const _paTmr = {};
1412
1413  class PhaseArticles extends HTMLElement {
1414    connectedCallback() {
1415      if (document.readyState === 'loading') {
1416        document.addEventListener('DOMContentLoaded', this._init.bind(this), { once: true });
1417      } else { this._init(); }
1418    }
1419    _init() {
1420      if (this._inited) return;
1421      this._inited = true;
1422      this.placeholders = this._parsePlaceholders();
1423      this.series = this.getAttribute('series') || '';
1424      this.phase = this.getAttribute('phase') || '';
1425      this.status = this.getAttribute('status') || '';
1426      this.items = [];
1427      this.activeIndex = 0;
1428      const cfg = window.PHASE_ARTICLES_CONFIG;
1429      if (!cfg || !cfg.apiUrl || !cfg.apiKey) { console.error('[phase-articles] Missing PHASE_ARTICLES_CONFIG'); return; }
1430      if (!this.series || !this.phase) { console.error('[phase-articles] Missing series or phase', this); return; }
1431      this.renderLoading();
1432      this._fetch(cfg);
1433    }
1434    _parsePlaceholders() {
1435      const nodes = this.querySelectorAll('placeholder');
1436      const out = [];
1437      for (let i = 0; i < nodes.length; i++) {
1438        const el = nodes[i];
1439        const step = parseInt(el.getAttribute('step') || el.getAttribute('id') || '0', 10);
1440        if (!step) continue;
1441        out.push({ step: step, slug: (el.getAttribute('slug') || '').trim().replace(/^\/+|\/+$/g, ''), title: el.getAttribute('title') || '', image: (el.getAttribute('image') || '').trim() });
1442      }
1443      out.sort((a, b) => a.step - b.step);
1444      return out;
1445    }
1446    async _fetch(cfg) {
1447      let posts = [];
1448      try {
1449        const filter = encodeURIComponent('tag:' + this.series + '+tag:' + this.phase);
1450        const url = cfg.apiUrl.replace(/\/$/, '') + '/ghost/api/content/posts/?key=' + encodeURIComponent(cfg.apiKey) + '&filter=' + filter + '&include=tags,authors&limit=all';
1451        const res = await fetch(url);
1452        if (!res.ok) throw new Error('API ' + res.status);
1453        const data = await res.json();
1454        posts = (data.posts || []).map(p => {
1455          const orderTag = (p.tags || []).find(t => /^#?\d+$/.test(t.name || ''));
1456          p._order = orderTag ? parseInt(orderTag.name.replace('#',''), 10) : 999;
1457          return p;
1458        }).sort((a, b) => a._order - b._order);
1459      } catch (e) {
1460        console.error('[phase-articles] Fetch failed:', e);
1461      }
1462      this.items = this._buildItems(posts);
1463      if (!this.items.length) return this.renderEmpty();
1464      const firstLive = this.items.findIndex(it => it.type === 'live');
1465      this.activeIndex = firstLive < 0 ? 0 : firstLive;
1466      this.render();
1467
1468      // Cross-phase NEW badge coordination
1469      const newestLive = this.items
1470        .filter(it => it.type === 'live')
1471        .reduce((best, it) => {
1472          const d = new Date(it.post.published_at || 0);
1473          return (!best || d > best.d) ? { d: d, id: it.post.id } : best;
1474        }, null);
1475      const _s = this.series;
1476      if (!_paReg[_s]) _paReg[_s] = [];
1477      _paReg[_s].push({ instance: this, newestLive: newestLive });
1478      clearTimeout(_paTmr[_s]);
1479      _paTmr[_s] = setTimeout(() => _resolveNew(_s), 50);
1480    }
1481    _buildItems(posts) {
1482      if (!this.placeholders.length) {
1483        return posts.map(p => ({ type: 'live', step: p._order, post: p }));
1484      }
1485      const bySlug = {};
1486      posts.forEach(p => { bySlug[p.slug] = p; });
1487      const used = {};
1488      const items = this.placeholders.map(ph => {
1489        const post = ph.slug ? bySlug[ph.slug] : null;
1490        if (post) { used[post.slug] = true; return { type: 'live', step: ph.step, post: post }; }
1491        return { type: 'soon', step: ph.step, title: ph.title, image: ph.image };
1492      });
1493      posts.forEach(p => { if (!used[p.slug]) items.push({ type: 'live', step: p._order, post: p }); });
1494      return items;
1495    }
1496    renderLoading() { this.innerHTML = '<div class="pa-shell"><div class="pa-loading">Loading…</div></div>'; }
1497    renderEmpty() {
1498      if (!this.status) { this.innerHTML = ''; return; }
1499      this.innerHTML = '<div class="pa-shell"><div class="pa-empty">' + icon('clock') + '<span>' + esc(this.status) + ' &middot; <button class="pa-empty-subscribe" type="button">Get notified</button></span></div></div>';
1500      const btn = this.querySelector('.pa-empty-subscribe');
1501      if (btn) {
1502        btn.addEventListener('click', function () {
1503          const targets = document.querySelectorAll('.kg-card.kg-signup-card.kg-width-regular');
1504          const target = targets[targets.length - 1];
1505          if (target) target.scrollIntoView({ behavior: 'smooth', block: 'center' });
1506        });
1507      }
1508    }
1509    render() {
1510      if (!this.items.length) return this.renderEmpty();
1511      const status = this.status || (this.items.length + ' article' + (this.items.length !== 1 ? 's' : ''));
1512      const active = this.items[this.activeIndex] || this.items[0];
1513      this.innerHTML = '<div class="pa-shell">' +
1514        (status ? '<div class="pa-status-row"><span class="pa-status">' + esc(status) + '</span></div>' : '') +
1515        '<div class="pa-desktop pa-grid">' + renderHero(active) + renderSidebar(this.items, this.activeIndex) + '</div>' +
1516        '<div class="pa-mobile">' + this.items.map(renderMobileCard).join('') + '</div>' +
1517        '</div>';
1518      const me = this;
1519      const btns = this.querySelectorAll('.pa-item');
1520      for (let i = 0; i < btns.length; i++) {
1521        btns[i].addEventListener('click', function (e) {
1522          e.preventDefault();
1523          const idx = parseInt(this.getAttribute('data-i'), 10);
1524          if (idx === me.activeIndex) return;
1525          me.activeIndex = idx;
1526          me.render();
1527        });
1528      }
1529    }
1530  }
1531
1532  function _resolveNew(series) {
1533    const entries = _paReg[series] || [];
1534    let winDate = null, winId = null;
1535    entries.forEach(function(e) {
1536      if (e.newestLive && (!winDate || e.newestLive.d > winDate)) {
1537        winDate = e.newestLive.d;
1538        winId = e.newestLive.id;
1539      }
1540    });
1541    entries.forEach(function(e) {
1542      e.instance.items.forEach(function(it) {
1543        it._isNew = it.type === 'live' && it.post.id === winId;
1544      });
1545      e.instance.render();
1546    });
1547  }
1548
1549  function newBadge(item) {
1550    return item._isNew ? '<span class="pa-new-badge">New</span>' : '';
1551  }
1552
1553  function pillText(item) {
1554    const s = item.step && item.step < 999 ? item.step : '?';
1555    return 'Step ' + s;
1556  }
1557  function renderHero(item) {
1558    if (item.type === 'soon') {
1559      return '<div class="pa-hero pa-hero-soon"><div class="pa-hero-img"' + (item.image ? ' style="background-image:url(\'' + escAttr(item.image) + '\')"' : '') + '></div><span class="pa-pill">' + esc(pillText(item)) + newBadge(item) + '</span><div class="pa-hero-body"><h3 class="pa-hero-title">' + esc(item.title) + '</h3><span class="pa-soon-tag">' + icon('clock') + 'Coming soon</span></div></div>';
1560    }
1561    const p = item.post, img = p.feature_image || '';
1562    return '<a class="pa-hero" href="' + escAttr(p.url) + '"><div class="pa-hero-img"' + (img ? ' style="background-image:url(\'' + escAttr(img) + '\')"' : '') + '></div><span class="pa-pill">' + esc(pillText(item)) + newBadge(item) + '</span><div class="pa-hero-body"><h3 class="pa-hero-title">' + esc(p.title) + '</h3><span class="pa-read-btn">Read more ' + icon('arrow') + '</span></div></a>';
1563  }
1564  function renderSidebar(items, activeIndex) {
1565    let html = '<aside class="pa-sidebar"><div class="pa-sidebar-title">In this phase</div>';
1566    for (let i = 0; i < items.length; i++) {
1567      const item = items[i], soon = item.type === 'soon';
1568      const title = soon ? item.title : item.post.title;
1569      html += '<button type="button" class="pa-item' + (soon ? ' pa-item-soon' : '') + (i === activeIndex ? ' pa-item-active' : '') + '" data-i="' + i + '"><div class="pa-item-pill">' + (soon ? icon('clock') : '') + esc(pillText(item)) + newBadge(item) + '</div><div class="pa-item-title">' + esc(title) + '</div></button>';
1570    }
1571    return html + '</aside>';
1572  }
1573  function renderMobileCard(item) {
1574    if (item.type === 'soon') {
1575      return '<div class="pa-card pa-card-soon"><div class="pa-card-img"' + (item.image ? ' style="background-image:url(\'' + escAttr(item.image) + '\')"' : '') + '></div><span class="pa-pill">' + esc(pillText(item)) + newBadge(item) + '</span><div class="pa-card-body"><h3 class="pa-card-title">' + esc(item.title) + '</h3><span class="pa-soon-tag">' + icon('clock') + 'Coming soon</span></div></div>';
1576    }
1577    const p = item.post, img = p.feature_image || '';
1578    return '<a class="pa-card" href="' + escAttr(p.url) + '"><div class="pa-card-img"' + (img ? ' style="background-image:url(\'' + escAttr(img) + '\')"' : '') + '></div><span class="pa-pill">' + esc(pillText(item)) + newBadge(item) + '</span><div class="pa-card-body"><h3 class="pa-card-title">' + esc(p.title) + '</h3><span class="pa-read-btn">Read more ' + icon('arrow') + '</span></div></a>';
1579  }
1580  function icon(name) {
1581    if (name === 'arrow') return '<svg class="pa-ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>';
1582    return '<svg class="pa-ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 14"/></svg>';
1583  }
1584  function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c])); }
1585  function escAttr(s) { return String(s == null ? '' : s).replace(/"/g, '&quot;'); }
1586
1587  if (!customElements.get('phase-articles')) customElements.define('phase-articles', PhaseArticles);
1588})();
1589</script>
1589
1590
1591<!-- custom module for subscribe popup -->
1592<script>
1593(() => {
1594  const STORAGE_KEY = 'ghost_portal_last_shown_at';
1595  const DELAY_MS = 15000;
1596  const SCROLL_THRESHOLD = 0.5;
1597  const EXIT_TOP_THRESHOLD = 10;
1598  const COOLDOWN_MS = 3 * 24 * 60 * 60 * 1000;
1599
1600  // Exact paths to exclude
1601  const EXCLUDED_PATHS = [
1602    '/',
1603    '/about',
1604    '/contact',
1605    '/advance-reader',
1606    '/private-reader-page'
1607  ];
1608
1609  // Optional: exclude whole path groups
1610  const EXCLUDED_PREFIXES = [
1611    '/ghost/',
1612    '/members/'
1613  ];
1614
1615  let popupTriggered = false;
1616  let timerId = null;
1617
1618  function normalizePath(path) {
1619    if (!path) return '/';
1620    return path.length > 1 ? path.replace(/\/+$/, '') : path;
1621  }
1622
1623  function isExcludedPage() {
1624    const path = normalizePath(window.location.pathname);
1625
1626    if (EXCLUDED_PATHS.includes(path)) {
1627      return true;
1628    }
1629
1630    return EXCLUDED_PREFIXES.some(prefix => path.startsWith(prefix));
1631  }
1632
1633  function isDesktopPointer() {
1634    return window.matchMedia('(pointer: fine)').matches;
1635  }
1636
1637  function getLastShownAt() {
1638    try {
1639      const value = localStorage.getItem(STORAGE_KEY);
1640      return value ? parseInt(value, 10) : 0;
1641    } catch (e) {
1642      return 0;
1643    }
1644  }
1645
1646  function isCooldownActive() {
1647    const lastShownAt = getLastShownAt();
1648    return lastShownAt && (Date.now() - lastShownAt < COOLDOWN_MS);
1649  }
1650
1651  function markShownNow() {
1652    popupTriggered = true;
1653    try {
1654      localStorage.setItem(STORAGE_KEY, String(Date.now()));
1655    } catch (e) {}
1656  }
1657
1658  async function isMember() {
1659    try {
1660      const response = await fetch(`${location.origin}/members/api/member/`, {
1661        credentials: 'same-origin'
1662      });
1663      return response.status === 200;
1664    } catch (e) {
1665      return false;
1666    }
1667  }
1668
1669  function cleanup() {
1670    if (timerId) {
1671      clearTimeout(timerId);
1672      timerId = null;
1673    }
1674    window.removeEventListener('scroll', onScroll, passiveScrollOptions);
1675    document.removeEventListener('mouseout', onMouseOut);
1676  }
1677
1678  async function openPortal() {
1679    if (popupTriggered || isCooldownActive()) return;
1680
1681    const member = await isMember();
1682    if (member) return;
1683
1684    markShownNow();
1685    cleanup();
1686
1687    const a = document.createElement('a');
1688    a.href = '#/portal';
1689    a.style.display = 'none';
1690    document.body.appendChild(a);
1691    a.click();
1692    a.remove();
1693  }
1694
1695  function getScrollProgress() {
1696    const scrollTop = window.scrollY || window.pageYOffset || 0;
1697    const docHeight = Math.max(
1698      document.body.scrollHeight,
1699      document.documentElement.scrollHeight,
1700      document.body.offsetHeight,
1701      document.documentElement.offsetHeight,
1702      document.body.clientHeight,
1703      document.documentElement.clientHeight
1704    );
1705    const winHeight = window.innerHeight;
1706    const scrollable = docHeight - winHeight;
1707
1708    if (scrollable <= 0) return 0;
1709    return scrollTop / scrollable;
1710  }
1711
1712  function onScroll() {
1713    if (popupTriggered || isCooldownActive()) return;
1714    if (getScrollProgress() >= SCROLL_THRESHOLD) {
1715      openPortal();
1716    }
1717  }
1718
1719  function onMouseOut(event) {
1720    if (popupTriggered || isCooldownActive()) return;
1721    if (!isDesktopPointer()) return;
1722
1723    const leavingTop =
1724      event.clientY <= EXIT_TOP_THRESHOLD &&
1725      !event.relatedTarget &&
1726      !event.toElement;
1727
1728    if (leavingTop) {
1729      openPortal();
1730    }
1731  }
1732
1733  const passiveScrollOptions = { passive: true };
1734
1735  function init() {
1736    if (isExcludedPage()) return;
1737    if (isCooldownActive()) return;
1738
1739    timerId = setTimeout(() => {
1740      openPortal();
1741    }, DELAY_MS);
1742
1743    window.addEventListener('scroll', onScroll, passiveScrollOptions);
1744
1745    if (isDesktopPointer()) {
1746      document.addEventListener('mouseout', onMouseOut);
1747    }
1748  }
1749
1750  if (document.readyState === 'loading') {
1751    document.addEventListener('DOMContentLoaded', init);
1752  } else {
1753    init();
1754  }
1755})();
1756</script>
1756
1757</body>
1758</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.