:root{color-scheme:light dark;--font-body:system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;--font-heading:system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;--font-mono:'SF Mono', 'Fira Code', 'Fira Mono', 'Roboto Mono', monospace;--font-size-base:1.05rem;--line-height:1.7;--max-width:700px;--color-bg:#fff;--color-text:#1a1a1a;--color-text-secondary:#5b6370;--color-accent:#d41a79;--color-accent-hover:#b0156a;--color-border:#e5e7eb;--color-surface:#f9fafb;--color-tag-bg:#f3f4f6;--color-tag-text:#4b5563;--radius:6px;--color-blockquote-bg:#fdf2f7}@media(prefers-color-scheme:dark){:root{--color-bg:#1a1a1a;--color-text:#e5e7eb;--color-text-secondary:#9ca3af;--color-accent:#ec4899;--color-accent-hover:#f472b6;--color-border:#374151;--color-surface:#242424;--color-tag-bg:#374151;--color-tag-text:#d1d5db;--color-blockquote-bg:#2d1a24}}*,*::before,*::after{box-sizing:border-box}body{font-family:var(--font-body);font-size:var(--font-size-base);max-width:var(--max-width);margin:0 auto;padding:2.5rem 1.5rem 5rem;line-height:var(--line-height);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased}a{color:var(--color-accent);text-decoration:underline 1px;text-underline-offset:2px}a:hover{color:var(--color-accent-hover)}a[href^=http]:not([href*="willpatrick.co.uk"]):not(.tag):not(.social-links a):not(.book-cover):not(.share-pills a)::after{content:"↗";display:inline-block;margin-left:.2em;text-decoration:none}.site-nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}@media(max-width:600px){.site-nav{flex-direction:column;align-items:flex-start;gap:.75rem}}.site-name{text-decoration:none;display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-heading);font-weight:700;font-size:1.35rem;color:var(--color-text)}.site-icon{height:2.5rem;width:auto;image-rendering:pixelated}.site-name:hover{color:var(--color-accent)}nav ul{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:1.5rem}nav li{display:inline}.site-nav nav a{text-decoration:none;color:var(--color-text-secondary);font-family:var(--font-mono);font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.08em}.site-nav nav a:hover{color:var(--color-accent)}.site-nav nav a[aria-current=page]{color:var(--color-accent)}h1{font-family:var(--font-heading);font-size:2.1rem;font-weight:700;line-height:1.25;margin-top:0;margin-bottom:.5rem;letter-spacing:-.02em}h2{font-family:var(--font-heading);font-size:1.4rem;font-weight:700;margin-top:2.5rem}h3{font-family:var(--font-heading);font-size:1.15rem;font-weight:700;margin-top:2rem}img{max-width:100%;height:auto;border-radius:var(--radius)}figure{margin:1rem 0}figcaption{font-size:.85rem;color:var(--color-text-secondary);font-style:italic;text-align:center;margin-top:.5rem}blockquote{border-left:3px solid var(--color-accent);margin-left:0;margin-right:0;padding:1rem 1.25rem;color:var(--color-text);font-style:italic;background:var(--color-blockquote-bg);border-radius:0 var(--radius)var(--radius)0;width:100%}blockquote p:first-of-type::before{content:"\201C"}blockquote p:last-of-type::after{content:"\201D"}.pull-quote{border-left:none;border-top:2px solid var(--color-accent);border-bottom:2px solid var(--color-accent);background:0 0;border-radius:0;padding:1rem 0;font-size:1.75rem;font-weight:800;font-style:italic;color:var(--color-accent);line-height:1.3}.pull-quote p{margin:0}.toc{padding:0;margin:1.5rem 0;font-size:.9rem}.toc-heading{font-family:var(--font-mono);font-weight:600;text-transform:uppercase;font-size:.75rem;letter-spacing:.05em;margin:0 0 .75rem;color:var(--color-text-secondary)}.toc ul{margin:0;padding-left:1.25rem;display:block}.toc li{margin:.25rem 0;display:block}.toc li::before{content:"\203A\00a0";color:var(--color-accent)}.toc a{color:var(--color-accent);text-decoration:underline}.toc a:hover{opacity:.8}table{width:100%;border-collapse:collapse;font-size:.9rem;margin:1rem 0;display:block;overflow-x:auto}th,td{border:1px solid var(--color-border);padding:.5rem .75rem;text-align:left}th{background:var(--color-surface);font-weight:600}code{font-family:var(--font-mono);font-size:.875em;background:var(--color-surface);padding:.15em .35em;border-radius:var(--radius)}.highlight{margin:1.5rem 0}.highlight pre{background:#f6f8fa!important;border-left:3px solid var(--color-border);border-radius:0 var(--radius)var(--radius)0;padding:1rem 1.25rem;overflow-x:auto;font-size:.85rem;line-height:1.6}pre code{background:0 0;padding:0;border-radius:0;font-size:inherit}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{color:#cf222e}.chroma .na,.chroma .nc,.chroma .nx,.chroma .ge,.chroma .go,.chroma .p{color:#1f2328}.chroma .no,.chroma .nd,.chroma .nt,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo,.chroma .o,.chroma .ow{color:#0550ae}.chroma .ni,.chroma .nb,.chroma .nf,.chroma .fm{color:#6639ba}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#953800}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background:#ffebe9}.chroma .gi{color:#116329;background:#dafbe1}@media(prefers-color-scheme:dark){.highlight pre,.highlight pre code{background:#1e1e2e!important}.chroma .k,.chroma .kc,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .o,.chroma .ow,.chroma .cp,.chroma .cpf{color:#ff79c6}.chroma .kd,.chroma .kt,.chroma .nb,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#8be9fd}.chroma .na,.chroma .nc,.chroma .nf,.chroma .fm,.chroma .gi{color:#50fa7b}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss{color:#f1fa8c}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:#bd93f9}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs{color:#6272a4}.chroma .gd{color:#f55}}hr{border:none;border-top:1px solid var(--color-border);margin:2rem 0}.footnote-ref{font-size:.75em;text-decoration:none;font-weight:600;color:var(--color-accent);padding:0 .1em}.footnote-ref:hover{text-decoration:underline}.footnotes{margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--color-border);font-size:.85rem;color:var(--color-text-secondary)}.footnotes hr{display:none}.footnotes ol{padding-left:1.5rem;margin:0}.footnotes li{margin-bottom:.5rem;line-height:1.6;color:var(--color-text)}.footnotes li p{display:inline}.footnotes li:target{background:var(--color-blockquote-bg);border-radius:var(--radius);padding:.25rem .5rem;margin-left:-.5rem}.footnote-backref{font-style:normal;text-decoration:none;color:var(--color-accent);font-family:var(--font-mono);font-size:.8em;margin-left:.35em}.footnote-backref:hover{text-decoration:underline}.meta{color:var(--color-text-secondary);font-size:.85rem;font-family:var(--font-mono);margin-bottom:1rem;display:flex;flex-wrap:wrap;gap:.75rem;align-items:baseline}.cover{width:100%;margin-bottom:1rem}.rating{color:var(--color-accent);font-family:var(--font-mono);font-weight:700}.tag{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--color-tag-bg);padding:.3em .5em;min-height:24px;border-radius:var(--radius);margin-right:.2rem;text-decoration:none;color:var(--color-tag-text);text-transform:uppercase}.post-list{list-style:none;padding:0}.post-list li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;padding:.65rem 0;border-bottom:1px solid var(--color-border);gap:.25rem 1rem}.post-list li:last-child{border-bottom:none}.post-list a:not(.tag){flex:1;color:var(--color-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.post-list a:not(.tag):hover{color:var(--color-accent-hover)}.post-list .date{color:var(--color-text-secondary);font-size:.8rem;font-family:var(--font-mono);white-space:nowrap}.post-tags{flex-basis:100%;margin-top:.15rem}.post-list--rich li{flex-direction:column;align-items:flex-start;gap:.15rem;padding:1rem 0}.post-title-row{display:flex;justify-content:space-between;align-items:baseline;width:100%;gap:.5rem}.post-meta-right{display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem;flex-shrink:0}@media(max-width:600px){.post-title-row{flex-direction:column;gap:.25rem}.post-meta-right{flex-shrink:1}}.post-desc{color:var(--color-text-secondary);font-size:.85rem;margin:.2rem 0 0;line-height:1.5}.book-list{list-style:none;padding:0}.book-list li{display:flex;gap:1rem;padding:1rem 0;border-bottom:1px solid var(--color-border);align-items:center}.book-list li:last-child{border-bottom:none}.book-cover{text-decoration:none;flex-shrink:0}.book-cover img{width:110px;height:auto;border-radius:3px}.book-info{flex:1;min-width:0}.book-title{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.book-title:hover{color:var(--color-accent-hover)}.book-meta{display:block;color:var(--color-text-secondary);font-size:.8rem;font-family:var(--font-mono);margin-top:.15rem}.book-desc{color:var(--color-text-secondary);font-size:.85rem;margin:.3rem 0;line-height:1.5}.book-list .post-tags{margin-top:.25rem}@media(max-width:600px){.book-list li{flex-direction:column;align-items:flex-start}.book-cover img{width:140px}}.breadcrumb{font-family:var(--font-mono);font-size:.8rem;color:var(--color-text-secondary);margin-bottom:1.5rem}.breadcrumb a{color:var(--color-text-secondary);text-decoration:none}.breadcrumb a:hover{color:var(--color-accent)}ol.breadcrumb{list-style:none;padding:0;display:flex;flex-wrap:wrap;align-items:baseline}ol.breadcrumb li{display:flex;align-items:baseline}ol.breadcrumb li span[aria-hidden]{margin:0 .4em}footer{margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--color-border);font-size:.8rem;color:var(--color-text-secondary);font-family:var(--font-mono);display:flex;flex-direction:column;gap:1rem}.footer-links{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;width:100%}.footer-links{gap:.5rem}.footer-bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.5rem}footer a{color:var(--color-text-secondary);text-decoration:underline}footer a:hover{color:var(--color-accent)}.social-links{display:flex;gap:1rem;align-items:center}.social-links a{display:inline-flex;text-decoration:none}.social-links svg{width:24px;height:24px;fill:currentColor}@media(max-width:600px){footer{align-items:flex-start}.footer-links{flex-direction:column;align-items:flex-start;gap:.5rem}.footer-bottom{flex-direction:column;align-items:flex-start;gap:.75rem}}.skip-link{position:absolute;top:-100%;left:0;background:var(--color-accent);color:#fff;padding:.5rem 1rem;z-index:100;text-decoration:none;font-family:var(--font-mono);font-size:.9rem}.skip-link:focus{top:0}:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}.share-wrapper{margin-top:2.5rem;display:flex;align-items:center;gap:1rem}.share-count-block{display:flex;flex-direction:column;align-items:center;flex-shrink:0;line-height:1.1}.share-count-number{font-family:var(--font-heading);font-weight:700;font-size:1.5rem;color:var(--color-text)}.share-count-label{font-family:var(--font-mono);font-size:.7rem;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.share-pills{display:flex;gap:.4rem;flex:1}.share-pills a,.share-pills button{flex:1;display:inline-flex;align-items:center;justify-content:center;padding:.6rem 0;text-decoration:none;border:none;cursor:pointer;border-radius:var(--radius)}.share-pills a:hover,.share-pills button:hover{filter:brightness(.85)}.share-pills svg{width:20px;height:20px}#subscribe-proxy{display:none}.share-reddit{background:#ff4500}.share-linkedin{background:#0a66c2}.share-whatsapp{background:#25d366}.share-facebook{background:#0866ff}.share-x{background:#000}.share-bluesky{background:#0085ff}.share-email{background:#ea4335}.share-native{background:#555}.note-header{display:flex;gap:1.5rem;align-items:center;background:var(--color-surface);padding:1.5rem;border-radius:var(--radius);border:1px solid var(--color-accent);margin-bottom:1.5rem}.note-header h1{margin:0 0 .3rem}.note-header .meta{margin-bottom:.5rem}.note-header-cover{width:120px;height:auto;border-radius:4px;flex-shrink:0}.note-header-desc{color:var(--color-text-secondary);font-size:.9rem;font-style:italic;margin:0}.note-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem 0}.meta-item:not(:first-child)::before{content:" · "}@media(max-width:600px){.note-header{flex-direction:column;align-items:flex-start}.note-header-cover{width:100%}.note-meta{flex-direction:column;align-items:flex-start;gap:.25rem}.meta-item:not(:first-child)::before{content:none}}.related{margin-top:2.5rem}.related h2{margin-top:0}.newsletter-embed{margin-top:2.5rem;padding:1.5rem;border:1px solid var(--color-accent);border-radius:var(--radius);text-align:center}.newsletter-embed h2{margin-top:0}.newsletter-description{color:var(--color-text-secondary);font-size:.9rem;margin-bottom:1rem}.newsletter-form{display:flex;gap:.5rem;max-width:420px;margin:0 auto}.newsletter-form input[type=email]{flex:1;padding:.5rem .75rem;border:1px solid var(--color-accent);border-radius:var(--radius);font-family:var(--font-body);font-size:.9rem;background:var(--color-bg);color:var(--color-text)}.newsletter-form input[type=email]:focus{border-color:var(--color-accent);outline:none}.newsletter-form button{padding:.5rem 1.25rem;background:var(--color-accent);color:#fff;border:none;border-radius:var(--radius);font-family:var(--font-mono);font-size:.8rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;cursor:pointer}.newsletter-form button:hover{background:var(--color-accent-hover)}.newsletter-form button:disabled{opacity:.6;cursor:not-allowed}.newsletter-legal{font-size:.75rem;color:var(--color-text-secondary);margin-top:.5rem}.newsletter-legal a{color:var(--color-text-secondary)}.newsletter-legal a:hover{color:var(--color-accent)}.newsletter-status{font-size:.85rem;margin-top:.75rem}.newsletter-status.success{color:#16a34a}.newsletter-status.error{color:#dc2626}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}