diff --git a/.gitmodules b/.gitmodules
index 2c970bbcdd058f23067aab86060862e51ccaed3a..36c2ce171a242cf714ca4ea3ca9af84e07f622e7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "toucan"]
 	path = lattice-boltzmann.com/themes/toucan
 	url = https://git.42l.fr/HugoTrentesaux/toucan.git
+[submodule "lattice-boltzmann.com/themes/abridge"]
+	path = lattice-boltzmann.com/themes/abridge
+	url = https://github.com/jieiku/abridge.git
diff --git a/lattice-boltzmann.com/.gitignore b/lattice-boltzmann.com/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e4227f1dd9bf699b2e24811bb96b9c2396424d11
--- /dev/null
+++ b/lattice-boltzmann.com/.gitignore
@@ -0,0 +1,12 @@
+.env
+public
+themes
+build
+storage
+node_modules
+package-lock.json
+static/demo.html
+static/tinysearch_engine.js
+static/tinysearch_engine.d.ts
+static/tinysearch_engine_bg.wasm.d.ts
+static/package.json
diff --git a/lattice-boltzmann.com/config.toml b/lattice-boltzmann.com/config.toml
index fca84181c5547d4ec3a487607d0ed65c9d886c2e..320f8f8075b1bc5f9fb858f9b77f289bdf77b9ec 100644
--- a/lattice-boltzmann.com/config.toml
+++ b/lattice-boltzmann.com/config.toml
@@ -1,28 +1,351 @@
-# The URL the site will be built for
+# do NOT include a trailing slash on the base URL
 base_url = "https://www.lattice-boltzmann.com"
+# Usable site directly from disk, Including Search: "/home/jieiku/.dev/abridge/public"
+# Also set index format = "elasticlunr_javascript", and in [extra] uglyurls = true, integrity = false
+# If you use the npm/node script then all you have to do is set offline = true, and everything else is automatic.
 
-# Whether to automatically compile all Sass files in the sass directory
-compile_sass = true
+title = "The lattice Boltzmann method"
+description = "An opinionated lattice Boltzmann method tutorial"
+theme = "abridge"
 
-# Whether to build a search index to be used later on by a JavaScript library
+default_language = "en"
+compile_sass = true
+minify_html = false
 build_search_index = true
+generate_feed = true
+taxonomies = [
+#    {name = "categories", feed = true},
+    {name = "tags", feed = true},
+]
 
-theme = "toucan"
+#feed_filename = "atom.xml"
+#output_dir = "public"
+#ignored_content = ["*.{graphml,xlsx}", "temp.*"]
+#hard_link_static = false # set to true to hard link instead of copying, useful for very large files.
 
-transparent = "true"
+[search]                # Options specific to elasticlunr search.
+# index format can be: elasticlunr_json or elasticlunr_javascript
+index_format = "elasticlunr_json"
+include_title = true        # include title of page/section in index
+include_description = true # include description of page/section in index
+include_content = true      # include rendered content of page/section in index
+# truncate_content_length = 100 # Truncate at nth character. May be useful if index is getting too large.
 
 [markdown]
-# Whether to do syntax highlighting
-# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
 highlight_code = true
-highlight_theme = "base16-ocean-light"
+highlight_theme = "css"
+render_emoji = false
+external_links_target_blank = true # rel="noopener"
+external_links_no_follow = false   # rel="nofollow"
+external_links_no_referrer = false # rel="noreferrer"
+smart_punctuation = false          # `...` to `…`, `"quote"` to `“curly”` etc
 
 [extra]
