@font-face{font-family:open sans;font-style:normal;font-weight:300;font-display:swap;src:local('Open Sans Light'),local('OpenSans-Light'),url(../fonts/open-sans-v17-latin-300.woff2)format('woff2')}@font-face{font-family:open sans;font-style:normal;font-weight:400;font-display:swap;src:local('Open Sans Regular'),local('OpenSans-Regular'),url(../fonts/open-sans-v17-latin-regular.woff2)format('woff2')}@font-face{font-family:open sans;font-style:normal;font-weight:600;font-display:swap;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(../fonts/open-sans-v17-latin-600.woff2)format('woff2')}:root{--accent:#8B1538;--accent-hover:#6B1028;--text:#333;--text-light:#555;--text-lighter:#707070;--bg:#fff;--border:#eee;--code-bg:#f8f8f8;--font-body:'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;--font-heading:'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;--max-width:640px;--side-padding:32px}@media(prefers-color-scheme:dark){:root{--accent:#D4637A;--accent-hover:#E8879A;--text:#e0e0e0;--text-light:#aaa;--text-lighter:#949494;--bg:#1a1a1a;--border:#333;--code-bg:#2a2a2a}}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}.skip-link{position:absolute;top:-100%;left:16px;z-index:100;padding:8px 16px;background:var(--accent);color:#fff;text-decoration:none;border-radius:0 0 4px 4px;font-size:.875rem;transition:top .2s ease}.skip-link:focus{top:0}html{font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);font-weight:300;font-size:1rem;line-height:1.65;color:var(--text);background:var(--bg)}.container{max-width:100%;margin:0 auto;padding:100px 40px 60px 80px;display:grid;grid-template-columns:100px minmax(0,600px);gap:120px}@media(max-width:1000px){.container{padding:80px 40px 60px;gap:60px}}.logo{width:48px;height:48px;display:block;margin-bottom:68px;text-decoration:none}.logo img{width:48px;height:48px;border-radius:50%}.sidebar{position:sticky;top:80px;align-self:start}nav{display:flex;flex-direction:column;gap:8px}nav a{font-family:var(--font-body);font-weight:300;font-size:1rem;color:var(--text);text-decoration:none;padding:4px 0;position:relative;transition:color .15s ease}nav a:hover{color:var(--accent)}nav a.active{color:var(--accent)}.main{max-width:var(--max-width)}.site-title{font-family:var(--font-heading);font-size:1rem;font-weight:300;letter-spacing:1.5px;text-transform:uppercase;color:var(--text);text-decoration:none;margin-bottom:68px;display:block;height:48px;line-height:48px}.site-title:hover{color:var(--accent)}.content{margin-top:0}.content p{margin-bottom:1rem}.content a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s ease}.content a:hover{border-bottom-color:var(--accent)}h1,h2,h3,h4{font-family:var(--font-heading);font-weight:400;line-height:1.3}h1{font-size:1.5rem;margin-bottom:1.25rem}h2{font-size:1.25rem;margin-top:2rem;margin-bottom:.75rem}h3{font-size:1.125rem;margin-top:1.75rem;margin-bottom:.625rem}h4{font-size:1rem;margin-top:1.5rem;margin-bottom:.5rem}.post-list{list-style:none}.post-list li{display:flex;justify-content:space-between;align-items:baseline;padding:16px 0;border-top:1px solid var(--border);gap:24px}.post-list li:first-child{border-top:none}.post-list a{font-family:var(--font-heading);font-weight:300;font-size:1rem;color:var(--text);text-decoration:none;transition:color .15s ease}.post-list a:hover{color:var(--accent)}.post-list time{font-size:1rem;color:var(--text-lighter);white-space:nowrap;flex-shrink:0}.page-title{font-family:var(--font-heading);font-size:1.5rem;font-weight:300;margin-bottom:1.5rem}.center{text-align:center;margin:2rem 0}.center img{max-width:200px;display:inline-block}article h1{margin-bottom:.5rem}article .meta{color:var(--text-lighter);font-size:.9375rem;margin-bottom:2.5rem}article .content{margin-top:0}footer{margin-top:80px;padding-top:40px;border-top:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;font-size:.875rem;color:var(--text-lighter)}footer a{color:var(--accent);text-decoration:none;transition:color .15s ease}footer a:hover{color:var(--accent-hover);text-decoration:underline}.social-links{display:flex;gap:16px}.social-links a{color:var(--text-lighter);transition:color .15s ease}.social-links a:hover{color:var(--accent);text-decoration:none}.social-links svg{width:20px;height:20px}.app-grid{display:grid;grid-template-columns:1fr;gap:2rem}.app-card{text-align:center}.app-icon{width:128px;height:128px;border-radius:22px}.app-card picture{display:inline-block;margin-bottom:1rem}.app-card h3{font-size:1.25rem;margin-bottom:.5rem}.app-card p{font-size:1rem;color:var(--text-light);margin-bottom:1rem;line-height:1.6}.app-card .learn-more{display:inline-block;color:var(--accent);text-decoration:none;font-size:1rem;margin-bottom:.75rem}.app-card .learn-more:hover{text-decoration:underline}.app-store-badge{display:inline-block}.app-store-badge img{height:40px;width:auto}pre{background:var(--code-bg);border:1px solid var(--border);border-radius:4px;padding:16px;overflow-x:auto;font-size:.875rem;margin:1.5rem 0}code{font-family:sf mono,Consolas,liberation mono,Menlo,monospace;font-size:.9em}p code{background:var(--code-bg);padding:2px 6px;border-radius:3px}blockquote{border-left:3px solid var(--accent);margin:1.5rem 0;padding-left:20px;color:var(--text-light);font-style:italic}.content img{max-width:100%;height:auto;border-radius:4px;margin:1.5rem 0}figure{margin:2rem 0;padding:0}figure img{max-width:100%;height:auto;border-radius:4px;margin:0 !important;padding:0;display:block}figcaption{margin-top:.25rem;padding:0;font-size:.8125rem;color:var(--text-lighter)}hr{border:none;border-top:1px solid var(--border);margin:2.5rem 0}.footnotes{margin-top:1.5rem;padding-top:.5rem;font-size:.875rem;color:var(--text-light);line-height:1.4}.footnotes hr{display:none}.footnotes ol{padding-left:1.25rem;margin:0}.footnotes li{margin-bottom:0;padding:.1rem 0}.footnotes li p{margin:0}.content ul,.content ol{margin:1.5rem 0;padding-left:1.5rem}.content>ul>li,.content>ol>li{margin-bottom:.5rem}.content li{margin-bottom:.3rem}.content li>ul,.content li>ol{margin-top:.3rem;margin-bottom:.5rem}.content li ul li,.content li ol li{margin-bottom:.3rem}@media(max-width:900px){.container{padding:20px var(--side-padding)40px;display:flex;flex-direction:column;gap:48px}.sidebar{position:static;display:flex;flex-direction:column;margin:0;padding:0}.logo{width:48px;height:48px;margin-bottom:20px;position:relative}.logo::after{content:'CARMODY.ME';font-family:var(--font-heading);font-size:1.125rem;font-weight:300;letter-spacing:1.5px;text-transform:uppercase;color:var(--text);position:absolute;left:64px;top:50%;transform:translateY(-50%);white-space:nowrap}nav{flex-direction:row;gap:24px;margin:0;padding:0}nav a{font-size:.9375rem}nav a.active::before{content:'';position:absolute;left:0;bottom:-4px;right:0;height:3px;background:var(--accent);border-radius:2px}.main{width:100%;margin:0;padding:0}.site-title{display:none}.content{margin:0;padding:0}.post-list li{flex-direction:column;gap:4px;align-items:flex-start}.post-list time{font-size:.8125rem}.app-grid{grid-template-columns:1fr;gap:3rem}footer{flex-direction:column;gap:24px;text-align:center;margin-top:60px}article .meta{margin-bottom:1.5rem}.main h1,.main .page-title{font-size:1.25rem}.main h2{font-size:1.125rem}.main h3{font-size:1rem}.main h4{font-size:.9375rem}}