<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="https://gmpg.org/xfn/11" />
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />

	<!-- This site is optimized with the Yoast SEO plugin v28.2 - https://yoast.com/product/yoast-seo-wordpress/ -->
	<title>Chris Bailey  ·  Author, Speaker, Productivity Expert</title>
	<meta name="description" content="Chris Bailey is the author of Intentional, Hyperfocus, and The Productivity Project. Explore his books, podcast, articles, and speaking on productivity, focus, and getting things done." />
	<link rel="canonical" href="https://chrisbailey.com/" />
	<meta property="og:locale" content="en_US" />
	<meta property="og:type" content="website" />
	<meta property="og:title" content="Chris Bailey — Author, Speaker, Productivity Expert" />
	<meta property="og:description" content="Chris Bailey is the author of Intentional, Hyperfocus, and The Productivity Project. Explore his books, podcast, articles, and speaking on productivity, focus, and getting things done." />
	<meta property="og:url" content="https://chrisbailey.com/" />
	<meta property="og:site_name" content="Chris Bailey" />
	<meta property="article:modified_time" content="2026-06-10T09:50:02+00:00" />
	<meta property="og:image" content="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/chris-stage-1.jpeg" />
	<meta name="twitter:card" content="summary_large_image" />
	<meta name="twitter:image" content="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/chris-stage-1.jpeg" />
	<meta name="twitter:site" content="@chris_bailey" />
	<!-- / Yoast SEO plugin. -->


<link rel="alternate" type="application/rss+xml" title="Chris Bailey &raquo; Feed" href="https://chrisbailey.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Chris Bailey &raquo; Comments Feed" href="https://chrisbailey.com/comments/feed/" />
			<script>document.documentElement.classList.remove( 'no-js' );</script>
			<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://chrisbailey.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fchrisbailey.com%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://chrisbailey.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fchrisbailey.com%2F&#038;format=xml" />
<!-- Google tag (gtag.js)—chrisbailey-child theme -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LE1X1D1CL5"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-LE1X1D1CL5', { 'anonymize_ip': true });
</script>
    <style id="cb-box-styles">
