diff --git a/.gitignore b/.gitignore index 063e3987d..3c097ca05 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ venv 404.html site_libs .DS_Store +index_files +digest.txt \ No newline at end of file diff --git a/_quarto.yml b/_quarto.yml index 288cf5259..62d2766a5 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -5,7 +5,6 @@ project: port: 4200 browser: true - # These cannot be used as variables. They are reserved for the project configuration. website: title: "Turing.jl" @@ -17,8 +16,6 @@ website: navbar: logo: "assets/images/turing-logo.svg" logo-href: https://turinglang.org/ - background: "#073c44" - foreground: "#ffffff" left: - href: getting-started/ text: Get Started @@ -40,11 +37,11 @@ website: href: https://turinglang.org/docs/versions.html tools: - icon: twitter - href: https://x.com/TuringLang text: Turing Twitter + href: https://x.com/TuringLang - icon: github - href: https://github.com/TuringLang/Turing.jl text: Turing GitHub + href: https://github.com/TuringLang sidebar: - text: documentation @@ -117,20 +114,6 @@ website: - developers/inference/variational-inference/index.qmd - developers/inference/implementing-samplers/index.qmd - page-footer: - background: "#073c44" - left: | - Turing is created by Hong Ge, and lovingly maintained by the core team of volunteers.
- The contents of this website are © 2018–2025 under the terms of the MIT License. - - right: - - icon: twitter - href: https://x.com/TuringLang - aria-label: Turing Twitter - - icon: github - href: https://github.com/TuringLang/Turing.jl - aria-label: Turing GitHub - back-to-top-navigation: true repo-url: https://github.com/TuringLang/docs repo-actions: [edit, issue] @@ -141,29 +124,76 @@ website: format: html: theme: - light: cosmo + light: [cosmo, theming/theme-light.scss] dark: [cosmo, theming/theme-dark.scss] - css: theming/styles.css + highlight-style: github smooth-scroll: true output-block-background: true toc: true toc-title: "Table of Contents" code-fold: false code-overflow: scroll + include-in-header: + - text: | + + include-after-body: + - text: | + + execute: echo: true output: true freeze: auto -include-in-header: - - text: | - # These variables can be used in any qmd files, e.g. for links: # the [Getting Started page]({{< meta get-started >}}) diff --git a/assets/images/brands/Turing_Logo_1000x400px_Black.webp b/assets/images/brands/Turing_Logo_1000x400px_Black.webp new file mode 100644 index 000000000..68d3caa7e Binary files /dev/null and b/assets/images/brands/Turing_Logo_1000x400px_Black.webp differ diff --git a/assets/images/brands/Turing_Logo_1000x400px_White.webp b/assets/images/brands/Turing_Logo_1000x400px_White.webp new file mode 100644 index 000000000..b1f168278 Binary files /dev/null and b/assets/images/brands/Turing_Logo_1000x400px_White.webp differ diff --git a/assets/images/brands/university-cambridge-logo-black-example-640x132.png b/assets/images/brands/university-cambridge-logo-black-example-640x132.png new file mode 100644 index 000000000..b49e59aa9 Binary files /dev/null and b/assets/images/brands/university-cambridge-logo-black-example-640x132.png differ diff --git a/assets/images/brands/university-cambridge-logo-white-example-640x133.png b/assets/images/brands/university-cambridge-logo-white-example-640x133.png new file mode 100644 index 000000000..99a75d96f Binary files /dev/null and b/assets/images/brands/university-cambridge-logo-white-example-640x133.png differ diff --git a/theming/old-styles/styles.css b/theming/old-styles/styles.css new file mode 100644 index 000000000..535a9bcc5 --- /dev/null +++ b/theming/old-styles/styles.css @@ -0,0 +1,259 @@ +.quarto-container { + background-color: #f8f9fa; +} + +.navbar { + background-color: #ffffff; +} + +nav.sidebar.sidebar-navigation:not(.rollup) { + background-color: #f8f9fa; +} + +.navbar a:hover { + text-decoration: none; +} + +.cell-output { + border: 1px dashed; +} + +.cell-bg { + background-color: #f1f3f5; +} + +.cell-output-stdout code { + word-break: break-wor !important; + white-space: pre-wrap !important; +} + +.cell-output-display svg { + height: fit-content; + width: fit-content; + + &.mermaid-js { + /* fit-content for mermaid diagrams makes them really small, so we + * default to 100% */ + width: 100%; + } +} + +.cell-output-display img { + max-width: 100%; + max-height: 100%; + object-fit: contain; +} + +.nav-footer-center { + display: flex; + justify-content: center; +} + +.dropdown-menu { + text-align: center; + min-width: 100px !important; + border-radius: 5px; + max-height: 250px; + overflow: scroll; +} + +/* Custom Footer */ +.footer { + display: none; +} +.custom-footer { + background-color: #fff; + color: #6c757d; + font-size: 0.9rem; + padding: 3rem 2rem 2rem; + border-top: 1px solid #e9ecef; +} + +.custom-footer .footer-container { + max-width: 1350px; + margin: 0 auto; +} + +.custom-footer .footer-grid { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 2rem; + margin-bottom: 2rem; + padding-bottom: 2rem; + border-bottom: 1px solid #e9ecef; +} + +.custom-footer .footer-links-wrapper { + display: flex; + flex-wrap: wrap; + gap: 2rem; + flex: 2 1 400px; +} + +.custom-footer .footer-column { + flex: 1 1 auto; +} + +.custom-footer .footer-brands { + flex: 1 1 320px; +} + +.custom-footer .footer-column h5 { + font-weight: 600; + color: #212529; + margin-bottom: 1.25rem; + font-size: 0.9rem; + text-transform: uppercase; + letter-spacing: 0.08em; +} + +.custom-footer .footer-column a { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 0.75rem; + color: #6c757d; + text-decoration: none; + transition: color 0.2s ease; +} + +.custom-footer .footer-column a:hover { + color: #212529; + text-decoration: none; +} + +.custom-footer .footer-column a i { + font-size: 1.1rem; + line-height: 1; + width: 20px; + text-align: center; +} + +.custom-footer .footer-brands p { + font-size: 0.9rem; + line-height: 1.6; + margin-top: -0.5rem; + margin-bottom: 1.5rem; +} + +.custom-footer .footer-brands .logo-grid { + display: flex; + gap: 2rem; + align-items: center; +} + +.custom-footer .partner-logo { + flex: 1; +} + +.custom-footer .partner-logo img { + max-width: 100%; + height: 50px; + object-fit: contain; + transition: transform 0.2s ease; +} + +.custom-footer .partner-logo:hover img { + transform: scale(1.05); +} + +.custom-footer .brands-light-mode-logo { + display: inline; +} + +.custom-footer .brands-dark-mode-logo { + display: none; +} + +.custom-footer .footer-bottom { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.85rem; + flex-wrap: wrap; + gap: 1rem; +} + +.custom-footer .footer-bottom p { + margin: 0; + line-height: 1.6; +} + +.custom-footer .footer-bottom a { + color: #495057; + font-weight: 500; + text-decoration: none; + border-bottom: 1px solid #dee2e6; +} + +.custom-footer .footer-bottom a:hover { + border-bottom-color: #495057; +} + +.footer-source-link { + display: flex; + align-items: center; + gap: 0.5rem; +} + +@media (max-width: 992px) { + .custom-footer .footer-links-wrapper { + flex-basis: 100%; + justify-content: center; + } + + .custom-footer .footer-grid { + justify-content: center; + } + + .custom-footer .footer-brands { + flex-grow: 0; + text-align: center; + } + + .custom-footer .footer-brands .logo-grid { + justify-content: center; + } + + .custom-footer .footer-column { + flex-grow: 0; + } +} + +@media (max-width: 768px) { + .custom-footer .footer-bottom { + flex-direction: column; + gap: 1.5rem; + text-align: center; + } +} + +@media (max-width: 576px) { + .custom-footer .footer-links-wrapper { + flex-direction: column; + text-align: center; + align-items: center; + } + + .custom-footer .footer-column { + width: 100%; + max-width: 350px; + } + + .custom-footer .footer-column a { + justify-content: center; + } + + .custom-footer .footer-brands .logo-grid { + flex-direction: column; + gap: 1.5rem; + align-items: center; + } + + .custom-footer .partner-logo { + flex-basis: auto; + width: 100%; + max-width: 220px; + } +} \ No newline at end of file diff --git a/theming/old-styles/theme-dark.scss b/theming/old-styles/theme-dark.scss new file mode 100644 index 000000000..9bfd91a94 --- /dev/null +++ b/theming/old-styles/theme-dark.scss @@ -0,0 +1,227 @@ +/*-- scss:defaults --*/ +// Cosmo 5.3.3 +// Bootswatch + +$theme: "cosmo" !default; + +// Manually-added colors +$background-nav: #22272e; +$background-body: #1c2128; +$foreground: #ffffff; +$links: #34b8bf; +$links-hover: #31dce6; +$code-background-color: #22272e; +$li-color: #bcbcbc; +$text-muted: #bcbcbc; +$btn-border-color: #444c56; + +// Quarto default colors +$white: #ffffff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #868e96 !default; +$gray-700: #495057 !default; +$gray-800: #22272e !default; +$gray-900: #1c2128 !default; +$black: #000000 !default; + +$indigo: #6610f2 !default; +$purple: #613d7c !default; +$pink: #e83e8c !default; +$red: #ff0039 !default; +$orange: #f0ad4e !default; +$yellow: #ff7518 !default; +$green: #3fb618 !default; +$teal: #4DB6AC !default; +$cyan: #39d3d7 !default; + +$primary: $links-hover !default; +$secondary: $gray-800 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-800 !default; + +$min-contrast-ratio: 2.6 !default; + +// Options + +$enable-rounded: false !default; + +// Fonts + +// stylelint-disable-next-line value-keyword-case +$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; +$headings-font-weight: 400 !default; + +// Tables + +$table-color: initial !default; + +// Alerts + +$alert-border-width: 0 !default; + +// Progress bars + +$progress-height: .5rem !default; + + +// Custom tweaks for Quarto-Cosmo + +$navbar-bg: $background-nav; +$navbar-fg: $foreground; +$footer-bg: $background-nav; +$footer-fg: $foreground; +$body-color: $white; +$body-bg: $background-body; +$sidebar-bg: $background-body; +$sidebar-fg: $text-muted; + +/*-- scss:rules --*/ + +h1, h2, h3, h4, h5, h6 { + color: $foreground !important; +} + +.quarto-container { + background-color: $background-body !important; +} + +.navbar { + background-color: $navbar-bg !important; +} + +.sidebar { + background-color: $sidebar-bg !important; + color: $sidebar-fg !important; +} + +pre code { + color: $links !important; +} + +pre { + color: $foreground !important; +} + +p { + color: $li-color !important; +} + +li { + color: $li-color !important; +} + +a { + color: $links; + + &:hover { + color: $links-hover !important; + } +} + +code, +p code, +ol code, +li code, +h1 code { + background-color: $code-background-color !important; + color: $links; +} + +.cell, +.anchored code { + background-color: $code-background-color !important; + color: $links; +} + +div.sourceCode { + background-color: $code-background-color !important; +} + +.menu-text:hover { + color: $links-hover !important; +} + +.quarto-title-breadcrumbs .breadcrumb li:last-of-type a { + color: #6c757d !important; +} + +.ansi-bright-black-fg { + color: $foreground !important; +} + +::selection { + color: $links-hover; + background: $background-nav; +} + + +.tooltip { + --bs-tooltip-color: $black !important; + --bs-tooltip-bg: $white !important; +} + +.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item * { + color: white !important; +} + +.aa-List li.aa-Item[aria-selected="true"] * { + background-color: #4DB6AC !important; +} + +// Custom Footer Dark Mode +.custom-footer { + background-color: $background-nav !important; + border-top-color: $btn-border-color !important; + color: $text-muted !important; +} + +.custom-footer .footer-grid { + border-bottom-color: $btn-border-color !important; +} + +.custom-footer .footer-column h5 { + color: $foreground !important; +} + +.custom-footer .footer-column a { + color: $text-muted !important; + &:hover { + color: $links-hover !important; + } +} + +.custom-footer .footer-bottom p { + color: $text-muted !important; +} + +.custom-footer .footer-bottom a { + color: $links !important; + border-bottom-color: $btn-border-color !important; + &:hover { + color: $links-hover !important; + border-bottom-color: $links-hover !important; + } +} + +.custom-footer .brands-light-mode-logo { + display: none !important; +} + +.custom-footer .brands-dark-mode-logo { + display: inline !important; +} + +.footer-source-link { + color: $text-muted !important; + &:hover { + color: $links-hover !important; + } +} \ No newline at end of file diff --git a/theming/rules/_dropdowns.scss b/theming/rules/_dropdowns.scss new file mode 100644 index 000000000..dd9fb0875 --- /dev/null +++ b/theming/rules/_dropdowns.scss @@ -0,0 +1,18 @@ +.dropdown-menu { + background-color: $navbar-bg; + border-color: $btn-border-color; + border-radius: $border-radius-sm; + scrollbar-width: none; +} + +.dropdown-item { + color: $text-muted; + padding: 0.5rem 1.5rem; + transition: all 0.2s ease; + + &:hover, + &:focus { + color: $links-hover; + background-color: if(lightness($navbar-bg) > 50, darken($navbar-bg, 4%), lighten($navbar-bg, 4%)); + } +} diff --git a/theming/rules/_footer.scss b/theming/rules/_footer.scss new file mode 100644 index 000000000..f503deedb --- /dev/null +++ b/theming/rules/_footer.scss @@ -0,0 +1,195 @@ +.custom-footer { + background-color: $navbar-bg; + color: $text-muted; + font-size: 0.9rem; + padding: 3rem 2rem 2rem; + border-top: 1px solid $btn-border-color; + + .footer-container { + max-width: 1350px; + margin: 0 auto; + } + + .footer-grid { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 2rem; + margin-bottom: 2rem; + padding-bottom: 2rem; + border-bottom: 1px solid $btn-border-color; + } + + .footer-links-wrapper { + display: flex; + flex-wrap: wrap; + gap: 2rem; + flex: 2 1 400px; + } + + .footer-column { + flex: 1 1 auto; + + h5 { + font-weight: 600; + color: $panel-bg; + margin-bottom: 1.25rem; + font-size: 0.9rem; + text-transform: uppercase; + letter-spacing: 0.08em; + } + + a { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 0.75rem; + color: $text-muted; + text-decoration: none; + transition: color 0.2s ease; + + &:hover { + color: $links-hover; + text-decoration: none; + } + + i { + font-size: 1.1rem; + line-height: 1; + width: 20px; + text-align: center; + } + } + } + + .footer-brands { + flex: 1 1 320px; + + p { + font-size: 0.9rem; + line-height: 1.6; + margin-top: -0.5rem; + margin-bottom: 1.5rem; + } + + .logo-grid { + display: flex; + gap: 2rem; + align-items: center; + } + } + + .partner-logo { + flex: 1; + + img { + max-width: 100%; + height: 50px; + object-fit: contain; + transition: transform 0.2s ease; + } + + &:hover img { + transform: scale(1.05); + } + } + + .footer-bottom { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.85rem; + flex-wrap: wrap; + gap: 1rem; + + p { + margin: 0; + line-height: 1.6; + } + + a { + color: $links; + font-weight: 500; + text-decoration: none; + border-bottom: 1px solid $btn-border-color; + &:hover { + border-bottom-color: $links-hover; + } + } + } + + .footer-source-link { + display: flex; + align-items: center; + gap: 0.5rem; + } + + .brands-light-mode-logo { + display: inline; + } + + .brands-dark-mode-logo { + display: none; + } +} + +@media (max-width: 992px) { + .custom-footer { + .footer-links-wrapper { + flex-basis: 100%; + justify-content: center; + } + + .footer-grid { + justify-content: center; + } + + .footer-brands { + flex-grow: 0; + text-align: center; + + .logo-grid { + justify-content: center; + } + } + + .footer-column { + flex-grow: 0; + } + } +} + +@media (max-width: 768px) { + .custom-footer .footer-bottom { + flex-direction: column; + gap: 1.5rem; + text-align: center; + } +} + +@media (max-width: 576px) { + .custom-footer { + .footer-links-wrapper { + flex-direction: column; + text-align: center; + align-items: center; + } + .footer-column { + width: 100%; + max-width: 350px; + a { + justify-content: center; + } + } + .footer-brands .logo-grid { + flex-direction: column; + gap: 1.5rem; + align-items: center; + } + .partner-logo { + flex-basis: auto; + width: 100%; + max-width: 220px; + } + } +} diff --git a/theming/rules/_quarto-tweaks.scss b/theming/rules/_quarto-tweaks.scss new file mode 100644 index 000000000..d1be094a2 --- /dev/null +++ b/theming/rules/_quarto-tweaks.scss @@ -0,0 +1,112 @@ +h1, h2, h3, h4, h5, h6 { + color: $text-color !important; +} + +p, li { + color: $text-muted !important; +} + +a { + color: $links; + &:hover { + color: $links-hover !important; + } +} + +.quarto-container, +nav.sidebar.sidebar-navigation:not(.rollup) { + background-color: $sidebar-bg; +} + +.navbar { + background-color: $navbar-bg; + a:hover { + text-decoration: none; + } +} + +.cell-output { + border: $border-width dashed; +} + +div.sourceCode, +pre, +.cell { + background-color: $code-block-bg !important; +} + +code { + background-color: $code-block-bg !important; + color: $links; +} + +// Ensure pre-formatted text and the code within it have the correct colors +pre { + color: $text-color !important; + code { + color: inherit !important; // Inherit color from the
 tag