-# Put all your custom variables here
+###############################################################################
+### Layout & Format
+### position: top, bottom, both, false(hidden)
+### size: s150, s140, s130, s120, s110, s95, s90, s85, s80, s75, s70, false(full size)
+### divider:    " "        "·"        "•"
+###############################################################################
+
+menu = [
+#    {url = "blog", name = "Blog", slash = true, blank = false, size="s110"},
+    {url = "about", name = "About", slash = true, blank = false, size="s110"},
+    {url = "archive", name = "Posts", slash = true, blank = false, size="s110"},
+#    {url = "categories", name = "Categories", slash = true, blank = false, size="s110"},
+    {url = "tags", name = "Tags", slash = true, blank = false, size="s110"},
+]
+menu_footer = [
+    {url = "about", name = "About", slash = true, blank = false},
+    {url = "contact", name = "Contact", slash = true, blank = false},
+    {url = "privacy", name = "Privacy", slash = true, blank = false},
+    {url = "sitemap.xml", name = "Sitemap", slash = false, blank = true},
+]
+
+toc = true
+recent = true # TOC / index
+recent_items = 15
+series = true
+series_items = 9 # Max number of items to display in series list, use 0 to disable
+#Series_parts = "$NUMBER_OF_PARTS part Series"
+
+meta_index = { position="bottom", size="s90", author=false, readtime=false, readstring="min", date=true, updated=false, categories_tags=true, divider="" }
+meta_post = { position="top", size="s95", author=true, readtime=true, readstring="min read", date=true, updated=true, categories_tags=true, divider="" }
+
+hide_section_dates = false # hides the date for sections that use posts.html as their template.
+hide_page_nextprev_titles = false # hides the next/previous titles for pages that use page.html as their template.
+title_size_index = "s85"
+footer_size = "s90"
+footer_credit = true
+#footer_credit_override = '<p class="s90">Powered by <a href="https://www.getzola.org/" target="_blank">Zola</a> &#38; <a href="https://github.com/Jieiku/abridge/" target="_blank">Abridge</a></p>'
+#archive_reverse = true # Set to True to sort posts chronologically per year instead of newest first on the archive page: example.com/archive/
+
+### Uncomment one of the below lines, or neither, depending on which type of logo you want to use:
+#logo = { file="logo.svg", width="32", height="32", alt="Abridge", text="bridge" }
+#textlogo = '<font color="#f90">A</font>bridge'
+# textlogo = '<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="#f90" viewBox="0 0 96 96" width="28" height="28"><path stroke-width="14" d="M14 99 46 7h4l32 92"/><path stroke-width="9" d="M-3 82c43-26 59-26 102 0"/><path stroke-linecap="round" stroke-width="1.5" d="M94 72v7m-5-9.8v7m-5-9.8v7.1M79 64v7M63 57.7v7m-5-8.2v7m-5-7.8v7m-5-7.2v7m-5-6.7v7m-5-6.3v7m-5-5.8v7M17 64v7m-5-4.6v7m-5-4.2v7M2 72v7"/></svg>bridge'
+textlogo = 'LBM-academy'
+
+sitedesc = false # enables or disables the display of the site description below the logo.
+headhr = false # show or hide horizontal rule below header
+foothr = true # show or hide horizontal rule above footer
+
+### $CURRENT_YEAR and $SITE_TITLE can be used anywhere within the copyright, you can change their position or you can also delete them and type whatever you want instead.
+#copyright = false # set to false to disable the copyright.
+#copyright_override = '© 2019-$CURRENT_YEAR $SITE_TITLE'
+copyright_override = '© $CURRENT_YEAR $SITE_TITLE • Website content is licensed <a rel="noopener" target="_blank" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.'
+
+
+###############################################################################
+### meta/seo/analytic tags
+### To disable title_addition but keep built in page additions eg, Posts page: "Posts | Abridge" set title_addition to an empty string
+### To always set the page title exactly eg "Abridge" then comment out title_addition or set to false (not recommend, bad for SEO)
+###############################################################################
+
+title_separator = "|"  # Separator between title and title_addition, set as |, -, _, etc
+title_addition = "A tutorial on lattice Boltzmann" # a default value for title addition
+author = "Orestis Malaspinas" # Put Your Name here
+keywords = "lattice boltzmann, lbm, cfd, futhark, hpc, gpu" # used for the primary site index
+banner = "banner.png" # Used as default image for OpenGraph/Twitter if page specific image is undefined.
+twitter_meta = "" # for SEO: twitter:site and twitter:creator
+google = ""
+bing = ""
+seo = false  # enable or disable seo-related meta tags: opengraph, facebook, twitter
+#dev = false # development mode, if true then robots.txt should prevent search indexing.
+
+
+###############################################################################
+### Footer social links; these are used in macros/social.html
+###   https://github.com/Jieiku/abridge/blob/master/templates/macros/social.html
+###############################################################################
+
+feed = true # this adds the RSS feed icon in the footer.
+mail = "orestis.malaspinas@hesge.ch"
+mastodon = ""
+element = "matrix.to/#/@omhepia:matrix.org"
+matrix = ""
+buymeacoffee = ""
+kofi = ""
+discord = "" # Everything after https://discord.com/   eg: invite/my-server  *or*  servers/my-server-id
+twitter = ""
+facebook = ""
+linkedin = ""
+gitlab = "omalaspinas"
+github = ""
+codeberg = "" # Everything after https://codeberg.org/   eg: username  *or*  username/repository
+github_sponsor = ""
+bitbucket = ""
+python = ""
+docker = ""
+stack = ""
+instagram = ""
+#pixelfed = "@your-user-name" # Heaviest icon, off by default
+pinterest = ""
+twitch = ""
+youtube = ""
+researchgate = "Orestis-Malaspinas"
+
+
+###############################################################################
+### Commenting System for visitors to leave comments on pages.
+###   hyvor talk
+###############################################################################
+
+#comments.hyvor = "9366" # hyvor website id, comment out to disable.
+#comments.hyvorcolor = "os" # set the color property for hyvor
+
+
+###############################################################################
+### Resource Files
+### You can load extra css files if you need to, just separate by comma:
+### stylesheets = [ "abridge.css", "extra.css" ]
+### search_library, library to use. valid values:
+###   false, "elasticlunr", "tinysearch", "stork"
+### offline: implies uglyurls=true and integrity=false, when true NPM/node will
+###   automatically set the path for the base_url, it will build the site,
+###   then set the base_url back to what it was. This is a way to build a completely
+###   offline site, a feature not possible with Zola alone.
+###   The PWA feature is another way to build an offline site, so there are now two
+###   different ways to build an offline site with Abridge.
+###
+### For most people the value of online_url will be the same as base_url.
+###   online_url is used to restore the base_url after generating an Offline site.
+###   When you set offline = true and run the npm script, the base_url is set to the absolute path on disk.
+###   Once you set offline = false, the base_url will be set back to the value of online_url when you run the npm script again.
+###############################################################################
+
+# do NOT include a trailing slash on the online URL
+#online_url = "https://abridge.netlify.app"
+online_indexformat = "elasticlunr_json"# used to restore your preferred index format when offline = false
+offline = false # implies uglyurls=true and integrity=false, when true NPM/node will automatically set the path for the base_url, it will build the site, then set the base_url back to what it was.
+
+uglyurls = false # if set to true then links are generated with the full path. eg https://abridge.netlify.app/index.html
+integrity = true # increases site security, should normally be true. (setting to false is useful during js development)
+js_bundle = true # multiple javascript files combined into a single file (setting to false is useful during js development)
+
+js_copycode = true # The copy button on code blocks that allows you to copy them to the clipboard.
+js_email_encode = true # obfuscates email address in footer
+js_prestyle = true # used to preload: FontAwesome, Katex, external Google Fonts
+js_switcher = true # The button that allows manually changing between light/dark mode.
+js_switcher_default = "dark" # default nojs switcher mode: dark, light (make sure to also set $switcherDefault in abridge.scss)
+
+search_library = 'elasticlunr'
+stylesheets = ["abridge.css"]
+
+webmanifest = "manifest.min.json" # Required for PWAs
+
+###############################################################################
+### PWA (Progressive Web Application)
+### By default Abridge has pwa_NORM_TTL and pwa_LONG_TTL set to 0, this essential turns the PWA cache strategy into network first.
+###  Abridge uses cachebust hashing on js and css files, so anytime a page cache is updated, these resources would also get updated if changed.
+###  Media files rarely change, especially font files, so it is a good idea cache indefinitely.
+###  For pwa_TTL_EXEMPT indefinitely cached resources, you can force a new cache by incrementing the pwa_VER (cache version number).
+### If you would like to try a cache first strategy then set a value higher than 0 for pwa_NORM_TTL and pwa_LONG_TTL.
+###  The options below other than pwa=true, only come into play when the npm/node script is ran.
+###############################################################################
+
+pwa = true # true to load the service worker
+pwa_VER = '3.11.0' # Service Worker cache version. (increment if you need to force a new cache)
+
+### 3600=1hour, 28800=8hours, 86400=1day, 604800=1week, 1209600=2weeks
+pwa_NORM_TTL = 0 #  86400 is reasonable. html, json, xml, anything else undefined
+pwa_LONG_TTL = 0 # 604800 is reasonable.
+
+### list of files that overrides TTL_LONG/TTL_EXEMPT to be a NORM TTL.
+pwa_TTL_NORM = '"sw.min.js", "sw_load.min.js"'
+
+### TTL_LONG file extensions will be cached for the LONG_TTL duration.
+pwa_TTL_LONG = '"jpg", "jpeg", "png", "gif", "webp", "avif", "ico", "svg", "xsl", "txt"'
+
+### TTL_EXEMPT file extensions will be cached indefinitely unless sw_load version is incremented, which would invalidate any existing cache. (and a new cache would be started)
+pwa_TTL_EXEMPT = '"js", "css", "otf", "eot", "ttf", "woff", "woff2", "mp4", "webm", "mp3", "ogg"'
+
+### If set to true then the entire site is cached. (useful for making an entire site usable while offline)
+pwa_cache_all = true
+
+### List of Files for the PWA to initially Cache, used if pwa_cache_all = false
+pwa_BASE_CACHE_FILES = "'/js/theme.min.js','/js/theme_light.min.js','/abridge.css','/js/abridge.min.js','/','/404.html','/offline/','/manifest.min.json'"
+
+###############################################################################
+### Favicons, comment out a line to disable loading some or all of these if needed.
+###############################################################################
+
+favicon_theme_color = "#333333"
+favicon_ms_color = "#333333"
+favicon_mask = "safari-pinned-tab.svg" # safari-pinned-tab.svg
+favicon_mask_color = "#ff9900"
+favicon_svg = "favicon.svg" # favicon.svg
+favicon180 = "apple-touch-icon.png" # apple-touch-icon.png
+favicon32 = "favicon-32x32.png" # favicon-32x32.png
+favicon16 = "favicon-16x16.png" # favicon-16x16.png
+
+
+###############################################################################
+### Icons
+### Loading the entire fontawesome icon collection will negatively impact your sites performance.
+### For a lightweight solution consider adding only the icons that you need to the following file:
+### https://github.com/Jieiku/abridge/blob/master/sass/include/_icons.scss
+###############################################################################
+
+### To disable any of these icons set them to "false" (will default to unicode icons instead)
+#icon_search = "svgs search" # Search button in search box.
+#icon_adjust = "svgs adjust" # Theme Switcher button in top menu. (add class svgh to change colors on hover)
+#icon_first = "svgs svgh angll" # Pagination First Page.
+#icon_prev = "svgs svgh angl" # Pagination Previous Page.
+#icon_next = "svgs svgh angr" # Pagination Next Page.
+#icon_last = "svgs svgh angrr" # Pagination Last Page.
+#icon_top = "svgs svgh angu" # Back to Top Button.
+
+#icon_read = "svgs fa-solid fa-glasses" # displayed in metadata on index and below title on page.
+#icon_date = "svgs fa-solid fa-calendar" # displayed in metadata on index and below title on page.
+#icon_info = "svgs fa-solid fa-circle-info" # displayed in metadata on index and below title on page for categories/tags
+#icon_author = "svgs fa-solid fa-pen-fancy" # displayed in metadata on index and below title on page.
+
+### Uncomment below line to load fontawesome, eg: <i class="fa-solid fa-heart"></i>
+#fontawesome = "https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.1.1/css/all.min.css"
+#icon_read = "svgs fa-solid fa-glasses" # displayed in metadata on index and below title on page.
+#icon_date = "svgs fa-solid fa-calendar" # displayed in metadata on index and below title on page.
+#icon_info = "svgs fa-solid fa-circle-info" # displayed in metadata on index and below title on page for categories/tags
+#icon_author = "svgs fa-solid fa-pen-fancy" # displayed in metadata on index and below title on page.
+
+
+###############################################################################
+### Security Settings
+### Security Headers should preferably be set by your webserver (Nginx, Apache)
+###   https://observatory.mozilla.org  https://csp-evaluator.withgoogle.com/
+### If you are unable to load your security headers with your webserver, this will load a couple of them as meta tags.
+### There are many other security related headers most of which can only be set by the webserver method.
+### If you happen to use Netlify, you can define all the headers in your netlify.toml file:
+###   https://github.com/Jieiku/abridge/blob/master/netlify.toml
+### UnComment any of these lines to enable their meta tags.
+###############################################################################
+
+#security_header_referrer = "strict-origin-when-cross-origin"
+
+#security_header_csp = "default-src 'none'; object-src 'none'; base-uri 'self'; manifest-src 'self'; connect-src 'self'; form-action 'self'; script-src 'self'; img-src 'self' data: cdn.cloudflare.com; frame-src 'self' www.youtube-nocookie.com player.vimeo.com; media-src 'self' data: cdn.cloudflare.com www.youtube-nocookie.com player.vimeo.com; font-src 'self' cdn.cloudflare.com cdn.jsdelivr.net fonts.gstatic.com; style-src 'self' cdn.cloudflare.com cdn.jsdelivr.net fonts.googleapis.com;"
+
+
+###############################################################################
+### FONTS - Abridge by default uses the System Font Stack
+###   https://css-tricks.com/snippets/css/system-font-stack/
+### However if you need you can load a specific font below,
+###   make sure to have the relevant woff2 fonts in your static/fonts folder
+### I measured the least Cumulative Layout Shift with: Roboto, Lato, Arimo
+###############################################################################
+
+### For externally loaded Fonts, make sure to include the FULL url including the https prefix:
+
+#fonts = [ {url = "https://fonts.googleapis.com/css?family=Roboto:400,700,italic|Roboto+Mono:400,italic"} ]
+
+### Local fonts are defined in the css, https://github.com/Jieiku/abridge/tree/master/COPY-TO-ROOT-SASS/fonts/_Arimo.scss
+### To load a local font resource, look at the bottom of this file: https://github.com/Jieiku/abridge/blob/master/COPY-TO-ROOT-SASS/abridge.scss
+
+### After loading them in the CSS, You can also define them below and it will add the preload tag to the head.
+### preloading fonts will eliminate Content Layout Shift, but will hurt with page load time. (not recommended)
+
+#fonts = [
+#    {url = "fonts/Roboto-Mono.woff2"},
+#    {url = "fonts/Roboto-Mono-Italic.woff2"},
+#    {url = "fonts/Roboto.woff2"},
+#    {url = "fonts/Roboto-Italic.woff2"},
+#    {url = "fonts/Roboto-Bold.woff2"},
+#]
+# fonts = [
+#    {url = "fonts/CMUSansSerif.woff2"},
+#    {url = "fonts/CMUSansSerif-Oblique.woff2"},
+#    {url = "fonts/CMUSansSerif-Bold.woff2"},
+#    {url = "fonts/CMUSerif-Roman.woff2"},
+#    {url = "fonts/CMUSerif-Italic.woff2"},
+#    {url = "fonts/CMUSerif-Bold.woff2"},
+# ]
+
+
+###############################################################################
+### Katex - math js library, used to to render mathematical notations
+### It's best to enable katex on a per page bases as I did here:
+###   https://abridge.netlify.app/overview-math/
+###   https://github.com/Jieiku/abridge/blob/master/content/overview-math.md?plain=1#L11-L13
+### Otherwise you will load the katex related javascript on every page!
+###############################################################################
+
+katex_options = "js/katexoptions.js"
+katex_bundle = "js/katexbundle.min.js"
+
+### Load Katex Local Resources
+# katex_css = "katex.min.css" # Fonts - load the css/fonts locally
+# katex_js = "js/katex.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
+# mathtex_js = "js/mathtex-script-type.min.js" # use local js, so that we dont have to whitelist cdn.jsdelivr.net for script src in CSP
+# katex_autorender_js = "js/katex-auto-render.min.js"
 