.cb-box { display: grid; grid-template-columns: auto 1fr; gap: 14px; align-items: start; padding: 18px 22px; margin: 28px 0; border-radius: 6px; border: 1px solid var(--rule-2, #dfdbcf); background: var(--bg-card, #fff); font-family: var(--sans, "Lato", system-ui, sans-serif); font-size: 16px; line-height: 1.55; color: var(--ink-2, #2b3244); }
.cb-box-tick { background: #ecf9f1; border-color: #bfe6cd; color: #14532d; }
.cb-box-tick .cb-box-icon { color: #1a7a3a; }
.cb-box-info { background: var(--accent-soft, #e6f7fd); border-color: rgba(0,178,226,0.3); color: #073b4c; }
.cb-box-info .cb-box-icon { color: var(--accent-ink, #007aa0); }
.cb-box-mark { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: rgba(255,255,255,0.6); flex-shrink: 0; }
.cb-box-tick .cb-box-mark { background: rgba(26,122,58,0.12); }
.cb-box-info .cb-box-mark { background: rgba(0,122,160,0.12); }
.cb-box-label { font-family: var(--mono, "Lato", system-ui, sans-serif); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: inherit; opacity: 0.85; margin-bottom: 4px; font-weight: 700; }
.cb-box--labeled { display: block; }
.cb-box--labeled .cb-box-label { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.cb-box--labeled .cb-box-mark { width: 22px; height: 22px; }
.cb-box--labeled .cb-box-icon { width: 13px; height: 13px; }
.cb-box-text { font-family: var(--serif, "Lora", Georgia, serif); font-size: 17px; line-height: 1.55; color: inherit; }
.cb-box-text p:first-child { margin-top: 0; }
.cb-box-text p:last-child { margin-bottom: 0; }
</style>
    <style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id="wp-emoji-styles-inline-css">

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}

/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
</style>
<style id="wp-block-paragraph-inline-css">
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://chrisbailey.com/wp-includes/blocks/paragraph/style.min.css */
</style>


<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--theme-palette-1: var(--global-palette1);--wp--preset--color--theme-palette-2: var(--global-palette2);--wp--preset--color--theme-palette-3: var(--global-palette3);--wp--preset--color--theme-palette-4: var(--global-palette4);--wp--preset--color--theme-palette-5: var(--global-palette5);--wp--preset--color--theme-palette-6: var(--global-palette6);--wp--preset--color--theme-palette-7: var(--global-palette7);--wp--preset--color--theme-palette-8: var(--global-palette8);--wp--preset--color--theme-palette-9: var(--global-palette9);--wp--preset--color--theme-palette-10: var(--global-palette10);--wp--preset--color--theme-palette-11: var(--global-palette11);--wp--preset--color--theme-palette-12: var(--global-palette12);--wp--preset--color--theme-palette-13: var(--global-palette13);--wp--preset--color--theme-palette-14: var(--global-palette14);--wp--preset--color--theme-palette-15: var(--global-palette15);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: var(--global-font-size-small);--wp--preset--font-size--medium: var(--global-font-size-medium);--wp--preset--font-size--large: var(--global-font-size-large);--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--larger: var(--global-font-size-larger);--wp--preset--font-size--xxlarge: var(--global-font-size-xxlarge);--wp--preset--font-family--serif: Lora, "Source Serif 4", Georgia, serif;--wp--preset--font-family--sans: Lato, ui-sans-serif, system-ui, -apple-system, sans-serif;--wp--preset--font-family--mono: "JetBrains Mono", ui-monospace, monospace;--wp--preset--font-family--hand: Caveat, cursive;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:root { --wp--style--global--content-size: var(--global-calc-content-width);--wp--style--global--wide-size: var(--global-calc-wide-content-width); }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{background-color: var(--bg);color: var(--ink);font-family: var(--sans);font-size: 17px;line-height: 1.6;padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){color: var(--ink);}:root :where(a:where(:not(.wp-element-button)):hover){color: var(--accent-ink);}h1{font-family: var(--serif);font-weight: 500;}h2{font-family: var(--serif);font-weight: 500;}h3{font-family: var(--serif);font-weight: 500;}h4{font-family: var(--serif);font-weight: 500;}:root :where(.wp-element-button, .wp-block-button__link){font-style: inherit;font-weight: inherit;letter-spacing: inherit;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-theme-palette-1-color{color: var(--wp--preset--color--theme-palette-1) !important;}.has-theme-palette-2-color{color: var(--wp--preset--color--theme-palette-2) !important;}.has-theme-palette-3-color{color: var(--wp--preset--color--theme-palette-3) !important;}.has-theme-palette-4-color{color: var(--wp--preset--color--theme-palette-4) !important;}.has-theme-palette-5-color{color: var(--wp--preset--color--theme-palette-5) !important;}.has-theme-palette-6-color{color: var(--wp--preset--color--theme-palette-6) !important;}.has-theme-palette-7-color{color: var(--wp--preset--color--theme-palette-7) !important;}.has-theme-palette-8-color{color: var(--wp--preset--color--theme-palette-8) !important;}.has-theme-palette-9-color{color: var(--wp--preset--color--theme-palette-9) !important;}.has-theme-palette-10-color{color: var(--wp--preset--color--theme-palette-10) !important;}.has-theme-palette-11-color{color: var(--wp--preset--color--theme-palette-11) !important;}.has-theme-palette-12-color{color: var(--wp--preset--color--theme-palette-12) !important;}.has-theme-palette-13-color{color: var(--wp--preset--color--theme-palette-13) !important;}.has-theme-palette-14-color{color: var(--wp--preset--color--theme-palette-14) !important;}.has-theme-palette-15-color{color: var(--wp--preset--color--theme-palette-15) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-theme-palette-1-background-color{background-color: var(--wp--preset--color--theme-palette-1) !important;}.has-theme-palette-2-background-color{background-color: var(--wp--preset--color--theme-palette-2) !important;}.has-theme-palette-3-background-color{background-color: var(--wp--preset--color--theme-palette-3) !important;}.has-theme-palette-4-background-color{background-color: var(--wp--preset--color--theme-palette-4) !important;}.has-theme-palette-5-background-color{background-color: var(--wp--preset--color--theme-palette-5) !important;}.has-theme-palette-6-background-color{background-color: var(--wp--preset--color--theme-palette-6) !important;}.has-theme-palette-7-background-color{background-color: var(--wp--preset--color--theme-palette-7) !important;}.has-theme-palette-8-background-color{background-color: var(--wp--preset--color--theme-palette-8) !important;}.has-theme-palette-9-background-color{background-color: var(--wp--preset--color--theme-palette-9) !important;}.has-theme-palette-10-background-color{background-color: var(--wp--preset--color--theme-palette-10) !important;}.has-theme-palette-11-background-color{background-color: var(--wp--preset--color--theme-palette-11) !important;}.has-theme-palette-12-background-color{background-color: var(--wp--preset--color--theme-palette-12) !important;}.has-theme-palette-13-background-color{background-color: var(--wp--preset--color--theme-palette-13) !important;}.has-theme-palette-14-background-color{background-color: var(--wp--preset--color--theme-palette-14) !important;}.has-theme-palette-15-background-color{background-color: var(--wp--preset--color--theme-palette-15) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-theme-palette-1-border-color{border-color: var(--wp--preset--color--theme-palette-1) !important;}.has-theme-palette-2-border-color{border-color: var(--wp--preset--color--theme-palette-2) !important;}.has-theme-palette-3-border-color{border-color: var(--wp--preset--color--theme-palette-3) !important;}.has-theme-palette-4-border-color{border-color: var(--wp--preset--color--theme-palette-4) !important;}.has-theme-palette-5-border-color{border-color: var(--wp--preset--color--theme-palette-5) !important;}.has-theme-palette-6-border-color{border-color: var(--wp--preset--color--theme-palette-6) !important;}.has-theme-palette-7-border-color{border-color: var(--wp--preset--color--theme-palette-7) !important;}.has-theme-palette-8-border-color{border-color: var(--wp--preset--color--theme-palette-8) !important;}.has-theme-palette-9-border-color{border-color: var(--wp--preset--color--theme-palette-9) !important;}.has-theme-palette-10-border-color{border-color: var(--wp--preset--color--theme-palette-10) !important;}.has-theme-palette-11-border-color{border-color: var(--wp--preset--color--theme-palette-11) !important;}.has-theme-palette-12-border-color{border-color: var(--wp--preset--color--theme-palette-12) !important;}.has-theme-palette-13-border-color{border-color: var(--wp--preset--color--theme-palette-13) !important;}.has-theme-palette-14-border-color{border-color: var(--wp--preset--color--theme-palette-14) !important;}.has-theme-palette-15-border-color{border-color: var(--wp--preset--color--theme-palette-15) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-larger-font-size{font-size: var(--wp--preset--font-size--larger) !important;}.has-xxlarge-font-size{font-size: var(--wp--preset--font-size--xxlarge) !important;}.has-serif-font-family{font-family: var(--wp--preset--font-family--serif) !important;}.has-sans-font-family{font-family: var(--wp--preset--font-family--sans) !important;}.has-mono-font-family{font-family: var(--wp--preset--font-family--mono) !important;}.has-hand-font-family{font-family: var(--wp--preset--font-family--hand) !important;}
/*# sourceURL=global-styles-inline-css */
</style>

<link rel='stylesheet' id='kadence-global-css' href='https://chrisbailey.com/wp-content/themes/kadence/assets/css/global.min.css?ver=1.5.1' media='all' />
<style id="kadence-global-inline-css">
/* Kadence Base CSS */
:root{--global-palette1:#2B6CB0;--global-palette2:#215387;--global-palette3:#1A202C;--global-palette4:#2D3748;--global-palette5:#4A5568;--global-palette6:#718096;--global-palette7:#EDF2F7;--global-palette8:#F7FAFC;--global-palette9:#ffffff;--global-palette10:oklch(from var(--global-palette1) calc(l + 0.10 * (1 - l)) calc(c * 1.00) calc(h + 180) / 100%);--global-palette11:#13612e;--global-palette12:#1159af;--global-palette13:#b82105;--global-palette14:#f7630c;--global-palette15:#f5a524;--global-palette9rgb:255, 255, 255;--global-palette-highlight:var(--global-palette1);--global-palette-highlight-alt:var(--global-palette2);--global-palette-highlight-alt2:var(--global-palette9);--global-palette-btn-bg:var(--global-palette1);--global-palette-btn-bg-hover:var(--global-palette2);--global-palette-btn:var(--global-palette9);--global-palette-btn-hover:var(--global-palette9);--global-palette-btn-sec-bg:var(--global-palette7);--global-palette-btn-sec-bg-hover:var(--global-palette2);--global-palette-btn-sec:var(--global-palette3);--global-palette-btn-sec-hover:var(--global-palette9);--global-body-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--global-heading-font-family:inherit;--global-primary-nav-font-family:inherit;--global-fallback-font:sans-serif;--global-display-fallback-font:sans-serif;--global-content-width:1290px;--global-content-wide-width:calc(1290px + 230px);--global-content-narrow-width:842px;--global-content-edge-padding:1.5rem;--global-content-boxed-padding:2rem;--global-calc-content-width:calc(1290px - var(--global-content-edge-padding) - var(--global-content-edge-padding) );--wp--style--global--content-size:var(--global-calc-content-width);}.wp-site-blocks{--global-vw:calc( 100vw - ( 0.5 * var(--scrollbar-offset)));}body{background:var(--global-palette8);}body, input, select, optgroup, textarea{font-weight:400;font-size:17px;line-height:1.6;font-family:var(--global-body-font-family);color:var(--global-palette4);}.content-bg, body.content-style-unboxed .site{background:var(--global-palette9);}h1,h2,h3,h4,h5,h6{font-family:var(--global-heading-font-family);}h1{font-weight:700;font-size:32px;line-height:1.5;color:var(--global-palette3);}h2{font-weight:700;font-size:28px;line-height:1.5;color:var(--global-palette3);}h3{font-weight:700;font-size:24px;line-height:1.5;color:var(--global-palette3);}h4{font-weight:700;font-size:22px;line-height:1.5;color:var(--global-palette4);}h5{font-weight:700;font-size:20px;line-height:1.5;color:var(--global-palette4);}h6{font-weight:700;font-size:18px;line-height:1.5;color:var(--global-palette5);}.entry-hero .kadence-breadcrumbs{max-width:1290px;}.site-container, .site-header-row-layout-contained, .site-footer-row-layout-contained, .entry-hero-layout-contained, .comments-area, .alignfull > .wp-block-cover__inner-container, .alignwide > .wp-block-cover__inner-container{max-width:var(--global-content-width);}.content-width-narrow .content-container.site-container, .content-width-narrow .hero-container.site-container{max-width:var(--global-content-narrow-width);}@media all and (min-width: 1520px){.wp-site-blocks .content-container  .alignwide{margin-left:-115px;margin-right:-115px;width:unset;max-width:unset;}}@media all and (min-width: 1102px){.content-width-narrow .wp-site-blocks .content-container .alignwide{margin-left:-130px;margin-right:-130px;width:unset;max-width:unset;}}.content-style-boxed .wp-site-blocks .entry-content .alignwide{margin-left:calc( -1 * var( --global-content-boxed-padding ) );margin-right:calc( -1 * var( --global-content-boxed-padding ) );}.content-area{margin-top:5rem;margin-bottom:5rem;}@media all and (max-width: 1024px){.content-area{margin-top:3rem;margin-bottom:3rem;}}@media all and (max-width: 767px){.content-area{margin-top:2rem;margin-bottom:2rem;}}@media all and (max-width: 1024px){:root{--global-content-boxed-padding:2rem;}}@media all and (max-width: 767px){:root{--global-content-boxed-padding:1.5rem;}}.entry-content-wrap{padding:2rem;}@media all and (max-width: 1024px){.entry-content-wrap{padding:2rem;}}@media all and (max-width: 767px){.entry-content-wrap{padding:1.5rem;}}.entry.single-entry{box-shadow:0px 15px 15px -10px rgba(0,0,0,0.05);}.entry.loop-entry{box-shadow:0px 15px 15px -10px rgba(0,0,0,0.05);}.loop-entry .entry-content-wrap{padding:2rem;}@media all and (max-width: 1024px){.loop-entry .entry-content-wrap{padding:2rem;}}@media all and (max-width: 767px){.loop-entry .entry-content-wrap{padding:1.5rem;}}button, .button, .wp-block-button__link, input[type="button"], input[type="reset"], input[type="submit"], .fl-button, .elementor-button-wrapper .elementor-button, .wc-block-components-checkout-place-order-button, .wc-block-cart__submit{box-shadow:0px 0px 0px -7px rgba(0,0,0,0);}button:hover, button:focus, button:active, .button:hover, .button:focus, .button:active, .wp-block-button__link:hover, .wp-block-button__link:focus, .wp-block-button__link:active, input[type="button"]:hover, input[type="button"]:focus, input[type="button"]:active, input[type="reset"]:hover, input[type="reset"]:focus, input[type="reset"]:active, input[type="submit"]:hover, input[type="submit"]:focus, input[type="submit"]:active, .elementor-button-wrapper .elementor-button:hover, .elementor-button-wrapper .elementor-button:focus, .elementor-button-wrapper .elementor-button:active, .wc-block-cart__submit:hover{box-shadow:0px 15px 25px -7px rgba(0,0,0,0.1);}.kb-button.kb-btn-global-outline.kb-btn-global-inherit{padding-top:calc(px - 2px);padding-right:calc(px - 2px);padding-bottom:calc(px - 2px);padding-left:calc(px - 2px);}@media all and (min-width: 1025px){.transparent-header .entry-hero .entry-hero-container-inner{padding-top:80px;}}@media all and (max-width: 1024px){.mobile-transparent-header .entry-hero .entry-hero-container-inner{padding-top:80px;}}@media all and (max-width: 767px){.mobile-transparent-header .entry-hero .entry-hero-container-inner{padding-top:80px;}}.entry-hero.page-hero-section .entry-header{min-height:200px;}.entry-author-style-center{padding-top:var(--global-md-spacing);border-top:1px solid var(--global-gray-500);}.entry-author-style-center .entry-author-avatar, .entry-meta .author-avatar{display:none;}.entry-author-style-normal .entry-author-profile{padding-left:0px;}#comments .comment-meta{margin-left:0px;}
/* Kadence Header CSS */
@media all and (max-width: 1024px){.mobile-transparent-header #masthead{position:absolute;left:0px;right:0px;z-index:100;}.kadence-scrollbar-fixer.mobile-transparent-header #masthead{right:var(--scrollbar-offset,0);}.mobile-transparent-header #masthead, .mobile-transparent-header .site-top-header-wrap .site-header-row-container-inner, .mobile-transparent-header .site-main-header-wrap .site-header-row-container-inner, .mobile-transparent-header .site-bottom-header-wrap .site-header-row-container-inner{background:transparent;}.site-header-row-tablet-layout-fullwidth, .site-header-row-tablet-layout-standard{padding:0px;}}@media all and (min-width: 1025px){.transparent-header #masthead{position:absolute;left:0px;right:0px;z-index:100;}.transparent-header.kadence-scrollbar-fixer #masthead{right:var(--scrollbar-offset,0);}.transparent-header #masthead, .transparent-header .site-top-header-wrap .site-header-row-container-inner, .transparent-header .site-main-header-wrap .site-header-row-container-inner, .transparent-header .site-bottom-header-wrap .site-header-row-container-inner{background:transparent;}}.site-branding{padding:0px 0px 0px 0px;}.site-branding .site-title{font-weight:700;font-size:26px;line-height:1.2;color:var(--global-palette3);}#masthead, #masthead .kadence-sticky-header.item-is-fixed:not(.item-at-start):not(.site-header-row-container):not(.site-main-header-wrap), #masthead .kadence-sticky-header.item-is-fixed:not(.item-at-start) > .site-header-row-container-inner{background:#ffffff;}.site-main-header-inner-wrap{min-height:80px;}.header-navigation[class*="header-navigation-style-underline"] .header-menu-container.primary-menu-container>ul>li>a:after{width:calc( 100% - 1.2em);}.main-navigation .primary-menu-container > ul > li.menu-item > a{padding-left:calc(1.2em / 2);padding-right:calc(1.2em / 2);padding-top:0.6em;padding-bottom:0.6em;color:var(--global-palette5);}.main-navigation .primary-menu-container > ul > li.menu-item .dropdown-nav-special-toggle{right:calc(1.2em / 2);}.main-navigation .primary-menu-container > ul > li.menu-item > a:hover{color:var(--global-palette-highlight);}.main-navigation .primary-menu-container > ul > li.menu-item.current-menu-item > a{color:var(--global-palette3);}.header-navigation .header-menu-container ul ul.sub-menu, .header-navigation .header-menu-container ul ul.submenu{background:var(--global-palette3);box-shadow:0px 2px 13px 0px rgba(0,0,0,0.1);}.header-navigation .header-menu-container ul ul li.menu-item, .header-menu-container ul.menu > li.kadence-menu-mega-enabled > ul > li.menu-item > a{border-bottom:1px solid rgba(255,255,255,0.1);border-radius:0px 0px 0px 0px;}.header-navigation .header-menu-container ul ul li.menu-item > a{width:200px;padding-top:1em;padding-bottom:1em;color:var(--global-palette8);font-size:12px;}.header-navigation .header-menu-container ul ul li.menu-item > a:hover{color:var(--global-palette9);background:var(--global-palette4);border-radius:0px 0px 0px 0px;}.header-navigation .header-menu-container ul ul li.menu-item.current-menu-item > a{color:var(--global-palette9);background:var(--global-palette4);border-radius:0px 0px 0px 0px;}.mobile-toggle-open-container .menu-toggle-open, .mobile-toggle-open-container .menu-toggle-open:focus{color:var(--global-palette5);padding:0.4em 0.6em 0.4em 0.6em;font-size:14px;}.mobile-toggle-open-container .menu-toggle-open.menu-toggle-style-bordered{border:1px solid currentColor;}.mobile-toggle-open-container .menu-toggle-open .menu-toggle-icon{font-size:20px;}.mobile-toggle-open-container .menu-toggle-open:hover, .mobile-toggle-open-container .menu-toggle-open:focus-visible{color:var(--global-palette-highlight);}.mobile-navigation ul li{font-size:14px;}.mobile-navigation ul li a{padding-top:1em;padding-bottom:1em;}.mobile-navigation ul li > a, .mobile-navigation ul li.menu-item-has-children > .drawer-nav-drop-wrap{color:var(--global-palette8);}.mobile-navigation ul li.current-menu-item > a, .mobile-navigation ul li.current-menu-item.menu-item-has-children > .drawer-nav-drop-wrap{color:var(--global-palette-highlight);}.mobile-navigation ul li.menu-item-has-children .drawer-nav-drop-wrap, .mobile-navigation ul li:not(.menu-item-has-children) a{border-bottom:1px solid rgba(255,255,255,0.1);}.mobile-navigation:not(.drawer-navigation-parent-toggle-true) ul li.menu-item-has-children .drawer-nav-drop-wrap button{border-left:1px solid rgba(255,255,255,0.1);}#mobile-drawer .drawer-header .drawer-toggle{padding:0.6em 0.15em 0.6em 0.15em;font-size:24px;}
/* Kadence Footer CSS */
.site-bottom-footer-inner-wrap{padding-top:30px;padding-bottom:30px;grid-column-gap:30px;}.site-bottom-footer-inner-wrap .widget{margin-bottom:30px;}.site-bottom-footer-inner-wrap .site-footer-section:not(:last-child):after{right:calc(-30px / 2);}
/*# sourceURL=kadence-global-inline-css */
</style>
<link rel='stylesheet' id='kadence-header-css' href='https://chrisbailey.com/wp-content/themes/kadence/assets/css/header.min.css?ver=1.5.1' media='all' />
<link rel='stylesheet' id='kadence-content-css' href='https://chrisbailey.com/wp-content/themes/kadence/assets/css/content.min.css?ver=1.5.1' media='all' />
<link rel='stylesheet' id='kadence-footer-css' href='https://chrisbailey.com/wp-content/themes/kadence/assets/css/footer.min.css?ver=1.5.1' media='all' />
<link rel='stylesheet' id='kadence-parent-css' href='https://chrisbailey.com/wp-content/themes/kadence/style.css?ver=7.0.4' media='all' />
<link rel='stylesheet' id='chrisbailey-child-css' href='https://chrisbailey.com/wp-content/themes/chrisbailey-child/style.css?ver=1.5.2' media='all' />
<style id="kadence-blocks-global-variables-inline-css">
:root {--global-kb-font-size-sm:clamp(0.8rem, 0.73rem + 0.217vw, 0.9rem);--global-kb-font-size-md:clamp(1.1rem, 0.995rem + 0.326vw, 1.25rem);--global-kb-font-size-lg:clamp(1.75rem, 1.576rem + 0.543vw, 2rem);--global-kb-font-size-xl:clamp(2.25rem, 1.728rem + 1.63vw, 3rem);--global-kb-font-size-xxl:clamp(2.5rem, 1.456rem + 3.26vw, 4rem);--global-kb-font-size-xxxl:clamp(2.75rem, 0.489rem + 7.065vw, 6rem);}
/*# sourceURL=kadence-blocks-global-variables-inline-css */
</style>
<link rel="https://api.w.org/" href="https://chrisbailey.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://chrisbailey.com/wp-json/wp/v2/pages/223054" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://chrisbailey.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0.4" />
<link rel='shortlink' href='https://chrisbailey.com/' />

<!-- Schema & Structured Data For WP v1.63 - -->
<script type="application/ld+json" class="saswp-schema-markup-output">
[{"@context":"https:\/\/schema.org\/","@type":"Organization","@id":"https:\/\/chrisbailey.com#Organization","name":"Chris Bailey","url":"https:\/\/chrisbailey.com","sameAs":[]}]
</script>

<style class="wpcode-css-snippet">.newsletter-banner-sidebar img {
    height: auto !important;
    width: 100% !important;
}</style><link rel="icon" href="https://chrisbailey.com/wp-content/uploads/2022/01/cropped-favicon_512x512-32x32.png" sizes="32x32" />
<link rel="icon" href="https://chrisbailey.com/wp-content/uploads/2022/01/cropped-favicon_512x512-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://chrisbailey.com/wp-content/uploads/2022/01/cropped-favicon_512x512-180x180.png" />
<meta name="msapplication-TileImage" content="https://chrisbailey.com/wp-content/uploads/2022/01/cropped-favicon_512x512-270x270.png" />
<style id="wp-custom-css">
.lead-stack .mini-cover:nth-child(4) {
    left: 258px !important;
    top: 27px !important;
}

.foot-inner input[type="email"]:focus {
    color: #fff;
}
.btn-primary:hover {
    color: #fff;
}
.btn-orange:hover {
    color: #fff;
}
</style>
<style id="cb-global-base">
:root {
  --bg: #F8F7F4;
  --bg-soft: #FAF9F6;
  --bg-card: #ffffff;
  --bg-deep: #0f1524;
  --ink: #1A1A2E;
  --ink-2: #2b3244;
  --ink-3: #5d6473;
  --ink-4: #9aa0ae;
  --rule: #ece8df;
  --rule-2: #dfdbcf;
  --accent: #00B2E2;
  --accent-ink: #007aa0;
  --accent-soft: #e6f7fd;
  --orange: #e6692e;
  --maxw: 1200px;
  --maxw-wide: 1360px;
  --maxw-prose: 720px;
  --maxw-read: 680px;
  --serif: "Lora", "Source Serif 4", Georgia, serif;
  --sans: "Lato", ui-sans-serif, system-ui, -apple-system, sans-serif;
  --mono: "Lato", ui-sans-serif, system-ui, -apple-system, sans-serif;
}
html, body { margin: 0; padding: 0; }
body { font-family: var(--sans); color: var(--ink); background: var(--bg); -webkit-font-smoothing: antialiased; line-height: 1.6; }
* { box-sizing: border-box; }
a { color: inherit; text-decoration: none; }
a:hover { color: var(--accent-ink); }
img { max-width: 100%; display: block; }
button { font: inherit; cursor: pointer; }
.nav { position: sticky; top: 0; z-index: 50; background: rgba(248,247,244,0.92); backdrop-filter: blur(14px); border-bottom: 1px solid var(--rule); }
.nav-inner { max-width: var(--maxw-wide); margin: 0 auto; padding: 16px 40px; display: flex; justify-content: space-between; align-items: center; gap: 24px; }
.logo { font-family: var(--serif); font-size: 18px; letter-spacing: 0.22em; text-transform: uppercase; font-weight: 500; color: var(--ink); }
.nav-links { display: flex; gap: 32px; font-size: 14px; color: var(--ink-2); }
.nav-links a { position: relative; padding: 4px 0; }
.nav-links a:hover { color: var(--ink); }
.nav-links a.active { color: var(--ink); }
.nav-links a.active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: var(--accent); }
.nav-cta { display: inline-flex; align-items: center; gap: 8px; padding: 9px 16px; border-radius: 999px; background: var(--ink); color: #fff; font-size: 13px; transition: background 0.2s; }
.nav-cta:hover { background: var(--accent-ink); color: #fff; }
@keyframes navCtaPulse { 0% { box-shadow: 0 0 0 0 rgba(95,227,161,0.7); } 70% { box-shadow: 0 0 0 8px rgba(95,227,161,0); } 100% { box-shadow: 0 0 0 0 rgba(95,227,161,0); } }
.nav-cta .dot { width: 6px; height: 6px; border-radius: 50%; background: #5fe3a1; box-shadow: 0 0 0 3px rgba(95,227,161,0.25); animation: navCtaPulse 2s infinite; }
/* Honor reduced-motion for the two pulsing dots (mirrors the widget's guard). */
@media (prefers-reduced-motion: reduce) { .nav-cta .dot, #announce-bar span { animation: none !important; } }
/* Safari black-flash mitigation: if backdrop-filter is unsupported/janky, fall
   back to a solid nav background (the blur is decorative, not load-bearing). */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .nav { background: #F8F7F4; } }
.nav-toggle { display: none; }
/* Global footer (same reasoning as header—pages without inline styles need
 * a working dark footer instead of unstyled list rows). Per-template footer
 * CSS in front-page.php / page-about.php / etc. still wins via cascade. */
.foot { background: var(--bg-deep); color: #d6dce4; padding: 80px 0 40px; }
.foot-inner { max-width: var(--maxw); margin: 0 auto; padding: 0 40px; display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.4fr; gap: 60px; }
.foot-brand .logo { color: #fff; font-size: 16px; margin-bottom: 18px; display: block; }
.foot-brand p { font-size: 14px; color: #8a94a4; line-height: 1.6; margin: 0 0 20px; max-width: 280px; }
.foot-social { display: flex; gap: 12px; }
.foot-social a { width: 36px; height: 36px; border: 1px solid rgba(255,255,255,0.12); border-radius: 50%; display: grid; place-items: center; color: #b7c0cc; transition: all 0.2s; }
.foot-social a:hover { border-color: var(--accent); color: #fff; }
.foot-col h5 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: #8a94a4; margin: 0 0 18px; font-weight: 400; }
.foot-col ul { list-style: none; padding: 0; margin: 0; }
.foot-col li { margin-bottom: 10px; font-size: 14.5px; }
.foot-col a { color: #d6dce4; }
.foot-col a:hover { color: var(--accent); }
.foot-newsletter input { width: 100%; padding: 11px 16px; border: 1px solid rgba(255,255,255,0.16); background: rgba(255,255,255,0.04); color: #fff; border-radius: 999px; font: inherit; font-size: 13px; margin-bottom: 10px; }
.foot-newsletter input::placeholder { color: #8a94a4; }
.foot-newsletter button { padding: 11px 18px; border: none; border-radius: 999px; background: var(--accent); color: #0a1b24; font-size: 13px; font-weight: 700; letter-spacing: 0.02em; width: 100%; cursor: pointer; }
.foot-credits { max-width: var(--maxw); margin: 64px auto 0; padding: 32px 40px 0; border-top: 1px solid rgba(255,255,255,0.08); display: flex; justify-content: space-between; flex-wrap: wrap; gap: 20px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: #8a94a4; }
@media (max-width: 1024px) {
  .foot-inner { grid-template-columns: 1fr 1fr; gap: 40px; }
}
@media (max-width: 720px) {
  .nav-links { display: none; }
  .nav-cta { display: none; }
  .nav-toggle { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; background: transparent; border: 0; padding: 0; }
  .nav-toggle span { width: 22px; height: 2px; background: var(--ink); position: relative; display: block; }
  .nav-toggle span::before, .nav-toggle span::after { content: ""; position: absolute; left: 0; width: 22px; height: 2px; background: var(--ink); }
  .nav-toggle span::before { top: -7px; }
  .nav-toggle span::after { top: 7px; }
  .nav-inner { padding: 12px 20px; }
  body.menu-open { overflow: hidden; }
  .foot { padding: 56px 0 32px; }
  .foot-inner { grid-template-columns: 1fr; gap: 36px; padding: 0 20px; }
  .foot-credits { padding: 24px 20px 0; margin-top: 40px; flex-direction: column; align-items: flex-start; }
}
</style>
</head>
<body class="home wp-singular page-template-default page page-id-223054 wp-embed-responsive wp-theme-kadence wp-child-theme-chrisbailey-child footer-on-bottom hide-focus-outline link-style-standard content-title-style-above content-width-normal content-style-boxed content-vertical-padding-show non-transparent-header mobile-non-transparent-header">

<style>@keyframes announcePulse{0%{box-shadow:0 0 0 0 rgba(244,166,74,0.7);}70%{box-shadow:0 0 0 12px rgba(244,166,74,0);}100%{box-shadow:0 0 0 0 rgba(244,166,74,0);}}</style>
<div id="announce-bar" style="position:relative;background:#0e1418;color:#f8f7f4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;letter-spacing:0.01em;padding:10px 56px 10px 20px;text-align:center;line-height:1.4;border-bottom:1px solid rgba(255,255,255,0.08);">
  <span style="display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;">
    <span style="display:inline-block;width:7px;height:7px;border-radius:999px;background:#f4a64a;box-shadow:0 0 0 0 rgba(244,166,74,0.7);animation:announcePulse 2s infinite;"></span>
    <span>Check out my new book Intentional on accomplishing more with the science of goal attainment. <a href="https://chrisbailey.com/intentional/" style="color:#f4a64a;text-decoration:underline;text-underline-offset:2px;font-weight:500;">Read more &rarr;</a></span>
  </span>
  <button type="button" aria-label="Dismiss announcement" onclick="document.getElementById('announce-bar').style.display='none';try{localStorage.setItem('announce_dismissed_v1','1')}catch(e){}" style="position:absolute;right:14px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:rgba(255,255,255,0.6);font-size:18px;line-height:1;cursor:pointer;padding:6px;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;">&times;</button>
</div>
<script>
// Respect the dismissed state from a previous page view. Runs synchronously
// during HTML parsing so the bar never flickers in for returning users.
(function(){
  try {
    if (localStorage.getItem('announce_dismissed_v1') === '1') {
      var b = document.getElementById('announce-bar');
      if (b) b.style.display = 'none';
    }
  } catch(e) {}
})();
</script>

<header class="nav">
  <div class="nav-inner">
    <a href="https://chrisbailey.com/" class="logo">Chris&nbsp;Bailey</a>
    <nav class="nav-links">
      <a href="https://chrisbailey.com/books/">Books</a>
      <a href="https://chrisbailey.com/articles/">Articles</a>
      <a href="https://chrisbailey.com/experiments/">Experiments</a>
      <a href="https://chrisbailey.com/course/">Course</a>
      <a href="https://chrisbailey.com/speaking/">Speaking</a>
      <a href="https://chrisbailey.com/newsletter/">Newsletter</a>
      <a href="https://chrisbailey.com/podcast/">Podcast</a>
      <a href="https://chrisbailey.com/about/">About</a>
      <a href="https://chrisbailey.com/contact/">Contact</a>
    </nav>
    <button class="nav-toggle" aria-label="Menu" aria-expanded="false" aria-controls="mobileMenu"><span></span></button>
    <a href="https://chrisbailey.com/experiments/"  class="nav-cta">
      <span class="dot"></span>
      Watch me suffer
    </a>
  </div>
</header>

<style id="cb-mobile-menu-base">
.mobile-menu { position: fixed; inset: 0; z-index: 60; background: #0e1418; color: #f8f7f4; transform: translateX(100%); transition: transform 0.32s cubic-bezier(.4,0,.2,1); display: flex; flex-direction: column; padding: 24px 22px 32px; -webkit-overflow-scrolling: touch; overflow-y: auto; visibility: hidden; }
.mobile-menu.open { transform: translateX(0); visibility: visible; }
.mobile-menu .mm-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; padding-top: 4px; }
.mobile-menu .mm-logo { font-family: "Lora", "Source Serif 4", Georgia, serif; font-size: 14px; letter-spacing: 0.22em; text-transform: uppercase; font-weight: 500; color: #f8f7f4; text-decoration: none; }
.mobile-menu .mm-close { background: transparent; border: 0; color: #f8f7f4; width: 44px; height: 44px; display: grid; place-items: center; cursor: pointer; font-size: 22px; line-height: 1; padding: 0; }
.mobile-menu nav { display: flex; flex-direction: column; gap: 0; margin-top: 8px; }
.mobile-menu nav a { color: #f8f7f4; text-decoration: none; font-family: "Lora", "Source Serif 4", Georgia, serif; font-size: 26px; font-weight: 400; padding: 16px 0; border-bottom: 1px solid rgba(255,255,255,0.08); min-height: 44px; display: flex; align-items: center; }
.mobile-menu nav a em { font-style: italic; color: #5fe3a1; }
.mobile-menu .mm-cta { margin-top: 28px; background: #5fe3a1; color: #0a0a0a; border-radius: 999px; text-align: center; font-size: 15px; font-weight: 700; padding: 16px 24px; min-height: 52px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; text-decoration: none; }
.mobile-menu .mm-foot { margin-top: auto; padding-top: 24px; font-family: "Lato", ui-sans-serif, system-ui, -apple-system, sans-serif; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: rgba(255,255,255,0.4); }
@media (min-width: 721px) { .mobile-menu { display: none !important; } }
</style>

<nav class="mobile-menu" id="mobileMenu" aria-label="Mobile navigation" aria-hidden="true">
  <div class="mm-head">
    <a href="https://chrisbailey.com/" class="mm-logo">Chris&nbsp;Bailey</a>
    <button type="button" class="mm-close" aria-label="Close menu">&times;</button>
  </div>
  <nav>
    <a href="https://chrisbailey.com/books/">Books</a>
    <a href="https://chrisbailey.com/articles/">Articles</a>
    <a href="https://chrisbailey.com/experiments/">Experiments</a>
    <a href="https://chrisbailey.com/course/">Course</a>
    <a href="https://chrisbailey.com/speaking/">Speaking</a>
    <a href="https://chrisbailey.com/newsletter/">Newsletter</a>
    <a href="https://chrisbailey.com/podcast/">Podcast</a>
    <a href="https://chrisbailey.com/about/">About</a>
    <a href="https://chrisbailey.com/contact/">Contact</a>
  </nav>
  <a href="https://chrisbailey.com/experiments/" class="mm-cta">Watch me suffer &rarr;</a>
  <div class="mm-foot">© 2026 Chris Bailey</div>
</nav>

<script>
// Mobile menu open/close logic. Wired once globally from header.php so every
// template gets it without per-template duplication. Closes on link click,
// Escape key, or close-button tap. Body gets .menu-open while drawer is open
// (CSS in per-template styles already toggles overflow:hidden on body for that).
(function(){
  var toggle = document.querySelector('.nav-toggle');
  var menu = document.getElementById('mobileMenu');
  if (!toggle || !menu) return;
  var closeBtn = menu.querySelector('.mm-close');
  var links = menu.querySelectorAll('nav a, .mm-cta');
  function setOpen(state) {
    menu.classList.toggle('open', state);
    menu.setAttribute('aria-hidden', state ? 'false' : 'true');
    toggle.setAttribute('aria-expanded', state ? 'true' : 'false');
    document.body.classList.toggle('menu-open', state);
  }
  toggle.addEventListener('click', function(){ setOpen(!menu.classList.contains('open')); });
  if (closeBtn) closeBtn.addEventListener('click', function(){ setOpen(false); });
  links.forEach(function(a){ a.addEventListener('click', function(){ setOpen(false); }); });
  document.addEventListener('keydown', function(e){ if (e.key === 'Escape' && menu.classList.contains('open')) setOpen(false); });
})();
</script>

<main id="main">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600&family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
<style>
  .cbhome{
    --bg:#F7F5EE;--card:#ffffff;--ink:#16161f;--ink2:#333a4d;--ink3:#5f6676;
    --rule:#ece7db;--rule2:#ddd6c6;
    --teal:#0091c7;--tealb:#00c2f0;--orange:#F0622A;--orangeD:#d64e18;
    --green:#12b886;--greenb:#1fd59b;--gold:#D19A2E;
    --navy:#152441;--deep:#0b1016;--cream:#FBF7EF;
    --serif:'Lora',Georgia,serif;--sans:'Lato',system-ui,sans-serif;
    background:var(--bg);overflow-x:hidden;font-family:var(--sans);color:var(--ink);line-height:1.6;
    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  }
  .cbhome *{box-sizing:border-box}
  .cbhome img{display:block;max-width:100%}
  .cbhome a{color:var(--teal);text-decoration:none}
  .cbhome ::selection{background:rgba(240,98,42,.22)}
  .cbhome .wrap{max-width:1180px;margin:0 auto;padding:0 clamp(20px,5vw,48px)}
  /* keep anchored sections clear of the sticky header when jumped to */
  .cbhome section[id]{scroll-margin-top:84px}
  /* hover / active states (were style-hover/style-active in the proof) */
  .cbhome .navlink:hover{color:var(--teal)}
  .cbhome .btn-primary{transition:transform .16s,box-shadow .16s,background .16s}
  .cbhome .btn-primary:hover{transform:translateY(-2px);box-shadow:0 22px 36px -12px rgba(240,98,42,.85);background:var(--orangeD)}
  .cbhome .btn-primary:active{transform:translateY(0) scale(.98)}
  .cbhome .btn-ghost{transition:transform .16s,border-color .16s,color .16s}
  .cbhome .btn-ghost:hover{transform:translateY(-2px);border-color:var(--teal);color:var(--teal)}
  .cbhome .btn-ghost:active{transform:translateY(0) scale(.98)}
  .cbhome .hero-badge{transition:transform .16s,box-shadow .16s}
  .cbhome .hero-badge:hover{transform:translateY(-2px);box-shadow:0 18px 30px -10px rgba(240,98,42,.8)}
  .cbhome .card-theory{transition:transform .16s,box-shadow .16s,border-color .16s}
  .cbhome .card-theory:hover{transform:translateY(-3px);box-shadow:0 26px 44px -30px rgba(22,22,31,.4);border-color:var(--orange)}
  .cbhome .card-next{transition:transform .16s,box-shadow .16s,border-color .16s}
  .cbhome .card-next:hover{transform:translateY(-3px);box-shadow:0 26px 44px -30px rgba(22,22,31,.4);border-color:var(--teal)}
  .cbhome .arch:hover{transform:translateX(4px);background:var(--card)}
  .cbhome .arch{transition:transform .15s,background .15s}
  .cbhome .btn-teal{transition:transform .16s,box-shadow .16s}
  .cbhome .btn-teal:hover{transform:translateY(-2px);box-shadow:0 16px 28px -12px rgba(0,194,240,.6)}
  .cbhome .btn-teal:active{transform:scale(.97)}
  .cbhome .btn-values{transition:transform .16s,border-color .16s}
  .cbhome .btn-values:hover{transform:translateY(-2px);border-color:var(--orange)}
  .cbhome .art:hover{transform:translateY(-5px);box-shadow:0 32px 54px -32px rgba(22,22,31,.42)}
  .cbhome .art{transition:transform .16s,box-shadow .16s}
  .cbhome .books-feature{transition:transform .18s,box-shadow .18s}
  .cbhome .books-feature:hover{transform:translateY(-4px);box-shadow:0 40px 66px -38px rgba(120,86,30,.5)}
  .cbhome .tile{transition:transform .18s,box-shadow .18s}
  .cbhome .tile-pod:hover{transform:translateY(-6px);box-shadow:0 36px 58px -34px rgba(18,184,134,.5)}
  .cbhome .tile-course:hover{transform:translateY(-6px);box-shadow:0 36px 58px -34px rgba(209,154,46,.5)}
  .cbhome .tile-speak:hover{transform:translateY(-6px);box-shadow:0 36px 58px -34px rgba(21,36,65,.7)}
</style>

<div class="cbhome">

  <!-- HERO -->
  <section style="padding:clamp(44px,6vw,76px) 0 clamp(48px,6vw,72px)">
    <div class="wrap" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:clamp(32px,5vw,64px);align-items:center">
      <div>
        <a href="https://chrisbailey.com/intentional/" class="hero-badge" style="display:inline-flex;align-items:center;gap:9px;background:linear-gradient(95deg,var(--orange),var(--gold));color:#fff;font-size:12.5px;font-weight:800;letter-spacing:.02em;padding:6px 14px 6px 6px;border-radius:999px;margin-bottom:24px;box-shadow:0 12px 24px -10px rgba(240,98,42,.6)">
          <span style="background:#fff;color:var(--orangeD);font-size:10px;font-weight:900;letter-spacing:.1em;padding:3px 9px;border-radius:999px">NEW &#10022;</span>
          <span>Intentional is out now</span>
          <span style="opacity:.85">&rarr;</span>
        </a>
        <h1 style="font-family:var(--serif);font-weight:600;font-size:clamp(38px,5.2vw,60px);line-height:1.04;letter-spacing:-.022em;margin:0 0 20px;text-wrap:pretty">Four books. <span style="color:var(--orange)">900,000+</span> readers. One throughline: <em style="font-style:italic;color:var(--teal);background:linear-gradient(transparent 62%, rgba(0,194,240,.26) 0)">becoming more intentional</em>.</h1>
        <p style="font-size:17.5px;color:var(--ink2);max-width:530px;margin:0 0 26px"><strong style="color:var(--ink)">Hi, I'm Chris, and welcome to my website!</strong> On here you'll find articles I've written, information about my books, and other ways I can help you become more productive&mdash;including speaking to your company, my newsletter, my podcast, and my course, Overcoming Procrastination.</p>
        <div style="display:flex;gap:12px;flex-wrap:wrap">
          <a href="#exp" class="btn-primary" style="display:inline-flex;align-items:center;gap:8px;background:var(--orange);color:#fff;border-radius:999px;padding:15px 28px;font-weight:800;font-size:15px;box-shadow:0 14px 26px -12px rgba(240,98,42,.7)">Join the current experiment &rarr;</a>
          <a href="#articles" class="btn-ghost" style="display:inline-flex;align-items:center;gap:8px;background:var(--card);border:1.6px solid var(--rule2);color:var(--ink);border-radius:999px;padding:15px 26px;font-weight:800;font-size:15px">Read something useful &rarr;</a>
        </div>
      </div>
      <div>
        <div style="border-radius:16px;overflow:hidden;background:var(--deep);aspect-ratio:5/6;box-shadow:0 40px 80px -44px rgba(11,16,22,.6)">
          <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/hero-tedx.jpg" alt="Chris Bailey on stage under blue lighting" style="width:100%;height:100%;object-fit:cover;object-position:52% 42%">
        </div>
        <div style="font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);margin-top:12px;text-align:right;font-weight:700">TEDx Manchester 2026</div>
      </div>
    </div>
  </section>

  <!-- CURRENT EXPERIMENT — embeds the one caffeine widget -->
  <section id="exp" style="background:var(--cream);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:clamp(56px,7vw,88px) 0">
    <div class="wrap">
      <span style="font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--teal)">Current Experiment</span>
      <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(28px,3.8vw,44px);line-height:1.06;letter-spacing:-.02em;margin:10px 0 28px;text-wrap:pretty">Current experiment: <em style="font-style:italic;color:var(--orange)">zero caffeine</em> for 31 days.</h2>

      <!-- Supporting context cards (from the proof) -->
      <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px;margin-bottom:24px">
        <div class="card-theory" style="background:var(--card);border:1px solid var(--rule2);border-radius:16px;padding:24px 26px">
          <div style="font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--orange);font-weight:800;margin-bottom:9px">The theory</div>
          <p style="font-family:var(--serif);font-size:16.5px;color:var(--ink2);margin:0">I think caffeine's been making me anxious. So: 31 days cold turkey to find out&mdash;no tapering.</p>
        </div>
        <div class="card-next" style="background:var(--card);border:1px solid var(--rule2);border-radius:16px;padding:24px 26px">
          <div style="display:inline-flex;align-items:center;gap:7px;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--teal);font-weight:800;margin-bottom:9px"><span style="width:6px;height:6px;border-radius:99px;background:var(--teal);display:inline-block"></span>Next up</div>
          <p style="font-family:var(--serif);font-size:18px;color:var(--ink);margin:0 0 10px;font-weight:600">Analog afternoons.</p>
          <a href="#magnet" style="color:var(--teal);font-weight:800;font-size:14px">Get in before it starts &rarr;</a>
        </div>
      </div>

      <!-- The live widget (single source of truth) -->
            <div class="cbhome-widget"><script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.3/dist/confetti.browser.min.js" integrity="sha384-Rv68Y7adOjMMJc1/xFMcdNvXre/HF51to4GZjBALmXr7ABnVl5V4UajJwBu7zbhN" crossorigin="anonymous"></script>
<div id="cf2">
<style>
  #cf2, #cf2 *{box-sizing:border-box}
  #cf2{
    --cream:#FAF7F2; --cream2:#F0E9D8;
    --navy:#1B2A4A; --navy-ink:#0F1932;
    --gold:#C4973B; --gold-ink:#8A6B26;
    --slate:#4A5568; --lslate:#8A94A6;
    background:var(--cream);
    border:1px solid #E7DFCE; border-radius:20px;
    padding:36px 24px 30px;
    font-family:"Inter","Helvetica Neue",Arial,sans-serif;
    color:var(--slate);
    max-width:720px; margin:32px auto; line-height:1.5;
    overflow:hidden; position:relative;
  }

  /* ---- HEADER ---- */
  #cf2 .cf-kicker{
    font-size:11px; letter-spacing:.16em; text-transform:uppercase;
    color:var(--gold-ink); font-weight:700; margin-bottom:12px;
  }
  #cf2 h2{
    font-family:"Georgia","Lora",serif; color:var(--navy);
    font-weight:normal; font-size:clamp(26px,4.5vw,38px);
    margin:0 0 8px; padding:0; line-height:1.1;
  }
  #cf2 .cf-sub{ font-size:15px; color:var(--slate); margin-bottom:26px; }

  /* ---- THE BATTLE (giant split-screen numbers) ---- */
  #cf2 .cf-battle{
    display:flex; align-items:stretch;
    border-radius:14px; overflow:hidden;
    box-shadow:0 12px 30px -14px rgba(15,25,50,.28);
    margin-bottom:22px;
    min-height:180px;
    transition:box-shadow .4s;
  }
  #cf2 .cf-side{
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    padding:22px 16px;
    text-align:center;
    transition:flex-basis .8s cubic-bezier(.4,0,.2,1),
               padding .3s, transform .3s;
    position:relative;
  }
  #cf2 .cf-side.cf-in{
    background:linear-gradient(155deg,var(--navy) 0%, var(--navy-ink) 100%);
    color:#fff;
    flex-basis:50%;
  }
  #cf2 .cf-side.cf-out{
    background:linear-gradient(155deg,var(--gold) 0%, var(--gold-ink) 100%);
    color:#fff;
    flex-basis:50%;
  }
  #cf2 .cf-num{
    font-family:"Georgia","Lora",serif;
    font-weight:700;
    font-size:clamp(48px,10vw,84px);
    line-height:1;
    letter-spacing:-.03em;
    margin:0;
    text-shadow:0 2px 0 rgba(0,0,0,.08);
    transition:transform .3s;
  }
  #cf2 .cf-num.cf-bump{ animation:cfBump .55s cubic-bezier(.34,1.56,.64,1); }
  @keyframes cfBump{
    0%{ transform:scale(1); }
    35%{ transform:scale(1.25); }
    70%{ transform:scale(.95); }
    100%{ transform:scale(1); }
  }
  /* MYSTERY MODE — numbers hidden as "?" and gently pulse until a vote reveals them */
  #cf2 .cf-battle.cf-mystery .cf-num{
    opacity:.5;
    animation:cfPulse 2.4s ease-in-out infinite;
  }
  @keyframes cfPulse{
    0%,100%{ transform:scale(1);    opacity:.45; }
    50%   { transform:scale(1.09);  opacity:.85; }
  }
  #cf2 .cf-mystery-hint{
    text-align:center; font-size:12px; letter-spacing:.06em;
    color:var(--gold-ink); font-weight:600; font-style:italic;
    margin:-12px 0 14px;
    display:none;
  }
  #cf2 .cf-battle.cf-mystery + .cf-mystery-hint{
    display:block;
  }
  #cf2 .cf-peek-link{
    color:var(--navy); text-decoration:underline;
    font-style:normal; font-weight:700; cursor:pointer;
    background:none; border:0; padding:0;
    font-family:inherit; font-size:inherit;
  }
  #cf2 .cf-peek-link:hover{ color:var(--gold-ink); }

  /* ---- ODOMETER (rolling-digit number reveal) ----
     Georgia's font strut extends ~0.117em beyond a line-height:1 box.
     Result: the descender of the digit-above (e.g. bottom curve of "2",
     bottom serif of "7") bleeds down into the visible slot of the digit
     below. Tightening line-height alone cannot fix this — the glyph
     is drawn outside its own line box by CSS design.
     Fix: clip-path insets 0.06em at top and bottom of each digit slot.
     That's a ~5% shave off the visible glyph's extremes — invisible on
     a 84px number, kills the bleed dead. */
  #cf2 .cf-num.cf-odo{
    display:inline-flex;
    height:1em;
    overflow:hidden;
    line-height:1;
    font-variant-numeric:tabular-nums;
    font-feature-settings:"tnum" 1;
  }
  #cf2 .cf-odo-digit{
    display:inline-block;
    height:1em;
    line-height:1em;
    overflow:hidden;
    vertical-align:top;
    padding:0; margin:0;
    clip-path:inset(0.06em 0);           /* kills the Georgia strut bleed */
    -webkit-clip-path:inset(0.06em 0);
  }
  #cf2 .cf-odo-strip{
    display:block;
    line-height:1em;
    padding:0; margin:0;
    transition:transform .9s cubic-bezier(.16,1,.3,1);
    will-change:transform;
  }
  #cf2 .cf-odo-num{
    display:block;
    height:1em;
    line-height:1em;
    padding:0; margin:0;
    text-align:center;
  }

  /* ---- AMBIENT LOVE (emoji floats when others vote) ---- */
  #cf2 .cf-float{
    position:absolute;
    left:50%; bottom:12%;
    transform:translate(-50%,0);
    font-size:26px;
    pointer-events:none;
    animation:cfFloat 2.2s ease-out forwards;
    z-index:5;
    filter:drop-shadow(0 2px 6px rgba(0,0,0,.3));
  }
  @keyframes cfFloat{
    0%   { transform:translate(-50%, 0)      scale(.4); opacity:0; }
    18%  { transform:translate(-50%, -14px)  scale(1.2); opacity:1; }
    100% { transform:translate(-50%, -110px) scale(.7); opacity:0; }
  }

  /* ---- SHARE PANEL ---- */
  #cf2 .cf-share{
    margin-top:22px; padding-top:20px;
    border-top:1px dashed #E1D5B8;
  }
  #cf2 .cf-share-title{
    font-size:13px; color:var(--slate); font-style:italic;
    margin:0 0 12px; text-align:center;
  }
  #cf2 .cf-share-preview{
    background:#fff; border:1px solid #EFE5CE; border-radius:10px;
    padding:14px 18px; margin:0 0 14px;
    font-family:"Georgia","Lora",serif; font-size:14.5px;
    color:var(--navy); line-height:1.45; font-style:italic;
    text-align:center;
    box-shadow:0 3px 8px -6px rgba(27,42,74,.15);
  }
  #cf2 .cf-share-btns{
    display:flex; gap:8px; justify-content:center; flex-wrap:wrap;
  }
  #cf2 .cf-share-btn{
    background:#fff; color:var(--navy);
    border:1.5px solid #E7DFCE; padding:10px 18px;
    font-size:13.5px; font-weight:700;
    border-radius:999px; cursor:pointer;
    transition:transform .15s, background .2s, color .2s, border-color .2s;
    display:inline-flex; align-items:center; gap:6px;
  }
  #cf2 .cf-share-btn:hover{
    background:var(--navy); color:#fff; border-color:var(--navy);
    transform:translateY(-2px);
  }
  #cf2 .cf-share-btn.cf-copied{
    background:var(--gold); color:#fff; border-color:var(--gold);
  }
  #cf2 .cf-side-label{
    font-size:12px; letter-spacing:.14em; text-transform:uppercase;
    font-weight:700; margin-top:10px; opacity:.85;
  }
  #cf2 .cf-side-icon{
    font-size:28px; margin-bottom:6px; display:block;
  }
  /* narrow the losing side — enforce a floor so it never fully disappears */
  #cf2 .cf-side{ flex-basis:20%; }
  #cf2 .cf-side.cf-heavy{ flex-basis:80%; }

  /* ---- VOTE BUTTONS ---- */
  #cf2 .cf-btns{
    display:grid; grid-template-columns:1fr 1fr; gap:12px;
    margin-bottom:22px;
  }
  @media (max-width:520px){ #cf2 .cf-btns{ grid-template-columns:1fr; } }
  #cf2 button{
    font-family:inherit; font-size:16px; font-weight:700;
    border-radius:999px; padding:16px 22px;
    cursor:pointer; border:0; line-height:1.2;
    transition:transform .15s, box-shadow .2s, background .2s;
    display:inline-flex; align-items:center; justify-content:center; gap:10px;
  }
  #cf2 .cf-vote-in{
    background:var(--navy); color:#fff;
    box-shadow:0 6px 16px -6px rgba(27,42,74,.5);
  }
  #cf2 .cf-vote-in:hover{
    background:var(--navy-ink); transform:translateY(-2px);
    box-shadow:0 12px 24px -8px rgba(27,42,74,.55);
  }
  #cf2 .cf-vote-out{
    background:transparent; color:var(--navy);
    border:2px solid var(--gold);
  }
  #cf2 .cf-vote-out:hover{
    background:var(--gold); color:#fff; transform:translateY(-2px);
    box-shadow:0 12px 24px -8px rgba(196,151,59,.6);
  }
  #cf2 .cf-btns .cf-emoji{ font-size:18px; }

  /* ---- POST-VOTE PANEL ---- */
  #cf2 .cf-panel{ margin-bottom:22px; }
  #cf2 .cf-panel.cf-hide{ display:none; }
  #cf2 .cf-hide{ display:none; }

  /* Email opt-in — shown only to "I'm in" voters */
  #cf2 .cf-optin-actions{ text-align:center; margin:8px 0 0; }
  #cf2 .cf-optin-skip{
    background:none; border:0; padding:6px 4px;
    color:var(--lslate); font-size:13px; font-family:inherit;
    text-decoration:underline; cursor:pointer;
  }
  #cf2 .cf-optin-skip:hover{ color:var(--navy); }
  #cf2 .cf-optin-note{
    font-size:12.5px; color:var(--lslate); font-style:italic;
    margin:12px 0 0; text-align:center; line-height:1.45;
  }
  #cf2 .cf-optin-thanks{
    font-family:"Georgia","Lora",serif; font-size:16px;
    color:var(--navy); margin:6px 0 18px; text-align:center;
  }
  #cf2 #cfEmail.cf-invalid{ border-color:#c62828; }
  #cf2 #cfEmail.cf-invalid:focus{ box-shadow:0 0 0 3px rgba(198,40,40,.15); }
  #cf2 .cf-panel-title{
    font-family:"Georgia","Lora",serif; font-size:22px;
    color:var(--navy); margin:0 0 6px; line-height:1.25;
  }
  #cf2 .cf-panel-sub{ font-size:14px; color:var(--slate); margin-bottom:14px; }
  #cf2 .cf-form-row{
    display:flex; gap:8px; flex-wrap:wrap;
  }
  #cf2 input{
    font-family:inherit; font-size:15px;
    padding:13px 18px; border:1.5px solid #D9D2C4;
    border-radius:999px; flex:1; min-width:200px;
    background:#fff; color:var(--navy); margin:0;
    transition:border-color .2s, box-shadow .2s;
  }
  #cf2 input:focus{
    outline:none; border-color:var(--gold);
    box-shadow:0 0 0 3px rgba(196,151,59,.2);
  }
  #cf2 .cf-send{
    background:var(--gold); color:#fff;
    box-shadow:0 4px 12px -4px rgba(196,151,59,.5);
  }
  #cf2 .cf-send:hover{
    background:var(--gold-ink); transform:translateY(-2px);
  }
  #cf2 .cf-honeypot{ position:absolute; left:-9999px; height:1px; width:1px; }

  /* ---- WALL OF EXCELLENT EXCUSES ---- */
  #cf2 .cf-wall{
    margin-top:10px;
    padding-top:26px;
    border-top:1px dashed #E1D5B8;
  }
  #cf2 .cf-wall-header{
    display:flex; align-items:baseline; justify-content:space-between;
    margin-bottom:16px; flex-wrap:wrap; gap:8px;
  }
  #cf2 .cf-wall-title{
    font-family:"Georgia","Lora",serif; font-size:22px;
    color:var(--navy); margin:0;
  }
  #cf2 .cf-wall-meta{
    font-size:12px; letter-spacing:.12em; text-transform:uppercase;
    color:var(--gold-ink); font-weight:700;
  }
  #cf2 .cf-excuses{
    display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
    gap:14px; padding:0; margin:0; list-style:none;
  }
  #cf2 .cf-excuse{
    background:#fff; border:1px solid #EFE5CE; border-radius:10px;
    padding:16px 18px 14px;
    box-shadow:0 4px 10px -6px rgba(27,42,74,.12);
    font-family:"Georgia","Lora",serif; font-size:15.5px;
    color:var(--navy); line-height:1.4;
    position:relative;
    transition:transform .25s, box-shadow .25s;
  }
  #cf2 .cf-excuse:nth-child(3n+1){ transform:rotate(-.7deg); }
  #cf2 .cf-excuse:nth-child(3n+2){ transform:rotate(.4deg); }
  #cf2 .cf-excuse:nth-child(3n+3){ transform:rotate(-.3deg); }
  #cf2 .cf-excuse:hover{
    transform:rotate(0deg) translateY(-3px);
    box-shadow:0 10px 22px -8px rgba(27,42,74,.22);
  }
  /* Small colored ribbon along the top of each card — replaces the awkward
     giant quote mark that was overlapping multi-line text. */
  #cf2 .cf-excuse::before{
    content:""; position:absolute; top:0; left:14px; right:14px; height:3px;
    background:linear-gradient(90deg, var(--gold) 0%, #E6B85C 100%);
    border-radius:0 0 3px 3px;
  }
  #cf2 .cf-excuse-body{ padding-top:6px; overflow-wrap:anywhere; }
  #cf2 .cf-excuse-day{
    display:block; font-family:"Inter","Helvetica Neue",sans-serif;
    font-size:10.5px; letter-spacing:.14em; text-transform:uppercase;
    color:var(--lslate); font-weight:700; margin-top:10px;
  }
  #cf2 .cf-excuse.cf-new{ animation:cfPop .6s cubic-bezier(.34,1.56,.64,1); }
  @keyframes cfPop{
    0%{ transform:scale(.6) rotate(0deg); opacity:0; }
    60%{ transform:scale(1.06) rotate(0deg); opacity:1; }
    100%{ transform:scale(1) rotate(-.7deg); opacity:1; }
  }
  #cf2 .cf-empty{
    grid-column:1/-1;
    text-align:center; padding:24px 8px;
    font-family:"Georgia","Lora",serif; color:var(--lslate);
    font-style:italic; font-size:15px;
  }
  /* "Show me more excuses" — reshuffles the wall client-side. Matches the share-btn look. */
  #cf2 .cf-wall-more-wrap{ text-align:center; margin-top:18px; }
  #cf2 .cf-wall-more{
    background:#fff; color:var(--navy);
    border:1.5px solid #E7DFCE; padding:11px 22px;
    font-size:14px; font-weight:700; border-radius:999px; cursor:pointer;
    font-family:inherit;
    transition:transform .15s, background .2s, color .2s, border-color .2s;
  }
  #cf2 .cf-wall-more:hover{ background:var(--navy); color:#fff; border-color:var(--navy); transform:translateY(-2px); }

  /* ---- FINE PRINT (demo-mode banner) ---- */
  #cf2 .cf-demo-banner{
    display:none; margin-top:16px; padding:8px 12px;
    background:#FFF5D6; border:1px dashed #E6C874;
    border-radius:8px; font-size:12px; color:#8A6B26;
    text-align:center;
  }
  #cf2.cf-is-demo .cf-demo-banner{ display:block; }
  #cf2 .cf-err{ color:#c62828; font-size:13.5px; text-align:center; margin:-10px 0 16px; font-weight:600; line-height:1.4; }
  #cf2 input.cf-invalid{ border-color:#c62828; }

  /* ---- REDUCED MOTION ----
     Confetti already respects this (disableForReducedMotion). Everything else
     that pulses, bumps, floats, rolls, or pops goes still too — vestibular
     users get a calm widget, everyone else keeps the show. */
  @media (prefers-reduced-motion: reduce){
    #cf2 .cf-battle.cf-mystery .cf-num{ animation:none; opacity:.6; }
    #cf2 .cf-num.cf-bump{ animation:none; }
    #cf2 .cf-float{ animation:none; opacity:0; }
    #cf2 .cf-excuse.cf-new{ animation:none; }
    #cf2 .cf-odo-strip{ transition:none; }
    #cf2 .cf-side{ transition:none; }
    #cf2 button, #cf2 .cf-share-btn{ transition:none; }
  }