+    }
+}
+
+.cell-bg {
+    background-color: #f1f3f5;
+}
+
+.cell-output-stdout code {
+    word-break: break-word !important;
+    white-space: pre-wrap !important;
+}
+
+.cell-output-display {
+    svg {
+        height: fit-content;
+        width: fit-content;
+        &.mermaid-js {
+            width: 100%;
+        }
+    }
+    img {
+        max-width: 100%;
+        max-height: 100%;
+        object-fit: contain;
+    }
+}
+
+.footer {
+    display: none;
+}
+
+.nav-footer-center {
+    display: flex;
+    justify-content: center;
+}
+
+.dropdown-menu {
+    text-align: center;
+    min-width: 100px !important;
+    border-radius: 5px;
+    max-height: 250px;
+    overflow: scroll;
+}
+
+.menu-text:hover {
+    color: $links-hover !important;
+}
+
+.quarto-title-breadcrumbs .breadcrumb li:last-of-type a {
+    color: $text-muted !important;
+}
+
+.ansi-bright-black-fg {
+    color: $text-color !important;
+}
+
+::selection {
+    color: $links-hover;
+    background: $navbar-bg;
+}
+
+.tooltip {
+    --bs-tooltip-color: $black !important;
+    --bs-tooltip-bg: $white !important;
+}
diff --git a/theming/rules/_search.scss b/theming/rules/_search.scss
new file mode 100644
index 000000000..a949c1ce2
--- /dev/null
+++ b/theming/rules/_search.scss
@@ -0,0 +1,69 @@
+.aa-DetachedOverlay {
+  background-color: rgba($background-body, 0.95);
+  
+  .aa-Form {
+    border: none;
+    background-color: transparent;
+  }
+  
+  .aa-Input {
+    color: $text-color;
+    background-color: transparent;
+  }
+  
+  .aa-SubmitIcon, .aa-ClearIcon, .aa-LoadingIcon {
+    color: $text-muted;
+  }
+  
+  .aa-DetachedCancelButton {
+    color: $links;
+    background-color: transparent;
+    &:hover {
+      color: $links-hover;
+    }
+  }
+
+  .aa-Panel {
+    background-color: $background-body;
+  }
+
+  .search-result-header {
+    color: $text-color;
+    font-weight: 600;
+  }
+
+  .search-result-title {
+    color: $text-color;
+  }
+
+  .search-result-section {
+    color: $links;
+  }
+  
+  .search-result-text {
+    color: $text-muted;
+  }
+  
+  .search-match {
+    color: $links-hover;
+    background-color: transparent;
+    font-weight: 600;
+  }
+  
+  .aa-Item[aria-selected="true"] {
+    .search-item * {
+        color: $white !important;
+    }
+
+    .search-item {
+        .search-result-section, .search-match {
+            color: lighten($links, 30%) !important;
+        }
+    }
+  }
+  
+  .search-result-more {
+    color: $links;
+    font-weight: 500;
+  }
+}
diff --git a/theming/styles.css b/theming/styles.css
deleted file mode 100755
index c670e42aa..000000000
--- a/theming/styles.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.navbar a:hover {
-    text-decoration: none;
-}
-
-.cell-output {
-    border: 1px dashed;
-}
-
-.cell-bg {
-    background-color: #f1f3f5;
-}
-
-.cell-output-stdout code {
-    word-break: break-wor !important;
-    white-space: pre-wrap !important;
-}
-
-.cell-output-display svg {
-    height: fit-content;
-    width: fit-content;
-
-    &.mermaid-js {
-        /* fit-content for mermaid diagrams makes them really small, so we
-         * default to 100% */
-        width: 100%;
-    }
-}
-
-.cell-output-display img {
-    max-width: 100%;
-    max-height: 100%;
-    object-fit: contain;
-}
-
-.nav-footer-center {
-    display: flex;
-    justify-content: center;
-}
-
-.dropdown-menu {
-    text-align: center;
-    min-width: 100px !important;
-    border-radius: 5px;
-    max-height: 250px;
-    overflow: scroll;
-}
diff --git a/theming/theme-dark.scss b/theming/theme-dark.scss
index a3fb0cd90..5bf9838c5 100644
--- a/theming/theme-dark.scss
+++ b/theming/theme-dark.scss
@@ -1,137 +1,19 @@
 /*-- scss:defaults --*/
