:root{--width-page:min(94vw, 90rem);--width-prose:var(--width-page);--ink:#16161a;--ink-soft:#5c5c66;--ink-faint:#8a8a94;--paper:#fdfdfc;--rule:#e4e4e0;--accent:#9a3412;--code-bg:#f5f5f3;--font-body:ui-serif, Georgia, Cambria, "Times New Roman", serif;--font-ui:ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:1.0625rem;line-height:1.65}.wrapper{max-width:var(--width-page);margin:0 auto;padding:2.5rem 2rem 4rem}a{color:var(--accent);text-underline-offset:2px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.skip-link{position:absolute;left:-9999px}.skip-link:focus{background:var(--paper);z-index:10;padding:.5rem .75rem;top:1rem;left:1rem}.site-header{border-bottom:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem 1.5rem;margin-bottom:2.5rem;padding-bottom:1.25rem;display:flex}.site-title{font-family:var(--font-mono);color:var(--ink);letter-spacing:-.01em;font-size:1rem;font-weight:600;text-decoration:none}.site-header nav ul{font-family:var(--font-ui);gap:1.25rem;margin:0;padding:0;font-size:.875rem;list-style:none;display:flex}.site-header nav a{color:var(--ink-soft);text-decoration:none}.site-header nav a:hover{color:var(--accent)}.site-header nav a[aria-current=page]{color:var(--ink);text-underline-offset:4px;text-decoration:underline}.site-footer{border-top:1px solid var(--rule);font-family:var(--font-ui);color:var(--ink-faint);justify-content:space-between;gap:1rem;margin-top:4rem;padding-top:1.25rem;font-size:.8125rem;display:flex}.site-footer p{margin:0}.section-title{font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);margin:0 0 1.75rem;font-size:.8125rem;font-weight:600}.page-title{letter-spacing:-.015em;margin:0 0 2rem;font-size:1.5rem;line-height:1.25}.post-list{margin:0;padding:0;list-style:none}.post-list>li+li{border-top:1px solid var(--rule);margin-top:2.25rem;padding-top:2.25rem}.post-list time{font-family:var(--font-ui);color:var(--ink-faint);margin-bottom:.3rem;font-size:.8125rem;display:block}.post-list h2,.post-list h3{letter-spacing:-.01em;margin:0 0 .4rem;font-size:1.1875rem;line-height:1.3}.post-list h2 a,.post-list h3 a{color:var(--ink);text-decoration:none}.post-list h2 a:hover,.post-list h3 a:hover{color:var(--accent);text-underline-offset:3px;text-decoration:underline}.post-list p{color:var(--ink-soft);margin:0}.empty{color:var(--ink-faint);font-style:italic}.tag-list{flex-wrap:wrap;gap:.5rem;margin:.9rem 0 0;padding:0;list-style:none;display:flex}.tag-list a{font-family:var(--font-ui);border:1px solid var(--rule);color:var(--ink-soft);border-radius:999px;padding:.35rem .6rem;font-size:.75rem;line-height:1;text-decoration:none;display:inline-block}.tag-list a:hover{border-color:var(--accent);color:var(--accent)}.tag-index{margin:0;padding:0;list-style:none}.tag-index li{border-bottom:1px solid var(--rule);align-items:baseline;gap:.6rem;padding:.5rem 0;display:flex}.tag-index li:last-child{border-bottom:none}.tag-index .count{font-family:var(--font-ui);color:var(--ink-faint);font-size:.75rem}.intro:not(:last-child){border-bottom:1px solid var(--rule);margin-bottom:3.5rem;padding-bottom:2.5rem}.intro>*{max-width:var(--width-prose)}.intro h1{letter-spacing:-.025em;margin:0 0 1rem;font-size:1.875rem;line-height:1.15}.intro p{color:var(--ink-soft);font-size:1.125rem}.project-list{margin:0;padding:0;list-style:none}.project-list>li{border-bottom:1px solid var(--rule);grid-template-columns:4rem 1fr auto;gap:0 1.5rem;padding:1.75rem 0;display:grid}.project-list>li:first-child{padding-top:0}.project-list>li:last-child{border-bottom:none;padding-bottom:0}.project-year{font-family:var(--font-ui);color:var(--ink-faint);padding-top:.28rem;font-size:.8125rem}.project-body h2{letter-spacing:-.01em;flex-wrap:wrap;align-items:center;gap:.6rem;margin:0 0 .4rem;font-size:1.1875rem;line-height:1.3;display:flex}.project-body h2 a{color:var(--ink);text-decoration:none}.project-body h2 a:hover{color:var(--accent);text-underline-offset:3px;text-decoration:underline}.project-body p{color:var(--ink-soft);margin:0}.project-cover{border:1px solid var(--rule);border-radius:4px;width:11rem;line-height:0;display:block;overflow:hidden}.project-cover img{width:100%;height:auto;display:block}.project-figure{border:1px solid var(--rule);border-radius:4px;margin:0 0 2.5rem;line-height:0;overflow:hidden}.project-figure img{width:100%;height:auto;display:block}.status{font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);border:1px solid var(--rule);white-space:nowrap;border-radius:999px;padding:.2rem .5rem;font-size:.6875rem;font-weight:500}.post-meta .status{margin-left:.6rem}.project-links{font-family:var(--font-ui);flex-wrap:wrap;gap:.4rem 1.5rem;margin:.9rem 0 0;padding:0;font-size:.875rem;list-style:none;display:flex}.project-links a{text-decoration:none}.project-links a:hover{text-decoration:underline}.post{max-width:var(--width-prose)}.post-header{margin-bottom:2.5rem}.post-header h1{letter-spacing:-.02em;margin:0 0 .5rem;font-size:1.75rem;line-height:1.2}.post-meta{font-family:var(--font-ui);color:var(--ink-faint);margin:0;font-size:.8125rem}.post-meta .updated{margin-left:.35rem}.draft-badge{font-family:var(--font-ui);color:#92400e;background:#fef3c7;border-radius:3px;margin:0 0 .75rem;padding:.25rem .5rem;font-size:.75rem;display:inline-block}.draft-badge.inline{margin:.5rem 0 0}.back-link{font-family:var(--font-ui);margin-top:3.5rem;font-size:.875rem}.back-link a{text-decoration:none}.back-link a:hover{text-decoration:underline}.fare-table{margin:2rem 0;margin-right:calc(var(--width-prose) - var(--width-page))}.prose :is(h1,h2,h3,h4)+.fare-table{margin-top:0}.fare-table figcaption{font-family:var(--font-ui);color:var(--ink-faint);margin-bottom:.6rem;font-size:.8125rem}.fare-table-actions{margin-bottom:.6rem}.fare-enhance{font-family:var(--font-ui);color:var(--ink-soft);border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:4px;padding:.35rem .7rem;font-size:.8125rem}.fare-enhance:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.fare-enhance:disabled{opacity:.5;cursor:default}.fare-enhance-note{font-family:var(--font-ui);color:var(--ink-faint);margin-left:.6rem;font-size:.8125rem}.table-scroll{border:1px solid var(--rule);border-radius:4px;overflow-x:auto}.fare-table table{border-collapse:collapse;width:100%;font-family:var(--font-ui);font-variant-numeric:tabular-nums;margin:0;font-size:.8125rem}.fare-table th,.fare-table td{text-align:left;border-bottom:1px solid var(--rule);white-space:nowrap;padding:.45rem .7rem}.fare-table thead th{background:var(--paper);letter-spacing:.02em;font-size:.75rem;font-weight:600;position:sticky;top:0}.fare-table tbody tr:last-child td{border-bottom:0}.fare-table .num{text-align:right}.fare-table td:last-child{white-space:normal;min-width:14rem;color:var(--ink-faint)}.post-layout.has-toc{grid-template-columns:minmax(0,1fr) 12rem;align-items:start;gap:0 3rem;display:grid}.post-layout.has-toc>.toc{grid-area:1/2}.post-layout.has-toc>.post{grid-area:1/1}.toc{font-family:var(--font-ui);max-height:calc(100vh - 4rem);font-size:.8125rem;line-height:1.35;position:sticky;top:2rem;overflow-y:auto}.toc-title{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);margin:0 0 .7rem;font-size:.6875rem;font-weight:600}.toc ol{border-left:1px solid var(--rule);margin:0;padding:0;list-style:none}.toc a{color:var(--ink-soft);border-left:2px solid #0000;margin-left:-1px;padding:.32rem 0 .32rem .85rem;text-decoration:none;display:block}.toc a:hover{color:var(--accent)}.toc li[data-depth="3"] a{padding-left:1.7rem}.toc a[aria-current=location]{color:var(--ink);border-left-color:var(--accent)}@media (width<=60rem){.post-layout.has-toc{display:block}.toc{border-bottom:1px solid var(--rule);max-height:none;margin-bottom:2.25rem;padding-bottom:1.25rem;position:static}}.prose :is(h1,h2,h3,h4){scroll-margin-top:1.5rem}.zoomable{cursor:zoom-in}.lightbox{background:0 0;border:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;margin:0;padding:0;overflow:hidden}.lightbox[open]{justify-content:center;align-items:center;padding:clamp(1rem,4vw,3rem);display:flex}.lightbox::backdrop{background:#141416e0}.lightbox img{object-fit:contain;cursor:zoom-out;border-radius:3px;width:auto;max-width:100%;height:auto;max-height:100%;display:block}.lightbox-close{z-index:1;width:2.25rem;height:2.25rem;font-family:var(--font-ui);color:var(--paper);cursor:pointer;background:#00000073;border:0;border-radius:50%;padding:0;font-size:1.5rem;line-height:1;position:absolute;top:.5rem;right:.75rem}.lightbox-close:hover{background:#000000b3}.lightbox-close:focus-visible{outline:2px solid var(--paper);outline-offset:2px}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose p,.prose ul,.prose ol{margin:0 0 1.25rem}.prose h2,.prose h3,.prose h4{letter-spacing:-.01em;margin:2.25rem 0 .75rem;line-height:1.3}.prose h2{font-size:1.25rem}.prose h3{font-size:1.0625rem}.prose h4{color:var(--ink-soft);font-size:1rem}.prose ul,.prose ol{padding-left:1.25rem}.prose li{margin-bottom:.4rem}.prose blockquote{border-left:2px solid var(--rule);color:var(--ink-soft);margin:1.5rem 0;padding-left:1rem;font-style:italic}.prose img{max-width:100%;height:auto;margin:1.75rem 0;display:block}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}.prose table{border-collapse:collapse;width:100%;margin:1.5rem 0;font-size:.9375rem}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);padding:.5rem .6rem}.prose th{font-family:var(--font-ui);font-size:.8125rem}.prose .table-scroll{overflow-x:auto}.prose code{font-family:var(--font-mono);background:var(--code-bg);border-radius:3px;padding:.15em .35em;font-size:.875em}.prose pre{font-family:var(--font-mono);border:1px solid var(--rule);border-radius:4px;margin:1.5rem 0;padding:.9rem 1rem;font-size:.8125rem;line-height:1.6;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}@media (width<=40rem){.wrapper{padding:2rem 1.1rem 3rem}.post-header h1,.intro h1{font-size:1.5rem}.intro p{font-size:1.0625rem}.project-list>li{grid-template-columns:1fr;gap:.35rem}.project-year{padding-top:0}.project-cover{width:100%;max-width:20rem;margin-top:.85rem}}.globe{margin:2.25rem 0}.prose :is(h1,h2,h3,h4)+.globe{margin-top:0}.globe-stage{max-width:34rem;margin-inline:auto;position:relative}.globe-svg{touch-action:pan-y;width:100%;height:auto;display:block;overflow:visible}.globe.is-interactive .globe-svg{cursor:grab}.globe.is-dragging .globe-svg{cursor:grabbing}.globe-svg:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.globe-zoom{font-family:var(--font-ui);background:var(--paper);border:1px solid var(--rule);border-radius:999px;align-items:stretch;font-size:.75rem;line-height:1;display:flex;position:absolute;top:0;right:0;overflow:hidden}.globe-zoom button{appearance:none;font:inherit;color:var(--ink-soft);cursor:pointer;background:0 0;border:0;padding:.4rem .55rem}.globe-zoom button:hover:not(:disabled){color:var(--ink);background:var(--rule)}.globe-zoom button:disabled{opacity:.35;cursor:default}.globe-zoom button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.globe-zoom .globe-zoom-level{font-variant-numeric:tabular-nums;border-inline:1px solid var(--rule);min-width:2.9rem}.globe-ocean{fill:#f6f6f2}.globe-land{fill:#e0e0d8;stroke:#cbcbc1;stroke-width:.4px}.globe-graticule{fill:none;stroke:#deded6;stroke-width:.5px}.globe-limb{fill:none;stroke:var(--rule);stroke-width:1px}.globe-routes path{fill:none;stroke:var(--accent);stroke-opacity:.5;stroke-linecap:round}.globe-airports circle{fill:var(--paper);stroke:var(--accent);stroke-width:1.4px}.globe-labels text{font-family:var(--font-ui);letter-spacing:.02em;fill:var(--ink-soft);paint-order:stroke;stroke:var(--paper);stroke-width:2.5px;stroke-linejoin:round;font-size:10px;font-weight:600}.globe.is-highlighting .globe-routes path{stroke-opacity:.12}.globe.is-highlighting .globe-routes path.is-lit{stroke-opacity:1;stroke-width:2px!important}.globe.is-highlighting .globe-airports circle{opacity:.35}.globe.is-highlighting .globe-airports circle.is-lit{opacity:1;fill:var(--accent)}.globe.is-highlighting .globe-labels text{opacity:.3}.globe-airports circle,.globe-routes path,.globe-labels text{transition:opacity .12s,stroke-opacity .12s}.globe.is-dragging :is(.globe-airports circle,.globe-routes path,.globe-labels text){transition:none}.globe-readout,.globe-hint{font-family:var(--font-ui);text-align:center;min-height:1.4em;margin:.4rem 0 0;font-size:.8125rem}.globe-readout{color:var(--ink)}.globe-hint{color:var(--ink-faint)}.globe-readout:not([hidden])+.globe-hint{display:none}.globe figcaption{font-family:var(--font-ui);color:var(--ink-faint);text-align:center;margin-top:.75rem;font-size:.8125rem}@media (prefers-reduced-motion:reduce){.globe-airports circle,.globe-routes path,.globe-labels text{transition:none}}.flight-log{margin:2rem 0;margin-right:calc(var(--width-prose) - var(--width-page))}.prose :is(h1,h2,h3,h4)+.flight-log{margin-top:0}.flight-log table{border-collapse:collapse;width:100%;font-family:var(--font-ui);font-size:.8125rem}.flight-log th,.flight-log td{border-bottom:1px solid var(--rule);text-align:left;vertical-align:baseline;padding:.4rem .75rem .4rem 0}.flight-log thead th{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);font-size:.6875rem;font-weight:600}.flight-log tbody tr:last-child td{border-bottom:0}.flight-log .num{text-align:right;font-variant-numeric:tabular-nums}.flight-log :is(th,td):first-child{width:2rem}.flight-log .nowrap{white-space:nowrap}.flight-log abbr{border-bottom:1px dotted var(--rule);cursor:help;text-decoration:none}.flight-log-arrow{color:var(--ink-faint)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.flight-log .muted{color:var(--ink-faint)}.flight-summary{margin:2rem 0}.prose :is(h1,h2,h3,h4)+.flight-summary{margin-top:0}.flight-summary dl{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:1.25rem 2rem;margin:0;padding:1.4rem 0;display:grid}.flight-summary dt{font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);font-size:.6875rem;font-weight:600}.flight-summary dd{font-variant-numeric:tabular-nums;margin:.3rem 0 0;font-size:1.9rem;line-height:1.05}.flight-summary figcaption{font-family:var(--font-ui);color:var(--ink-faint);margin-top:.7rem;font-size:.8125rem}.flight-facts{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1.1rem 2rem;margin:1.75rem 0;display:grid}.prose :is(h1,h2,h3,h4)+.flight-facts{margin-top:0}.flight-facts dt{font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);font-size:.6875rem;font-weight:600}.flight-facts dd{font-variant-numeric:tabular-nums;margin:.2rem 0 0}.flight-facts dd strong{font-weight:600}.flight-facts dd span{color:var(--ink-soft);font-size:.9375rem;display:block}.protected{margin:2rem 0}.protected-form{border:1px solid var(--rule);background:var(--code-bg);max-width:32rem;font-family:var(--font-ui);border-radius:6px;margin-inline:auto;padding:1.75rem}.protected-form h2{font-size:1.125rem;font-family:var(--font-ui);margin:0 0 .5rem}.protected-form>p{color:var(--ink-soft);margin:0 0 1.25rem;font-size:.9375rem;line-height:1.55}.protected-row{gap:.5rem;display:flex}.protected-row input{border:1px solid var(--rule);background:var(--paper);min-width:0;color:var(--ink);font:inherit;border-radius:4px;flex:auto;padding:.5rem .7rem;font-size:1rem}.protected-row button{border:1px solid var(--ink);background:var(--ink);color:var(--paper);font:inherit;cursor:pointer;border-radius:4px;flex:none;padding:.5rem 1.1rem;font-size:1rem}.protected-row button:hover:not(:disabled){background:var(--ink-soft);border-color:var(--ink-soft)}.protected-row :disabled{opacity:.6;cursor:default}.protected.is-working{cursor:progress}.protected-status:empty{display:none}.protected-status{color:var(--accent);margin:.85rem 0 0;font-size:.9375rem}
