---
title: Locale-aware URLs and content fallback
description: "Why Pennington treats the URL path prefix as the authoritative locale signal, how DocSiteContentResolver strips it and falls back to the default locale, and why the search index is split per locale."
canonical_url: https://usepennington.net/explanation/localization/urls-and-fallback/
sidecar_url: https://usepennington.net/explanation/localization/urls-and-fallback.md
content_hash: sha256:8e8530facc1c3eb81e4e122d6ca842c00b0a4d0299d8c41a382e02eb5e2d2955
tokens: 12312
uid: explanation.localization.urls-and-fallback
reading_time_minutes: 7
---

Under the Hood
# Locale-aware URLs and content fallback

Why Pennington treats the URL path prefix as the authoritative locale signal, how DocSiteContentResolver strips it and falls back to the default locale, and why the search index is split per locale.

 
When a reader hits `/fr/guides/intro`, how does Pennington know which language to serve, which markdown file to load, and what to do if `guides/intro.md` only exists in English?

 
## Why the URL is the locale signal

 
A multilingual site has to pick a locale signal early enough that routing, content resolution, HTML rewriters, and the search index all agree on it. The obvious candidate is the browser's `Accept-Language` header, but that signal is noisy: users travel, share links, and sit behind corporate proxies, and a locale chosen from a header cannot be bookmarked, cached by a CDN, or indexed distinctly by search engines. Pennington uses the URL instead. The path prefix (`/fr/…`, `/es/…`) is the single source of truth, and the default locale owns the unprefixed root. That same prefix drives both request-time content resolution in development and build-time output placement during the static crawl — one code path, one answer. Because translation coverage is rarely complete, the question "what happens when `/fr/foo` has no French source?" needs a principled answer, and that is what the rest of this page explores.

 
## How it works

 
### URL prefix drives detection

 
`LocaleDetectionMiddleware` reads `HttpContext.Request.Path`, asks `LocalizationOptions.GetLocaleFromUrl` which locale the first path segment maps to, and populates the scoped `LocaleContext`. When the detected locale is not the default, the middleware rewrites the request path to strip the prefix and pushes that prefix onto `PathBase` so URL generation stays correct. The net effect is that Blazor routing and every downstream consumer see `/guides/intro` rather than `/fr/guides/intro`, which means a single `@page "/guides/intro"` directive serves every locale without duplication.

 
The middleware never consults `Accept-Language`. The culture provider (`PenningtonUrlRequestCultureProvider`) also derives its answer from the URL, so the entire request pipeline agrees on the same locale code without any negotiation step. Prefix-first means the same link produces the same page for everyone who clicks it, regardless of their browser settings or location.

 
### Resolving content: precomputed routes, then a runtime miss

 
`DocSiteContentResolver.GetContentByUrlAsync` takes the full URL — locale prefix intact — and resolves it against the registered content services. The first attempt asks every `IContentService` for a route that matches the exact URL, prefix and all. This is where two distinct flavors of fallback get conflated if you are not careful, so it is worth separating them.

 
The first is *startup-precomputed* fallback. When a multi-locale `MarkdownContentService` discovers a default-locale file, it registers not only that file's own route but also an extra route at each non-default locale prefix that lacks its own copy — `/fr/guides/intro` pointing at the English `guides/intro.md`, with `ContentRoute.IsFallback` already set to `true`. That route exists in the table before any request arrives. So the exact-URL match for `/fr/guides/intro` can succeed outright, and the resolver reads the fallback flag off the route it found (`rendered.Route.IsFallback`) rather than computing anything. This is the common path: most missing translations are known at startup.

 
The second is *runtime* fallback, and it only runs when the first attempt finds nothing at all. If no route matched, the site is multi-locale, and the active locale is not the default, the resolver strips the prefix via `LocalizationOptions.StripLocalePrefix` and resolves again against the content-relative path (`guides/intro`). If that second resolve succeeds, the resolver sets `IsFallback` itself. This path covers content sources that don't precompute fallback routes the way `MarkdownContentService` does, so the resolver still degrades gracefully to the default locale.

 
Either way — flag read off a precomputed route, or set after a runtime miss — the resolver records `RequestedLocale` so the view layer can render a "this page has not been translated yet" notice via `FallbackNotice`. The resolver never rewrites URLs — the URL the reader typed stays in the address bar, only the content source changes.

 
The two flavors side by side — same request, different point of decision:

 
.b-72d22b17{--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-72d22b17{--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-72d22b17{--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-72d22b17{font-family:var(--beck-font);}.b-72d22b17 .beck-fx-node{transform-box:fill-box;transform-origin:center;}.b-72d22b17 .beck-packet-label{font-family:var(--beck-font-mono);font-size:11px;font-weight:600;}.b-72d22b17 .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-72d22b17 .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-72d22b17 .beck-node{filter:drop-shadow(0 1px 3px rgb(0 0 0/.3)) drop-shadow(0 4px 14px rgb(0 0 0/.4));}}.b-72d22b17 .beck-node--external{stroke-dasharray:5 4;}.b-72d22b17 .beck-node--subtle{opacity:.72;}.b-72d22b17 .beck-node--ghost{fill:transparent;stroke-dasharray:5 4;filter:none;}.b-72d22b17 .beck-icon-chip{fill:color-mix(in srgb, var(--beck-accent) 15%, var(--beck-icon-bg));}.b-72d22b17 .beck-node--ghost .beck-icon-chip{fill:transparent;}.b-72d22b17 .beck-icon{color:var(--beck-accent);}.b-72d22b17 .beck-node-title{fill:var(--beck-text);}.b-72d22b17 .beck-node-subtitle,.b-72d22b17 .beck-ghost-label{fill:var(--beck-text-muted);}.b-72d22b17 .beck-status-inline{fill:var(--beck-accent);}.b-72d22b17 .beck-status-bg{fill:color-mix(in srgb, var(--beck-accent) 14%, transparent);}.b-72d22b17 .beck-status-text{fill:var(--beck-accent);}.b-72d22b17 .beck-group{fill:none;stroke:var(--beck-group-border);stroke-width:1.5;stroke-dasharray:6 6;}.b-72d22b17 .beck-group-label-bg{fill:var(--beck-surface);}.b-72d22b17 .beck-group-label{fill:var(--beck-group-label);}.b-72d22b17 .beck-node--start{fill:var(--beck-text-muted);}.b-72d22b17 .beck-node--end{fill:none;stroke:var(--beck-text-muted);stroke-width:2;}.b-72d22b17 .beck-end-dot{fill:var(--beck-text-muted);}.b-72d22b17 .beck-class-head{fill:color-mix(in srgb, var(--beck-accent) 10%, transparent);}.b-72d22b17 .beck-class-head-border{stroke:color-mix(in srgb, var(--beck-accent) 28%, var(--beck-node-border));stroke-width:1;}.b-72d22b17 .beck-class-divider{stroke:var(--beck-node-border);stroke-width:1;}.b-72d22b17 .beck-class-stereo{fill:var(--beck-text-muted);}.b-72d22b17 .beck-class-title{fill:var(--beck-text);}.b-72d22b17 .beck-class-field{fill:var(--beck-text-muted);}.b-72d22b17 .beck-class-method{fill:var(--beck-text);}.b-72d22b17 .beck-lifeline{stroke-width:2;stroke-dasharray:6 7;}.b-72d22b17 .beck-activation{filter:drop-shadow(0 0 5px color-mix(in srgb, var(--beck-accent) 45%, transparent));}.b-72d22b17 .beck-msg-chip{fill:var(--beck-node-bg);stroke:color-mix(in srgb, var(--beck-accent) 40%, transparent);stroke-width:1;}.b-72d22b17 .beck-msg-text{fill:color-mix(in srgb, var(--beck-accent) 34%, var(--beck-text));}.b-72d22b17 .beck-msg--reply .beck-msg-chip{stroke:none;}.b-72d22b17 .beck-msg--reply .beck-msg-text,.b-72d22b17 .beck-msg-text--bare{fill:var(--beck-text-muted);}.b-72d22b17 .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-72d22b17 .beck-band-chip{fill:var(--beck-surface);stroke:color-mix(in srgb, var(--beck-accent) 40%, transparent);stroke-width:1;}.b-72d22b17 .beck-band-label{fill:color-mix(in srgb, var(--beck-accent) 70%, var(--beck-text));}.b-72d22b17 .beck-edge{fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;}.b-72d22b17 .beck-edge-label{fill:var(--beck-text-muted);paint-order:stroke;stroke:var(--beck-surface);stroke-width:3px;stroke-linejoin:round;}.b-72d22b17 .beck-title{fill:var(--beck-text);}.b-72d22b17 .beck-subtitle{fill:var(--beck-text-muted);}@media (prefers-reduced-motion:no-preference){.b-72d22b17 .bp0-72d22b17{animation:kp0-72d22b17 48.78s linear infinite;}@keyframes kp0-72d22b17{0%{offset-distance:0%;opacity:0;}0%{offset-distance:0%;opacity:1;animation-timing-function:linear;}4.0902%{offset-distance:100%;opacity:1;}4.1002%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt0-72d22b17{animation:kt0-72d22b17 48.78s linear infinite;}@keyframes kt0-72d22b17{0%{stroke-dashoffset:419;}0%{stroke-dashoffset:419;animation-timing-function:linear;}4.0902%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:419;}100%{stroke-dashoffset:419;}}.b-72d22b17 .bp1-72d22b17{animation:kp1-72d22b17 48.78s linear infinite;}@keyframes kp1-72d22b17{0%{offset-distance:0%;opacity:0;}15.155%{opacity:0;}15.165%{offset-distance:0%;opacity:1;animation-timing-function:linear;}18.7192%{offset-distance:100%;opacity:1;}18.7292%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt1-72d22b17{animation:kt1-72d22b17 48.78s linear infinite;}@keyframes kt1-72d22b17{0%{stroke-dashoffset:364.1;}15.165%{stroke-dashoffset:364.1;animation-timing-function:linear;}18.7192%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:364.1;}100%{stroke-dashoffset:364.1;}}.b-72d22b17 .bp2-72d22b17{animation:kp2-72d22b17 48.78s linear infinite;}@keyframes kp2-72d22b17{0%{offset-distance:0%;opacity:0;}19.9392%{opacity:0;}19.9492%{offset-distance:0%;opacity:1;animation-timing-function:linear;}24.5539%{offset-distance:100%;opacity:1;}24.5639%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt2-72d22b17{animation:kt2-72d22b17 48.78s linear infinite;}@keyframes kt2-72d22b17{0%{stroke-dashoffset:471.7;}19.9492%{stroke-dashoffset:471.7;animation-timing-function:linear;}24.5539%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp3-72d22b17{animation:kp3-72d22b17 48.78s linear infinite;}@keyframes kp3-72d22b17{0%{offset-distance:0%;opacity:0;}34.8951%{opacity:0;}34.9051%{offset-distance:0%;opacity: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%);}37.9269%{offset-distance:100%;opacity:1;}37.9369%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt3-72d22b17{animation:kt3-72d22b17 48.78s linear infinite;}@keyframes kt3-72d22b17{0%{stroke-dashoffset:471.7;}34.9051%{stroke-dashoffset:471.7;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%);}37.9269%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp4-72d22b17{animation:kp4-72d22b17 48.78s linear infinite;}@keyframes kp4-72d22b17{0%{offset-distance:0%;opacity:0;}39.1469%{opacity:0;}39.1569%{offset-distance:0%;opacity:1;animation-timing-function:linear;}46.8014%{offset-distance:100%;opacity:1;}46.8114%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt4-72d22b17{animation:kt4-72d22b17 48.78s linear infinite;}@keyframes kt4-72d22b17{0%{stroke-dashoffset:783.1;}39.1569%{stroke-dashoffset:783.1;animation-timing-function:linear;}46.8014%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:783.1;}100%{stroke-dashoffset:783.1;}}.b-72d22b17 .bp5-72d22b17{animation:kp5-72d22b17 48.78s linear infinite;}@keyframes kp5-72d22b17{0%{offset-distance:0%;opacity:0;}48.0214%{opacity:0;}48.0314%{offset-distance:0%;opacity:1;animation-timing-function:linear;}52.636%{offset-distance:100%;opacity:1;}52.646%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt5-72d22b17{animation:kt5-72d22b17 48.78s linear infinite;}@keyframes kt5-72d22b17{0%{stroke-dashoffset:471.7;}48.0314%{stroke-dashoffset:471.7;animation-timing-function:linear;}52.636%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp6-72d22b17{animation:kp6-72d22b17 48.78s linear infinite;}@keyframes kp6-72d22b17{0%{offset-distance:0%;opacity:0;}53.856%{opacity:0;}53.866%{offset-distance:0%;opacity: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%);}56.8878%{offset-distance:100%;opacity:1;}56.8978%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt6-72d22b17{animation:kt6-72d22b17 48.78s linear infinite;}@keyframes kt6-72d22b17{0%{stroke-dashoffset:471.7;}53.866%{stroke-dashoffset:471.7;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%);}56.8878%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp7-72d22b17{animation:kp7-72d22b17 48.78s linear infinite;}@keyframes kp7-72d22b17{0%{offset-distance:0%;opacity:0;}65.0585%{opacity:0;}65.0685%{offset-distance:0%;opacity:1;animation-timing-function:linear;}66.2985%{offset-distance:100%;opacity:1;}66.3085%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt7-72d22b17{animation:kt7-72d22b17 48.78s linear infinite;}@keyframes kt7-72d22b17{0%{stroke-dashoffset:79.22;}65.0685%{stroke-dashoffset:79.22;animation-timing-function:linear;}66.2985%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:79.22;}100%{stroke-dashoffset:79.22;}}.b-72d22b17 .bp8-72d22b17{animation:kp8-72d22b17 48.78s linear infinite;}@keyframes kp8-72d22b17{0%{offset-distance:0%;opacity:0;}67.5185%{opacity:0;}67.5285%{offset-distance:0%;opacity:1;animation-timing-function:linear;}72.1331%{offset-distance:100%;opacity:1;}72.1431%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt8-72d22b17{animation:kt8-72d22b17 48.78s linear infinite;}@keyframes kt8-72d22b17{0%{stroke-dashoffset:471.7;}67.5285%{stroke-dashoffset:471.7;animation-timing-function:linear;}72.1331%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp9-72d22b17{animation:kp9-72d22b17 48.78s linear infinite;}@keyframes kp9-72d22b17{0%{offset-distance:0%;opacity:0;}73.3531%{opacity:0;}73.3631%{offset-distance:0%;opacity: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%);}76.3849%{offset-distance:100%;opacity:1;}76.3949%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt9-72d22b17{animation:kt9-72d22b17 48.78s linear infinite;}@keyframes kt9-72d22b17{0%{stroke-dashoffset:471.7;}73.3631%{stroke-dashoffset:471.7;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%);}76.3849%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:471.7;}100%{stroke-dashoffset:471.7;}}.b-72d22b17 .bp10-72d22b17{animation:kp10-72d22b17 48.78s linear infinite;}@keyframes kp10-72d22b17{0%{offset-distance:0%;opacity:0;}84.5556%{opacity:0;}84.5656%{offset-distance:0%;opacity:1;animation-timing-function:linear;}92.2101%{offset-distance:100%;opacity:1;}92.2201%{opacity:0;}100%{offset-distance:0%;opacity:0;}}.b-72d22b17 .bt10-72d22b17{animation:kt10-72d22b17 48.78s linear infinite;}@keyframes kt10-72d22b17{0%{stroke-dashoffset:783.1;}84.5656%{stroke-dashoffset:783.1;animation-timing-function:linear;}92.2101%{stroke-dashoffset:0;}95.9%{stroke-dashoffset:0;}95.91%{stroke-dashoffset:783.1;}100%{stroke-dashoffset:783.1;}}.b-72d22b17 .bn1-72d22b17 .beck-fx-node{animation:kn1-72d22b17 48.78s linear infinite;}@keyframes kn1-72d22b17{0%{transform:none;}4.0902%{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%);}4.4592%{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%);}5.3202%{transform:none;}100%{transform:none;}}.b-72d22b17 .bn2-72d22b17 .beck-fx-node{animation:kn2-72d22b17 48.78s linear infinite;}@keyframes kn2-72d22b17{0%{transform:none;}18.7192%{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%);}19.0882%{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%);}19.9492%{transform:none;}37.9269%{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%);}38.2959%{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%);}39.1569%{transform:none;}56.8878%{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%);}57.2568%{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%);}58.1178%{transform:none;}66.2985%{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%);}66.6675%{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%);}67.5285%{transform:none;}76.3849%{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%);}76.7539%{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%);}77.6149%{transform:none;}100%{transform:none;}}.b-72d22b17 .bn3-72d22b17 .beck-fx-node{animation:kn3-72d22b17 48.78s linear infinite;}@keyframes kn3-72d22b17{0%{transform:none;}24.5539%{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%);}24.9229%{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%);}25.7839%{transform:none;}52.636%{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%);}53.005%{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%);}53.866%{transform:none;}72.1331%{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%);}72.5021%{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%);}73.3631%{transform:none;}100%{transform:none;}}.b-72d22b17 .bn0-72d22b17 .beck-fx-node{animation:kn0-72d22b17 48.78s linear infinite;}@keyframes kn0-72d22b17{0%{transform:none;}46.8014%{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%);}47.1704%{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%);}48.0314%{transform:none;}92.2101%{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%);}92.5791%{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%);}93.44%{transform:none;}100%{transform:none;}}.b-72d22b17 .brip0-72d22b17{animation:krip0-72d22b17 48.78s linear infinite;}@keyframes krip0-72d22b17{0%{opacity:0;transform:scale(1);}4.0802%{opacity:0;transform:scale(1);}4.0902%{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%);}5.0742%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip1-72d22b17{animation:krip1-72d22b17 48.78s linear infinite;}@keyframes krip1-72d22b17{0%{opacity:0;transform:scale(1);}18.7092%{opacity:0;transform:scale(1);}18.7192%{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%);}19.7032%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip2-72d22b17{animation:krip2-72d22b17 48.78s linear infinite;}@keyframes krip2-72d22b17{0%{opacity:0;transform:scale(1);}24.5439%{opacity:0;transform:scale(1);}24.5539%{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%);}25.5379%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip3-72d22b17{animation:krip3-72d22b17 48.78s linear infinite;}@keyframes krip3-72d22b17{0%{opacity:0;transform:scale(1);}37.9169%{opacity:0;transform:scale(1);}37.9269%{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%);}38.9109%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip4-72d22b17{animation:krip4-72d22b17 48.78s linear infinite;}@keyframes krip4-72d22b17{0%{opacity:0;transform:scale(1);}46.7914%{opacity:0;transform:scale(1);}46.8014%{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%);}47.7854%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip5-72d22b17{animation:krip5-72d22b17 48.78s linear infinite;}@keyframes krip5-72d22b17{0%{opacity:0;transform:scale(1);}52.626%{opacity:0;transform:scale(1);}52.636%{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%);}53.62%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip6-72d22b17{animation:krip6-72d22b17 48.78s linear infinite;}@keyframes krip6-72d22b17{0%{opacity:0;transform:scale(1);}56.8778%{opacity:0;transform:scale(1);}56.8878%{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%);}57.8718%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip7-72d22b17{animation:krip7-72d22b17 48.78s linear infinite;}@keyframes krip7-72d22b17{0%{opacity:0;transform:scale(1);}66.2885%{opacity:0;transform:scale(1);}66.2985%{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%);}67.2825%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip8-72d22b17{animation:krip8-72d22b17 48.78s linear infinite;}@keyframes krip8-72d22b17{0%{opacity:0;transform:scale(1);}72.1231%{opacity:0;transform:scale(1);}72.1331%{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%);}73.1171%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip9-72d22b17{animation:krip9-72d22b17 48.78s linear infinite;}@keyframes krip9-72d22b17{0%{opacity:0;transform:scale(1);}76.3749%{opacity:0;transform:scale(1);}76.3849%{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%);}77.3689%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .brip10-72d22b17{animation:krip10-72d22b17 48.78s linear infinite;}@keyframes krip10-72d22b17{0%{opacity:0;transform:scale(1);}92.2001%{opacity:0;transform:scale(1);}92.2101%{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%);}93.194%{opacity:0;transform:scale(1.15);}100%{opacity:0;transform:scale(1);}}.b-72d22b17 .bbeat0-72d22b17{animation:kbe0-72d22b17 48.78s linear infinite;}@keyframes kbe0-72d22b17{0%{opacity:0;}5.5562%{opacity:0;}5.5662%{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%);}6.1812%{opacity:1;}25.7839%{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%);}26.0299%{opacity:0;}100%{opacity:0;}}.b-72d22b17 .bbeat1-72d22b17{animation:kbe1-72d22b17 48.78s linear infinite;}@keyframes kbe1-72d22b17{0%{opacity:0;}26.0199%{opacity:0;}26.0299%{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%);}26.6449%{opacity:1;}58.1178%{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%);}58.3638%{opacity:0;}100%{opacity:0;}}.b-72d22b17 .bbeat2-72d22b17{animation:kbe2-72d22b17 48.78s linear infinite;}@keyframes kbe2-72d22b17{0%{opacity:0;}58.3538%{opacity:0;}58.3638%{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.9788%{opacity:1;}77.6149%{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%);}77.8609%{opacity:0;}100%{opacity:0;}}.b-72d22b17 .bbeat3-72d22b17{animation:kbe3-72d22b17 48.78s linear infinite;}@keyframes kbe3-72d22b17{0%{opacity:0;}77.8509%{opacity:0;}77.8609%{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%);}78.4759%{opacity:1;}95.9%{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%);}96.4%{opacity:0;}100%{opacity:0;}}.b-72d22b17 .beck-msg path{opacity:0.15;}.b-72d22b17 .beck-msg-chip,.b-72d22b17 .beck-msg-text{opacity:0.35;}.b-72d22b17 .beck-band{opacity:0.45;}.b-72d22b17 .beck-activation{opacity:0.25;}.b-72d22b17 .beck-msg[data-msg="msg0"] path{animation:kchl0-72d22b17 48.78s linear infinite;}@keyframes kchl0-72d22b17{0%{opacity:0.15;}0%{opacity:0.15;}0.5125%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg0"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg0"] .beck-msg-text{animation:kcht0-72d22b17 48.78s linear infinite;}@keyframes kcht0-72d22b17{0%{opacity:0.35;}0%{opacity:0.35;}0.5125%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg1"] path{animation:kchl1-72d22b17 48.78s linear infinite;}@keyframes kchl1-72d22b17{0%{opacity:0.15;}15.155%{opacity:0.15;}15.165%{opacity:0.15;}15.6774%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg1"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg1"] .beck-msg-text{animation:kcht1-72d22b17 48.78s linear infinite;}@keyframes kcht1-72d22b17{0%{opacity:0.35;}15.155%{opacity:0.35;}15.165%{opacity:0.35;}15.6774%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg2"] path{animation:kchl2-72d22b17 48.78s linear infinite;}@keyframes kchl2-72d22b17{0%{opacity:0.15;}19.9392%{opacity:0.15;}19.9492%{opacity:0.15;}20.4617%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg2"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg2"] .beck-msg-text{animation:kcht2-72d22b17 48.78s linear infinite;}@keyframes kcht2-72d22b17{0%{opacity:0.35;}19.9392%{opacity:0.35;}19.9492%{opacity:0.35;}20.4617%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg3"] path{animation:kchl3-72d22b17 48.78s linear infinite;}@keyframes kchl3-72d22b17{0%{opacity:0.15;}34.8951%{opacity:0.15;}34.9051%{opacity:0.15;}35.4176%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg3"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg3"] .beck-msg-text{animation:kcht3-72d22b17 48.78s linear infinite;}@keyframes kcht3-72d22b17{0%{opacity:0.35;}34.8951%{opacity:0.35;}34.9051%{opacity:0.35;}35.4176%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg4"] path{animation:kchl4-72d22b17 48.78s linear infinite;}@keyframes kchl4-72d22b17{0%{opacity:0.15;}39.1469%{opacity:0.15;}39.1569%{opacity:0.15;}39.6694%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg4"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg4"] .beck-msg-text{animation:kcht4-72d22b17 48.78s linear infinite;}@keyframes kcht4-72d22b17{0%{opacity:0.35;}39.1469%{opacity:0.35;}39.1569%{opacity:0.35;}39.6694%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg5"] path{animation:kchl5-72d22b17 48.78s linear infinite;}@keyframes kchl5-72d22b17{0%{opacity:0.15;}48.0214%{opacity:0.15;}48.0314%{opacity:0.15;}48.5439%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg5"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg5"] .beck-msg-text{animation:kcht5-72d22b17 48.78s linear infinite;}@keyframes kcht5-72d22b17{0%{opacity:0.35;}48.0214%{opacity:0.35;}48.0314%{opacity:0.35;}48.5439%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg6"] path{animation:kchl6-72d22b17 48.78s linear infinite;}@keyframes kchl6-72d22b17{0%{opacity:0.15;}53.856%{opacity:0.15;}53.866%{opacity:0.15;}54.3785%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg6"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg6"] .beck-msg-text{animation:kcht6-72d22b17 48.78s linear infinite;}@keyframes kcht6-72d22b17{0%{opacity:0.35;}53.856%{opacity:0.35;}53.866%{opacity:0.35;}54.3785%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg7"] path{animation:kchl7-72d22b17 48.78s linear infinite;}@keyframes kchl7-72d22b17{0%{opacity:0.15;}65.0585%{opacity:0.15;}65.0685%{opacity:0.15;}65.581%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg7"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg7"] .beck-msg-text{animation:kcht7-72d22b17 48.78s linear infinite;}@keyframes kcht7-72d22b17{0%{opacity:0.35;}65.0585%{opacity:0.35;}65.0685%{opacity:0.35;}65.581%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg8"] path{animation:kchl8-72d22b17 48.78s linear infinite;}@keyframes kchl8-72d22b17{0%{opacity:0.15;}67.5185%{opacity:0.15;}67.5285%{opacity:0.15;}68.041%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg8"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg8"] .beck-msg-text{animation:kcht8-72d22b17 48.78s linear infinite;}@keyframes kcht8-72d22b17{0%{opacity:0.35;}67.5185%{opacity:0.35;}67.5285%{opacity:0.35;}68.041%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg9"] path{animation:kchl9-72d22b17 48.78s linear infinite;}@keyframes kchl9-72d22b17{0%{opacity:0.15;}73.3531%{opacity:0.15;}73.3631%{opacity:0.15;}73.8756%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg9"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg9"] .beck-msg-text{animation:kcht9-72d22b17 48.78s linear infinite;}@keyframes kcht9-72d22b17{0%{opacity:0.35;}73.3531%{opacity:0.35;}73.3631%{opacity:0.35;}73.8756%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-msg[data-msg="msg10"] path{animation:kchl10-72d22b17 48.78s linear infinite;}@keyframes kchl10-72d22b17{0%{opacity:0.15;}84.5556%{opacity:0.15;}84.5656%{opacity:0.15;}85.0781%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.15;}100%{opacity:0.15;}}.b-72d22b17 .beck-msg[data-msg="msg10"] .beck-msg-chip,.b-72d22b17 .beck-msg[data-msg="msg10"] .beck-msg-text{animation:kcht10-72d22b17 48.78s linear infinite;}@keyframes kcht10-72d22b17{0%{opacity:0.35;}84.5556%{opacity:0.35;}84.5656%{opacity:0.35;}85.0781%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.35;}100%{opacity:0.35;}}.b-72d22b17 .beck-activation[data-bar="0"]{animation:kcha0-72d22b17 48.78s linear infinite;}@keyframes kcha0-72d22b17{0%{opacity:0.25;}24.2364%{opacity:0.25;}24.2464%{opacity:0.25;}24.8614%{opacity:1;}37.9269%{opacity:1;}38.6444%{opacity:0.25;}100%{opacity:0.25;}}.b-72d22b17 .beck-activation[data-bar="1"]{animation:kcha1-72d22b17 48.78s linear infinite;}@keyframes kcha1-72d22b17{0%{opacity:0.25;}52.3185%{opacity:0.25;}52.3285%{opacity:0.25;}52.9435%{opacity:1;}56.8878%{opacity:1;}57.6053%{opacity:0.25;}100%{opacity:0.25;}}.b-72d22b17 .beck-activation[data-bar="2"]{animation:kcha2-72d22b17 48.78s linear infinite;}@keyframes kcha2-72d22b17{0%{opacity:0.25;}71.8156%{opacity:0.25;}71.8256%{opacity:0.25;}72.4406%{opacity:1;}76.3849%{opacity:1;}77.1024%{opacity:0.25;}100%{opacity:0.25;}}.b-72d22b17 .beck-band[data-band="0"]{animation:kchb0-72d22b17 48.78s linear infinite;}@keyframes kchb0-72d22b17{0%{opacity:0.45;}0%{opacity:0.45;}0.82%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.45;}100%{opacity:0.45;}}.b-72d22b17 .beck-band[data-band="1"]{animation:kchb1-72d22b17 48.78s linear infinite;}@keyframes kchb1-72d22b17{0%{opacity:0.45;}48.0214%{opacity:0.45;}48.0314%{opacity:0.45;}48.8514%{opacity:1;}94.3625%{opacity:1;}95.5925%{opacity:0.45;}100%{opacity:0.45;}}}STARTUP-PRECOMPUTED FALLBACK (THE COMMON PATH)RUNTIME FALLBACK (NO ROUTE AT ALL)GET /fr/guides/introresolveexact-URL matchroute · IsFallback: trueEnglish body + FallbackNoticeexact-URL matchno matchStripLocalePrefixresolve default-locale sourcerouteEnglish body + FallbackNoticeReaderLocaleDetectionMiddlewareDocSiteContentResolverContent servicesroute tableThe prefix sets LocaleContext; the resolver still sees the full URLMarkdownContentService registered this route at startup for every missing translationPure URL math — /fr/guides/intro becomes guides/introThis time the resolver sets IsFallback itself
### Fallback: default locale stands in

 
There is exactly one fallback step: the default locale. A missing `/es/guides/intro` falls through to `guides/intro` — the unprefixed default-locale source — not to `/fr/guides/intro`. There is no cascade across non-default locales, no per-locale fallback chain, and no "similar language" matcher. The reason is that a cascade hides coverage gaps. Readers end up seeing a page in a language they did not request and cannot explain why, and translators cannot tell which pages still need coverage because every miss silently inherits from a neighbor. A single fallback step keeps the rule easy to reason about and makes missing translations easy to find.

 
The default locale is not a special kind of locale — it is the locale that owns the unprefixed URL space. `StripLocalePrefix` is a no-op for the default locale, `BuildLocaleUrl` emits unprefixed URLs for it, and content authored at `Content/guides/intro.md` is default-locale content by virtue of sitting outside every locale subdirectory. The fallback rule is a consequence of those URL-math rules, not a separate "fallback locale" setting.

 
`StripLocalePrefix` (see [Pennington.Localization.LocalizationOptions](https://usepennington.net/reference/api/localization-options.md)) is pure URL math with no file-system knowledge. `DocSiteContentResolver` decides whether the stripped path resolves to a file on disk, and that separation is what lets the same helper serve both request-time fallback and build-time URL generation.

 
### Per-locale search indices

 
The search index is split per locale — a query typed into the Spanish UI ranks against Spanish content, not a mixed-language pool — and [How the search index is built and queried](https://usepennington.net/explanation/discovery/search.md) covers how that split is built and served. What belongs here is how the split interacts with fallback.

 
A page that exists only in the default locale appears once, in the default-locale index. Fallback happens when a page renders; it does not add that page to other locales' indices. That asymmetry is deliberate. When a French reader searches for a term that only exists in English content, the right answer is "no results in French" rather than silently returning English hits the reader cannot read. The same per-locale split applies to sitemap construction and `hreflang` alternate-language tags, so search, sitemap, and alternates report the same set of pages for each locale.

 
## Further reading

 
 - Reference: [LocalizationOptions](https://usepennington.net/reference/api/localization-options.md) — `DefaultLocale`, `AddLocale`, and the URL helpers that back this mechanism.
 - How-to: [Enable multiple locales](https://usepennington.net/how-to/discovery/localization.md) — the recipe for populating `LocalizationOptions`, organizing content subdirectories, and wiring `UseLocaleRouting`.
 - External: [W3C — Language tags in HTML and XML](https://www.w3.org/International/articles/language-tags/) — background on BCP 47 locale codes, which the URL prefix scheme surfaces one-to-one.
 
 
[Previous
                
                SPA navigation through region swaps](https://usepennington.net/explanation/spa/islands.md)[Next
                    
                Hot reload and file watching](https://usepennington.net/explanation/dev-experience/hot-reload.md)