-# Whether to do syntax highlighting
-# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
-title = "High performance lattice Boltzmann method"
+### Load Katex External Resources
+katex_css = "https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/katex.min.css" # Fonts - use remote fonts
+katex_css_integrity = "sha384-ZPe7yZ91iWxYumsBEOn7ieg8q/o+qh/hQpSaPow8T6BwALcXSCS6C6fSRPIAnTQs"
+katex_js = "https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/katex.min.js"
+katex_js_integrity = "sha384-ljao5I1l+8KYFXG7LNEA7DyaFvuvSCmedUf6Y6JI7LJqiu8q5dEivP2nDdFH31V4"
+katex_autorender_js = "https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/contrib/auto-render.min.js"
+katex_autorender_js_integrity = "sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR"
+mathtex_js = "https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/contrib/mathtex-script-type.min.js"
+mathtex_js_integrity = "sha384-jiBVvJ8NGGj5n7kJaiWwWp9AjC+Yh8rhZY3GtAX8yU28azcLgoRo4oukO87g7zDT"
 
-[extra.theme]
-read_more = "Read more"
+math = false # Recommended setting false, and enable on per page bases instead.
+math_auto_render = false # Recommended setting false, and enable on per page bases instead.
diff --git a/lattice-boltzmann.com/content/1-dimensionless-lbm.md b/lattice-boltzmann.com/content/1-dimensionless-lbm.md
index e86b25eca1bd3eac45fbb36947303e806bcc725e..0913f7782fd04ee026c8c203c6ac823739234d32 100644
--- a/lattice-boltzmann.com/content/1-dimensionless-lbm.md
+++ b/lattice-boltzmann.com/content/1-dimensionless-lbm.md
@@ -3,76 +3,85 @@ title = "The dimensionless lattice Boltzmann equation"
 description = "How to write the dimensionless lattice Boltzmann equation"
 date = 2024-03-06
 slug = "dimensionless"
-
+[taxonomies]
+tags = ["LBM","Navier-Stokes"]
 [extra]
-katex = true
+math = true
+math_auto_render = true
+toc = true
 +++
 
-## Thed imensionless Navier-Stokes
 
-In order to write the dimensionless lattice Boltzmann equation, we start by reminding the basis of dimensional analysis for fluid flows by writing the dimensionless incompressible Navier--Stokes which are more common in the litterature.
+## The dimensionless Navier-Stokes
+
+In order to write the dimensionless lattice Boltzmann equation, we start by reminding the basis of dimensional analysis for fluid flows by writing the dimensionless incompressible Navier--Stokes which are more common in the literature.
 
 The incompressible Navier--Stokes equations reads
 
-££
+$$
 \begin{aligned}
 &\bm{\nabla}\cdot\bm{u}=0,\\\\
 &\frac{\partial}{\partial t}\bm{u}+\bm{u}\cdot\bm{\nabla}\bm{u}=-\frac{1}{\rho}\bm{\nabla}p+\nu\bm{\nabla}^2\bm{u},
 \end{aligned}
-££
+$$
 where $p$, $\rho$, $\nu$, and $\bm{u}$ are respectively the pressure, density, kinematic viscosity, and velocity of the flow.
 
-In order to transform this equation into its dimensionless form a certain amount of characteristic lengthscales must be chosen. Here we will define $U$ as the characteristic velocity of the flow and $L$ its characteristic length.
+In order to transform this equation into its dimensionless form a certain amount of characteristic lengths calves must be chosen. Here we will define $U$ as the characteristic velocity of the flow and $L$ its characteristic length.
 
 We can the write all the above quantities dimensionless form
-££
+$$
 \begin{aligned}
 &\bm{u}^\ast=\frac{\bm{u}}{U}, &p^\ast=\frac{p}{\rho U^2},\\\\
 &t^\ast=\frac{U}{L}t, &\bm{x}^\ast=\frac{\bm{x}}{L},\\\\
 &\frac{\partial}{\partial t^\ast}=\frac{L}{U}\frac{\partial}{\partial t}, &\bm{\nabla}^\ast=L\bm{\nabla}
 \end{aligned}
-££
+$$
 Replacing these equations into the Navier--Stokes equations one gets
-££
+$$
 \begin{aligned}
 &\bm{\nabla}^\ast\cdot\bm{u}^\ast=0,\\\\
 &\frac{\partial}{\partial t^\ast}\bm{u}^\ast+\bm{u}^\ast\cdot\bm{\nabla}^\ast\bm{u}^\ast=-\bm{\nabla}^\ast p^\ast+\frac{1}{\mathrm{Re}}\bm{\nabla}^{\ast 2}\bm{u}^\ast,
 \end{aligned}
-££
+$$
 where $\mathrm{Re}=U\cdot L/\nu$ is the _famous_ Reynolds number which represents the ratio of the inertial over the viscous forces.
 
 It must me noted that this non-dimensionnalization procedure heavily relies on the choice of the characteristic timescale of the flow 
 which is this case can be constructed through the characteristic velocity of the flow, $T=L/U$. By chosing the kinematic viscosity instead of the
 velocity, the characteristic time of the flow becomes, $T=L^2/\nu$. With this new characteristic time the dimensionless quantities become
-££
+$$
 \begin{aligned}
 &\bm{u}^\ast=\frac{L}{\nu}\bm{u}, &p^\ast=\frac{L^2}{\nu^2\rho}p,\\\\
 &t^\ast=\frac{\nu}{L^2}t, &\bm{x}^\ast=\frac{\bm{x}}{L},\\\\
 &\frac{\partial}{\partial t^\ast}=\frac{L^2}{\nu}\frac{\partial}{\partial t}, &\bm{\nabla}^\ast=L\bm{\nabla}
 \end{aligned}
-££
+$$
 which in turn give the following dimensionless Navier--Stokes equations
-££
+$$
 \begin{aligned}
 &\bm{\nabla}^\ast\cdot\bm{u}^\ast=0,\\\\
 &\frac{\partial}{\partial t^\ast}\bm{u}^\ast+\bm{u}^\ast\cdot\bm{\nabla}^\ast\bm{u}^\ast=-\bm{\nabla}^\ast p^\ast+\bm{\nabla}^{\ast 2}\bm{u}^\ast,
 \end{aligned}
-££
-where we see that no dimensionless number is present anymore. This kind of non-dimensionalization is only valid for creeping flows that move only very slowly and will not interest us in this series of tutorials.
+$$
+where we see that no dimensionless number is present anymore. This case represents creeping flows that move only very slowly and will not interest us in this series of tutorials.
 
 ## The dimensionless Boltzmann equation
 
-The quantity of interest in the Boltzmann equation is the desity probability distribution function
-££
+The quantity of interest in the Boltzmann equation is the density probability distribution function
+$$
 f(\bm{x},\bm{\xi}, t)
-££
+$$
 which represents the probability of finding a particle at position $\bm{x}$ with velocity $\bm{\xi}$ at time $t$.
 
-In this tutorial we will only be interested in the Boltzmann-BGK equation[^1]
-££
+In this tutorial we will only be interested in the Boltzmann-BGK equation, which reads
+$$
 \partial_t f(\bm{x}, \bm{\xi}, t)+\bm{\xi}\cdot \bm{\nabla}f(\bm{x},\bm{\xi}, t)=-\frac{1}{\tau}\left(f(\bm{x}, \bm{\xi}, t)-f^{eq}(\bm{x}, \bm{\xi}, t)\right),
-££
-where $\tau$ is the relaxation time of the fluid, and $f^{eq}$ the equilibrium distribution function which is typically the Maxwell-Boltzmann distribution (more on this later).
+$$
+where $\tau$ is the relaxation time of the fluid, and $f^{eq}$ the equilibrium distribution function which is typically the Maxwell-Boltzmann density distribution
+function. Considering our fluid is made of particles of mass $m$, the Boltzmann distribution reads
+$$
+f^{eq}(\bm{x}, \bm{\xi}, t) = \rho(\bm{x}, t)\left(\frac{m}{2\pi k_B T(\bm{x}, t)}\right)^{D/2}\exp\left(-\frac{m(\bm{\xi}-\bm{u}(\bm{x}, t))^2}{2k_B T(\bm{x}, t)}\right),
+$$
+where $\rho$, $\bm{u}$, $T$ are respectively the density, velocity and temperature of the fluid, $k_B$ the Boltzmann constant, and $D$ the dimension of the velocity.
 
 The dimensionless density distribution function is then given by
 
