:root{--radius: 8px;--font-serif: "Crimson Pro", serif;--font-sans: "Inter", sans-serif;--font-mono: "Fira Code", monospace;--step--1: clamp(.85rem, .8rem + .2vw, .95rem);--step-0: clamp(1rem, .95rem + .3vw, 1.125rem);--step-1: clamp(1.25rem, 1.15rem + .6vw, 1.5rem);--step-2: clamp(1.6rem, 1.4rem + 1vw, 2rem);--step-3: clamp(2.2rem, 1.8rem + 1.5vw, 2.8rem);--step-4: clamp(2.8rem, 2rem + 2vw, 3.5rem);--space-xs: .5rem;--space-sm: .75rem;--space-md: 1.25rem;--space-lg: 2rem;--space-xl: 3.5rem}:root[data-theme=light]{--bg: #eae0c8;--surface: #ddd2b6;--border: #c7bca0;--code-bg: #c0b59a;--text-primary: #1a2a3a;--text-secondary: #485c6e;--accent: #8c4528;--accent-soft: #b85c38;--sage: #7c7e73;--ochre: #b5832a;--plum: #8b5970}:root[data-theme=dark]{--bg: #1a2a3a;--surface: #2f4156;--border: #536878;--code-bg: #11202d;--text-primary: #eae0c8;--text-secondary: #c7bca0;--accent: #d17a56;--accent-soft: #e89272;--sage: #9da08f;--ochre: #d4a04f;--plum: #c29aab}*,*:before,*:after{box-sizing:border-box}html{font-size:16px}body{margin:0;background:var(--bg);color:var(--text-primary);font-family:var(--font-serif);font-size:var(--step-0);line-height:1.7;transition:background .25s ease,color .25s ease}.site-header{border-bottom:1px solid var(--border);background:var(--bg)}.site-inner{max-width:1100px;margin:0 auto;padding:var(--space-md);display:flex;justify-content:space-between;align-items:center}.site-title{font-family:var(--font-sans);font-weight:600;font-size:var(--step-1);text-decoration:none;color:var(--text-primary)}#theme-toggle{background:transparent;border:1px solid var(--border);border-radius:var(--radius);padding:.4rem .75rem;cursor:pointer;color:var(--text-primary);display:flex;align-items:center;gap:.5rem}#theme-toggle:hover{border-color:var(--accent)}.theme-icon{font-size:1.2rem;transition:transform .3s ease}.sun{display:none}.moon{display:block}:root[data-theme=dark] .sun{display:block}:root[data-theme=dark] .moon{display:none}.site-main{max-width:1100px;margin:0 auto;padding:var(--space-xl) var(--space-md)}h1,h2,h3,h4{font-family:var(--font-sans);font-weight:600;line-height:1.2;margin-top:var(--space-lg)}h1{font-size:var(--step-4);margin-top:0}h2{font-size:var(--step-2)}h3{font-size:var(--step-1)}p{margin:var(--space-md) 0}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.node-card{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);padding:var(--space-lg);transition:border .2s ease}.node-card:hover{border-color:var(--accent-soft)}hr{border:none;border-top:1px solid var(--border);margin:var(--space-xl) 0}.prose code{font-family:var(--font-mono);background:var(--code-bg);padding:.15rem .35rem;border-radius:4px;font-size:.9em}.prose pre{background:var(--code-bg);padding:var(--space-md);border-radius:var(--radius);overflow-x:auto;font-family:var(--font-mono)}.prose blockquote{border-left:4px solid var(--accent);padding-left:var(--space-md);color:var(--text-secondary);margin:var(--space-lg) 0}button,a{transition:color .2s ease,border-color .2s ease}section{margin:4rem 0;align-items:center;align-content:center}.hero h1{font-size:2.5rem;margin-bottom:.5rem;text-align:center}.subtitle{font-size:1.25rem;max-width:700px;text-align:center;margin:0 auto}.intro{max-width:700px;margin-top:1rem;margin:1rem auto 0;opacity:.8;text-align:center}.about-hero{text-align:center;padding:var(--space-xl) var(--space-md)}.about-subtitle{font-size:var(--step-1);color:var(--text-secondary);margin-top:var(--space-md)}.about-content{max-width:700px;margin:0 auto;padding:var(--space-md)}.about-content section{margin-bottom:var(--space-xl)}.about-content h2{margin-top:0}.node{max-width:800px;margin:0 auto}.node-header{margin-bottom:var(--space-lg)}.thread-badge{display:inline-flex;align-items:center;gap:.35rem;background:var(--code-bg);padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-family:var(--font-mono);margin-top:var(--space-sm)}.thread-badge i{font-size:.85rem}.tags{display:flex;flex-wrap:wrap;gap:var(--space-xs);list-style:none;padding:0;margin:var(--space-sm) 0 0}.tag{background:var(--surface);color:var(--text-primary);padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-family:var(--font-mono)}.node-core,.node-media,.node-context{margin-top:var(--space-lg)}.node-context details{background:var(--code-bg);border-radius:var(--radius);overflow:hidden}.node-context summary{padding:var(--space-sm) var(--space-md);cursor:pointer;font-family:var(--font-mono);font-size:.85rem;background:var(--border)}.node-context summary:hover{background:var(--border)}.context-label{font-weight:600}.context-hint{opacity:.7;font-size:.8rem}.node-references{margin-top:var(--space-xl);padding-top:var(--space-lg);border-top:1px solid var(--border)}.node-references ul{list-style:none;padding:0}.node-references li{margin-bottom:var(--space-xs)}.node-references a{font-family:var(--font-mono);font-size:.9rem}.media-item{margin:var(--space-md) 0}.media-item img,.media-item video{max-width:100%;border-radius:var(--radius)}.file-download{display:inline-flex;align-items:center;gap:var(--space-xs);background:var(--accent);color:#fff;padding:.5rem 1rem;border-radius:var(--radius);text-decoration:none;font-size:.9rem}.file-download:hover{background:var(--accent-soft)}.social-links{display:flex;gap:var(--space-sm)}.social-link{color:var(--text-secondary);transition:color .2s ease}.social-link:hover{color:var(--accent)}@media(max-width:640px){.social-links{gap:var(--space-xs)}.social-link{padding:.25rem}}.project-list{display:grid;gap:1.5rem;margin-top:2rem}.project-card{display:block;padding:1.5rem;border:1px solid var(--border);border-radius:8px;text-decoration:none}.project-card:hover{background:var(--surface)}.btn{display:inline-block;padding:.75rem 1.5rem;border-radius:var(--radius);font-weight:600;text-decoration:none;transition:all .2s ease}.btn{background:var(--accent);color:#fff;border:1px solid var(--accent)}.btn:hover{background:var(--accent-soft);border-color:var(--accent-soft);text-decoration:none}.btn-outline{background:transparent;color:var(--accent);border:1px solid var(--border)}.btn-outline:hover{background:var(--surface);border-color:var(--accent);color:var(--accent)}.section-intro{color:var(--text-secondary);max-width:600px;margin:.5rem auto 2rem;text-align:center}.view-all{text-align:center;margin-top:2rem}.view-all a{color:var(--accent)}.hero{text-align:center;padding:var(--space-xl) var(--space-md)}.hero-links{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;margin-top:var(--space-lg)}.about-me{background:var(--surface);padding:var(--space-xl);border-radius:var(--radius);border:1px solid var(--border)}.bio{font-size:1.1rem;line-height:1.8}.focus{margin-top:var(--space-md);color:var(--text-secondary)}.skills-list{margin:0;padding:0;display:grid;grid-template-columns:9rem 1fr;gap:0;border-top:1px solid var(--border)}.skills-list dt{font-family:var(--font-sans);font-weight:600;font-size:var(--step-0);color:var(--text-primary);padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.skills-list dd{margin:0;color:var(--text-secondary);font-family:var(--font-serif);padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}@media(max-width:640px){.skills-list{grid-template-columns:1fr}.skills-list dt{border-bottom:none;padding-bottom:0}}.job-list{list-style:none;padding:0;margin:0}.job-item{padding:var(--space-md) 0;border-top:1px solid var(--border)}.job-list .job-item:last-child{border-bottom:1px solid var(--border)}.job-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--space-xs);gap:var(--space-md)}.job-header strong{font-family:var(--font-sans);font-weight:600;font-size:var(--step-1);color:var(--text-primary)}.job-item em{font-family:var(--font-sans);font-style:normal;color:var(--text-secondary);font-size:var(--step--1);letter-spacing:.02em}.job-item ul{margin:var(--space-sm) 0 0;padding-left:1.1rem}.job-item ul li{margin-bottom:var(--space-xs);color:var(--text-secondary)}.date{color:var(--text-secondary);font-size:var(--step--1);font-family:var(--font-mono);white-space:nowrap}@media(max-width:640px){.job-header{flex-direction:column;gap:0}}.project-tags{margin:.5rem 0}.project-desc{color:var(--text-secondary);font-size:.9rem;line-height:1.6}@media(max-width:640px){.hero-links{flex-direction:column;align-items:center}.btn{width:100%;text-align:center}.experience .job-header{flex-direction:column}.hero h1{font-size:2rem}}.site-nav{display:flex;gap:var(--space-md);font-family:var(--font-sans);font-size:var(--step--1);margin-left:auto;margin-right:var(--space-md)}.site-nav a{color:var(--text-secondary);text-decoration:none}.site-nav a:hover{color:var(--accent);text-decoration:none}.site-nav a[aria-current=page]{color:var(--text-primary);text-decoration:underline;text-decoration-color:var(--sage);text-decoration-thickness:2px;text-underline-offset:5px}a:visited{color:var(--plum)}a:visited:hover{color:var(--accent)}@media(max-width:640px){.site-nav{display:none}}.hero{text-align:left;padding:var(--space-xl) 0 var(--space-lg);max-width:780px;margin:0 auto}.hero h1{font-size:var(--step-4);margin:0 0 var(--space-sm);letter-spacing:-.02em;text-align:left}.hero-tagline{font-family:var(--font-sans);font-size:var(--step-1);color:var(--text-secondary);margin:0;font-weight:400}.work{max-width:780px;margin:0 auto;padding:var(--space-lg) 0 var(--space-xl)}.work h1,.work h2{margin-top:0;margin-bottom:var(--space-lg);text-align:left;font-size:var(--step-2)}.work-list{list-style:none;padding:0;margin:0}.work-item{margin:0;border-top:1px solid var(--border)}.work-list .work-item:last-child{border-bottom:1px solid var(--border)}.work-link{display:grid;grid-template-columns:3.5rem 1fr;gap:var(--space-md);padding:var(--space-md) var(--space-xs);text-decoration:none;color:inherit;align-items:start;transition:background .15s ease}.work-link:hover{background:var(--surface);text-decoration:none}.work-date{display:flex;flex-direction:column;font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-secondary);letter-spacing:.02em;line-height:1.25}.work-date-year{font-weight:600;color:var(--text-primary)}.work-date-month{text-transform:lowercase}.work-date-day{opacity:.75}.work-body{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.work-title{font-family:var(--font-sans);font-weight:600;font-size:var(--step-1);color:var(--text-primary);line-height:1.3}.work-summary{color:var(--text-secondary);opacity:.8;font-size:var(--step-0);line-height:1.5;font-family:var(--font-serif)}.work-tags{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-xs);font-family:var(--font-mono);font-size:.72rem;color:var(--text-secondary);letter-spacing:.02em}.work-tag:before{content:"·";margin-right:var(--space-xs);opacity:.5}.work-tags>.work-tag:first-child:before{content:"";margin-right:0}.work-all{margin-top:var(--space-lg);font-family:var(--font-mono);font-size:var(--step--1);color:var(--text-secondary)}.work-all a{color:var(--text-secondary)}.work-all a:hover{color:var(--accent)}@media(max-width:640px){.work-link{grid-template-columns:1fr;gap:var(--space-xs)}.work-date{flex-direction:row;gap:var(--space-xs);font-size:.7rem}}.colophon{max-width:780px;margin:0 auto;padding:var(--space-xl) 0}.colophon h1{margin-top:0;margin-bottom:var(--space-sm);text-align:left}.colophon-meta{font-family:var(--font-sans);color:var(--text-secondary);font-size:var(--step--1);margin-top:0;margin-bottom:var(--space-xl)}.colophon section{margin:var(--space-lg) 0}.colophon h2{font-size:var(--step-1);margin-bottom:var(--space-sm)}.colophon-list{margin:0;padding:0;display:grid;grid-template-columns:9rem 1fr;gap:0;border-top:1px solid var(--border)}.colophon-list dt{font-family:var(--font-sans);font-weight:600;font-size:var(--step-0);color:var(--text-primary);padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.colophon-list dd{margin:0;color:var(--text-secondary);font-family:var(--font-serif);padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.colophon-list code{font-family:var(--font-mono);font-size:.85em;background:var(--code-bg);padding:.05rem .3rem;border-radius:3px;color:var(--text-primary)}.colophon-list a code{color:inherit}.colophon-note{color:var(--text-secondary);opacity:.85}.status-warn{display:inline-block;font-family:var(--font-mono);font-size:.78em;letter-spacing:.04em;text-transform:uppercase;color:var(--ochre);border:1px solid var(--ochre);padding:.05em .4em;border-radius:3px;margin-right:.25em}.colophon-fingerprint{margin-top:var(--space-xl);padding-top:var(--space-md);border-top:1px solid var(--border);font-family:var(--font-mono);font-size:.78rem;color:var(--text-secondary);letter-spacing:.02em}.colophon-fingerprint code{font-family:var(--font-mono);font-size:.95em;color:var(--text-primary)}@media(max-width:640px){.colophon-list{grid-template-columns:1fr}.colophon-list dt{border-bottom:none;padding-bottom:0}}.palette-intro{color:var(--text-secondary);font-size:var(--step--1);margin-bottom:var(--space-md)}.palette-group{margin:var(--space-md) 0 var(--space-lg)}.palette-group-name{font-family:var(--font-sans);font-size:var(--step--1);text-transform:capitalize;color:var(--text-secondary);font-weight:600;letter-spacing:.04em;margin:0 0 var(--space-xs)}.palette-row{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.swatch{margin:0;display:flex;flex-direction:column;width:6.5rem}.swatch-chip{display:block;height:2.75rem;border-radius:3px;border:1px solid var(--border)}.swatch figcaption{display:block;margin-top:var(--space-xs);line-height:1.2}.swatch-name{display:block;font-family:var(--font-sans);font-size:.72rem;color:var(--text-primary)}.swatch-hex{display:block;font-family:var(--font-mono);font-size:.65rem;color:var(--text-secondary);background:transparent;padding:0;letter-spacing:.02em;margin-top:.15rem}.skills-page{max-width:780px;margin:0 auto;padding:var(--space-xl) 0}.skills-page h1{margin-top:0;margin-bottom:var(--space-sm);text-align:left}.skills-meta{font-family:var(--font-sans);color:var(--text-secondary);font-size:var(--step--1);margin-top:0;margin-bottom:var(--space-xl)}.now{max-width:720px;margin:0 auto;padding:var(--space-xl) 0}.now h1{margin-top:0;margin-bottom:var(--space-sm);text-align:left}.now-meta{font-family:var(--font-sans);color:var(--text-secondary);font-size:var(--step--1);margin-top:0}.now-footer{margin-top:var(--space-xl);padding-top:var(--space-md);border-top:1px solid var(--border);font-family:var(--font-mono);font-size:.78rem;color:var(--text-secondary)}.site-footer{border-top:1px solid var(--border);margin-top:var(--space-xl);padding:var(--space-lg) 0;background:var(--bg)}.site-footer .site-inner{font-family:var(--font-mono);font-size:.78rem;color:var(--text-secondary);letter-spacing:.02em;padding:0 var(--space-md)}.brand-icon{display:inline-block;position:relative;width:1.5em;height:1.5em;vertical-align:-.4em;margin:0 .1em}.brand-icon:before{content:"";position:absolute;inset:0;background-color:currentColor;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.brand-icon:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background-color:var(--text-primary);color:var(--bg);padding:.2rem .5rem;border-radius:3px;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.02em;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s ease}.brand-icon:hover:after{opacity:1}.brand-astro:before{-webkit-mask-image:url(/icons/astro.svg);mask-image:url(/icons/astro.svg)}.brand-claude:before{-webkit-mask-image:url(/icons/claude.svg);mask-image:url(/icons/claude.svg)}.footer-authorship a,.footer-contact a{color:var(--text-secondary);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px}.footer-authorship a:hover,.footer-contact a:hover{color:var(--accent);text-decoration-color:currentColor}.footer-contact{display:flex;gap:var(--space-xs);align-items:center}.footer-sep{opacity:.5}@media(max-width:640px){.site-footer .site-inner{flex-direction:column;gap:var(--space-xs);align-items:flex-start}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