</style>

<div class="cf-kicker">31-Day Caffeine Free Experiment</div>
<h2>31 days. No caffeine. Want in? 😏</h2>
<p class="cf-sub">If you want to join me on my next productivity experiment to go caffeine-free for a month, just click below. If you don't, feel free to write your reason on The Wall of Excellent Excuses!</p>
<!-- Day counter (kept for excuse timestamps in JS, hidden from visual): -->
<span id="cfDay" style="display:none">1</span>

<!-- THE BATTLE -->
<div class="cf-battle" id="cfBattle">
  <div class="cf-side cf-in" id="cfSideIn">
    <span class="cf-side-icon">☕🚫</span>
    <div class="cf-num" id="cfNumIn">?</div>
    <div class="cf-side-label">I'm in</div>
  </div>
  <div class="cf-side cf-out" id="cfSideOut">
    <span class="cf-side-icon">😅</span>
    <div class="cf-num" id="cfNumOut">?</div>
    <div class="cf-side-label">Absolutely not</div>
  </div>
</div>

<div class="cf-mystery-hint" id="cfMysteryHint">🔒 Cast your vote to reveal the count · <button type="button" class="cf-peek-link" id="cfPeek">just show me the results</button></div>

<!-- VOTE BUTTONS -->
<div class="cf-btns" id="cfBtns">
  <button class="cf-vote-in" id="cfVoteIn"><span class="cf-emoji">☕🚫</span> Count me in</button>
  <button class="cf-vote-out" id="cfVoteOut"><span class="cf-emoji">😅</span> Absolutely not</button>
