---
title: Dev mode and build mode share one code path
description: "Why the static build is a crawler against the same ASP.NET pipeline as dev, not a second renderer — keeping dev fidelity and publish output in lockstep."
canonical_url: https://usepennington.net/explanation/core/dev-vs-build/
sidecar_url: https://usepennington.net/explanation/core/dev-vs-build.md
content_hash: sha256:732f1a919d84ae5e21420faccac874961b2ed320e3206dd37554261616ac0a72
tokens: 10883
uid: explanation.core.dev-vs-build
reading_time_minutes: 6
---

Under the Hood
# Dev mode and build mode share one code path

Why the static build is a crawler against the same ASP.NET pipeline as dev, not a second renderer — keeping dev fidelity and publish output in lockstep.

 
Why doesn't Pennington have a separate offline build step — one that reads markdown and writes HTML without starting a web server — when `dotnet run -- build` boots the entire ASP.NET host first?

 
## Context

 
Most static site generators are built as compilers: read content files, transform them, write HTML. That shape is intuitive, and it was on the table for Pennington too. The problem with a separate publish renderer surfaces not at the first feature but at the second. Locale middleware runs in dev, so it needs a second implementation in the offline path; response processors run in dev, so they need it too; Blazor SSR for islands, the xref rewriter, the CSS discovery pipeline — each one accrues a corresponding "also do this in build" edit. The two implementations then diverge over time, invisibly, until a feature that works in development produces different output in publish.

 
Pennington keeps one host. Dev mode is that host serving requests over Kestrel; build mode is a crawler that drives the same host's request pipeline in process. There is exactly one ASP.NET pipeline, and the static build is a consumer of it. The rest of this page works through what that buys.

 
.b-c1c1ed9b{--beck-surface:var(--color-base-50, #ffffff);--beck-node-bg:var(--color-base-50, #ffffff);--beck-node-border:var(--color-base-200, #e2e8f0);--beck-node-shadow:0 1px 3px rgb(0 0 0 / 0.05), 0 4px 12px rgb(0 0 0 / 0.06);--beck-text:var(--color-base-800, #1e293b);--beck-text-muted:var(--color-base-500, #64748b);--beck-text-faint:var(--color-base-400, #94a3b8);--beck-primary:var(--color-primary-600, #175ddc);--beck-success:var(--color-emerald-500, #10b981);--beck-warn:var(--color-amber-500, #f59e0b);--beck-danger:var(--color-red-500, #ef4444);--beck-info:var(--color-violet-500, #8b5cf6);--beck-neutral:var(--color-base-400, #94a3b8);--beck-group-border:color-mix(in srgb, var(--beck-neutral) 45%, transparent);--beck-group-label:var(--beck-text-muted);--beck-edge:var(--color-base-300, #cbd5e1);--beck-packet:var(--beck-primary);--beck-icon-bg:var(--color-base-100, #f1f5f9);--beck-accent:var(--beck-primary);--beck-font:'Inter', system-ui, -apple-system, sans-serif;--beck-font-mono:'IBM Plex Mono', ui-monospace, monospace;}[data-theme='dark'] .b-c1c1ed9b{--beck-surface:var(--color-base-950, #0d1117);--beck-node-bg:var(--color-base-900, #161b22);--beck-node-border:var(--color-base-700, #30363d);--beck-node-shadow:0 1px 3px rgb(0 0 0 / 0.3), 0 4px 14px rgb(0 0 0 / 0.4);--beck-text:var(--color-base-50, #f0f6fc);--beck-text-muted:var(--color-base-400, #8b949e);--beck-text-faint:var(--color-base-500, #6e7681);--beck-edge:var(--color-base-700, #30363d);--beck-icon-bg:var(--color-base-800, #21262d);--beck-font:'Inter', system-ui, -apple-system, sans-serif;--beck-font-mono:'IBM Plex Mono', ui-monospace, monospace;}@media (prefers-color-scheme: dark){:root:not([data-theme='light']) .b-c1c1ed9b{--beck-surface:var(--color-base-950, #0d1117);--beck-node-bg:var(--color-base-900, #161b22);--beck-node-border:var(--color-base-700, #30363d);--beck-node-shadow:0 1px 3px rgb(0 0 0 / 0.3), 0 4px 14px rgb(0 0 0 / 0.4);--beck-text:var(--color-base-50, #f0f6fc);--beck-text-muted:var(--color-base-400, #8b949e);--beck-text-faint:var(--color-base-500, #6e7681);--beck-edge:var(--color-base-700, #30363d);--beck-icon-bg:var(--color-base-800, #21262d);--beck-font:'Inter', system-ui, -apple-system, sans-serif;--beck-font-mono:'IBM Plex Mono', ui-monospace, monospace;}}.b-c1c1ed9b{font-family:var(--beck-font);}.b-c1c1ed9b .beck-fx-node{transform-box:fill-box;transform-origin:center;}.b-c1c1ed9b .beck-packet-label{font-family:var(--beck-font-mono);font-size:11px;font-weight:600;}.b-c1c1ed9b .beck-node{fill:var(--beck-node-bg);stroke:color-mix(in srgb, var(--beck-accent) 32%, var(--beck-node-border));stroke-width:1.5;filter:drop-shadow(0 1px 3px rgb(0 0 0/.05)) drop-shadow(0 4px 12px rgb(0 0 0/.06));}[data-theme='dark'] .b-c1c1ed9b .beck-node{filter:drop-shadow(0 1px 3px rgb(0 0 0/.3)) drop-shadow(0 4px 14px rgb(0 0 0/.4));}@media (prefers-color-scheme: dark){:root:not([data-theme='light']) .b-c1c1ed9b .beck-node{filter:drop-shadow(0 1px 3px rgb(0 0 0/.3)) drop-shadow(0 4px 14px rgb(0 0 0/.4));}}.b-c1c1ed9b .beck-node--external{stroke-dasharray:5 4;}.b-c1c1ed9b .beck-node--subtle{opacity:.72;}.b-c1c1ed9b .beck-node--ghost{fill:transparent;stroke-dasharray:5 4;filter:none;}.b-c1c1ed9b .beck-icon-chip{fill:color-mix(in srgb, var(--beck-accent) 15%, var(--beck-icon-bg));}.b-c1c1ed9b .beck-node--ghost .beck-icon-chip{fill:transparent;}.b-c1c1ed9b .beck-icon{color:var(--beck-accent);}.b-c1c1ed9b .beck-node-title{fill:var(--beck-text);}.b-c1c1ed9b .beck-node-subtitle,.b-c1c1ed9b .beck-ghost-label{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-status-inline{fill:var(--beck-accent);}.b-c1c1ed9b .beck-status-bg{fill:color-mix(in srgb, var(--beck-accent) 14%, transparent);}.b-c1c1ed9b .beck-status-text{fill:var(--beck-accent);}.b-c1c1ed9b .beck-group{fill:none;stroke:var(--beck-group-border);stroke-width:1.5;stroke-dasharray:6 6;}.b-c1c1ed9b .beck-group-label-bg{fill:var(--beck-surface);}.b-c1c1ed9b .beck-group-label{fill:var(--beck-group-label);}.b-c1c1ed9b .beck-node--start{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-node--end{fill:none;stroke:var(--beck-text-muted);stroke-width:2;}.b-c1c1ed9b .beck-end-dot{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-class-head{fill:color-mix(in srgb, var(--beck-accent) 10%, transparent);}.b-c1c1ed9b .beck-class-head-border{stroke:color-mix(in srgb, var(--beck-accent) 28%, var(--beck-node-border));stroke-width:1;}.b-c1c1ed9b .beck-class-divider{stroke:var(--beck-node-border);stroke-width:1;}.b-c1c1ed9b .beck-class-stereo{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-class-title{fill:var(--beck-text);}.b-c1c1ed9b .beck-class-field{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-class-method{fill:var(--beck-text);}.b-c1c1ed9b .beck-lifeline{stroke-width:2;stroke-dasharray:6 7;}.b-c1c1ed9b .beck-activation{filter:drop-shadow(0 0 5px color-mix(in srgb, var(--beck-accent) 45%, transparent));}.b-c1c1ed9b .beck-msg-chip{fill:var(--beck-node-bg);stroke:color-mix(in srgb, var(--beck-accent) 40%, transparent);stroke-width:1;}.b-c1c1ed9b .beck-msg-text{fill:color-mix(in srgb, var(--beck-accent) 34%, var(--beck-text));}.b-c1c1ed9b .beck-msg--reply .beck-msg-chip{stroke:none;}.b-c1c1ed9b .beck-msg--reply .beck-msg-text,.b-c1c1ed9b .beck-msg-text--bare{fill:var(--beck-text-muted);}.b-c1c1ed9b .beck-band-box{fill:color-mix(in srgb, var(--beck-accent) 5%, transparent);stroke:color-mix(in srgb, var(--beck-accent) 30%, transparent);stroke-width:1.5;stroke-dasharray:6 6;}.b-c1c1ed9b .beck-band-chip{fill:var(--beck-surface);stroke:color-mix(in srgb, var(--beck-accent) 40%, transparent);stroke-width:1;}.b-c1c1ed9b .beck-band-label{fill:color-mix(in srgb, var(--beck-accent) 70%, var(--beck-text));}.b-c1c1ed9b .beck-edge{fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;}.b-c1c1ed9b .beck-edge-label{fill:var(--beck-text-muted);paint-order:stroke;stroke:var(--beck-surface);stroke-width:3px;stroke-linejoin:round;}.b-c1c1ed9b .beck-title{fill:var(--beck-text);}.b-c1c1ed9b .beck-subtitle{fill:var(--beck-text-muted);}@media (prefers-reduced-motion:no-preference){.b-c1c1ed9b .bp0-c1c1ed9b{animation:kp0-c1c1ed9b 26.49s linear infinite;}@keyframes kp0-c1c1ed9b{0%{offset-distance:0%;opacity:0;}11.4565%{opacity:0;}11.4665%{offset-distance:0%;opacity:1;animation-timing-function:linear;}13.7314%{offset-distance:100%;opacity:1;}13.7414%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bpl0-c1c1ed9b{animation:kp0-c1c1ed9b 26.49s linear infinite;}.b-c1c1ed9b .bt0-c1c1ed9b{animation:kt0-c1c1ed9b 26.49s linear infinite;}@keyframes kt0-c1c1ed9b{0%{stroke-dashoffset:97.5;}11.4665%{stroke-dashoffset:97.5;animation-timing-function:linear;}13.7314%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:97.5;}100%{stroke-dashoffset:97.5;}}.b-c1c1ed9b .bp1-c1c1ed9b{animation:kp1-c1c1ed9b 26.49s linear infinite;}@keyframes kp1-c1c1ed9b{0%{offset-distance:0%;opacity:0;}15.9863%{opacity:0;}15.9963%{offset-distance:0%;opacity:1;animation-timing-function:linear;}19.3521%{offset-distance:100%;opacity:1;}19.3621%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt1-c1c1ed9b{animation:kt1-c1c1ed9b 26.49s linear infinite;}@keyframes kt1-c1c1ed9b{0%{stroke-dashoffset:186.69;}15.9963%{stroke-dashoffset:186.69;animation-timing-function:linear;}19.3521%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:186.69;}100%{stroke-dashoffset:186.69;}}.b-c1c1ed9b .bp2-c1c1ed9b{animation:kp2-c1c1ed9b 26.49s linear infinite;}@keyframes kp2-c1c1ed9b{0%{offset-distance:100%;opacity:0;}23.8719%{opacity:0;}23.8819%{offset-distance:100%;opacity:1;animation-timing-function:linear;}27.2376%{offset-distance:0%;opacity:1;}27.2476%{opacity:0;}100%{offset-distance:100%;opacity:0;}}.b-c1c1ed9b .bt2-c1c1ed9b{animation:kt2-c1c1ed9b 26.49s linear infinite;}@keyframes kt2-c1c1ed9b{0%{stroke-dashoffset:-186.69;}23.8819%{stroke-dashoffset:-186.69;animation-timing-function:linear;}27.2376%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:-186.69;}100%{stroke-dashoffset:-186.69;}}.b-c1c1ed9b .bp3-c1c1ed9b{animation:kp3-c1c1ed9b 26.49s linear infinite;}@keyframes kp3-c1c1ed9b{0%{offset-distance:100%;opacity:0;}29.4925%{opacity:0;}29.5025%{offset-distance:100%;opacity:1;animation-timing-function:linear;}31.7674%{offset-distance:0%;opacity:1;}31.7774%{opacity:0;}100%{offset-distance:100%;opacity:0;}}.b-c1c1ed9b .bpl3-c1c1ed9b{animation:kp3-c1c1ed9b 26.49s linear infinite;}.b-c1c1ed9b .bt3-c1c1ed9b{animation:kt3-c1c1ed9b 26.49s linear infinite;}@keyframes kt3-c1c1ed9b{0%{stroke-dashoffset:-97.5;}29.5025%{stroke-dashoffset:-97.5;animation-timing-function:linear;}31.7674%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:-97.5;}100%{stroke-dashoffset:-97.5;}}.b-c1c1ed9b .bp4-c1c1ed9b{animation:kp4-c1c1ed9b 26.49s linear infinite;}@keyframes kp4-c1c1ed9b{0%{offset-distance:0%;opacity:0;}74.8302%{opacity:0;}74.8402%{offset-distance:0%;opacity:1;animation-timing-function:linear;}81.1259%{offset-distance:100%;opacity:1;}81.1359%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt4-c1c1ed9b{animation:kt4-c1c1ed9b 26.49s linear infinite;}@keyframes kt4-c1c1ed9b{0%{stroke-dashoffset:349.69;}74.8402%{stroke-dashoffset:349.69;animation-timing-function:linear;}81.1259%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:349.69;}100%{stroke-dashoffset:349.69;}}.b-c1c1ed9b .bp5-c1c1ed9b{animation:kp5-c1c1ed9b 26.49s linear infinite;}@keyframes kp5-c1c1ed9b{0%{offset-distance:0%;opacity:0;}75.3964%{opacity:0;}75.4064%{offset-distance:0%;opacity:1;animation-timing-function:linear;}81.6922%{offset-distance:100%;opacity:1;}81.7022%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt5-c1c1ed9b{animation:kt5-c1c1ed9b 26.49s linear infinite;}@keyframes kt5-c1c1ed9b{0%{stroke-dashoffset:349.69;}75.4064%{stroke-dashoffset:349.69;animation-timing-function:linear;}81.6922%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:349.69;}100%{stroke-dashoffset:349.69;}}.b-c1c1ed9b .bp6-c1c1ed9b{animation:kp6-c1c1ed9b 26.49s linear infinite;}@keyframes kp6-c1c1ed9b{0%{offset-distance:0%;opacity:0;}75.9626%{opacity:0;}75.9726%{offset-distance:0%;opacity:1;animation-timing-function:linear;}82.2584%{offset-distance:100%;opacity:1;}82.2684%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt6-c1c1ed9b{animation:kt6-c1c1ed9b 26.49s linear infinite;}@keyframes kt6-c1c1ed9b{0%{stroke-dashoffset:349.69;}75.9726%{stroke-dashoffset:349.69;animation-timing-function:linear;}82.2584%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:349.69;}100%{stroke-dashoffset:349.69;}}.b-c1c1ed9b .bp7-c1c1ed9b{animation:kp7-c1c1ed9b 26.49s linear infinite;}@keyframes kp7-c1c1ed9b{0%{offset-distance:0%;opacity:0;}76.5289%{opacity:0;}76.5389%{offset-distance:0%;opacity:1;animation-timing-function:linear;}82.8246%{offset-distance:100%;opacity:1;}82.8346%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt7-c1c1ed9b{animation:kt7-c1c1ed9b 26.49s linear infinite;}@keyframes kt7-c1c1ed9b{0%{stroke-dashoffset:349.69;}76.5389%{stroke-dashoffset:349.69;animation-timing-function:linear;}82.8246%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:349.69;}100%{stroke-dashoffset:349.69;}}.b-c1c1ed9b .bp8-c1c1ed9b{animation:kp8-c1c1ed9b 26.49s linear infinite;}@keyframes kp8-c1c1ed9b{0%{offset-distance:0%;opacity:0;}77.0951%{opacity:0;}77.1051%{offset-distance:0%;opacity:1;animation-timing-function:linear;}83.3908%{offset-distance:100%;opacity:1;}83.4008%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt8-c1c1ed9b{animation:kt8-c1c1ed9b 26.49s linear infinite;}@keyframes kt8-c1c1ed9b{0%{stroke-dashoffset:349.69;}77.1051%{stroke-dashoffset:349.69;animation-timing-function:linear;}83.3908%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:349.69;}100%{stroke-dashoffset:349.69;}}.b-c1c1ed9b .bp9-c1c1ed9b{animation:kp9-c1c1ed9b 26.49s linear infinite;}@keyframes kp9-c1c1ed9b{0%{offset-distance:0%;opacity:0;}85.6457%{opacity:0;}85.6557%{offset-distance:0%;opacity:1;animation-timing-function:linear;}87.9206%{offset-distance:100%;opacity:1;}87.9306%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt9-c1c1ed9b{animation:kt9-c1c1ed9b 26.49s linear infinite;}@keyframes kt9-c1c1ed9b{0%{stroke-dashoffset:96;}85.6557%{stroke-dashoffset:96;animation-timing-function:linear;}87.9206%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:96;}100%{stroke-dashoffset:96;}}.b-c1c1ed9b .bp10-c1c1ed9b{animation:kp10-c1c1ed9b 26.49s linear infinite;}@keyframes kp10-c1c1ed9b{0%{offset-distance:0%;opacity:0;}86.2119%{opacity:0;}86.2219%{offset-distance:0%;opacity:1;animation-timing-function:linear;}88.4868%{offset-distance:100%;opacity:1;}88.4968%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt10-c1c1ed9b{animation:kt10-c1c1ed9b 26.49s linear infinite;}@keyframes kt10-c1c1ed9b{0%{stroke-dashoffset:96;}86.2219%{stroke-dashoffset:96;animation-timing-function:linear;}88.4868%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:96;}100%{stroke-dashoffset:96;}}.b-c1c1ed9b .bp11-c1c1ed9b{animation:kp11-c1c1ed9b 26.49s linear infinite;}@keyframes kp11-c1c1ed9b{0%{offset-distance:0%;opacity:0;}86.7782%{opacity:0;}86.7882%{offset-distance:0%;opacity:1;animation-timing-function:linear;}89.0531%{offset-distance:100%;opacity:1;}89.0631%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt11-c1c1ed9b{animation:kt11-c1c1ed9b 26.49s linear infinite;}@keyframes kt11-c1c1ed9b{0%{stroke-dashoffset:96;}86.7882%{stroke-dashoffset:96;animation-timing-function:linear;}89.0531%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:96;}100%{stroke-dashoffset:96;}}.b-c1c1ed9b .bp12-c1c1ed9b{animation:kp12-c1c1ed9b 26.49s linear infinite;}@keyframes kp12-c1c1ed9b{0%{offset-distance:0%;opacity:0;}87.3444%{opacity:0;}87.3544%{offset-distance:0%;opacity:1;animation-timing-function:linear;}89.6193%{offset-distance:100%;opacity:1;}89.6293%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt12-c1c1ed9b{animation:kt12-c1c1ed9b 26.49s linear infinite;}@keyframes kt12-c1c1ed9b{0%{stroke-dashoffset:96;}87.3544%{stroke-dashoffset:96;animation-timing-function:linear;}89.6193%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:96;}100%{stroke-dashoffset:96;}}.b-c1c1ed9b .bp13-c1c1ed9b{animation:kp13-c1c1ed9b 26.49s linear infinite;}@keyframes kp13-c1c1ed9b{0%{offset-distance:0%;opacity:0;}87.9106%{opacity:0;}87.9206%{offset-distance:0%;opacity:1;animation-timing-function:linear;}90.1855%{offset-distance:100%;opacity:1;}90.1955%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-c1c1ed9b .bt13-c1c1ed9b{animation:kt13-c1c1ed9b 26.49s linear infinite;}@keyframes kt13-c1c1ed9b{0%{stroke-dashoffset:96;}87.9206%{stroke-dashoffset:96;animation-timing-function:linear;}90.1855%{stroke-dashoffset:0;}92.4504%{stroke-dashoffset:0;}92.4604%{stroke-dashoffset:96;}100%{stroke-dashoffset:96;}}.b-c1c1ed9b .bn1-c1c1ed9b .beck-fx-node{animation:kn1-c1c1ed9b 26.49s linear infinite;}@keyframes kn1-c1c1ed9b{0%{transform:none;}13.7314%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}14.4109%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}15.9963%{transform:none;}27.2376%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}27.9171%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}29.5025%{transform:none;}100%{transform:none;}}.b-c1c1ed9b .bn3-c1c1ed9b .beck-fx-node{animation:kn3-c1c1ed9b 26.49s linear infinite;}@keyframes kn3-c1c1ed9b{0%{transform:none;}19.3521%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}20.0316%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}21.617%{transform:none;}81.1259%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}81.6922%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}81.8054%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}82.2584%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}82.3716%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}82.8246%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}82.9379%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}83.3908%{transform:none;}83.5041%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}83.9571%{transform:none;}84.0703%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}84.5233%{transform:none;}85.0895%{transform:none;}85.6557%{transform:none;}100%{transform:none;}}.b-c1c1ed9b .bn0-c1c1ed9b .beck-fx-node{animation:kn0-c1c1ed9b 26.49s linear infinite;}@keyframes kn0-c1c1ed9b{0%{transform:none;}31.7674%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}32.4469%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}34.0323%{transform:none;}100%{transform:none;}}.b-c1c1ed9b .bn4-c1c1ed9b .beck-fx-node{animation:kn4-c1c1ed9b 26.49s linear infinite;}@keyframes kn4-c1c1ed9b{0%{transform:none;}87.9206%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}88.4868%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}88.6001%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}89.0531%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}89.1663%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}89.6193%{transform:none;animation-timing-function:linear(0 0%, 0.2557 3.33%, 0.4834 6.67%, 0.6845 10%, 0.8603 13.33%, 1.0121 16.67%, 1.1414 20%, 1.2495 23.33%, 1.3377 26.67%, 1.4074 30%, 1.46 33.33%, 1.4967 36.67%, 1.5191 40%, 1.5284 43.33%, 1.5259 46.67%, 1.4913 53.33%, 1.4261 60%, 1.3411 66.67%, 1.2472 73.33%, 1.1554 80%, 1.0763 86.67%, 1.0209 93.33%, 1 100%);}89.7325%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}90.1855%{transform:none;}90.2987%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}90.7517%{transform:none;}90.865%{transform:translateY(-2px) scale(1.04);animation-timing-function:linear(0 0%, 0.1286 1.67%, 0.2749 3.33%, 0.5785 6.67%, 0.7194 8.33%, 0.8455 10%, 0.9534 11.67%, 1.0415 13.33%, 1.1093 15%, 1.1575 16.67%, 1.1878 18.33%, 1.2023 20%, 1.2035 21.67%, 1.1941 23.33%, 1.154 26.67%, 1.0496 33.33%, 1.0082 36.67%, 0.9807 40%, 0.9668 43.33%, 0.964 46.67%, 0.9773 53.33%, 0.9952 60%, 1.0049 66.67%, 1.0061 73.33%, 1.0032 80%, 1.0003 86.67%, 0.999 93.33%, 1 100%);}91.3179%{transform:none;}91.8842%{transform:none;}92.4504%{transform:none;}100%{transform:none;}}.b-c1c1ed9b .brip0-c1c1ed9b{animation:krip0-c1c1ed9b 26.49s linear infinite;}@keyframes krip0-c1c1ed9b{0%{opacity:0;transform:scale(1);}13.7214%{opacity:0;transform:scale(1);}13.7314%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}15.5433%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip1-c1c1ed9b{animation:krip1-c1c1ed9b 26.49s linear infinite;}@keyframes krip1-c1c1ed9b{0%{opacity:0;transform:scale(1);}19.3421%{opacity:0;transform:scale(1);}19.3521%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}21.164%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip2-c1c1ed9b{animation:krip2-c1c1ed9b 26.49s linear infinite;}@keyframes krip2-c1c1ed9b{0%{opacity:0;transform:scale(1);}27.2276%{opacity:0;transform:scale(1);}27.2376%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}29.0495%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip3-c1c1ed9b{animation:krip3-c1c1ed9b 26.49s linear infinite;}@keyframes krip3-c1c1ed9b{0%{opacity:0;transform:scale(1);}31.7574%{opacity:0;transform:scale(1);}31.7674%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}33.5793%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip4-c1c1ed9b{animation:krip4-c1c1ed9b 26.49s linear infinite;}@keyframes krip4-c1c1ed9b{0%{opacity:0;transform:scale(1);}81.1159%{opacity:0;transform:scale(1);}81.1259%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}82.9379%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip5-c1c1ed9b{animation:krip5-c1c1ed9b 26.49s linear infinite;}@keyframes krip5-c1c1ed9b{0%{opacity:0;transform:scale(1);}81.6822%{opacity:0;transform:scale(1);}81.6922%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}83.5041%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip6-c1c1ed9b{animation:krip6-c1c1ed9b 26.49s linear infinite;}@keyframes krip6-c1c1ed9b{0%{opacity:0;transform:scale(1);}82.2484%{opacity:0;transform:scale(1);}82.2584%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}84.0703%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip7-c1c1ed9b{animation:krip7-c1c1ed9b 26.49s linear infinite;}@keyframes krip7-c1c1ed9b{0%{opacity:0;transform:scale(1);}82.8146%{opacity:0;transform:scale(1);}82.8246%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}84.6365%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip8-c1c1ed9b{animation:krip8-c1c1ed9b 26.49s linear infinite;}@keyframes krip8-c1c1ed9b{0%{opacity:0;transform:scale(1);}83.3808%{opacity:0;transform:scale(1);}83.3908%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}85.2027%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip9-c1c1ed9b{animation:krip9-c1c1ed9b 26.49s linear infinite;}@keyframes krip9-c1c1ed9b{0%{opacity:0;transform:scale(1);}87.9106%{opacity:0;transform:scale(1);}87.9206%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}89.7325%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip10-c1c1ed9b{animation:krip10-c1c1ed9b 26.49s linear infinite;}@keyframes krip10-c1c1ed9b{0%{opacity:0;transform:scale(1);}88.4768%{opacity:0;transform:scale(1);}88.4868%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}90.2987%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip11-c1c1ed9b{animation:krip11-c1c1ed9b 26.49s linear infinite;}@keyframes krip11-c1c1ed9b{0%{opacity:0;transform:scale(1);}89.0431%{opacity:0;transform:scale(1);}89.0531%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}90.865%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip12-c1c1ed9b{animation:krip12-c1c1ed9b 26.49s linear infinite;}@keyframes krip12-c1c1ed9b{0%{opacity:0;transform:scale(1);}89.6093%{opacity:0;transform:scale(1);}89.6193%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}91.4312%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .brip13-c1c1ed9b{animation:krip13-c1c1ed9b 26.49s linear infinite;}@keyframes krip13-c1c1ed9b{0%{opacity:0;transform:scale(1);}90.1755%{opacity:0;transform:scale(1);}90.1855%{opacity:0.6;transform:scale(1);animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}91.9974%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-c1c1ed9b .bwrk0-c1c1ed9b{animation:kwrk0-c1c1ed9b 26.49s linear infinite, bbreath-c1c1ed9b 1.5s ease-in-out infinite;}@keyframes kwrk0-c1c1ed9b{0%{opacity:0;}21.607%{opacity:0;}21.617%{opacity:1;}23.8819%{opacity:1;}23.8919%{opacity:0;}100%{opacity:0;}}.b-c1c1ed9b .bwrk1-c1c1ed9b{animation:kwrk1-c1c1ed9b 26.49s linear infinite, bbreath-c1c1ed9b 1.5s ease-in-out infinite;}@keyframes kwrk1-c1c1ed9b{0%{opacity:0;}74.8302%{opacity:0;}74.8402%{opacity:1;}92.4504%{opacity:1;}92.4604%{opacity:0;}100%{opacity:0;}}@keyframes bbreath-c1c1ed9b{0%{stroke-width:0;stroke-opacity:0.55;}100%{stroke-width:18;stroke-opacity:0;}}.b-c1c1ed9b .bbeat0-c1c1ed9b{animation:kbe0-c1c1ed9b 26.49s linear infinite;}@keyframes kbe0-c1c1ed9b{0%{opacity:0;}0.443%{opacity:0;}0.453%{opacity:0;animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}1.5854%{opacity:1;}34.0323%{opacity:1;animation-timing-function:linear(0 0%, 0.0044 6.67%, 0.0178 13.33%, 0.04 20%, 0.0711 26.67%, 0.1111 33.33%, 0.16 40%, 0.2178 46.67%, 0.2844 53.33%, 0.36 60%, 0.4444 66.67%, 0.5378 73.33%, 0.64 80%, 0.7511 86.67%, 0.8711 93.33%, 1 100%);}34.4853%{opacity:0;}100%{opacity:0;}}.b-c1c1ed9b .bbeat1-c1c1ed9b{animation:kbe1-c1c1ed9b 26.49s linear infinite;}@keyframes kbe1-c1c1ed9b{0%{opacity:0;}34.4753%{opacity:0;}34.4853%{opacity:0;animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}35.6177%{opacity:1;}56.7122%{opacity:1;animation-timing-function:linear(0 0%, 0.0044 6.67%, 0.0178 13.33%, 0.04 20%, 0.0711 26.67%, 0.1111 33.33%, 0.16 40%, 0.2178 46.67%, 0.2844 53.33%, 0.36 60%, 0.4444 66.67%, 0.5378 73.33%, 0.64 80%, 0.7511 86.67%, 0.8711 93.33%, 1 100%);}57.1652%{opacity:0;}100%{opacity:0;}}.b-c1c1ed9b .bbeat2-c1c1ed9b{animation:kbe2-c1c1ed9b 26.49s linear infinite;}@keyframes kbe2-c1c1ed9b{0%{opacity:0;}57.1552%{opacity:0;}57.1652%{opacity:0;animation-timing-function:linear(0 0%, 0.187 6.67%, 0.349 13.33%, 0.488 20%, 0.6056 26.67%, 0.7037 33.33%, 0.784 40%, 0.8483 46.67%, 0.8984 53.33%, 0.936 60%, 0.963 66.67%, 0.981 73.33%, 0.992 80%, 0.9976 86.67%, 0.9997 93.33%, 1 100%);}58.2977%{opacity:1;}92.4504%{opacity:1;animation-timing-function:linear(0 0%, 0.0044 6.67%, 0.0178 13.33%, 0.04 20%, 0.0711 26.67%, 0.1111 33.33%, 0.16 40%, 0.2178 46.67%, 0.2844 53.33%, 0.36 60%, 0.4444 66.67%, 0.5378 73.33%, 0.64 80%, 0.7511 86.67%, 0.8711 93.33%, 1 100%);}92.9504%{opacity:0;}100%{opacity:0;}}}HTTPin-processbuild writes HTMLBrowserKestreldev serveBuild crawlerin-process TestServerASP.NET request pipelinemiddleware · response processors ·renderersOutput directoryDev serve: one request, one renderThe response goes back to the browser — nothingtouches the output directoryBuild: the crawler fires every discovered URLthrough the same pipelineGET /fooHTML
## How it works

 
### Dev serve: the ASP.NET host is the renderer

 
Running `dotnet run` causes `RunOrBuildAsync` to detect the absence of a `build` argument and call `app.RunAsync()`. Every request that lands at `localhost:5000` flows through the full middleware stack: locale routing, live reload, `ResponseProcessingMiddleware` capturing and rewriting the body, Blazor SSR for any island components, and the Markdig extensions inside `MarkdownContentRenderer`. The rendered HTML that arrives in the browser is the pipeline output, unchanged.

 
Nothing in this path is marked "dev-only." The diagnostic overlay and live-reload script injection are response processors ordered behind environment gates — not separate code paths. The renderer behind `localhost:5000` is the same renderer the build uses.

 
### Build mode: a crawler driving the same pipeline

 
When the first argument is `build`, Pennington replaces Kestrel with an in-memory test host at service-registration time, then starts that host without a socket bind, a dev-cert prompt, or a port. The crawler dispatches requests straight into the same `RequestDelegate` Kestrel would have invoked in dev — there is no network round-trip, but every request runs the full pipeline.

 
URL discovery comes from two sources. Every registered `IContentService` exposes `DiscoverAsync`, which returns the set of content routes it knows about. The live `EndpointDataSource` covers `MapGet` handlers — `/styles.css`, `/sitemap.xml`, the per-locale `/search/{locale}/...` artifacts, and anything else the host has wired up explicitly. Each response is written to `OutputOptions.OutputDirectory` using the route's `OutputFile` mapping.

 
The 404 page is a small special case: the crawler fetches a URL that no route matches, so the catch-all fallback fires and its output is written as `404.html`. The mechanism remains a GET against the same pipeline.

 
### The shared pipeline

 
Because the build drives requests through the same pipeline, every cross-cutting system runs identically in both modes. `ResponseProcessingMiddleware` captures and rewrites bodies. `IHtmlResponseRewriter` resolves xref links and applies locale prefixes and the base URL. The [MonorailCSS](https://monorailcss.github.io/MonorailCss.Framework/) discovery pipeline scans loaded assemblies and watched source files at startup, so the class registry is already populated before the crawler starts; content-page GETs run first and `MapGet` GETs last as a separate ordering rule, ensuring `/styles.css` and other generated endpoints see a fully-warm system.

 
The consequence is that dev and build cannot drift apart. The pipeline that produced `localhost:5000/foo` is the pipeline that produced `output/foo/index.html`. A feature that works in dev works in build, and one that breaks in build would have broken in dev first.

 
### Why not a separate renderer?

 
The alternative — a pure in-process renderer that drives Markdig directly, writes files, skips the request pipeline entirely — is faster for small sites and simpler to maintain if the feature set never grows. The tradeoff is that every capability built on top of ASP.NET would have to be reimplemented for the offline path. Locale middleware, response processors, Blazor SSR for islands, the per-locale search artifacts, the diagnostic-header transport — each would require a second implementation. Each new feature becomes two edits and two chances for the implementations to diverge.

 
Build mode does add a fixed cost per page — routing and the middleware stack run on every URL rather than being bypassed — but with no socket round-trip that cost is a thin slice of each page's render time and stays flat as the site grows. The in-memory `BuildHtmlCache` further collapses the disk-write, search-index, and llms.txt passes to one render per URL. The cost of maintaining a second renderer, by contrast, grows with every feature added. Pennington accepts the per-request overhead to avoid it.

 
## Further reading

 
 - Reference: [Build report fields](https://usepennington.net/reference/api/build-report.md)
 - Reference: [CLI and build arguments](https://usepennington.net/reference/host/cli.md)
 - How-to: [Build a static site](https://usepennington.net/how-to/deployment/static-build.md)
 - How-to: [Host under a sub-path (base URL)](https://usepennington.net/how-to/deployment/base-url.md)
 
 
[Previous
                
                Why ContentSource is a union](https://usepennington.net/explanation/core/content-source.md)[Next
                    
                The front-matter capability system](https://usepennington.net/explanation/core/front-matter-capabilities.md)