*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.relative{position:relative}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.flex-shrink{flex-shrink:1}.flex-wrap{flex-wrap:wrap}.border{border-width:1px}.border-black\/10{border-color:#0000001a}.p-2{padding:.5rem}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--accent: #c0392b;--font-sans: "DM Sans", sans-serif;--font-mono: "JetBrains Mono", monospace;--background: #f7f4ef;--surface: #f1ede7;--foreground: #1f1b18;--muted: #6c645f;--border: #d8d0c8}html{overflow-y:scroll;color-scheme:light}html.dark{color-scheme:dark;--background: #141210;--surface: #1a1714;--foreground: #f4efe8;--muted: #b4aba3;--border: #36302b}html,body{min-height:100%}body{margin:0;display:flex;flex-direction:column;background:var(--background);color:var(--foreground);font-family:var(--font-sans);font-weight:400;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}header{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--background) 92%,transparent);backdrop-filter:blur(8px)}main{flex:1;padding:2rem 0 3rem}footer{padding:0 0 2rem}article{max-width:100%}.animate,.animate.show{opacity:1;transform:none}a{color:inherit}img{max-width:100%;display:block}.site-container{width:min(100%,680px);margin:0 auto;padding:0 1.5rem}.site-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:3.5rem;padding:2rem 0 0}.site-logo{font-family:var(--font-mono);font-size:13px;font-weight:700;letter-spacing:.04em;text-decoration:none}.site-logo-dot,.site-kicker-mark,.site-separator,.back-link-icon{color:var(--accent)}.site-nav{display:flex;gap:1.1rem}.site-nav a,.site-footer a,.site-link,.back-link{color:var(--muted);text-decoration:none}.site-nav a{font-size:12px;font-weight:500;letter-spacing:.1em;text-transform:uppercase}.site-nav a:hover,.site-footer a:hover,.site-link:hover,.back-link:hover{color:var(--foreground)}.site-footer{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;margin-top:3rem;padding-top:1.25rem;border-top:.5px solid var(--border);font-family:var(--font-mono);font-size:11px;letter-spacing:.04em}.site-separator{font-size:8px;line-height:1}.page-shell{display:grid;gap:2.75rem}.page-header{display:grid;gap:1rem}.page-kicker,.detail-meta,.group-year,.timeline-dates{font-family:var(--font-mono)}.page-kicker{display:flex;align-items:center;gap:6px;padding-bottom:.75rem;border-bottom:.5px solid var(--border);font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.page-title{margin:0;font-size:42px;line-height:1.1;letter-spacing:-.02em;font-weight:500}.page-intro{max-width:460px;margin:0;padding-left:1rem;border-left:2px solid var(--accent);color:var(--muted);font-size:15px;font-weight:300;line-height:1.75}.list-grid,.group-list{display:grid;gap:10px}.group-stack{display:grid;gap:1.5rem}.group-year{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.list-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 0;border-bottom:.5px solid var(--border);text-decoration:none}.list-card-copy{min-width:0}.list-card-title,.timeline-company,.detail-title{margin:0;font-size:13px;font-weight:500;letter-spacing:-.01em}.list-card-description,.timeline-role,.detail-description{margin-top:.3rem;color:var(--muted);font-size:11px;font-weight:300;line-height:1.55}.list-card-icon,.back-link-icon{width:16px;height:16px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;color:var(--muted)}.list-card:hover,.list-card:hover .list-card-icon{color:var(--foreground);border-color:var(--accent)}.timeline-list{display:grid}.timeline-entry{display:flex;gap:1.5rem;padding:1.1rem 0;border-bottom:.5px solid var(--border)}.timeline-entry:last-child{border-bottom:0}.timeline-dates{display:grid;min-width:72px;padding-top:3px;color:var(--muted);font-size:10px;line-height:1.6;white-space:nowrap}.timeline-copy{flex:1}.timeline-role{margin-bottom:.45rem}.timeline-description,.detail-content{color:var(--muted);font-size:12px;font-weight:300;line-height:1.65}.timeline-description p,.detail-content p,.detail-content ul,.detail-content ol,.detail-content hr{margin:0 0 1rem}.detail-stack{display:grid;gap:1rem}.detail-meta{display:flex;flex-wrap:wrap;gap:.75rem;color:var(--muted);font-size:10px;letter-spacing:.05em}.detail-title{font-size:32px;line-height:1.15}.detail-links{display:flex;gap:.75rem;flex-wrap:wrap}.project-detail-shell{gap:1.5rem}.project-detail-header{display:grid}.project-detail-meta-line{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;color:var(--muted);font-family:var(--font-mono);font-size:10px;font-weight:400;letter-spacing:.05em}.project-detail-title{margin:0 0 .75rem;font-size:36px;line-height:1.15;letter-spacing:-.02em;font-weight:500}.project-detail-summary{max-width:520px;margin:0 0 1.5rem;padding-left:1rem;border-left:2px solid var(--accent);color:var(--muted);font-size:15px;font-weight:300;line-height:1.7}.project-detail-links{display:inline-flex;flex-wrap:wrap;gap:8px}.project-detail-link{display:inline-flex;align-items:center;justify-content:center;padding:4px 12px;border:.5px solid var(--border);color:var(--muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-decoration:none}.project-detail-link:hover{border-color:var(--foreground);color:var(--foreground)}.project-detail-rule{width:100%;margin:1.5rem 0;border:0;border-top:.5px solid var(--border)}.project-detail-rule-tight{margin-top:.5rem}.project-metadata-row{display:flex;flex-wrap:wrap;gap:2rem;margin-bottom:.5rem}.project-metadata-field{display:grid;gap:.45rem;align-content:start}.project-metadata-label{color:var(--muted);font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.project-metadata-value{color:var(--foreground);font-size:13px;font-weight:400}.project-metadata-pills{display:flex;flex-wrap:wrap;gap:4px}.project-metadata-pill{padding:2px 7px;border:.5px solid var(--border);color:var(--muted);font-family:var(--font-mono);font-size:9px;font-weight:500}.site-link{display:inline-flex;align-items:center;gap:.35rem;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em}.site-link-underlined{text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}.back-link{display:inline-flex;align-items:center;gap:.45rem;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em}.back-link-icon-top{transform:rotate(90deg)}.detail-content h1,.detail-content h2,.detail-content h3,.detail-content h4{margin:2rem 0 .75rem;color:var(--foreground);font-size:16px;line-height:1.3;font-weight:500}.detail-content strong{color:var(--foreground);font-weight:500}.detail-content a{color:var(--foreground);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}.detail-content a:hover{text-decoration-color:var(--accent)}.project-detail-content.project-detail-has-metadata>p:first-child,.project-detail-content.project-detail-has-metadata>hr:first-of-type{display:none}.project-detail-content h2{display:flex;align-items:center;gap:8px;margin:2rem 0 1.25rem;padding-bottom:.6rem;border-bottom:.5px solid var(--border);color:var(--muted);font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.12em;line-height:1.4;text-transform:uppercase}.project-detail-content h2:before{content:"//";color:var(--accent)}.project-detail-content p{margin-bottom:1rem;color:var(--muted);font-size:14px;font-weight:300;line-height:1.8}.project-detail-content strong{color:var(--foreground);font-weight:500}.project-detail-content ul{margin:0 0 1rem;padding:0;list-style:none}.project-detail-content ul li{position:relative;padding-left:1rem}.project-detail-content ul li:before{content:"—";position:absolute;left:0;color:var(--accent);font-family:var(--font-mono);font-size:11px}.detail-content ul,.detail-content ol{padding-left:1.25rem}.detail-content code{font-family:var(--font-mono);font-size:.9em}.detail-content pre{overflow-x:auto;padding:.9rem 1rem;border:1px solid var(--border);background:var(--surface);font-family:var(--font-mono);font-size:11px;line-height:1.6}.detail-content hr{border:0;border-top:.5px solid var(--border)}html #back-to-top{opacity:0;pointer-events:none}html.scrolled #back-to-top{opacity:1;pointer-events:auto}@media(max-width:640px){main{padding-top:1.5rem}.site-header,.timeline-entry{flex-direction:column}.site-header{gap:.75rem;margin-bottom:2.5rem;padding-top:1.5rem}.page-title{font-size:36px}.detail-title{font-size:28px}.project-detail-title{font-size:32px}.timeline-entry{gap:.5rem}}.hover\:bg-black\/5:hover{background-color:#0000000d}.dark\:border-white\/10:is(.dark *){border-color:#ffffff1a}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:#ffffff1a}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}