</div>

<p class="cf-err cf-hide" id="cfErr" role="alert"></p>

<!-- Honeypot: real users never fill "website" -->
<input class="cf-honeypot" type="text" id="cfHp" name="website" tabindex="-1" autocomplete="off" aria-hidden="true">

<!-- POST-VOTE: "I'm in" flow -->
<div class="cf-panel cf-hide" id="cfPanelIn">
  <h3 class="cf-panel-title">You're on it.</h3>

  <div id="cfOptin">
    <p class="cf-panel-sub">Can I ask you a follow-up question about how the experiment goes (via email)?</p>
    <div class="cf-form-row">
      <input type="email" id="cfEmail" maxlength="120" placeholder="your@email.com" autocomplete="email" inputmode="email">
      <button class="cf-send" id="cfEmailYes">Sure!</button>
    </div>
    <p class="cf-optin-actions">
      <button type="button" class="cf-optin-skip" id="cfEmailNo">No thanks!</button>
    </p>
    <p class="cf-optin-note">If you're not on my newsletter, I'll add you so you can get updates about the experiment! Unsubscribe anytime.</p>
  </div>

  <p class="cf-optin-thanks cf-hide" id="cfOptinThanks"></p>

  <div class="cf-share">
    <p class="cf-share-title">Rope some friends in—misery loves company.</p>
    <div class="cf-share-preview" id="cfSharePreviewIn"></div>
    <div class="cf-share-btns">
      <button class="cf-share-btn" id="cfShareInX">Share on X</button>
      <button class="cf-share-btn" id="cfShareInLI">LinkedIn</button>
      <button class="cf-share-btn" id="cfShareInCopy">Copy link</button>
    </div>
  </div>