diff --git a/lattice-boltzmann.com/content/_index.md b/lattice-boltzmann.com/content/_index.md
index eb8603506fab731edde9976d0847cd425d624b72..5e74d20c91f771fe8c4e6b15638a820406c37391 100644
--- a/lattice-boltzmann.com/content/_index.md
+++ b/lattice-boltzmann.com/content/_index.md
@@ -1,4 +1,6 @@
 +++
+paginate_by = 3
 sort_by = "date"
-template = "section.html"
+template = "index.html"
 +++
+
diff --git a/lattice-boltzmann.com/content/archive/_index.md b/lattice-boltzmann.com/content/archive/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..85198a563c78f33bed704181e010172be0ed253d
--- /dev/null
+++ b/lattice-boltzmann.com/content/archive/_index.md
@@ -0,0 +1,6 @@
++++
+template = "archive.html"
+
+[extra]
+sec = ""
++++
diff --git a/lattice-boltzmann.com/package.json b/lattice-boltzmann.com/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bfbf0eb6346b19b5a083933bee854ba157038468
--- /dev/null
+++ b/lattice-boltzmann.com/package.json
@@ -0,0 +1,17 @@
+{
+  "name": "abridge-bundle",
+  "version": "2.0.0",
+  "description": "Abridge - set PWA cache files list, bundle and minify js",
+  "author": "Jake G <106644+Jieiku@users.noreply.github.com>",
+  "license": "MIT",
+  "homepage": "https://github.com/Jieiku/abridge",
+  "scripts": {
+    "abridge": "node -e \"if ( require('fs').existsSync('./themes/abridge/package_abridge.js')) {require('fs').copyFileSync('./themes/abridge/package_abridge.js', './package_abridge.js')}\" && node package_abridge.js"
+  },
+  "dependencies": {
+    "fast-toml": "^0.5.4",
+    "uglify-js": "^3.17.4",
+    "jsonminify": "^0.4.2",
+    "replace-in-file": "^7.0.1"
+  }
+}
diff --git a/lattice-boltzmann.com/package_abridge.js b/lattice-boltzmann.com/package_abridge.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd9d331ca0d19fc9c23cbc9c86e70e0d732bb32a
--- /dev/null
+++ b/lattice-boltzmann.com/package_abridge.js
@@ -0,0 +1,290 @@
+const fs = require('fs');
+const path = require("path");
+const TOML = require('fast-toml');
+const UglifyJS = require('uglify-js');
+const jsonminify = require("jsonminify");
+const replace = require('replace-in-file');
+const util  = require("util");
+const { exec } = require("child_process");
+const execPromise = util.promisify(exec);
+
+if (!(fs.existsSync('config.toml'))) {
+  throw new Error('ERROR: cannot find config.toml!');
+}
+const tomlString = String(fs.readFileSync('config.toml'));
+const data = TOML.parse(tomlString);
+const js_prestyle = data.extra.js_prestyle;
+const js_switcher = data.extra.js_switcher;
+const js_email_encode = data.extra.js_email_encode;
+const js_copycode = data.extra.js_copycode;
+const search_library = data.extra.search_library;
+const index_format = data.search.index_format;
+const uglyurls = data.extra.uglyurls;
+const js_bundle = data.extra.js_bundle;
+const offline = data.extra.offline;
+const online_url = data.extra.online_url;
+const online_indexformat = data.extra.online_indexformat;
+const pwa = data.extra.pwa;
+const pwa_VER = data.extra.pwa_VER;
+const pwa_NORM_TTL = data.extra.pwa_NORM_TTL;
+const pwa_LONG_TTL = data.extra.pwa_LONG_TTL;
+const pwa_TTL_NORM = data.extra.pwa_TTL_NORM;
+const pwa_TTL_LONG = data.extra.pwa_TTL_LONG;
+const pwa_TTL_EXEMPT = data.extra.pwa_TTL_EXEMPT;
+const pwa_cache_all = data.extra.pwa_cache_all;
+const pwa_BASE_CACHE_FILES = data.extra.pwa_BASE_CACHE_FILES;
+
+async function execWrapper(cmd) {
+  const { stdout, stderr } = await execPromise(cmd);
+  if (stdout) {
+    console.log(stdout);
+  }
+  if (stderr) {
+    console.log('ERROR: '+stderr);
+  }
+}
+
+async function abridge() {
+  if (offline === false) {
+    if (typeof online_url !== 'undefined' && typeof online_indexformat !== 'undefined') {
+      replace.sync({files: 'config.toml', from: /base_url.*=.*/g, to: "base_url = \""+online_url+"\""});
+      replace.sync({files: 'config.toml', from: /index_format.*=.*/g, to: "index_format = \""+online_indexformat+"\""});
+    }
+  } else if (offline === true) {
+    if (typeof online_url !== 'undefined' && typeof online_indexformat !== 'undefined') {
+      replace.sync({files: 'config.toml', from: /base_url.*=.*/g, to: "base_url = \""+__dirname+"\/public\""});
+      replace.sync({files: 'config.toml', from: /index_format.*=.*/g, to: "index_format = \"elasticlunr_javascript\""});
+    } else {
+      throw new Error('ERROR: offline = true requires that online_url and online_indexformat are set in config.toml, so that the base_url and index_format can be restored if offline is later set to false.');
+    }
+  }
+
+  console.log('Zola Build to generate files for minification:');
+  await execWrapper('zola build');
+
+  //check that static/js exists, do this after zola build, it will handle creating static if missing.
+  var jsdir = 'static/js';
+  try {
+    fs.mkdirSync(jsdir);
+  } catch(e) {
+    if (e.code != 'EEXIST') throw e;
+  }
+
+  // check if abridge is used directly or as a theme.
+  bpath = '';
+  if (fs.existsSync('./themes')) {
+    bpath = 'themes/abridge/';
+  }
+
+  base_url = data.base_url;
+  if (base_url.slice(-1) == "/") {
+      base_url = base_url.slice(0, -1);
+  }
+
+  if (search_library === 'elasticlunr') {
+    if (fs.existsSync('content/static/stork_toml.md')) {
+      replace.sync({files: 'content/static/stork_toml.md', from: /draft.*=.*/g, to: "draft = true"});
+    }
+    if (fs.existsSync('content/static/tinysearch_json.md')) {
+      replace.sync({files: 'content/static/tinysearch_json.md', from: /draft.*=.*/g, to: "draft = true"});
+    }
+  } else if (search_library === 'tinysearch') {
+    if (!fs.existsSync('content/static/tinysearch_json.md')) {// 'content/static/tinysearch_json.md' file is missing, copy from abridge theme.
+      fs.copyFileSync(bpath+'content/static/tinysearch_json.md', 'content/static/tinysearch_json.md',fs.constants.COPYFILE_EXCL);
+    }
+    if (fs.existsSync('content/static/stork_toml.md')) {
+      replace.sync({files: 'content/static/stork_toml.md', from: /draft.*=.*/g, to: "draft = true"});
+    }
+    if (fs.existsSync('content/static/tinysearch_json.md')) {
+      replace.sync({files: 'content/static/tinysearch_json.md', from: /draft.*=.*/g, to: "draft = false"});
+    }
+    // zola build && mkdir -p tmp && tinysearch --optimize --path tmp public/data_tinysearch/index.html && rsync -avz tmp/*.wasm static/ && rm -rf tmp
+  } else if (search_library === 'stork') {
+
+    if (!fs.existsSync('content/static/stork_toml.md')) {// 'content/static/stork_toml.md' file is missing, copy from abridge theme.
+      fs.copyFileSync(bpath+'content/static/stork_toml.md', 'content/static/stork_toml.md',fs.constants.COPYFILE_EXCL);
+    }
+    if (fs.existsSync('content/static/stork_toml.md')) {
+      replace.sync({files: 'content/static/stork_toml.md', from: /draft.*=.*/g, to: "draft = false"});
+    }
+    if (fs.existsSync('content/static/tinysearch_json.md')) {
+      replace.sync({files: 'content/static/tinysearch_json.md', from: /draft.*=.*/g, to: "draft = true"});
+    }
+    // zola build && stork build --input public/data_stork/index.html --output static/stork.st
+  }
+
+  if (pwa) {// Update pwa settings, file list, and hashes.
+    if (typeof pwa_VER !== 'undefined' && typeof pwa_NORM_TTL !== 'undefined' && typeof pwa_LONG_TTL !== 'undefined' && typeof pwa_TTL_NORM !== 'undefined' && typeof pwa_TTL_LONG !== 'undefined' && typeof pwa_TTL_EXEMPT !== 'undefined') {
+      // update from abridge theme.
+      fs.copyFileSync(bpath+'static/sw.js', 'static/sw.js');
+      fs.copyFileSync(bpath+'static/js/sw_load.js', 'static/js/sw_load.js');
+      // Update settings in PWA javascript file, using options parsed from config.toml.  sw.min.js?v=3.10.0",  "++"
+      if (fs.existsSync('static/js/sw_load.js')) {
+        sw_load_min = '.js?v=';
+        if (js_bundle) {
+          sw_load_min = '.min.js?v=';
+        }
+        replace.sync({files: 'static/js/sw_load.js', from: /sw.*v=.*/g, to: "sw"+sw_load_min+pwa_VER+"\","});
+      }
+      if (fs.existsSync('static/sw.js')) {
+        replace.sync({files: 'static/sw.js', from: /NORM_TTL.*=.*/g, to: "NORM_TTL = "+pwa_NORM_TTL+";"});
+        replace.sync({files: 'static/sw.js', from: /LONG_TTL.*=.*/g, to: "LONG_TTL = "+pwa_LONG_TTL+";"});
+        replace.sync({files: 'static/sw.js', from: /TTL_NORM.*=.*/g, to: "TTL_NORM = ["+pwa_TTL_NORM+"];"});
+        replace.sync({files: 'static/sw.js', from: /TTL_LONG.*=.*/g, to: "TTL_LONG = ["+pwa_TTL_LONG+"];"});
+        replace.sync({files: 'static/sw.js', from: /TTL_EXEMPT.*=.*/g, to: "TTL_EXEMPT = ["+pwa_TTL_EXEMPT+"];"});
+      }
+
+      if (pwa_cache_all === true) {
+        console.log('info: pwa_cache_all = true in config.toml, so caching the entire site.\n');
+        // Generate array from the list of files, for the entire site.
+
+        var dir = 'public';
+        try {
+          fs.mkdirSync(dir);
+        } catch(e) {
+          if (e.code != 'EEXIST') throw e;
+        }
+        const path = './public/';
+        cache = 'this.BASE_CACHE_FILES = [';
+        files = fs.readdirSync(path, { recursive: true, withFileTypes: false })
+        .forEach(
+          (file) => {
+            // check if is directory, if not then add the path/file
+            if (!fs.lstatSync(path+file).isDirectory()) {
+              // format output
+              item = "/"+file.replace(/index\.html$/i,'');// strip index.html from path
+              item = item.replace(/^\/sw(\.min)?\.js/i,'');// dont cache service worker
+
+              // if formatted output is not empty line then append it to cache var
+              if (item != '') {// skip empty lines
+                cache = cache+"'"+item+"',";
+              }
+            }
+          }
+        );
+        cache = cache.slice(0, -1)+'];'// remove the last comma and close the array
+      } else if (pwa_BASE_CACHE_FILES) {
+        cache = 'this.BASE_CACHE_FILES = ['+pwa_BASE_CACHE_FILES+'];';
+      }
+
+      // update the BASE_CACHE_FILES variable in the sw.js service worker file
+      results = replace.sync({
+        files: 'static/sw.js',
+        from: /this\.BASE_CACHE_FILES =.*/g,
+        to: cache,
+        countMatches: true,
+      });
+    } else {
+      throw new Error('ERROR: pwa requires that pwa_VER, pwa_NORM_TTL, pwa_LONG_TTL, pwa_TTL_NORM, pwa_TTL_LONG, pwa_TTL_EXEMPT are set in config.toml.');
+    }
+  }
+
+  if (bpath === '') {// abridge used directly
+    // These are truely static js files, so they should only need to be updated by abridge maintainer or contributors.
+    minify(['static/js/theme.js']);
+    minify(['static/js/theme_light.js']);
+    minify(['static/js/katex.min.js','static/js/mathtex-script-type.min.js','static/js/katex-auto-render.min.js','static/js/katexoptions.js'],'static/js/katexbundle.min.js');
+    minify(['static/js/elasticlunr.min.js','static/js/search.js'],'static/js/search_elasticlunr.min.js');
+    minify(['static/js/stork.js','static/js/stork_config.js'],'static/js/search_stork.min.js');
+    minify(['static/js/tinysearch.js'],'static/js/search_tinysearch.min.js');
+    minify(['static/js/prestyle.js','static/js/theme_button.js','static/js/email.js','static/js/codecopy.js','static/js/sw_load.js'],'static/js/abridge_nosearch.min.js');
+    minify(['static/js/prestyle.js','static/js/theme_button.js','static/js/email.js','static/js/codecopy.js'],'static/js/abridge_nosearch_nopwa.min.js');
+    minify(['static/js/sw_load.js']);
+    minify(['static/sw.js']);
+  } else if (pwa) {
+    minify(['static/js/sw_load.js']);
+    minify(['static/sw.js']);
+  }
+
+  // if manifest.json is present, then minify it.
+  if (fs.existsSync('static/manifest.json')) {
+    let out;
+    try {
+      out = JSON.minify(fs.readFileSync('static/manifest.json', {encoding:"utf-8"}));
+    } catch(err) {
+      console.log(err);
+    }
+    fs.writeFileSync('static/manifest.min.json', out);
+  }
+
+  abridge_bundle = bundle(bpath,js_prestyle,js_switcher,js_email_encode,js_copycode,search_library,index_format,uglyurls,false);
+  minify(abridge_bundle,'static/js/abridge_nopwa.min.js');
+
+  abridge_bundle = bundle(bpath,js_prestyle,js_switcher,js_email_encode,js_copycode,search_library,index_format,uglyurls,pwa);
+  minify(abridge_bundle,'static/js/abridge.min.js');
+
+  console.log('Zola Build to generate new integrity hashes for the previously minified files:');
+  await execWrapper('zola build');
+}
+
+function bundle(bpath,js_prestyle,js_switcher,js_email_encode,js_copycode,search_library,index_format,uglyurls,pwa) {
+  minify_files = [];
+
+  if (js_prestyle) {
+    minify_files.push(bpath+'static/js/prestyle.js');
+  }
+  if (js_switcher) {
+    minify_files.push(bpath+'static/js/theme_button.js');
+  }
+  if (js_email_encode) {
+    minify_files.push(bpath+'static/js/email.js');
+  }
+  if (js_copycode) {
+    minify_files.push(bpath+'static/js/codecopy.js');
+  }
+  if (search_library) {
+      if ((search_library === 'elasticlunr' && offline === true) || (search_library === 'elasticlunr' && index_format === 'elasticlunr_javascript' && uglyurls === true)) {
+        minify_files.push('public/search_index.en.js');
+        minify_files.push(bpath+'static/js/elasticlunr.min.js');
+        minify_files.push(bpath+'static/js/searchjavaugly.js');
+      } else if (search_library === 'elasticlunr' && index_format === 'elasticlunr_javascript') {
+        minify_files.push('public/search_index.en.js');
+        minify_files.push(bpath+'static/js/elasticlunr.min.js');
+        minify_files.push(bpath+'static/js/searchjava.js');
+      } else if (search_library === 'elasticlunr') {//abridge default
+        minify_files.push(bpath+'static/js/elasticlunr.min.js');
+        minify_files.push(bpath+'static/js/search.js');
+      } else if (search_library === 'stork') {
+        minify_files.push(bpath+'static/js/stork.js');
+        minify_files.push(bpath+'static/js/stork_config.js');
+      } else if (search_library === 'tinysearch') {
+        minify_files.push(bpath+'static/js/tinysearch.js');
+      }
+  }
+  if (pwa) {
+    minify_files.push('static/js/sw_load.js');
+  }
+  return minify_files;
+}
+
+function minify(fileA,outfile) {
+  const options = {
+    mangle: true,
+    compress: {
+      //expression: true,//Parse a single expression, rather than a program (for parsing JSON).
+      //global_defs: false,// a way to pass parameters
+      //module: true,//Process input as ES module (implies --toplevel)
+      //toplevel: true,//Compress and/or mangle variables in top level scope.
+      hoist_funs: true,//hoist function declarations
+      unsafe: true,
+      unsafe_comps: true,
+      unsafe_Function: true,
+      unsafe_math: true,
+      unsafe_proto: true,
+      unsafe_regexp: true,
+      unsafe_undefined: true,
+      drop_console: true
+    }
+  }
+  if (!outfile) {// outfile parameter omitted, infer based on input
+    outfile = fileA[0].slice(0,-2)+'min.js';
+  }
+  var filesContents = fileA.map(function (file) {// array input to support multiple files
+      return fs.readFileSync(file, 'utf8');
+  });
+
+  result = UglifyJS.minify(filesContents, options);
+  fs.writeFileSync(outfile, result.code);
+}
+
+abridge();
diff --git a/lattice-boltzmann.com/sass/_extra.scss b/lattice-boltzmann.com/sass/_extra.scss
new file mode 100644
index 0000000000000000000000000000000000000000..42d9392f07bf5dea9d4ffe427e5db2c597098430
--- /dev/null
+++ b/lattice-boltzmann.com/sass/_extra.scss
@@ -0,0 +1,3 @@
+/******************************************************************************
+ *   Extra - Put your extra SASS/CSS here, it will get bundled with abridge.css
+ *****************************************************************************/
diff --git a/lattice-boltzmann.com/sass/abridge.scss b/lattice-boltzmann.com/sass/abridge.scss
new file mode 100644
index 0000000000000000000000000000000000000000..0fd6617075e99803f35ebb7cd7ed89e664323324
--- /dev/null
+++ b/lattice-boltzmann.com/sass/abridge.scss
@@ -0,0 +1,207 @@
+@use '../themes/abridge/sass/abridge' with ( /// LINES HERE END WITH COMMA AFTER THE VALUE!
+    /// The things your less likely to need to override have been commented out.
+
+    /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
+    /// Fluid layout until a defined size, then becomes centered viewport.
+    //$enable-maxwidth: true,
+    $mw: 85%, // max-width
+    //$mb: 1200px,// value at which to switch from fluid layout to max-width
+
+    $abridgeMode: "light", //valid values: switcher, auto, dark, light
+    $syntax-mode: "light", // Force syntax mode: auto, dark, light
+    $switcherDefault: "dark", // default nojs switcher mode: dark, light (make sure to also set js_switcher_default in config.toml)
+
+    $color: "blueshade", // color template to use/override: orange, blue, blueshade
+
+    $color-syntax: "abridge", // syntax color template to use/override: abridge,
+    $syntax: true, //syntax highlighting for Code Blocks.
+
+    $enable-icons: true, // false disables ALL icons
+    $ic: true, // true for colorized icons, otherwise #888 is used.
+
+    $icon-rss: true,
+    $icon-mail: true, // e-mail
+    $icon-mastodon: false,
+    $icon-element: true,
+    $icon-matrix: false,
+    $icon-buymeacoffee: false,
+    $icon-kofi: false,
+    $icon-twitter: false,
+    $icon-facebook: false,
+    $icon-linkedin: false,
+    $icon-codeberg: false,
+    $icon-gitlab: true,
+    $icon-github: false,
+    $icon-github-sponsor: false,
+    $icon-bitbucket: false,
+    $icon-python: false,
+    $icon-docker: false,
+    $icon-stack: false,
+    $icon-instagram: false,
+    $icon-pixelfed: false,
+    $icon-pinterest: false,
+    $icon-discord: false,
+    $icon-twitch: false,
+    $icon-youtube: false,
+    $icon-researchgate: true,
+
+    //$icon-x: true,// x symbol, used to close search results page.
+    //$icon-search: true,//search, spyglass search button in search box.
+    //$icon-adjust: true,//theme switcher dark/light toggle button.
+    //$icon-angll: true,//pagination, goto first page
+    //$icon-angl: true,//pagination, goto previous page
+    //$icon-angr: true,//pagination, goto next page
+    //$icon-angrr: true,//pagination, goto last page
+    //$icon-angu: true,//back to top button, appears after scrolling down.
+    //$icon-world: true,//language select menu
+    //$icon-copy: true,//copy to clipboard, for code blocks.
+
+    //$icon-ffolder: false,
+    //$icon-folder: false,// categories folder
+    //$icon-ftag: false,
+    //$icon-tag: false,// tag
+    //$icon-check: false,// check mark
+    //$icon-chevron: false,// chevron down
+    //$icon-clock: false,// time analog clock
+    //$icon-date: false,// calendar
+    //$icon-globe: false,
+    //$icon-home: false,
+    //$icon-minus: false,// minus symbol
+    //$icon-moon: false,// dark moon
+    //$icon-sun: false,// light sun
+
+    /// The colors below can be overrided individually as needed.
+
+    /// Dark Colors
+    //$f1d: #ccc,// Font Color Primary
+    //$f2d: #ddd,// Font Color Headers
+    //$c1d: #111,// Background Color Primary
+    //$c2d: #222,// Background Color Secondary
+    //$c3d: #333,// Table Rows, Block quote edge, Borders
+    //$c4d: #777,// Disabled Buttons, Borders, mark background
+    //$a1d: #f90,// link color
+    //$a2d: #fb0,// link hover/focus color
+    //$a3d: #f90,// link h1-h2 hover/focus color
+    //$a4d: #f90,// link visited color
+    //$cgd: #593,// ins green, success
+    //$crd: #e33,// del red, errors
+
+    /// Light Colors
+    //$f1: #333,// Font Color Primary
+    //$f2: #222,// Font Color Headers
+    //$c1: #fff,// Background Color Primary
+    //$c2: #eee,// Background Color Secondary
+    //$c3: #ddd,// Table Rows, Block quote edge, Borders
+    //$c4: #555,// Disabled Buttons, Borders, mark background
+    //$a1: #c40,// link color
+    //$a2: #e60,// link hover/focus color
+    //$a3: #f90,// link h1-h2 hover/focus color
+    //$a4: #c40,// link visited color
+    //$cg: #373,// ins green, success
+    //$cr: #d33,// del red, errors
+
+    /// Dark Syntax Colors
+    //$h0d: #191919,// background color
+    //$h1d: #ddd,// unstyled text
+    //$h2d: #888,// comments
+    //$h3d: #e65,// red, support function
+    //$h4d: #e83,// orange, punctuation, constant, variable, json-key
+    //$h5d: #eb6,// tan, entity/function name
+    //$h6d: #ac3,// green, string
+    //$h7d: #8db,// teal, escape character
+    //$h8d: #6ae,// blue, declaration, tag, property
+    //$h9d: #d6e,// purple, operators
+    //$had: 160%,// mark/highlight line
+
+    /// Light Syntax Colors
+    //$h0: #f7f7f7,// background color
+    //$h1: #222,// unstyled text
+    //$h2: #666,// comments
+    //$h3: #a21,// red, support function
+    //$h4: #930,// orange, punctuation, constant, variable, json-key
+    //$h5: #a50,// tan, entity/function name
+    //$h6: #350,// green, string
+    //$h7: #286,// teal, escape character
+    //$h8: #059,// blue, declaration, tag, property
+    //$h9: #a3c,// purple, operators
+    //$ha: 92%,// mark/highlight line
+
+    /// These lines find the spot at which to insert your appended fonts.
+    // $findFont-Main: "CMUSerif", // ← APPEND custom MAIN font(s) AFTER this
+    //$findFont-Code: "Segoe UI Mono",// ← APPEND custom CODE font(s) AFTER this
+
+    /// If you want to prepend the font list, then use null instead:
+    //$findFont-Main: null,         // ← PREPEND custom MAIN font(s)
+    //$findFont-Code: null,         // ← PREPEND custom CODE font(s)
+
+    /// These lines specify the fonts to add.
+    //$fontExt-Main: (ExampleFont1, "Example Font 2"),// MAIN font(s) to add
+    //$fontExt-Code: (ExampleCode1, "Example Code 2"),// CODE font(s) to add
+
+    /// If relying on installed fonts alone, then the above is all you need, if the visiting system has the intended font installed then it will use it!
+    /// However, if you want to load the Font File resource to ensure it is loaded if they do not have it, then use @use at the VERY Bottom of this file.
+    /// For a Sans based system font stack, I measured the least Cumulative Layout Shift with: Roboto, Lato, Arimo
+
+    /// If prepending/appending fonts above, then no need to change them with the 2 below lines.
+    /// The following 2 below lines give a way to hard code a font list if you prefer.
+    $font: CMUSerif,
+    //$font: Roboto system-ui -apple-system BlinkMacSystemFont "Segoe UI" Oxygen Ubuntu Cantarell "Fira Sans" "Droid Sans" "Helvetica Neue" "Noto Sans" Helvetica Arial sans-serif,
+    //$font-mono: ui-monospace Menlo Monaco Consolas "SF Mono" "Cascadia Mono" "Segoe UI Mono" "DejaVu Sans Mono" "Liberation Mono" "Roboto Mono" "Oxygen Mono" "Ubuntu Monospace" "Ubuntu Mono" "Source Code Pro" "Fira Mono" "Droid Sans Mono" "Courier New" Courier monospace,
+
+    /// Enable <header>, <main>, <footer> inside <body> as a container
+    //$enable-semantic-container: true,
+
+    /// Enable responsive typography, Fixed root element size if disabled
+    //$enable-responsive-typography: true,
+
+    /// Enable responsive spacings for <header>, <main>, <footer>, <section>
+    //$enable-responsive-spacings: false,
+
+    /// Enable a centered viewport for <header>, <main>, <footer> inside <body>
+    /// This option will only work if $enable-maxwidth: false
+    //$enable-viewport: false,
+
+    /// xs: Extra small (portrait phones)
+    /// sm: Small(landscape phones)
+    /// md: Medium(tablets)
+    /// lg: Large(desktops)
+    /// xl: Extra large (large desktops)
+
+    /// Breakpoints
+    //$breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px),
+
+    /// Viewports
+    //$viewports: (sm: 510px, md: 700px, lg: 920px, xl: 1130px),
+
+    //$document: true,//Content-box & Responsive typography
+    //$typography: true,//a, headings, p, ul, blockquote
+    //$sectioning: true,//responsive Container, header, main, footer
+    //$nav: true,//Horizontal Navigation at top of page
+    //$embedded: true,//Embedded content, iframe, video, images, etc.
+    //$table: true,//table specific elements
+    //$code: true,//codeblocks, code, pre, kbd
+    //$hr: true,//Horizontal Rule
+    //$scroller: true,//Horizontal scroller (<figure>)
+    //$button: true,//Form elements (button)
+    //$form: true,//Form elements (non-button)
+    //$top: true,//back to top button using CSS
+    //$search: true,//search feature
+    //$blocks: true,//css classes for block formatting, eg: recent posts, table of contents, series navigation
+    //$series: true,//series navigation list
+    //$modifiers: true,//tiny modifier classes for sizing, spacing, etc.
+    //$misc: false,
+    //$grid: true,//Infinity Grid, column based layouts.
+    //$syntax: true,//syntax highlighting for code blocks
+);
+@use "extra";
+/******************************************************************************
+ *   FONTS - Abridge by default uses the System Font Stack
+ *     https://css-tricks.com/snippets/css/system-font-stack/
+ *   However if you need you can load a specific font below,
+ *     make sure to have the relevant woff2 fonts in your static/fonts folder
+ *   I measured the least Cumulative Layout Shift with: Roboto, Lato, Arimo
+ *****************************************************************************/
+// @use "fonts/Roboto";
+// @use "fonts/Arimo";
+// @use "fonts/CMUSansSerif";
+@use "fonts/CMUSerif";
diff --git a/lattice-boltzmann.com/sass/fonts/_Arimo.scss b/lattice-boltzmann.com/sass/fonts/_Arimo.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d3dc82994141d0e207fc50c2b8d1bbe0272c65bb
--- /dev/null
+++ b/lattice-boltzmann.com/sass/fonts/_Arimo.scss
@@ -0,0 +1,17 @@
+@font-face {
+    font-family: 'Arimo';
+    src: local("Arimo"), url("fonts/Arimo.woff2");//latin regular
+    font-display: swap;
+}
+@font-face {
+    font-family: 'Arimo';
+    src: local("Arimo-Italic"), url("fonts/Arimo-Italic.woff2");//latin italic
+    font-style: italic;
+    font-display: swap;
+}
+@font-face {
+    font-family: 'Arimo';
+    src: local("Arimo-Bold"), url("fonts/Arimo-Bold.woff2");//latin bold
+    font-weight: bold;
+    font-display: swap;
+}
diff --git a/lattice-boltzmann.com/sass/fonts/_CMUSansSerif.scss b/lattice-boltzmann.com/sass/fonts/_CMUSansSerif.scss
new file mode 100644
index 0000000000000000000000000000000000000000..bb65d36159e7013f4967085f73e4985233e9cfec
--- /dev/null
+++ b/lattice-boltzmann.com/sass/fonts/_CMUSansSerif.scss
@@ -0,0 +1,19 @@
+@font-face {
+    font-family: 'CMUSansSerif';
+    src: local("CMUSansSerif"), url("fonts/CMUSansSerif.woff2"); //latin regular
+    font-display: swap;
+}
+
+@font-face {
+    font-family: 'CMUSansSerif';
+    src: local("CMUSansSerif-Oblique"), url("fonts/CMUSansSerif-Oblique.woff2"); //latin italic
+    font-style: italic;
+    font-display: swap;
+}
+
+@font-face {
+    font-family: 'CMUSansSerif';
+    src: local("CMUSansSerif-Bold"), url("fonts/CMUSansSerif-Bold.woff2"); //latin bold
+    font-weight: bold;
+    font-display: swap;
+}
diff --git a/lattice-boltzmann.com/sass/fonts/_CMUSerif.scss b/lattice-boltzmann.com/sass/fonts/_CMUSerif.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b1da72fd3ca09e7fb3fc0ed0cbf4e215940ecb42
--- /dev/null
+++ b/lattice-boltzmann.com/sass/fonts/_CMUSerif.scss
@@ -0,0 +1,19 @@
+@font-face {
+    font-family: 'CMUSerif';
+    src: local("CMUSerif-Roman"), url("fonts/CMUSerif-Roman.woff2"); //latin regular
+    font-display: swap;
+}
+
+@font-face {
+    font-family: 'CMUSerif';
+    src: local("CMUSerif-Italic"), url("fonts/CMUSerif-Italic.woff2"); //latin italic
+    font-style: italic;
+    font-display: swap;
+}
+
+@font-face {
+    font-family: 'CMUSerif';
+    src: local("CMUSerif-Bold"), url("fonts/CMUSerif-Bold.woff2"); //latin bold
+    font-weight: bold;
+    font-display: swap;
+}
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-Bold.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..7b5fbee4fc7a8e75f7a94e9ca4b72c77a5d14fb8
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-Bold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-BoldOblique.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-BoldOblique.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..cc2a4ee4dfcc20b3cac73ec257d5f2ccf974f494
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-BoldOblique.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-Oblique.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-Oblique.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..95d78952462c559d6b5c46a84e455094952ad591
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-Oblique.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-Roman.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-Roman.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ec7ccea29a8a361bbb46b9e3ad332667413e0d70
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-Roman.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-SemiBold.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-SemiBold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..cd867ba6934ce24f014e6eb48b6be6392e4bd9e8
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-SemiBold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUBright-SemiBoldOblique.woff2 b/lattice-boltzmann.com/static/fonts/CMUBright-SemiBoldOblique.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..df4ba0d166eed6bf6e44137034d68d40164a2bdc
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUBright-SemiBoldOblique.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUConcrete-Bold.woff2 b/lattice-boltzmann.com/static/fonts/CMUConcrete-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..8ea1afbca7b00d95345206e9187f25be1345b4bf
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUConcrete-Bold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUConcrete-BoldItalic.woff2 b/lattice-boltzmann.com/static/fonts/CMUConcrete-BoldItalic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..93b31a3edfec2b9683383ff586b32f7820d14749
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUConcrete-BoldItalic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUConcrete-Italic.woff2 b/lattice-boltzmann.com/static/fonts/CMUConcrete-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..81415c5e6e661430d0c9997a49069aebb69166bf
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUConcrete-Italic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUConcrete-Roman.woff2 b/lattice-boltzmann.com/static/fonts/CMUConcrete-Roman.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..13bf99c5f3661f8d9859f4d383ca9da63de1469d
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUConcrete-Roman.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSansSerif-Bold.woff2 b/lattice-boltzmann.com/static/fonts/CMUSansSerif-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..09dab0ef590f738d111f8b4fc712c5e5a048e2c0
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSansSerif-Bold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSansSerif-BoldOblique.woff2 b/lattice-boltzmann.com/static/fonts/CMUSansSerif-BoldOblique.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..70cfac73df1c65d05642e976d3fef979882f6351
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSansSerif-BoldOblique.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSansSerif-Oblique.woff2 b/lattice-boltzmann.com/static/fonts/CMUSansSerif-Oblique.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..6adb32c47b982ccd9882720f648138eabb4c2eb6
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSansSerif-Oblique.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSansSerif.woff2 b/lattice-boltzmann.com/static/fonts/CMUSansSerif.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..87a1f75eebf0d425133935a89388d3d612ababe3
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSansSerif.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSerif-Bold.woff2 b/lattice-boltzmann.com/static/fonts/CMUSerif-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..2b101fb26f978602b0e6073e059d48e2f4548732
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSerif-Bold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSerif-BoldItalic.woff2 b/lattice-boltzmann.com/static/fonts/CMUSerif-BoldItalic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..97b02ea8ba3959878bd78f895ea1350aa55ee549
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSerif-BoldItalic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSerif-Italic.woff2 b/lattice-boltzmann.com/static/fonts/CMUSerif-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..2a97b45b2d7fac41b37fc7b7e62123e4dc9a76d1
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSerif-Italic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUSerif-Roman.woff2 b/lattice-boltzmann.com/static/fonts/CMUSerif-Roman.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..47460bc9429cf63850de3ea283cda6ee19927a20
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUSerif-Roman.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUTypewriter-Bold.woff2 b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e417d8f83988bb3c6c163cce950eeb2a84e398f6
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Bold.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUTypewriter-BoldItalic.woff2 b/lattice-boltzmann.com/static/fonts/CMUTypewriter-BoldItalic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..d07d6bc2399751c109d49da07422ffa97cfffd74
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUTypewriter-BoldItalic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUTypewriter-Italic.woff2 b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..2de9e30d873afd1bd21eb7cef3362b9a4a207034
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Italic.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/CMUTypewriter-Regular.woff2 b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..42ab4ab7a2ffba54b90f9e954e7771092a07f2ea
Binary files /dev/null and b/lattice-boltzmann.com/static/fonts/CMUTypewriter-Regular.woff2 differ
diff --git a/lattice-boltzmann.com/static/fonts/bright.css b/lattice-boltzmann.com/static/fonts/bright.css
new file mode 100644
index 0000000000000000000000000000000000000000..93bb2590497662a265f6c73b96552f08ba0f377c
--- /dev/null
+++ b/lattice-boltzmann.com/static/fonts/bright.css
@@ -0,0 +1,42 @@
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: normal;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUBright-Roman.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: italic;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUBright-Oblique.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: normal;
+  font-weight: 600;
+  font-display: swap;
+  src: url("CMUBright-SemiBold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: italic;
+  font-weight: 600;
+  font-display: swap;
+  src: url("CMUBright-SemiBoldOblique.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: normal;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUBright-Bold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Bright";
+  font-style: italic;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUBright-BoldOblique.woff2");
+}
diff --git a/lattice-boltzmann.com/static/fonts/concrete.css b/lattice-boltzmann.com/static/fonts/concrete.css
new file mode 100644
index 0000000000000000000000000000000000000000..ca12fa61d17fc461edd524920e8fc7a622000df8
--- /dev/null
+++ b/lattice-boltzmann.com/static/fonts/concrete.css
@@ -0,0 +1,28 @@
+@font-face {
+  font-family: "Computer Modern Concrete";
+  font-style: normal;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUConcrete-Roman.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Concrete";
+  font-style: normal;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUConcrete-Bold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Concrete";
+  font-style: italic;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUConcrete-Italic.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Concrete";
+  font-style: italic;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUConcrete-BoldItalic.woff2");
+}
diff --git a/lattice-boltzmann.com/static/fonts/sans.css b/lattice-boltzmann.com/static/fonts/sans.css
new file mode 100644
index 0000000000000000000000000000000000000000..d478a35e81422e5194e4c09418e414043dc28791
--- /dev/null
+++ b/lattice-boltzmann.com/static/fonts/sans.css
@@ -0,0 +1,28 @@
+@font-face {
+  font-family: "Computer Modern Sans";
+  font-style: normal;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUSansSerif.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Sans";
+  font-style: normal;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUSansSerif-Bold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Sans";
+  font-style: italic;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUSansSerif-Oblique.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Sans";
+  font-style: italic;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUSansSerif-BoldOblique.woff2");
+}
diff --git a/lattice-boltzmann.com/static/fonts/serif.css b/lattice-boltzmann.com/static/fonts/serif.css
new file mode 100644
index 0000000000000000000000000000000000000000..1568a883c92bd7489762c7b5cb5139ec63d1cfe3
--- /dev/null
+++ b/lattice-boltzmann.com/static/fonts/serif.css
@@ -0,0 +1,28 @@
+@font-face {
+  font-family: "Computer Modern Serif";
+  font-style: normal;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUSerif-Roman.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Serif";
+  font-style: normal;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUSerif-Bold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Serif";
+  font-style: italic;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUSerif-Italic.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Serif";
+  font-style: italic;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUSerif-BoldItalic.woff2");
+}
diff --git a/lattice-boltzmann.com/static/fonts/typewriter.css b/lattice-boltzmann.com/static/fonts/typewriter.css
new file mode 100644
index 0000000000000000000000000000000000000000..301ae1a29ce1e98fa7402b2320da5597e34ba012
--- /dev/null
+++ b/lattice-boltzmann.com/static/fonts/typewriter.css
@@ -0,0 +1,28 @@
+@font-face {
+  font-family: "Computer Modern Typewriter";
+  font-style: normal;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUTypewriter-Regular.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Typewriter";
+  font-style: normal;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUTypewriter-Bold.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Typewriter";
+  font-style: italic;
+  font-weight: normal;
+  font-display: swap;
+  src: url("CMUTypewriter-Italic.woff2");
+}
+@font-face {
+  font-family: "Computer Modern Typewriter";
+  font-style: italic;
+  font-weight: bold;
+  font-display: swap;
+  src: url("CMUTypewriter-BoldItalic.woff2");
+}
diff --git a/lattice-boltzmann.com/themes/abridge b/lattice-boltzmann.com/themes/abridge
new file mode 160000
index 0000000000000000000000000000000000000000..d45bc26c2250f573a0d83f755831857999fc125f
--- /dev/null
+++ b/lattice-boltzmann.com/themes/abridge
@@ -0,0 +1 @@
+Subproject commit d45bc26c2250f573a0d83f755831857999fc125f
diff --git a/old-lattice-boltzmann.com/config.toml b/old-lattice-boltzmann.com/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..fca84181c5547d4ec3a487607d0ed65c9d886c2e
--- /dev/null
+++ b/old-lattice-boltzmann.com/config.toml
@@ -0,0 +1,28 @@
+# The URL the site will be built for
+base_url = "https://www.lattice-boltzmann.com"
+
+# Whether to automatically compile all Sass files in the sass directory
+compile_sass = true
+
+# Whether to build a search index to be used later on by a JavaScript library
+build_search_index = true
+
+theme = "toucan"
+
+transparent = "true"
+
+[markdown]
+# Whether to do syntax highlighting
+# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
+highlight_code = true
+highlight_theme = "base16-ocean-light"
+
+[extra]
+# Put all your custom variables here
+
+# Whether to do syntax highlighting
+# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
+title = "High performance lattice Boltzmann method"
+
+[extra.theme]
+read_more = "Read more"
diff --git a/old-lattice-boltzmann.com/content/1-dimensionless-lbm.md b/old-lattice-boltzmann.com/content/1-dimensionless-lbm.md
new file mode 100644
index 0000000000000000000000000000000000000000..e86b25eca1bd3eac45fbb36947303e806bcc725e
--- /dev/null
+++ b/old-lattice-boltzmann.com/content/1-dimensionless-lbm.md
@@ -0,0 +1,101 @@
++++
+title = "The dimensionless lattice Boltzmann equation"
+description = "How to write the dimensionless lattice Boltzmann equation"
+date = 2024-03-06
+slug = "dimensionless"
+
+[extra]
+katex = true
++++
+
+## Thed imensionless Navier-Stokes
+
+In order to write the dimensionless lattice Boltzmann equation, we start by reminding the basis of dimensional analysis for fluid flows by writing the dimensionless incompressible Navier--Stokes which are more common in the litterature.
+
+The incompressible Navier--Stokes equations reads
+
+££
+\begin{aligned}
+&\bm{\nabla}\cdot\bm{u}=0,\\\\
+&\frac{\partial}{\partial t}\bm{u}+\bm{u}\cdot\bm{\nabla}\bm{u}=-\frac{1}{\rho}\bm{\nabla}p+\nu\bm{\nabla}^2\bm{u},
+\end{aligned}
+££
+where $p$, $\rho$, $\nu$, and $\bm{u}$ are respectively the pressure, density, kinematic viscosity, and velocity of the flow.
+
+In order to transform this equation into its dimensionless form a certain amount of characteristic lengthscales must be chosen. Here we will define $U$ as the characteristic velocity of the flow and $L$ its characteristic length.
+
+We can the write all the above quantities dimensionless form
+££
+\begin{aligned}
+&\bm{u}^\ast=\frac{\bm{u}}{U}, &p^\ast=\frac{p}{\rho U^2},\\\\
+&t^\ast=\frac{U}{L}t, &\bm{x}^\ast=\frac{\bm{x}}{L},\\\\
+&\frac{\partial}{\partial t^\ast}=\frac{L}{U}\frac{\partial}{\partial t}, &\bm{\nabla}^\ast=L\bm{\nabla}
+\end{aligned}
+££
+Replacing these equations into the Navier--Stokes equations one gets
+££
+\begin{aligned}
+&\bm{\nabla}^\ast\cdot\bm{u}^\ast=0,\\\\
+&\frac{\partial}{\partial t^\ast}\bm{u}^\ast+\bm{u}^\ast\cdot\bm{\nabla}^\ast\bm{u}^\ast=-\bm{\nabla}^\ast p^\ast+\frac{1}{\mathrm{Re}}\bm{\nabla}^{\ast 2}\bm{u}^\ast,
+\end{aligned}
+££
+where $\mathrm{Re}=U\cdot L/\nu$ is the _famous_ Reynolds number which represents the ratio of the inertial over the viscous forces.
+
+It must me noted that this non-dimensionnalization procedure heavily relies on the choice of the characteristic timescale of the flow 
+which is this case can be constructed through the characteristic velocity of the flow, $T=L/U$. By chosing the kinematic viscosity instead of the
+velocity, the characteristic time of the flow becomes, $T=L^2/\nu$. With this new characteristic time the dimensionless quantities become
+££
+\begin{aligned}
+&\bm{u}^\ast=\frac{L}{\nu}\bm{u}, &p^\ast=\frac{L^2}{\nu^2\rho}p,\\\\
+&t^\ast=\frac{\nu}{L^2}t, &\bm{x}^\ast=\frac{\bm{x}}{L},\\\\
+&\frac{\partial}{\partial t^\ast}=\frac{L^2}{\nu}\frac{\partial}{\partial t}, &\bm{\nabla}^\ast=L\bm{\nabla}
+\end{aligned}
+££
+which in turn give the following dimensionless Navier--Stokes equations
+££
+\begin{aligned}
+&\bm{\nabla}^\ast\cdot\bm{u}^\ast=0,\\\\
+&\frac{\partial}{\partial t^\ast}\bm{u}^\ast+\bm{u}^\ast\cdot\bm{\nabla}^\ast\bm{u}^\ast=-\bm{\nabla}^\ast p^\ast+\bm{\nabla}^{\ast 2}\bm{u}^\ast,
+\end{aligned}
+££
+where we see that no dimensionless number is present anymore. This kind of non-dimensionalization is only valid for creeping flows that move only very slowly and will not interest us in this series of tutorials.
+
+## The dimensionless Boltzmann equation
+
+The quantity of interest in the Boltzmann equation is the desity probability distribution function
+££
+f(\bm{x},\bm{\xi}, t)
+££
+which represents the probability of finding a particle at position $\bm{x}$ with velocity $\bm{\xi}$ at time $t$.
+
+In this tutorial we will only be interested in the Boltzmann-BGK equation[^1]
+££
+\partial_t f(\bm{x}, \bm{\xi}, t)+\bm{\xi}\cdot \bm{\nabla}f(\bm{x},\bm{\xi}, t)=-\frac{1}{\tau}\left(f(\bm{x}, \bm{\xi}, t)-f^{eq}(\bm{x}, \bm{\xi}, t)\right),
+££
+where $\tau$ is the relaxation time of the fluid, and $f^{eq}$ the equilibrium distribution function which is typically the Maxwell-Boltzmann distribution (more on this later).
+
+The dimensionless density distribution function is then given by
+
+
+[^1]: See reference TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/old-lattice-boltzmann.com/content/_index.md b/old-lattice-boltzmann.com/content/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb8603506fab731edde9976d0847cd425d624b72
--- /dev/null
+++ b/old-lattice-boltzmann.com/content/_index.md
@@ -0,0 +1,4 @@
++++
+sort_by = "date"
+template = "section.html"
++++
diff --git a/lattice-boltzmann.com/themes/toucan b/old-lattice-boltzmann.com/themes/toucan
similarity index 100%
rename from lattice-boltzmann.com/themes/toucan
rename to old-lattice-boltzmann.com/themes/toucan