.nyc-taxi-project{--taxi-accent:var(--portfolio-accent, #478079);--taxi-accent-strong:#356b65;--taxi-accent-soft:rgba(71, 128, 121, 0.1);--taxi-accent-mid:rgba(71, 128, 121, 0.22);--taxi-rule:var(--portfolio-rule, rgba(127, 127, 127, 0.24));--taxi-surface:var(--portfolio-surface, #f4f5f4);--taxi-page:var(--bs-body-bg, #fff);--taxi-text:var(--bs-body-color, #181818);--taxi-muted:var(--bs-secondary-color, #686868);width:100%;max-width:1120px;margin:0 auto;padding:4.5rem 0 6rem;color:var(--taxi-text)}.nyc-taxi-project *{box-sizing:border-box}.nyc-taxi-project__hero{max-width:980px;padding-bottom:4.75rem}.nyc-taxi-project__eyebrow,.nyc-taxi-project__section-label,.nyc-taxi-project__result-label{margin:0 0 .9rem;color:var(--taxi-accent);font-size:.8rem;font-weight:700;letter-spacing:.105em;line-height:1.4;text-transform:uppercase}.nyc-taxi-project__hero h1{max-width:940px;margin:0;font-size:clamp(3rem,6vw,5.15rem);font-weight:700;letter-spacing:-.038em;line-height:1.02}.nyc-taxi-project__hook{max-width:850px;margin:1.6rem 0 0;font-size:clamp(1.4rem,2.4vw,1.9rem);font-weight:500;line-height:1.35}.nyc-taxi-project__intro{max-width:790px;margin:1.5rem 0 0;font-size:1.08rem;line-height:1.72}.nyc-taxi-project__technology{max-width:830px;margin:1.35rem 0 0;color:var(--taxi-accent);font-size:.94rem;font-weight:700;line-height:1.65}.nyc-taxi-project__actions,.nyc-taxi-project__form-actions{display:flex;flex-wrap:wrap;gap:.75rem 1rem;align-items:center}.nyc-taxi-project__actions{margin-top:2rem}.nyc-taxi-project__button,.nyc-taxi-project__text-link{display:inline-flex;justify-content:center;align-items:center;min-height:46px;border-radius:.45rem;font:inherit;font-size:.95rem;font-weight:700;line-height:1.35;text-decoration:none}.nyc-taxi-project__button{padding:.75rem 1.15rem;border:1px solid transparent;cursor:pointer}.nyc-taxi-project__button--primary{border-color:var(--taxi-accent);background:var(--taxi-accent);color:#fff}.nyc-taxi-project__button--primary:hover,.nyc-taxi-project__button--primary:focus-visible{border-color:var(--taxi-accent-strong);background:var(--taxi-accent-strong);color:#fff}.nyc-taxi-project__button--secondary{border-color:var(--taxi-rule);background:0 0;color:var(--taxi-text)}.nyc-taxi-project__button--secondary:hover,.nyc-taxi-project__button--secondary:focus-visible{border-color:var(--taxi-accent);color:var(--taxi-accent)}.nyc-taxi-project__button:disabled{cursor:wait;opacity:.66}.nyc-taxi-project__button:focus-visible,.nyc-taxi-project__text-link:focus-visible,.nyc-taxi-project__clear:focus-visible,.nyc-taxi-project__field input:focus-visible,.nyc-taxi-project__suggestions button:focus-visible{outline:3px solid var(--taxi-accent-mid);outline-offset:3px}.nyc-taxi-project__text-link{gap:.4rem;padding:.7rem .3rem;color:var(--taxi-accent);border-radius:0}.nyc-taxi-project__text-link:hover,.nyc-taxi-project__text-link:focus-visible{color:var(--taxi-accent);text-decoration:underline;text-underline-offset:.3rem}.nyc-taxi-project__section{padding:4.75rem 0;border-top:1px solid var(--taxi-rule)}.nyc-taxi-project__prose{max-width:820px}.nyc-taxi-project__prose--after{margin-top:2.25rem}.nyc-taxi-project__prose h2{margin:0 0 1.5rem;font-size:clamp(2rem,3.8vw,3rem);font-weight:700;letter-spacing:-.027em;line-height:1.1}.nyc-taxi-project__prose p,.nyc-taxi-project__prose li{font-size:1.07rem;line-height:1.72}.nyc-taxi-project__prose p{margin:0 0 1.25rem}.nyc-taxi-project__prose p:last-child{margin-bottom:0}.nyc-taxi-project__prose blockquote{margin:2rem 0 0;padding:.35rem 0 .35rem 1.4rem;border-left:4px solid var(--taxi-accent);color:var(--taxi-text);font-size:clamp(1.2rem,2.2vw,1.55rem);font-weight:650;line-height:1.5}.nyc-taxi-project__question{margin:2rem 0;padding:1.5rem 1.75rem;border-left:4px solid var(--taxi-accent);background:var(--taxi-accent-soft)}.nyc-taxi-project__question strong{display:block;margin-bottom:.5rem;color:var(--taxi-accent);font-size:.78rem;letter-spacing:.09em;text-transform:uppercase}.nyc-taxi-project__question p{margin:0;font-size:1.2rem;font-weight:600;line-height:1.5}.nyc-taxi-project__demo{position:relative;margin-top:2.5rem;padding:clamp(1.4rem,3vw,2.25rem);border:1px solid var(--taxi-rule);border-radius:.85rem;background:var(--taxi-surface);box-shadow:0 18px 45px rgba(20,31,30,7%)}.nyc-taxi-project__local-note{width:fit-content;margin:0 0 1.25rem;padding:.35rem .6rem;border:1px solid var(--taxi-rule);border-radius:999px;color:var(--taxi-muted);font-size:.76rem;line-height:1.4}.nyc-taxi-project__form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.nyc-taxi-project__field{position:relative;min-width:0}.nyc-taxi-project__field--datetime,.nyc-taxi-project__form-error,.nyc-taxi-project__form-actions{grid-column:1/-1}.nyc-taxi-project__field label{display:block;margin-bottom:.55rem;font-size:.9rem;font-weight:700}.nyc-taxi-project__field input{width:100%;min-height:50px;padding:.76rem .9rem;border:1px solid var(--taxi-rule);border-radius:.45rem;background:var(--taxi-page);color:var(--taxi-text);font:inherit;font-size:.96rem;line-height:1.4}.nyc-taxi-project__field input:focus{border-color:var(--taxi-accent)}.nyc-taxi-project__field input[aria-invalid=true]{border-color:#a64f4f}.nyc-taxi-project__input-wrap{position:relative}.nyc-taxi-project__input-wrap input{padding-right:4.3rem}.nyc-taxi-project__clear{position:absolute;top:50%;right:.5rem;min-height:34px;padding:.25rem .45rem;transform:translateY(-50%);border:0;border-radius:.3rem;background:0 0;color:var(--taxi-accent);font:inherit;font-size:.76rem;font-weight:700;cursor:pointer}.nyc-taxi-project__field-status{min-height:1.25rem;margin:.45rem 0 0;color:var(--taxi-muted);font-size:.78rem;line-height:1.45}.nyc-taxi-project__suggestions{position:absolute;z-index:20;top:calc(100% - 1rem);right:0;left:0;max-height:250px;margin:.35rem 0 0;padding:.35rem;overflow-y:auto;border:1px solid var(--taxi-rule);border-radius:.5rem;background:var(--taxi-page);box-shadow:0 14px 35px rgba(20,31,30,.14);list-style:none}.nyc-taxi-project__suggestions li{margin:0;padding:0}.nyc-taxi-project__suggestions button{display:block;width:100%;padding:.72rem .75rem;border:0;border-radius:.35rem;background:0 0;color:var(--taxi-text);font:inherit;font-size:.9rem;line-height:1.4;text-align:left;cursor:pointer}.nyc-taxi-project__suggestions button:hover,.nyc-taxi-project__suggestions button[aria-selected=true]{background:var(--taxi-accent-soft);color:var(--taxi-text)}.nyc-taxi-project__suggestions-attribution{display:block;padding:.45rem .75rem .35rem;color:var(--taxi-muted);font-size:.7rem;line-height:1.35;text-align:right}.nyc-taxi-project__form-error{padding:.9rem 1rem;border-left:4px solid #a64f4f;background:rgba(166,79,79,.1);color:var(--taxi-text);font-size:.9rem;line-height:1.5}.nyc-taxi-project__loading{color:var(--taxi-muted);font-size:.88rem;line-height:1.5}.nyc-taxi-project__results{margin-top:2rem;padding-top:2rem;border-top:1px solid var(--taxi-rule)}.nyc-taxi-project__route-summary{display:grid;grid-template-columns:minmax(0,1fr)auto minmax(0,1fr);gap:.8rem;align-items:center;margin-bottom:1.25rem;color:var(--taxi-text);font-size:.94rem;font-weight:700;line-height:1.4;text-align:center}.nyc-taxi-project__result-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-bottom:1rem}.nyc-taxi-project__result-card{min-width:0;padding:1.4rem;border:1px solid var(--taxi-rule);border-radius:.65rem;background:var(--taxi-page)}.nyc-taxi-project__result-card--model{border-top:4px solid var(--taxi-accent)}.nyc-taxi-project__result-card--route{border-top:4px solid var(--taxi-rule)}.nyc-taxi-project__result-card h3{margin:0 0 1.2rem;font-size:1.15rem;font-weight:700;line-height:1.35}.nyc-taxi-project__result-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin:0}.nyc-taxi-project__result-metrics div{padding:.9rem 0;border-top:1px solid var(--taxi-rule)}.nyc-taxi-project__result-metrics div:nth-child(odd){padding-right:.75rem}.nyc-taxi-project__result-metrics div:nth-child(even){padding-left:.75rem}.nyc-taxi-project__result-metrics dt{color:var(--taxi-muted);font-size:.74rem;font-weight:650;line-height:1.4}.nyc-taxi-project__result-metrics dd{margin:.3rem 0 0;color:var(--taxi-text);font-size:1.15rem;font-weight:700;line-height:1.25;font-variant-numeric:tabular-nums}.nyc-taxi-project__result-meta,.nyc-taxi-project__attribution{margin:.8rem 0 0;color:var(--taxi-muted);font-size:.76rem;line-height:1.5}.nyc-taxi-project__attribution{font-weight:650}.nyc-taxi-project__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:2.5rem 0 0;padding:1px;background:var(--taxi-rule)}.nyc-taxi-project__metrics div{min-height:145px;padding:1.25rem;background:var(--taxi-page)}.nyc-taxi-project__metrics dt{color:var(--taxi-muted);font-size:.78rem;font-weight:650;line-height:1.45}.nyc-taxi-project__metrics dd{margin:.75rem 0 0;color:var(--taxi-text);font-size:clamp(1.2rem,2vw,1.55rem);font-weight:700;letter-spacing:-.02em;line-height:1.25;font-variant-numeric:tabular-nums}.nyc-taxi-project__contract,.nyc-taxi-project__locked-results{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;margin-top:2.5rem}.nyc-taxi-project__contract section,.nyc-taxi-project__locked-results section{padding:1.6rem;border:1px solid var(--taxi-rule);background:var(--taxi-surface)}.nyc-taxi-project__contract h3,.nyc-taxi-project__locked-results h3{margin:0 0 1rem;color:var(--taxi-accent);font-size:1rem;font-weight:700;line-height:1.4}.nyc-taxi-project__contract ul{margin:0;padding-left:1.2rem}.nyc-taxi-project__contract li{font-size:.95rem;line-height:1.6}.nyc-taxi-project__contract li+li{margin-top:.45rem}.nyc-taxi-project__contract p{margin:0;color:var(--taxi-muted);font-size:.95rem;line-height:1.6}.nyc-taxi-project__feature-boundary,.nyc-taxi-project__feature-groups{display:grid;gap:1px;margin-top:2.5rem;padding:1px;background:var(--taxi-rule)}.nyc-taxi-project__feature-boundary{grid-template-columns:repeat(2,minmax(0,1fr))}.nyc-taxi-project__feature-groups{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:1.25rem}.nyc-taxi-project__feature-boundary section,.nyc-taxi-project__feature-groups section{min-width:0;padding:1.45rem;background:var(--taxi-page)}.nyc-taxi-project__feature-boundary p,.nyc-taxi-project__feature-groups h3{margin:0 0 .85rem;color:var(--taxi-text);font-size:1rem;font-weight:700;line-height:1.4}.nyc-taxi-project__feature-boundary ul{margin:0;padding-left:1.15rem}.nyc-taxi-project__feature-boundary li,.nyc-taxi-project__feature-groups p{color:var(--taxi-muted);font-size:.9rem;line-height:1.58}.nyc-taxi-project__feature-boundary li+li{margin-top:.35rem}.nyc-taxi-project__feature-groups span{display:block;margin-bottom:1.25rem;color:var(--taxi-accent);font-size:.76rem;font-weight:700;letter-spacing:.08em}.nyc-taxi-project__feature-groups p{margin:0}.nyc-taxi-project__feature-note{padding:1.35rem 1.5rem;border-left:4px solid var(--taxi-accent);background:var(--taxi-accent-soft)}.nyc-taxi-project__feature-note strong{display:block;margin-bottom:.45rem;color:var(--taxi-accent);font-size:.78rem;letter-spacing:.09em;line-height:1.4;text-transform:uppercase}.nyc-taxi-project__feature-note p{margin:0}.nyc-taxi-project__timeline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:2.5rem 0 0;padding:1px;background:var(--taxi-rule);list-style:none;counter-reset:taxi-timeline}.nyc-taxi-project__timeline--three{grid-template-columns:repeat(3,minmax(0,1fr))}.nyc-taxi-project__timeline li{position:relative;min-height:185px;padding:1.35rem;background:var(--taxi-page);counter-increment:taxi-timeline}.nyc-taxi-project__timeline li::before{display:block;margin-bottom:1.5rem;color:var(--taxi-accent);content:"0" counter(taxi-timeline);font-size:.76rem;font-weight:700;letter-spacing:.08em}.nyc-taxi-project__timeline li:not(:last-child)::after{position:absolute;z-index:2;top:50%;right:-.6rem;width:1.2rem;height:1.2rem;border:1px solid var(--taxi-rule);border-radius:50%;background:var(--taxi-page);color:var(--taxi-accent);content:"→";font-size:.75rem;line-height:1.05rem;text-align:center}.nyc-taxi-project__timeline span,.nyc-taxi-project__architecture span,.nyc-taxi-project__robustness span{display:block;color:var(--taxi-muted);font-size:.76rem;font-weight:650;line-height:1.4}.nyc-taxi-project__timeline strong{display:block;margin-top:.45rem;color:var(--taxi-text);font-size:1.02rem;line-height:1.3;text-transform:uppercase}.nyc-taxi-project__timeline small{display:block;margin-top:.75rem;color:var(--taxi-muted);font-size:.78rem;line-height:1.5}.nyc-taxi-project__model-list{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.75rem}.nyc-taxi-project__model-list span{padding:.5rem .75rem;border:1px solid var(--taxi-rule);border-radius:999px;color:var(--taxi-accent);font-size:.82rem;font-weight:700}.nyc-taxi-project__experiment-figures{display:grid;gap:1.5rem;margin-top:2.75rem}.nyc-taxi-project__figure{margin:0;padding:clamp(1rem,2.5vw,1.6rem);border:1px solid var(--taxi-rule);background:var(--taxi-surface)}.nyc-taxi-project__figure>p{margin:0 0 .9rem;color:var(--taxi-accent);font-size:.76rem;font-weight:700;letter-spacing:.09em;line-height:1.4;text-transform:uppercase}.nyc-taxi-project__figure img{display:block;width:100%;height:auto;border:1px solid var(--taxi-rule);background:#fff}.nyc-taxi-project__figure figcaption{max-width:780px;margin-top:.9rem;color:var(--taxi-muted);font-size:.82rem;line-height:1.55}.nyc-taxi-project__section--robustness{margin:0}.nyc-taxi-project__robustness{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin-top:2.5rem;padding:1px;background:var(--taxi-rule)}.nyc-taxi-project__robustness div{min-height:210px;padding:1.5rem;background:var(--taxi-page)}.nyc-taxi-project__robustness strong{display:block;margin-top:1rem;color:var(--taxi-accent);font-size:clamp(2rem,4vw,3.25rem);letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums}.nyc-taxi-project__robustness p{margin:1rem 0 0;color:var(--taxi-muted);font-size:.88rem;line-height:1.55}.nyc-taxi-project__locked-results section{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.nyc-taxi-project__locked-results h3{grid-column:1/-1}.nyc-taxi-project__locked-results p{margin:0}.nyc-taxi-project__locked-results strong,.nyc-taxi-project__locked-results span{display:block}.nyc-taxi-project__locked-results strong{color:var(--taxi-text);font-size:clamp(1.45rem,2.8vw,2.1rem);line-height:1.15;font-variant-numeric:tabular-nums}.nyc-taxi-project__locked-results span{margin-top:.45rem;color:var(--taxi-muted);font-size:.76rem;line-height:1.4}.nyc-taxi-project__architecture{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.75rem;margin:2.5rem 0 0;padding:0;list-style:none}.nyc-taxi-project__architecture li{position:relative;min-height:135px;padding:1.2rem;border:1px solid var(--taxi-rule);background:var(--taxi-page)}.nyc-taxi-project__architecture li:not(:nth-child(5)):not(:last-child)::after{position:absolute;top:50%;right:-.72rem;z-index:2;color:var(--taxi-accent);content:"→";transform:translateY(-50%);font-weight:700}.nyc-taxi-project__architecture strong{display:block;margin-top:.65rem;color:var(--taxi-text);font-size:.9rem;line-height:1.45}.nyc-taxi-project__architecture small{display:block;margin-top:.65rem;color:var(--taxi-muted);font-size:.72rem;line-height:1.45}.nyc-taxi-project__architecture-route{grid-column:1/-1;min-height:0!important;border-left:4px solid var(--taxi-accent)!important;background:var(--taxi-accent-soft)!important}.nyc-taxi-project__lessons{margin:2rem 0 0;padding:0;list-style:none;counter-reset:taxi-lessons}.nyc-taxi-project__lessons li{position:relative;padding:1.15rem 0 1.15rem 3.1rem;border-top:1px solid var(--taxi-rule);counter-increment:taxi-lessons}.nyc-taxi-project__lessons li::before{position:absolute;top:1.25rem;left:0;color:var(--taxi-accent);content:"0" counter(taxi-lessons);font-size:.78rem;font-weight:700;letter-spacing:.08em}.nyc-taxi-project__section--github{margin-top:1rem;padding:4rem;border-top:0;background:var(--taxi-accent-soft)}.nyc-taxi-project__section--github .nyc-taxi-project__button{margin-top:.8rem}.nyc-taxi-project__section--conclusion blockquote{margin-top:0;font-size:clamp(1.25rem,2.4vw,1.7rem)}html[data-bs-theme=dark] .nyc-taxi-project{--taxi-accent:#78aaa4;--taxi-accent-strong:#5f9690;--taxi-accent-soft:rgba(98, 166, 157, 0.14);--taxi-accent-mid:rgba(120, 170, 164, 0.34);--taxi-surface:rgba(255, 255, 255, 0.045)}html[data-bs-theme=dark] .nyc-taxi-project__button--primary{color:#101716}html[data-bs-theme=dark] .nyc-taxi-project__button--primary:hover,html[data-bs-theme=dark] .nyc-taxi-project__button--primary:focus-visible{color:#101716}@media(max-width:991.98px){.nyc-taxi-project__metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.nyc-taxi-project__timeline{grid-template-columns:repeat(2,minmax(0,1fr))}.nyc-taxi-project__timeline li:not(:last-child)::after{display:none}.nyc-taxi-project__architecture{grid-template-columns:repeat(2,minmax(0,1fr))}.nyc-taxi-project__architecture li:not(:nth-child(5)):not(:last-child)::after{display:none}}@media(max-width:767.98px){.nyc-taxi-project{padding:2.75rem 0 4rem}.nyc-taxi-project__hero{padding-bottom:3.25rem}.nyc-taxi-project__hero h1{font-size:clamp(2.35rem,12vw,3.25rem);line-height:1.05}.nyc-taxi-project__hook{margin-top:1.25rem;font-size:1.22rem}.nyc-taxi-project__intro{font-size:1rem;line-height:1.66}.nyc-taxi-project__technology{font-size:.88rem}.nyc-taxi-project__actions{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch}.nyc-taxi-project__actions .nyc-taxi-project__text-link{justify-self:start}.nyc-taxi-project__section{padding:3.35rem 0}.nyc-taxi-project__prose h2{margin-bottom:1.2rem;font-size:2rem}.nyc-taxi-project__prose p,.nyc-taxi-project__prose li{font-size:1rem;line-height:1.66}.nyc-taxi-project__question{padding:1.2rem}.nyc-taxi-project__question p{font-size:1.08rem}.nyc-taxi-project__demo{margin-top:2rem;padding:1.2rem;border-radius:.65rem}.nyc-taxi-project__form,.nyc-taxi-project__result-grid,.nyc-taxi-project__contract,.nyc-taxi-project__feature-boundary,.nyc-taxi-project__feature-groups,.nyc-taxi-project__locked-results,.nyc-taxi-project__robustness,.nyc-taxi-project__metrics,.nyc-taxi-project__timeline,.nyc-taxi-project__architecture{grid-template-columns:minmax(0,1fr)}.nyc-taxi-project__timeline.nyc-taxi-project__timeline--three{grid-template-columns:minmax(0,1fr)}.nyc-taxi-project__field--datetime,.nyc-taxi-project__form-error,.nyc-taxi-project__form-actions,.nyc-taxi-project__locked-results h3,.nyc-taxi-project__architecture-route{grid-column:1}.nyc-taxi-project__form-actions{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch}.nyc-taxi-project__form-actions .nyc-taxi-project__button{width:100%}.nyc-taxi-project__suggestions{max-height:210px}.nyc-taxi-project__route-summary{grid-template-columns:minmax(0,1fr);gap:.35rem}.nyc-taxi-project__result-metrics{grid-template-columns:minmax(0,1fr)}.nyc-taxi-project__result-metrics div:nth-child(odd),.nyc-taxi-project__result-metrics div:nth-child(even){padding-right:0;padding-left:0}.nyc-taxi-project__metrics div,.nyc-taxi-project__timeline li,.nyc-taxi-project__robustness div,.nyc-taxi-project__architecture li{min-height:0}.nyc-taxi-project__locked-results section{grid-template-columns:minmax(0,1fr)}.nyc-taxi-project__section--github{margin-right:-.75rem;margin-left:-.75rem;padding:3rem 1.25rem}.nyc-taxi-project__section--github .nyc-taxi-project__button{width:100%}}@media(prefers-reduced-motion:reduce){.nyc-taxi-project__button,.nyc-taxi-project__suggestions{scroll-behavior:auto;transition:none}}