</div>

<!-- POST-VOTE: "Absolutely not" flow -->
<div class="cf-panel cf-hide" id="cfPanelOut">
  <h3 class="cf-panel-title">Fine. If you have a sec, tell me why!<!-- [CHRIS-VOICE] --></h3>
  <p class="cf-panel-sub">Your excuse will appear on the wall below. The best ones might make the newsletter…<!-- [CHRIS-VOICE] --></p>
  <div class="cf-form-row">
    <input id="cfWhy" maxlength="90" placeholder="Your entirely valid reason…">
    <button class="cf-send" id="cfWhySend">Submit my excuse</button>
  </div>

  <!-- Email capture on the "out" side too — the whole point of the Kit upgrade.
       Tagged caffeine-out server-side. Same classes as the in-side opt-in. -->
  <div id="cfOptinOut">
    <p class="cf-panel-sub">Want updates on the experiment? Just plug your email below!</p>
    <div class="cf-form-row">
      <input type="email" id="cfEmailOut" maxlength="120" placeholder="your@email.com" autocomplete="email" inputmode="email">
      <button class="cf-send" id="cfEmailOutYes">Sign me up</button>
    </div>
    <p class="cf-optin-actions">
      <button type="button" class="cf-optin-skip" id="cfEmailOutNo">No thanks!</button>
    </p>
    <p class="cf-optin-note">If you're not on my newsletter, I'll add you so you can get updates about the experiment! Unsubscribe anytime.</p>
  </div>
  <p class="cf-optin-thanks cf-hide" id="cfOptinOutThanks"></p>

  <div class="cf-share">
    <p class="cf-share-title">Send a friend to the wall—see if theirs beats yours.</p>
    <div class="cf-share-preview" id="cfSharePreviewOut"></div>
    <div class="cf-share-btns">
      <button class="cf-share-btn" id="cfShareOutX">Share on X</button>
      <button class="cf-share-btn" id="cfShareOutLI">LinkedIn</button>
      <button class="cf-share-btn" id="cfShareOutCopy">Copy link</button>
    </div>
  </div>
</div>

<!-- WALL OF EXCELLENT EXCUSES -->
<div class="cf-wall">
  <div class="cf-wall-header">
    <h3 class="cf-wall-title">The Wall of Excellent Excuses</h3>
    <span class="cf-wall-meta" id="cfWallCount">0 excuses</span>
  </div>
  <ul class="cf-excuses" id="cfExcuses"></ul>
  <div class="cf-wall-more-wrap">
    <button type="button" class="cf-wall-more" id="cfWallMore">🎲 Show me more excuses</button>
  </div>
</div>

<div class="cf-demo-banner">Demo mode—running on fake data. Wire up your <code>caffeine.php</code> endpoint to make this real.</div>