-// Cosmo 5.3.3
-// Bootswatch
-
-$theme: "cosmo" !default;
-
-// Manually-added colors
-
-$background-nav: #192222;
-$background-body: #131818;
-$foreground: #1bb3ac;
-$links:#2aa198;
-$links-hover: #31dce6;
-$code-background-color: #172424;
-$li: #bcbcbc;
-
-// Quarto default colors
-
-$white:    #ffffff !default;
-$gray-100: #f8f9fa !default;
-$gray-200: #e9ecef !default;
-$gray-300: #dee2e6 !default;
-$gray-400: #ced4da !default;
-$gray-500: #adb5bd !default;
-$gray-600: #868e96 !default;
-$gray-700: #495057 !default;
-$gray-800: #373a3c !default;
-$gray-900: #212529 !default;
-$black:    #000000 !default;
-
-$indigo:  #6610f2 !default;
-$purple:  #613d7c !default;
-$pink:    #e83e8c !default;
-$red:     #ff0039 !default;
-$orange:  #f0ad4e !default;
-$yellow:  #ff7518 !default;
-$green:   #3fb618 !default;
-$teal:    #20c997 !default;
-$cyan:    #9954bb !default;
-
-$primary:       $links-hover !default;
-$secondary:     $gray-800 !default;
-$success:       $green !default;
-$info:          $cyan !default;
-$warning:       $yellow !default;
-$danger:        $red !default;
-$light:         $gray-100 !default;
-$dark:          $gray-800 !default;
-
-$min-contrast-ratio:   2.6 !default;
-
-// Options
-
-$enable-rounded: false !default;
-
-// Fonts
-
-// stylelint-disable-next-line value-keyword-case
-$font-family-sans-serif:    "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
-$headings-font-weight:      400 !default;
-
-// Tables
-
-$table-color:               initial !default;
-
-// Alerts
-
-$alert-border-width:            0 !default;
-
-// Progress bars
-
-$progress-height:               .5rem !default;
-
-
-// Custom tweaks for Quarto-Cosmo 
-
-$navbar-bg: $background-nav;
-$navbar-fg: $foreground;
-$footer-bg: $background-nav;
-$footer-fg: $foreground;
-$body-color: $white;
-$body-bg: $background-body;
-
-a, pre code {
-    color: $links !important;
-}
-
-pre {
-    color: $foreground !important;
-}
-a:hover {
-    color: $links-hover !important;
-}
-
-code, p code, ol code, li code, h1 code {
-    background-color: $code-background-color !important;
-    color: $links;
-}
-
-.cell, .anchored code {
-    background-color: $code-background-color !important;
-    color: $links;
-}
-
-div.sourceCode {
-    background-color: $code-background-color !important;
-}
-
-li {
-    color: $li !important;
-}
-
-.menu-text:hover {   
-    color: $links-hover !important;
-}
-
-p {
-    color: $li !important;
-}
-
-.quarto-title-breadcrumbs .breadcrumb li:last-of-type a {
-    color: #6c757d !important;
-}
-
-.ansi-bright-black-fg{
-    color: $foreground !important;
-}
-::selection {
-    color: $links-hover;
-    background: $background-nav;
-}
-
-
-.tooltip {
-    --bs-tooltip-color: $black !important;
-    --bs-tooltip-bg: $white !important;
-}
+@import "variables/colors-dark";
+@import "variables/borders";
+
+/*-- scss:rules --*/
+@import "rules/search";
+@import "rules/quarto-tweaks";
+@import "rules/footer";
+@import "rules/dropdowns"; 
+
+.custom-footer {
+    .brands-light-mode-logo {
+        display: none !important;
+    }
+
+    .brands-dark-mode-logo {
+        display: inline !important;
+    }
+}
\ No newline at end of file
diff --git a/theming/theme-light.scss b/theming/theme-light.scss
new file mode 100644
index 000000000..8aac56b78
--- /dev/null
+++ b/theming/theme-light.scss
@@ -0,0 +1,19 @@
+/*-- scss:defaults --*/
+@import "variables/colors-light";
+@import "variables/borders";
+
+/*-- scss:rules --*/
+@import "rules/search";
+@import "rules/quarto-tweaks";
+@import "rules/footer";
+@import "rules/dropdowns";
+
+.custom-footer {
+    .brands-light-mode-logo {
+        display: inline !important;
+    }
+
+    .brands-dark-mode-logo {
+        display: none !important;
+    }
+}
\ No newline at end of file
diff --git a/theming/variables/_borders.scss b/theming/variables/_borders.scss
new file mode 100644
index 000000000..58953a789
--- /dev/null
+++ b/theming/variables/_borders.scss
@@ -0,0 +1,2 @@
+$border-radius-sm: 0.5rem;
+$border-width: 1px;
diff --git a/theming/variables/_colors-dark.scss b/theming/variables/_colors-dark.scss
new file mode 100644
index 000000000..91681628c
--- /dev/null
+++ b/theming/variables/_colors-dark.scss
@@ -0,0 +1,27 @@
+@import "grays";
+
+$primary: #34b8bf;
+$teal-link: #34b8bf;
+
+$links: $teal-link;
+$links-hover: lighten($links, 10%);
+
+$code-block-bg: #212529;
+$code-background-color: #172424;
+
+$panel-bg: $gray-900;
+
+$background-body: #1c2128;
+
+$body-bg: $background-body;
+$navbar-bg: lighten($background-body, 2%);
+$navbar-color: $white;
+
+$btn-border-color: $gray-700;
+
+$text-color: $white;
+$text-muted: $gray-500;
+
+$body-color: $white;
+$navbar-fg: $white;
+$footer-fg: $white;
diff --git a/theming/variables/_colors-light.scss b/theming/variables/_colors-light.scss
new file mode 100644
index 000000000..72ac11cef
--- /dev/null
+++ b/theming/variables/_colors-light.scss
@@ -0,0 +1,21 @@
+@import "grays";
+
+$primary: #2780e3;
+$teal-link: #34b8bf;
+
+$links: $teal-link;
+$links-hover: lighten($links, 10%);
+
+$code-block-bg: #f1f3f5; 
+$panel-bg: $white;
+
+$background-body: $gray-100;
+
+$text-color: $gray-700;
+$text-muted: $gray-600;
+
+$btn-border-color: $gray-200;
+$body-bg: $background-body;
+$navbar-bg: $white;
+$navbar-color: $text-muted;
+
diff --git a/theming/variables/_grays.scss b/theming/variables/_grays.scss
new file mode 100644
index 000000000..4284ed369
--- /dev/null
+++ b/theming/variables/_grays.scss
@@ -0,0 +1,11 @@
+$white:    #ffffff !default;
+$gray-100: #f8f9fa !default;
+$gray-200: #e9ecef !default;
+$gray-300: #dee2e6 !default;
+$gray-400: #ced4da !default;
+$gray-500: #adb5bd !default;
+$gray-600: #868e96 !default;
+$gray-700: #495057 !default;
+$gray-800: #373a3c !default;
+$gray-900: #212529 !default;
+$black:    #000000 !default;