<script>
(function(){
  // ====== CONFIG ======
  var API_URL          = "https://chrisbailey.com/cf/caffeine.php";  // "" to force demo mode
  var START_DATE       = "2026-07-08";     // day 1 of the experiment
  var MIN_LOSING_WIDTH = 22;               // % — floor so the smaller side never fully disappears
  var POLL_INTERVAL    = 60000;            // ms — ambient live-feed refresh; set to 0 to disable (raised 25s->60s to ease load)
  var SHARE_URL        = "https://chrisbailey.com/caffeine-free-experiment/";  // canonical post URL for X, LinkedIn, and Copy link
  var SHARE_HANDLE     = "";               // e.g. "@chris_bailey" — leave "" to skip @-tag
  var FLOAT_EMOJI      = "😍";             // ambient love, no matter which side voted
  var WALL_SHOW        = 12;               // excuses shown at once — a RANDOM pick from the server's pool, for variety
  // ====================
  var demo = !API_URL;
  var $ = function(id){ return document.getElementById(id); };
  function esc(t){ var d=document.createElement('div'); d.textContent=t; return d.innerHTML; }
  if(demo) document.getElementById('cf2').classList.add('cf-is-demo');

  // Day counter
  var d0 = new Date(START_DATE+"T00:00:00"), now = new Date();
  var day = Math.max(1, Math.floor( (now - d0)/86400000) + 1);
  $('cfDay').textContent = day > 31 ? 31 : day;

  // ---- STATE / STORAGE ----
  function seed(){
    return {
      yes: 34,
      no: 127,
      excuses: [
        { t: "I have a toddler and a book to write.", when: "day 1" },
        { t: "My identity is 65% coffee.",             when: "day 1" },
        { t: "I would rather sacrifice a limb.",       when: "day 1" }
      ]
    };
  }
  // Safe localStorage — some privacy modes throw on access; never let that break the widget.
  function lsGet(k){ try{ return localStorage.getItem(k); }catch(e){ return null; } }
  function lsSet(k,v){ try{ localStorage.setItem(k,v); }catch(e){} }
  function getS(fresh){
    if(demo){ return Promise.resolve(JSON.parse(lsGet('cfx2')||JSON.stringify(seed()))); }
    // Background polls use the HTTP cache — the backend sets a 10s Cache-Control
    // precisely to absorb refresh storms, so every open tab shouldn't bypass it.
    // Only user-initiated reads (peek/reveal) force a fresh fetch.
    return fetch(API_URL, fresh ? { cache:'no-store' } : {}).then(function(r){
      if(!r.ok){ var e = new Error('HTTP '+r.status); e.status = r.status; throw e; }
      return r.json();
    });
  }
  // side ('in' | 'out') rides along on email posts so the backend applies the
  // right Kit tag (caffeine-in / caffeine-out). Harmless/ignored for votes+excuses.
  function post(kind,text,side){
    if(demo){ return getS().then(function(s){
      if(kind==='yes'){ s.yes++; }
      if(kind==='no'){  s.no++;  }
      if(kind==='why' && text){
        s.excuses = [{t:text, when:"day "+day, isNew:true}].concat(s.excuses||[]).slice(0,20);
      }
      lsSet('cfx2', JSON.stringify(s));
      return s;
    }); }
    return fetch(API_URL, {
      method:"POST",
      headers:{"Content-Type":"application/json"},
      body: JSON.stringify({ kind:kind, text:text||"", side:side||"", website:$('cfHp').value })
    }).then(function(r){
      if(!r.ok){ var e = new Error('HTTP '+r.status); e.status = r.status; throw e; }
      return r.json();
    });
  }

  // ---- ODOMETER (rolling-digit number reveal) ----
  // Each digit is a fixed-height (1em) window over a strip of 0-9 stacked
  // vertically. CSS transitions the strip's translateY to slide the target
  // digit into view — physical, satisfying, matches classic split-flap feel.
  function setOdo(el, value, animate){
    var str = String(Math.max(0, value|0));
    var rebuilt = false;

    // Screen readers get the plain number; the rolling digit strips underneath
    // are decoration (they'd otherwise read as "0 1 2 3 4 5 6 7 8 9…" per digit).
    el.setAttribute('role','text');
    el.setAttribute('aria-label', str);

    // Rebuild digit slots if length changed OR odometer not yet initialized
    // (element still shows "?" or a different digit count)
    if(!el.classList.contains('cf-odo') || el.children.length !== str.length){
      el.classList.add('cf-odo');
      el.innerHTML = '';
      for(var i=0;i<str.length;i++){
        var digit = document.createElement('span');
        digit.className = 'cf-odo-digit';
        digit.setAttribute('aria-hidden','true');
        var strip = document.createElement('span');
        strip.className = 'cf-odo-strip';
        for(var j=0;j<=9;j++){
          var num = document.createElement('span');
          num.className = 'cf-odo-num';
          num.textContent = j;
          strip.appendChild(num);
        }
        digit.appendChild(strip);
        el.appendChild(digit);
      }
      rebuilt = true;
    }

    // Priming: on a fresh rebuild WITH animation requested, lock initial state
    // to translateY(0) — otherwise the browser batches innerHTML + style set
    // into one paint and skips the transition. This is what makes the
    // returning-voter roll-up-from-zero look clean.
    if(rebuilt && animate){
      for(var m=0;m<str.length;m++){
        var s0 = el.children[m].firstElementChild;
        s0.style.transition = 'none';
        s0.style.transform  = 'translateY(0)';
      }
      void el.offsetHeight;                        // force reflow
      for(var n=0;n<str.length;n++){
        el.children[n].firstElementChild.style.transition = '';
      }
    }

    // Position each digit strip; disable transition on the reset case
    for(var k=0;k<str.length;k++){
      var d = parseInt(str[k], 10); if(isNaN(d)) d = 0;
      var s = el.children[k].firstElementChild;   // .cf-odo-strip
      if(!animate){
        s.style.transition = 'none';
        s.style.transform = 'translateY(-' + (d*10) + '%)';
        void s.offsetHeight;                       // reflow to lock the jump
        s.style.transition = '';
      } else {
        s.style.transform = 'translateY(-' + (d*10) + '%)';
      }
    }
  }

  // ---- RATIO WIDTHS (the "tip") ----
  function setBalance(s, animate){
    var total = Math.max(1, (s.yes||0) + (s.no||0));
    var inPct = (s.yes/total)*100;
    var outPct = 100 - inPct;
    // enforce floor so the losing side never disappears
    if(inPct < MIN_LOSING_WIDTH) { inPct = MIN_LOSING_WIDTH; outPct = 100 - inPct; }
    if(outPct < MIN_LOSING_WIDTH){ outPct = MIN_LOSING_WIDTH; inPct = 100 - outPct; }
    $('cfSideIn').style.flexBasis  = inPct  + '%';
    $('cfSideOut').style.flexBasis = outPct + '%';
  }

  // ---- MYSTERY REVEAL ----
  // While battle has .cf-mystery class, numbers show "?" and ratio widths stay
  // at 50/50. reveal() strips the class + resets the odometer to 0 so the first
  // post-vote render rolls up from zero to the real count.
  // IDEMPOTENT: if already revealed (e.g. user clicked "just show me" then
  // votes), reveal() no-ops — otherwise numbers would roll back to 0 and then
  // up again on the vote, which is jarring.
  function reveal(){
    if(!$('cfBattle').classList.contains('cf-mystery')) return;
    $('cfBattle').classList.remove('cf-mystery');
    setOdo($('cfNumIn'),  0, false);
    setOdo($('cfNumOut'), 0, false);
    prev = { yes:0, no:0 };
  }

  // ---- WALL VARIETY ----
  // The server ships a POOL of the freshest excuses (see caffeine.php pub()); we
  // display a random WALL_SHOW of them so different visitors — and the "show me
  // more" button — see different excuses. Dates are intentionally not shown.
  // Math.random is fine here (this is browser code, not a workflow script).
  var wallPool = [];
  function shuffle(a){ for(var i=a.length-1;i>0;i--){ var j=Math.floor(Math.random()*(i+1)); var t=a[i]; a[i]=a[j]; a[j]=t; } return a; }
  function renderWall(pin){
    var wall = $('cfExcuses');
    var pool = wallPool.slice();
    if(pin){ pool = pool.filter(function(x){ return x.t !== pin.t; }); }    // drop the server's copy of this text so it can't appear twice
    shuffle(pool);
    var show = pool.slice(0, Math.max(0, WALL_SHOW - (pin ? 1 : 0)));
    if(pin){ show.unshift(pin); }                                           // the user's own just-posted excuse, on top
    wall.innerHTML = "";
    if(show.length === 0){
      wall.innerHTML = '<li class="cf-empty">No excuses yet. Someone has to go first.</li>';
    } else {
      show.forEach(function(x){
        var li = document.createElement('li');
        li.className = 'cf-excuse' + (x.isNew ? ' cf-new' : '');
        li.innerHTML = '<div class="cf-excuse-body">'+esc(x.t)+'</div>';    // no date — variety over chronology
        wall.appendChild(li);
        delete x.isNew;
      });
    }
    var more = $('cfWallMore'); if(more){ more.style.display = (wallPool.length > WALL_SHOW) ? '' : 'none'; }
  }

  // ---- RENDER ----
  var prev = { yes:0, no:0 };
  function render(s, opts){
    opts = opts || {};
    var mystery = $('cfBattle').classList.contains('cf-mystery');

    // Numbers + balance only when the reveal has happened
    if(!mystery){
      setOdo($('cfNumIn'),  s.yes, !!opts.animate);
      setOdo($('cfNumOut'), s.no,  !!opts.animate);
      if(opts.bump === 'in')  { $('cfNumIn').classList.remove('cf-bump');  void $('cfNumIn').offsetWidth;  $('cfNumIn').classList.add('cf-bump'); }
      if(opts.bump === 'out') { $('cfNumOut').classList.remove('cf-bump'); void $('cfNumOut').offsetWidth; $('cfNumOut').classList.add('cf-bump'); }
      prev = { yes:s.yes, no:s.no };
      setBalance(s, opts.animate);
    }

    // Keep the freshest POOL for the shuffle; the wall LIST itself is drawn by
    // renderWall() (a random pick), NOT here — so background polls refresh the
    // counts without yanking the wall out from under someone mid-read.
    wallPool = (s.excuses || []);
    var more = $('cfWallMore'); if(more){ more.style.display = (wallPool.length > WALL_SHOW) ? '' : 'none'; }
    // Real total from the server — the pool is a subset, but "137 excuses" is
    // much better social proof than the dozen we display.
    var wallTotal = (typeof s.excuseTotal === 'number') ? s.excuseTotal : wallPool.length;
    $('cfWallCount').textContent = wallTotal + (wallTotal===1 ? ' excuse' : ' excuses');
  }

  // ---- CONFETTI ----
  function burst(side){
    if(typeof confetti !== 'function') return;
    var el = side==='in' ? $('cfSideIn') : $('cfSideOut');
    var r = el.getBoundingClientRect();
    var origin = { x: (r.left + r.width/2) / window.innerWidth, y: (r.top + r.height/2) / window.innerHeight };
    var colours = side==='in'
      ? ['#1B2A4A','#3A5089','#C4973B','#FAF7F2']
      : ['#C4973B','#E6B85C','#1B2A4A','#FAF7F2'];
    confetti({
      particleCount: 65, spread: 70, startVelocity: 42,
      origin: origin, colors: colours,
      shapes: ['square','circle'], scalar: 0.9,
      disableForReducedMotion: true
    });
  }

  // ---- VOTING FLOW ----
  var voted = lsGet('cfVoted2');
  var voting = false;
  if(voted){
    // Returning voter — they've earned the reveal. Buttons hidden.
    $('cfBtns').classList.add('cf-hide');
    reveal();
  } else {
    // Fresh visitor — mystery mode. Numbers stay "?" until a vote.
    $('cfBattle').classList.add('cf-mystery');
  }

  function afterVote(side){
    lsSet('cfVoted2', side);
    voted = side;
    $('cfBtns').classList.add('cf-hide');
    if(side==='in')  { $('cfPanelIn').classList.remove('cf-hide');  populateSharePreview('in');  }
    if(side==='out') { $('cfPanelOut').classList.remove('cf-hide'); populateSharePreview('out'); }
  }

  // Populate the share-text preview shown above the buttons.
  // Chris wants the funny share copy visible even for people who don't click
  // through — LinkedIn strips pre-filled text, so this preview is the ONLY
  // place they'll see the joke unless they hit "Share on X".
  function populateSharePreview(side){
    var el = side === 'in' ? $('cfSharePreviewIn') : $('cfSharePreviewOut');
    if(!el) return;
    var text = side === 'in' ? shareTextIn() : shareTextOut();
    el.textContent = '"' + text + ' ' + shareUrl() + '"';
  }
  function showVoteError(status){
    var e = $('cfErr'); if(!e) return;
    e.textContent = status === 429
      ? "You're posting a little fast—give it a minute" // [CHRIS-VOICE]
      : "That didn't go through. Check your connection and try again."; // [CHRIS-VOICE]
    e.classList.remove('cf-hide');
    clearTimeout(showVoteError._t);
    showVoteError._t = setTimeout(function(){ e.classList.add('cf-hide'); }, 6000);
  }
  $('cfVoteIn').onclick = function(){
    if(voted || voting) return;
    voting = true; reveal();
    post('yes').then(function(s){ voting = false; render(s, { animate:true, bump:'in' }); burst('in'); afterVote('in'); })
               .catch(function(err){ voting = false; showVoteError(err && err.status); });
  };
  $('cfVoteOut').onclick = function(){
    if(voted || voting) return;
    voting = true; reveal();
    post('no').then(function(s){ voting = false; render(s, { animate:true, bump:'out' }); burst('out'); afterVote('out'); })
              .catch(function(err){ voting = false; showVoteError(err && err.status); });
  };
  // ---- EMAIL OPT-IN (only "I'm in" voters see this) ----
  // Superfan signal — anyone who both commits AND hands over an email is Chris's
  // highest-intent segment. Server dedupes so double-clicks don't multi-add.
  // "No thanks!" is a first-class option; no penalty, no re-prompt.
  var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

  // ---- KIT DOUBLE OPT-IN (native) ----
  // Email capture posts straight to a Kit form (one per side) via the form's own
  // public subscribe endpoint. Kit handles double opt-in — it sends the confirmation
  // email and holds the person UNCONFIRMED until they click it — and a Kit rule on
  // each form applies the side tag (caffeine-in / caffeine-out), which drives the
  // Welcome v2 sequence on confirm. The endpoint's CORS is open (ACAO:*), so we read
  // the JSON and show our own inline success. No API keys, no backend involvement.
  //   caffeine-in  form 9689650  ·  caffeine-out form 9689662
  var KIT_FORM = { 'in': '9689650', 'out': '9689662' };
  // Resolves {ok:true, quarantined:bool} on a handled response; rejects (err.status set)
  // on network / timeout / non-JSON / error status so the caller can offer a retry.
  // A 15s timeout guards against a hung socket leaving the button stuck on "Sending…".
  function kitSubscribe(email, side){
    var hp = $('cfHp');
    if (hp && hp.value) { return Promise.resolve({ ok:true, skipped:true }); } // honeypot: look successful, send nothing
    var ctl = ('AbortController' in window) ? new AbortController() : null;
    var timer = ctl ? setTimeout(function(){ ctl.abort(); }, 15000) : null;
    var clear = function(){ if (timer) { clearTimeout(timer); timer = null; } };
    return fetch('https://app.convertkit.com/forms/' + KIT_FORM[side] + '/subscriptions', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, // no credentials — ACAO is '*'
      body: JSON.stringify({ email_address: email }),
      signal: ctl ? ctl.signal : undefined
    }).then(function(r){
      return r.json().catch(function(){ return {}; }).then(function(data){
        var st = data && data.status;
        if (st === 'success')     { return { ok:true, quarantined:false }; }
        if (st === 'quarantined') { return { ok:true, quarantined:true  }; } // held for review — terminal, don't loop
        var e = new Error('kit:' + (st || r.status)); e.status = r.status; throw e;
      });
    }).then(function(res){ clear(); return res; }, function(err){ clear(); throw err; });
  }

  // Shared opt-in submit for both sides. Success → hide form, show the confirm-your-inbox
  // message. quarantined → a terminal "I'll add you shortly" note (never prompt a retry Kit
  // would just throttle). A genuine submit failure → re-enable with "Try again" and DON'T
  // flag the email as invalid (it already passed EMAIL_RE — the problem is the network/server).
  function submitOptin(o){
    var field = $(o.field), btn = o.btn;
    var em = field.value.trim();
    if (!em || !EMAIL_RE.test(em)) {
      field.classList.add('cf-invalid'); field.focus();
      setTimeout(function(){ field.classList.remove('cf-invalid'); }, 1600);
      return;
    }
    btn.disabled = true; btn.textContent = "Sending…";
    kitSubscribe(em, o.side).then(function(res){
      $(o.panel).classList.add('cf-hide');
      $(o.thanks).textContent = res.quarantined
        ? "Got it — I’ll get you added shortly. No need to resubmit."
        : o.okText;
      $(o.thanks).classList.remove('cf-hide');
    }).catch(function(err){
      btn.disabled = false; btn.textContent = "Try again";
      showVoteError(err && err.status === 429 ? 429 : 0);
    });
  }

  $('cfEmailYes').onclick = function(){
    submitOptin({ field:'cfEmail', side:'in', panel:'cfOptin', thanks:'cfOptinThanks', btn:this,
      okText:"Almost in! Check your inbox and click the confirmation link to lock in your spot. ☕" });
  };
  $('cfEmailNo').onclick = function(){
    $('cfOptin').classList.add('cf-hide');
    $('cfOptinThanks').textContent = "Fair enough. Enjoy the experiment!";
    $('cfOptinThanks').classList.remove('cf-hide');
  };

  // ---- EMAIL CAPTURE — "Absolutely not" side (tags caffeine-out in Kit) ----
  // Mirrors the in-side flow; the only difference is side:'out', which routes to
  // the Caffeine Out Kit form so Kit applies the caffeine-out tag on double opt-in.
  $('cfEmailOutYes').onclick = function(){
    submitOptin({ field:'cfEmailOut', side:'out', panel:'cfOptinOut', thanks:'cfOptinOutThanks', btn:this,
      okText:"Almost there! Check your inbox and click the confirmation link to get experiment updates." });
  };
  $('cfEmailOutNo').onclick = function(){
    $('cfOptinOut').classList.add('cf-hide');
    $('cfOptinOutThanks').textContent = "Fair enough. Enjoy the experiment!";
    $('cfOptinOutThanks').classList.remove('cf-hide');
  };

  $('cfWhySend').onclick = function(){
    var t = $('cfWhy').value.trim();
    if(t.length < 4){ $('cfWhy').classList.add('cf-invalid'); $('cfWhy').focus(); setTimeout(function(){ $('cfWhy').classList.remove('cf-invalid'); }, 1600); return; }
    var btn = this; btn.disabled = true; btn.textContent = "Sending…";
    post('why', t).then(function(s){ render(s, { animate:true }); renderWall({ t: t, isNew: true }); $('cfWhy').value = ''; btn.textContent = "On the wall ✓"; })
                  .catch(function(err){ btn.disabled = false; btn.textContent = "Please try again!"; if(err && err.status === 429) showVoteError(429); $('cfWhy').classList.add('cf-invalid'); $('cfWhy').focus(); setTimeout(function(){ $('cfWhy').classList.remove('cf-invalid'); }, 1600); });
  };

  // ---- "SHOW ME MORE" — reshuffle the wall to a fresh random dozen, no reload ----
  $('cfWallMore').onclick = function(){ renderWall(); };

  // ---- PEEK ("just show me the results") ----
  $('cfPeek').onclick = function(e){
    e.preventDefault();
    if(!$('cfBattle').classList.contains('cf-mystery')) return;
    getS(true).then(function(s){
      reveal();
      render(s, { animate:true });
      lastPollState = { yes:s.yes, no:s.no };
    }).catch(function(err){ showVoteError(err && err.status); });   // silent failure looked like a dead link
  };

  // ---- SHARE ----
  function shareUrl(){ return SHARE_URL || window.location.href; }
  function tag(){ return SHARE_HANDLE ? (' ' + SHARE_HANDLE) : ''; }
  function shareTextIn(){
    return "I'm going 31 days caffeine-free with Chris Bailey" + tag() + ". Come with—or watch me suffer:";
  }
  function shareTextOut(){
    return "I refused Chris Bailey's 31-day caffeine-free challenge" + tag() + ". My excellent excuse is on the wall:";
  }
  function openX(text){
    window.open('https://twitter.com/intent/tweet?text='
      + encodeURIComponent(text) + '&url=' + encodeURIComponent(shareUrl()),
      '_blank', 'noopener,noreferrer');
  }
  function openLI(){
    // LinkedIn scrapes OG tags from the shared URL — pre-filled text isn't supported.
    window.open('https://www.linkedin.com/sharing/share-offsite/?url='
      + encodeURIComponent(shareUrl()),
      '_blank', 'noopener,noreferrer');
  }
  function copyLink(btn){
    var url = shareUrl();
    var done = function(){
      var orig = btn.textContent;
      btn.classList.add('cf-copied');
      btn.textContent = 'Copied ✓';
      setTimeout(function(){ btn.classList.remove('cf-copied'); btn.textContent = orig; }, 1800);
    };
    if(navigator.clipboard && navigator.clipboard.writeText){
      navigator.clipboard.writeText(url).then(done).catch(function(){
        // Fallback: temp textarea + execCommand for older browsers
        var ta = document.createElement('textarea');
        ta.value = url; ta.style.position='fixed'; ta.style.left='-9999px';
        document.body.appendChild(ta); ta.select();
        try{ document.execCommand('copy'); done(); } catch(e){}
        document.body.removeChild(ta);
      });
    }
  }
  $('cfShareInX').onclick    = function(){ openX(shareTextIn()); };
  $('cfShareInLI').onclick   = openLI;
  $('cfShareInCopy').onclick = function(){ copyLink(this); };
  $('cfShareOutX').onclick    = function(){ openX(shareTextOut()); };
  $('cfShareOutLI').onclick   = openLI;
  $('cfShareOutCopy').onclick = function(){ copyLink(this); };

  // ---- AMBIENT LOVE (emoji floats when polling reveals new votes) ----
  function floatEmoji(side){
    var host = side === 'in' ? $('cfSideIn') : $('cfSideOut');
    var el = document.createElement('div');
    el.className = 'cf-float';
    el.textContent = FLOAT_EMOJI;
    host.appendChild(el);
    setTimeout(function(){ if(el.parentNode) el.parentNode.removeChild(el); }, 2400);
  }
  // Console preview: cfPreview('in') or cfPreview('out') — trigger a float
  // manually without waiting for someone else to vote. Handy for QA.
  window.cfPreview = function(side){ floatEmoji(side === 'out' ? 'out' : 'in'); };

  // ---- LIVE POLL ----
  // Every POLL_INTERVAL ms while the tab is visible, re-fetch state. If the
  // yes/no totals moved, spawn a float on the corresponding side (cap 3 per
  // tick so a big burst doesn't chain-spam). Wall + numbers update if visible.
  // Exponential backoff on failure: if the server is having a bad day, every
  // open tab shouldn't be hammering it at 25s intervals forever.
  var lastPollState = null;
  var pollFailures  = 0;
  var pollTimer     = null;
  var pollInFlight  = false;
  function pollTick(){
    if(pollInFlight) return;                    // never stack concurrent polls
    if(document.hidden){ schedulePoll(); return; }
    pollInFlight = true;
    getS().then(function(s){
      pollFailures = 0;
      if(lastPollState){
        var yesDelta = Math.max(0, s.yes - lastPollState.yes);
        var noDelta  = Math.max(0, s.no  - lastPollState.no);
        for(var i=0; i<Math.min(yesDelta, 3); i++){
          (function(idx){ setTimeout(function(){ floatEmoji('in');  }, idx*350); })(i);
        }
        for(var i=0; i<Math.min(noDelta, 3); i++){
          (function(idx){ setTimeout(function(){ floatEmoji('out'); }, idx*350); })(i);
        }
      }
      lastPollState = { yes:s.yes, no:s.no };
      render(s, { animate:true });
      if(!$('cfExcuses').children.length) renderWall();   // failed initial load never drew the wall — draw it now (idempotent)
    }).catch(function(){
      pollFailures++;                                                       // network hiccup — back off next tick
    }).then(function(){ pollInFlight = false; schedulePoll(); });
  }
  function schedulePoll(){
    if(POLL_INTERVAL <= 0) return;
    clearTimeout(pollTimer);
    var mult  = pollFailures > 0 ? Math.pow(2, Math.min(pollFailures, 5)) : 1;   // cap 32x
    var delay = Math.min(POLL_INTERVAL * mult, 300000);                          // hard cap 5min
    delay = delay * (0.85 + Math.random()*0.3);   // ±15% jitter — 10,000 newsletter tabs must not tick in lockstep
    pollTimer = setTimeout(pollTick, delay);
  }
  // Coming back to the tab = instant refresh (numbers catch up right away
  // instead of sitting stale for up to a full poll interval).
  document.addEventListener('visibilitychange', function(){
    if(!document.hidden && POLL_INTERVAL > 0){ clearTimeout(pollTimer); pollTick(); }
  });

  // ---- INITIAL RENDER + POLL KICKOFF ----
  // Voted users get the odometer roll-up from 0. Fresh visitors see "?" until
  // they either vote or click "just show me". Either way, kick off polling so
  // the widget feels alive when Chris blasts the newsletter.
  // SELF-HEALING: if the very first fetch fails (server hiccup at the moment
  // the newsletter lands), fall into the backoff poll loop instead of dying —
  // the old code never started polling after a failed first load, leaving the
  // widget permanently stuck at "?" until a manual page reload.
  getS().then(function(s){
    render(s, { animate: !!voted });
    renderWall();                          // draw the first random dozen
    lastPollState = { yes:s.yes, no:s.no };
    schedulePoll();
  }).catch(function(e){
    console.error('[caffeine widget] initial load failed, retrying:', e);
    pollFailures++;
    schedulePoll();
  });
})();
</script>
</div>
</div>
          </div>
  </section>

  <!-- PREVIOUS EXPERIMENTS -->
  <section style="background:var(--bg);padding:clamp(52px,6vw,80px) 0;border-bottom:1px solid var(--rule)">
    <div class="wrap">
      <span style="font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--teal)">Previous experiments</span>
      <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(28px,3.6vw,42px);line-height:1.06;letter-spacing:-.02em;margin:10px 0 26px;text-wrap:pretty">A decade of experiments <em style="font-style:italic;color:var(--teal)">like this one.</em></h2>
      <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:8px 22px">
                  <a href="https://chrisbailey.com/top-10-things-learned-productivity-meditating-for-35-hours/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🧘</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Meditating for 35 hours in a week</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/5-things-i-discovered-by-making-myself-bored-for-a-month/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🥱</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Making myself bored for a month</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/10-things-learned-smartphone-60-minutes-a-day/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">📵</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">My phone, 60 minutes a day</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/experiment-taking-a-bill-gates-think-week/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🧠</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Taking a week-long think week</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/living-like-a-caveman-for-a-month-experiment/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🦴</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Living like a caveman for a month</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/experiment-5-huge-lessons-i-learned-binge-watching-netflix-for-an-entire-month/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">📺</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Binge-watching Netflix for a month</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/a-week-of-ted-experiment-results/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🎤</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">A week of watching TED talks</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
                  <a href="https://chrisbailey.com/experiments/" class="arch" style="display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;color:var(--ink)">
            <span style="flex:none;width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:var(--cream);border:1px solid var(--rule2);border-radius:11px">🗂️</span>
            <span style="flex:1;min-width:0;font-family:var(--serif);font-weight:600;font-size:15.5px;line-height:1.3;color:var(--ink)">Every experiment, one page</span>
            <span style="flex:none;color:var(--teal);font-weight:900;font-size:16px">&rarr;</span>
          </a>
              </div>
    </div>
  </section>

  <!-- NEWSLETTER -->
  <section id="magnet" style="background:var(--deep);color:#eef1f5;padding:clamp(56px,7vw,88px) 0">
    <div class="wrap" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:clamp(28px,4vw,48px);align-items:center">
      <div>
        <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(30px,4vw,46px);line-height:1.05;letter-spacing:-.02em;margin:0 0 16px;color:#fff;text-wrap:pretty">Join my <em style="font-style:italic;color:var(--orange)">next experiment!</em></h2>
        <p style="font-size:16.5px;color:#aab3c2;max-width:520px;margin:0 0 8px">I run each live experiment once. Get on the list so you can hear the second the next one opens! I'm always looking for people to do them alongside me ;-)</p>
        <!-- Kit "Newsletter - Inline" form (form id 4846395, uid 63f9a4f444).
             One source of truth: the same Kit form used elsewhere on the site.
             Kit injects its own first-name + email + "SIGN ME UP" fields here. -->
        <div style="margin-top:22px">
          <script async data-uid="63f9a4f444" src="https://chrisbailey.kit.com/63f9a4f444/index.js"></script>
        </div>
        <p style="font-size:11.5px;color:#6f7988;letter-spacing:.06em;text-transform:uppercase;margin-top:14px">Free &middot; No spam &middot; Unsubscribe anytime</p>
      </div>
      <div style="background:#121922;border:1px solid #232d3a;border-radius:16px;padding:24px 28px">
        <h4 style="margin:0 0 14px;font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--orange);font-weight:900">Right now</h4>
        <ul style="margin:0;padding:0;list-style:none">
                    <li style="font-family:var(--serif);font-size:15px;color:#dbe1e9;padding:11px 0"><span style="color:var(--gold);font-weight:800">Next &middot;</span> Analog afternoons</li>
        </ul>
      </div>
    </div>
  </section>

  <!-- INTENTIONAL BAND -->
  <section style="background:linear-gradient(160deg,#FFF3EA,#FCE4D2);padding:clamp(56px,7vw,88px) 0;border-bottom:1px solid #f0d9c6">
    <div class="wrap" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:clamp(32px,5vw,60px);align-items:center">
      <div style="display:flex;justify-content:center">
        <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/intentional-cover-home.jpg" alt="Intentional — How to Finish What You Start, by Chris Bailey" loading="lazy" decoding="async" style="width:100%;max-width:300px;aspect-ratio:2/3;object-fit:cover;border-radius:8px;box-shadow:0 40px 70px -34px rgba(214,78,24,.6)">
      </div>
      <div>
        <span style="font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:900;color:var(--orangeD)">The new book</span>
        <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(28px,3.6vw,42px);line-height:1.08;letter-spacing:-.018em;margin:12px 0 16px;color:var(--ink);text-wrap:pretty">Setting goals is easy. <em style="font-style:italic;color:var(--orangeD)">Following through?</em> A whole lot harder.</h2>
        <p style="font-family:var(--serif);font-size:17.5px;color:var(--ink2);max-width:560px;margin:0 0 14px"><strong>Intentional</strong>&mdash;my new book. It's about accomplishing more with the science of goal attainment.</p>
        <p style="font-family:var(--serif);font-style:italic;font-size:16.5px;color:var(--ink2);max-width:560px;margin:0 0 22px;border-left:3px solid var(--orange);padding-left:16px">"A powerful guide to turning ambition into action&mdash;by focusing not on willpower but on what matters most."<br><span style="font-style:normal;font-size:13px;color:var(--ink3);font-family:var(--sans);font-weight:700">Charles Duhigg &middot; Author of Supercommunicators</span></p>
        <div style="display:flex;gap:12px;flex-wrap:wrap">
          <a href="https://chrisbailey.com/intentional/" class="btn-primary" style="display:inline-flex;align-items:center;gap:8px;background:var(--orange);color:#fff;border-radius:999px;padding:14px 26px;font-weight:800;font-size:15px;box-shadow:0 14px 26px -12px rgba(240,98,42,.7)">Get Intentional &rarr;</a>
          <a href="https://chrisbailey.com/values-test/" class="btn-values" style="display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.7);border:1.6px solid #e6c3ab;color:var(--ink);border-radius:999px;padding:14px 26px;font-weight:800;font-size:15px">Take the Values Test &rarr;</a>
        </div>
      </div>
    </div>
  </section>

  <!-- ARTICLES -->
  <section id="articles" style="background:var(--bg);padding:clamp(56px,7vw,88px) 0;border-bottom:1px solid var(--rule)">
    <div class="wrap">
      <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(30px,4vw,46px);line-height:1.06;letter-spacing:-.02em;margin:0 0 34px;text-wrap:pretty">Fresh <em style="font-style:italic;color:var(--orange)">articles.</em></h2>
      <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:22px">
        <a href="https://chrisbailey.com/the-real-reason-i-quit-caffeine/" class="art" style="background:var(--card);border:1px solid var(--rule2);border-radius:16px;overflow:hidden;color:var(--ink);display:block">
          <div style="aspect-ratio:16/9;position:relative;overflow:hidden;">
                                      <img src="https://chrisbailey.com/wp-content/uploads/2026/08/nathan-dumlao-pMW4jzELQCw-unsplash-scaled-e1786409926461-1024x692.jpg" alt="The real reason I quit caffeine" loading="lazy" decoding="async" style="width:100%;height:100%;object-fit:cover;display:block">
                      </div>
          <div style="padding:18px 20px 20px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);font-weight:700">Aug 11 &middot; 4 min</div>
            <h3 style="font-family:var(--serif);font-size:19px;line-height:1.28;margin:8px 0 6px;font-weight:600">The real reason I quit caffeine</h3>
            <p style="font-size:14px;color:var(--ink3);margin:0">Less than two months from today, my wife and I will welcome our first kid into the world&hellip;</p>
          </div>
        </a>
                <a href="https://chrisbailey.com/ai-doesnt-always-save-you-time/" class="art" style="background:var(--card);border:1px solid var(--rule2);border-radius:16px;overflow:hidden;color:var(--ink);display:block">
          <div style="aspect-ratio:16/9;position:relative;overflow:hidden;">
                                      <img src="https://chrisbailey.com/wp-content/uploads/2026/07/morgan-housel-X_fbh4Utwk4-unsplash-1024x652.jpg" alt="AI doesn’t always save you time" loading="lazy" decoding="async" style="width:100%;height:100%;object-fit:cover;display:block">
                      </div>
          <div style="padding:18px 20px 20px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);font-weight:700">Jul 22 &middot; 2 min</div>
            <h3 style="font-family:var(--serif);font-size:19px;line-height:1.28;margin:8px 0 6px;font-weight:600">AI doesn’t always save you time</h3>
            <p style="font-size:14px;color:var(--ink3);margin:0">Working like mad to avoid doing work.</p>
          </div>
        </a>
                <a href="https://chrisbailey.com/home-assistant-smart-home-dashboard-with-ai/" class="art" style="background:var(--card);border:1px solid var(--rule2);border-radius:16px;overflow:hidden;color:var(--ink);display:block">
          <div style="aspect-ratio:16/9;position:relative;overflow:hidden;">
                                      <img src="https://chrisbailey.com/wp-content/uploads/2026/07/IMG_4053-1024x768.jpeg" alt="Here’s my smart home dashboard (and how to build it yourself)" loading="lazy" decoding="async" style="width:100%;height:100%;object-fit:cover;display:block">
                      </div>
          <div style="padding:18px 20px 20px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);font-weight:700">Jul 14 &middot; 4 min</div>
            <h3 style="font-family:var(--serif);font-size:19px;line-height:1.28;margin:8px 0 6px;font-weight:600">Here’s my smart home dashboard (and how to build it yourself)</h3>
            <p style="font-size:14px;color:var(--ink3);margin:0">A nerdy, tinkery project that will make your home more beautiful.</p>
          </div>
        </a>
              </div>
    </div>
  </section>

  <!-- EXPLORE -->
  <section style="background:var(--bg);padding:clamp(52px,6vw,80px) 0 clamp(64px,7vw,96px)">
    <div class="wrap">
      <span style="font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--teal)">More ways in</span>
      <h2 style="font-family:var(--serif);font-weight:600;font-size:clamp(28px,3.6vw,42px);line-height:1.06;letter-spacing:-.02em;margin:10px 0 26px;text-wrap:pretty">Pick your <em style="font-style:italic;color:var(--orange)">rabbit hole.</em></h2>

      <a href="https://chrisbailey.com/books/" class="books-feature" style="display:flex;gap:clamp(24px,4vw,52px);align-items:center;flex-wrap:wrap;background:linear-gradient(135deg,#fdf3e3,#f4e4c9);border:1px solid #ecdcc4;border-radius:22px;padding:clamp(26px,3.4vw,44px);margin-bottom:22px;color:var(--ink)">
        <div style="display:flex;gap:16px;flex:1;min-width:300px;justify-content:center;align-items:flex-end">
          <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/book1.jpg" alt="The Productivity Project" loading="lazy" decoding="async" style="width:clamp(74px,17%,128px);height:auto;border-radius:3px;box-shadow:0 18px 34px -14px rgba(22,22,31,.55);transform:rotate(-4deg)">
          <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/book2.jpg" alt="Hyperfocus" loading="lazy" decoding="async" style="width:clamp(74px,17%,128px);height:auto;border-radius:3px;box-shadow:0 18px 34px -14px rgba(22,22,31,.55);transform:rotate(-1.5deg)">
          <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/book3.jpg" alt="How to Calm Your Mind" loading="lazy" decoding="async" style="width:clamp(74px,17%,128px);height:auto;border-radius:3px;box-shadow:0 18px 34px -14px rgba(22,22,31,.55);transform:rotate(1.5deg)">
          <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/book4.jpg" alt="Intentional" loading="lazy" decoding="async" style="width:clamp(74px,17%,128px);height:auto;border-radius:3px;box-shadow:0 18px 34px -14px rgba(22,22,31,.55);transform:rotate(4deg)">
        </div>
        <div style="flex:1;min-width:260px">
          <div style="font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);font-weight:900;margin-bottom:6px">The Books</div>
          <h3 style="font-family:var(--serif);font-size:clamp(26px,3vw,36px);font-weight:600;line-height:1.08;margin:0 0 10px;letter-spacing:-.01em">Four books, one throughline.</h3>
          <p style="font-size:15.5px;color:var(--ink2);margin:0 0 16px;max-width:440px">The Productivity Project, Hyperfocus, How to Calm Your Mind &amp; Intentional&mdash;read in more than 40 languages.</p>
          <span style="display:inline-flex;align-items:center;gap:8px;background:var(--ink);color:#fff;border-radius:999px;padding:11px 22px;font-weight:800;font-size:14px">All four books &rarr;</span>
        </div>
      </a>

      <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:22px">
        <a href="https://chrisbailey.com/podcast/" class="tile tile-pod" style="border-radius:20px;overflow:hidden;color:var(--ink);background:#eafaf2;border:1px solid #c7ecdb;display:flex;flex-direction:column">
          <div style="aspect-ratio:16/10;position:relative;overflow:hidden">
            <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/podcast.jpg" alt="" aria-hidden="true" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(22px) brightness(.92);transform:scale(1.15)">
            <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/podcast.jpg" alt="Intentional AI podcast cover" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:contain">
          </div>
          <div style="padding:20px 22px 22px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--green);font-weight:900;margin-bottom:6px">Podcast</div>
            <h3 style="font-family:var(--serif);font-size:21px;margin:0 0 5px;font-weight:600">Intentional AI.</h3>
            <p style="font-size:13.5px;color:var(--ink3);margin:0 0 12px">With David Sparks. No hype, no doom.</p>
            <span style="color:var(--green);font-weight:800;font-size:14px;margin-top:auto">Listen &rarr;</span>
          </div>
        </a>
        <a href="https://chrisbailey.com/course/" class="tile tile-course" style="border-radius:20px;overflow:hidden;color:var(--ink);background:#fbf1dc;border:1px solid #eddcb6;display:flex;flex-direction:column">
          <div style="aspect-ratio:16/10;background:linear-gradient(150deg,#fdf3e3,#f6e6c9);display:grid;place-items:center;padding:26px"><img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/course-logo.svg" alt="Overcoming Procrastination course logo" loading="lazy" style="width:44%;height:auto"></div>
          <div style="padding:20px 22px 22px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--gold);font-weight:900;margin-bottom:6px">Course</div>
            <h3 style="font-family:var(--serif);font-size:21px;margin:0 0 5px;font-weight:600">Overcoming Procrastination.</h3>
            <p style="font-size:13.5px;color:var(--ink3);margin:0 0 12px">Six triggers, sixty short videos, self-paced.</p>
            <span style="color:var(--orangeD);font-weight:800;font-size:14px;margin-top:auto">Jump into the course &rarr;</span>
          </div>
        </a>
        <a href="https://chrisbailey.com/speaking/" class="tile tile-speak" style="border-radius:20px;overflow:hidden;color:#eef1f5;background:var(--navy);border:1px solid #24365c;display:flex;flex-direction:column">
          <div style="aspect-ratio:16/10;overflow:hidden;position:relative"><img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/speaking.jpg" alt="Chris Bailey speaking on stage" loading="lazy" decoding="async" style="width:100%;height:100%;object-fit:cover"><div style="position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(21,36,65,.85))"></div></div>
          <div style="padding:20px 22px 22px;display:flex;flex-direction:column;flex:1">
            <div style="font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:#ffab7e;font-weight:900;margin-bottom:6px">Speaking</div>
            <h3 style="font-family:var(--serif);font-size:21px;margin:0 0 5px;font-weight:600;color:#fff">Keynotes that stick.</h3>
            <p style="font-size:13.5px;color:#aab8cf;margin:0 0 12px">On focus, intentional living, and the new productivity.</p>
            <span style="color:var(--tealb);font-weight:800;font-size:14px;margin-top:auto">Book Chris &rarr;</span>
          </div>
        </a>
      </div>
    </div>
  </section>

</div>
</main>

<footer class="foot">
  <div class="foot-inner">
    <div class="foot-brand">
      <img src="https://chrisbailey.com/wp-content/themes/chrisbailey-child/assets/anna/anna-brand-favicon.png" alt="" class="foot-mark" style="display:block;width:56px;height:56px;margin:0 0 18px;opacity:.95;">
      <a href="https://chrisbailey.com/" class="logo">Chris&nbsp;Bailey</a>
      <p>Bestselling author of four books on productivity, focus, and intentional living—read by 900,000+ people in 40+ languages.</p>
            <div class="foot-social">
        <a href="https://www.linkedin.com/in/chrbailey/" rel="me noopener" target="_blank" aria-label="LinkedIn"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.063 2.063 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452z"/></svg></a>
        <a href="https://www.instagram.com/chrisbaileyauth" rel="me noopener" target="_blank" aria-label="Instagram"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.849.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.849.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z"/></svg></a>
                <a href="https://www.youtube.com/@IntentionalAIPodcast" rel="me noopener" target="_blank" aria-label="YouTube"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg></a>
              </div>
    </div>
    <div class="foot-col">
      <h5>Explore</h5>
      <ul>
        <li><a href="https://chrisbailey.com/books/">Books</a></li>
        <li><a href="https://chrisbailey.com/articles/">Articles</a></li>
        <li><a href="https://chrisbailey.com/podcast/">Podcast</a></li>
        <li><a href="https://chrisbailey.com/course/">Course</a></li>
      </ul>
    </div>
    <div class="foot-col">
      <h5>Engage</h5>
      <ul>
        <li><a href="https://chrisbailey.com/speaking/">Speaking</a></li>
        <li><a href="https://chrisbailey.com/about/">About</a></li>
        <li><a href="https://chrisbailey.com/contact/">Contact</a></li>
        <li><a href="https://chrisbailey.com/press/">Press</a></li>
        </ul>
    </div>
    <div class="foot-col foot-newsletter">
      <h5>Newsletter</h5>
      <p style="font-size:14px;color:#8a94a4;line-height:1.55;margin:0 0 14px;">All the new articles Chris publishes, straight to your inbox.</p>
      <form action="https://app.kit.com/forms/4846395/subscriptions" method="post" data-uid="63f9a4f444">
        <input type="email" name="email_address" placeholder="your@email.com" required aria-label="Email address">
        <button type="submit">Subscribe</button>
      </form>
    </div>
  </div>
  <div class="foot-credits">
    <span>Copyright 2026, Chris Bailey</span>
    </div>
</footer>

			<script>document.documentElement.style.setProperty('--scrollbar-offset', window.innerWidth - document.documentElement.clientWidth + 'px' );</script>
			<script id="cb-ga4-events">
(function(){
  if (typeof gtag !== 'function') return;
  // 1. Newsletter signup—any form whose action targets app.kit.com.
  document.querySelectorAll('form[action*="app.kit.com"]').forEach(function(f){
    f.addEventListener('submit', function(){
      var src = (f.querySelector('input[name="fields[source]"]') || {}).value || 'inline';
      gtag('event', 'newsletter_signup', { source: src, page_path: location.pathname });
    });
  });
  // 2. Course buy click—any outbound to LemonSqueezy course URL.
  document.querySelectorAll('a[href*="chrisbaileycourses.lemonsqueezy.com"]').forEach(function(a){
    a.addEventListener('click', function(){
      gtag('event', 'course_buy_click', { page_path: location.pathname });
    });
  });
  // 3. Keynote inquiry—Speaking page Fluent Form (form_id=12). FF dispatches a
  //    DOM event "fluentform_submission_success" on success. Selector also matches
  //    the legacy Gravity Forms fallback in case FF ever needs to fall back.
  document.querySelectorAll('form#cb-speaking-inquiry, form[data-cb-form="speaking"], form#fluentform_12').forEach(function(f){
    f.addEventListener('submit', function(){
      gtag('event', 'keynote_inquiry', { page_path: location.pathname });
    });
  });
  // Belt-and-braces: hook FF's native success event for form 12.
  document.addEventListener('fluentform_submission_success', function(e){
    var fid = (e.detail && (e.detail.form_id || e.detail.formId)) || '';
    if (String(fid) === '12') {
      gtag('event', 'keynote_inquiry', { page_path: location.pathname, source: 'ff_event' });
    }
  });
  // 4. Book retailer outbound click—Amazon, Audible, Apple, B&N, Bookshop,
  //    Kobo, Indigo, Waterstones, Penguin Random House, etc.
  var retailerHosts = /amazon\.|audible\.|books\.apple\.|barnesandnoble\.|bookshop\.org|kobo\.com|indigo\.ca|waterstones\.|penguinrandomhouse\.com|geni\.us/i;
  document.querySelectorAll('a[href]').forEach(function(a){
    if (retailerHosts.test(a.href)) {
      a.addEventListener('click', function(){
        var retailer = (a.href.match(/(amazon|audible|apple|barnesandnoble|bookshop|kobo|indigo|waterstones|penguinrandomhouse|geni)/i) || ['','unknown'])[1].toLowerCase();
        gtag('event', 'book_retailer_click', { retailer: retailer, page_path: location.pathname });
      });
    }
  });
  // 5. Contextual article callout click (course on procrastination posts,
  //    podcast on AI posts)—GA4-audit routing fix, 2026-07-03.
  document.querySelectorAll('.cb-article-callout a').forEach(function(a){
    a.addEventListener('click', function(){
      var wrap = a.closest('.cb-article-callout');
      gtag('event', 'article_callout_click', {
        callout: wrap ? (wrap.getAttribute('data-callout') || 'unknown') : 'unknown',
        page_path: location.pathname
      });
    });
  });
  // 6. Now strip click (homepage humanization phase 1, 2026-07-07).
  document.querySelectorAll('#now-strip a').forEach(function(a){
    a.addEventListener('click', function(){
      gtag('event', 'now_strip_click', { page_path: location.pathname });
    });
  });
  // 7. Experiment join + opt-in—the LIVE caffeine widget (v3 IDs, verified
  //    on /caffeine-free-experiment/ 2026-07-15: cfVoteIn / cfVoteOut /
  //    cfEmailYes). The old cfYes/cfNo IDs never matched the shipped widget,
  //    so votes and opt-ins were uncounted until this fix.
  var cfIn = document.getElementById('cfVoteIn'), cfOut = document.getElementById('cfVoteOut');
  if (cfIn) cfIn.addEventListener('click', function(){
    gtag('event', 'experiment_join', { choice: 'yes', experiment: 'caffeine-free-31', page_path: location.pathname });
  });
  if (cfOut) cfOut.addEventListener('click', function(){
    gtag('event', 'experiment_join', { choice: 'no', experiment: 'caffeine-free-31', page_path: location.pathname });
  });
  // Widget email opt-in counts as a newsletter signup (source: caffeine-widget)
  // so GA stops undercounting the experiment's real capture.
  var cfOptin = document.getElementById('cfEmailYes');
  if (cfOptin) cfOptin.addEventListener('click', function(){
    var em = (document.getElementById('cfEmail') || {}).value || '';
    if (em.indexOf('@') > 0) {
      gtag('event', 'newsletter_signup', { source: 'caffeine-widget', side: 'in', page_path: location.pathname });
    }
  });
  // v4 adds out-side capture (cfEmailOutYes) — same event, side:'out', so GA
  // sees the "Absolutely not" opt-ins too, not just the in-side.
  var cfOptinOut = document.getElementById('cfEmailOutYes');
  if (cfOptinOut) cfOptinOut.addEventListener('click', function(){
    var em = (document.getElementById('cfEmailOut') || {}).value || '';
    if (em.indexOf('@') > 0) {
      gtag('event', 'newsletter_signup', { source: 'caffeine-widget', side: 'out', page_path: location.pathname });
    }
  });
})();
</script>
    <script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/chrisbailey-child/*","/wp-content/themes/kadence/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="kadence-navigation-js-extra">
var kadenceConfig = {"screenReader":{"expand":"Child menu","expandOf":"Child menu of","collapse":"Child menu","collapseOf":"Child menu of"},"breakPoints":{"desktop":"1024","tablet":768},"scrollOffset":"0"};
//# sourceURL=kadence-navigation-js-extra
</script>
<script id="kadence-navigation-js" src="https://chrisbailey.com/wp-content/themes/kadence/assets/js/navigation.min.js?ver=1.5.1" async></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://chrisbailey.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0.4"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://chrisbailey.com/wp-includes/js/wp-emoji-loader.min.js
</script>
<style id="cb-yt-play-styles">
.cb-yt-play { cursor: pointer; text-decoration: none; color: inherit; display: block; }
.cb-yt-play:hover, .cb-yt-play:focus { text-decoration: none; color: inherit; }
.cb-yt-iframe-wrap { position: relative; width: 100%; aspect-ratio: 16/9; background: #000; }
.cb-yt-iframe-wrap iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
</style>
<script id="cb-yt-play-js">
(function(){
  document.querySelectorAll('a.cb-yt-play[data-yt-id]').forEach(function(el){
    el.addEventListener('click', function(e){
      e.preventDefault();
      var id = el.getAttribute('data-yt-id');
      if (!id) return;
      var wrap = document.createElement('div');
      wrap.className = 'cb-yt-iframe-wrap';
      // Preserve the original anchor's class (minus cb-yt-play) so existing
      // styling (border-radius, shadow, aspect-ratio) carries over.
      var keepClasses = (el.className || '').split(/\s+/).filter(function(c){ return c && c !== 'cb-yt-play'; });
      keepClasses.forEach(function(c){ wrap.classList.add(c); });
      var iframe = document.createElement('iframe');
      iframe.src = 'https://www.youtube-nocookie.com/embed/' + encodeURIComponent(id) + '?autoplay=1&rel=0';
      iframe.title = el.getAttribute('aria-label') || 'YouTube video';
      iframe.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen';
      iframe.setAttribute('allowfullscreen', '');
      wrap.appendChild(iframe);
      el.replaceWith(wrap);
    });
  });
})();
</script>
    <script id="cb-region-switch-js">
(function(){
  document.querySelectorAll('.region-tabs').forEach(function(tabs){
    var scope = tabs.closest('.b-buy-inner') || document;
    var tabEls = tabs.querySelectorAll('.region-tab[data-region]');
    tabEls.forEach(function(tab){
      tab.setAttribute('aria-selected', tab.classList.contains('active') ? 'true' : 'false');
      tab.addEventListener('click', function(){
        var region = tab.getAttribute('data-region');
        tabEls.forEach(function(t){
          var on = (t === tab);
          t.classList.toggle('active', on);
          t.setAttribute('aria-selected', on ? 'true' : 'false');
        });
        scope.querySelectorAll('.region-panel[data-region]').forEach(function(p){
          p.classList.toggle('active', p.getAttribute('data-region') === region);
        });
      });
    });
  });
})();
</script>
    </body>
</html>

<!-- plugin=object-cache-pro client=phpredis metric#hits=2606 metric#misses=20 metric#hit-ratio=99.2 metric#bytes=880834 metric#prefetches=72 metric#store-reads=25 metric#store-writes=4 metric#store-hits=78 metric#store-misses=8 metric#sql-queries=4 metric#ms-total=360.45 metric#ms-cache=15.13 metric#ms-cache-avg=0.5405 metric#ms-cache-ratio=4.2 sample#redis-hits=59146058 sample#redis-misses=2282344 sample#redis-hit-ratio=96.3 sample#redis-ops-per-sec=14 sample#redis-evicted-keys=0 sample#redis-used-memory=23400344 sample#redis-used-memory-rss=29892608 sample#redis-memory-fragmentation-ratio=1.3 sample#redis-connected-clients=1 sample#redis-tracking-clients=0 sample#redis-rejected-connections=0 sample#redis-keys=17278 -->
