diff --git a/.gitignore b/.gitignore
index 860f5e90c..a307529d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,20 @@
-
+*.tmp
+*.aux
+*.log
+*.out
+*.tex
+Testing/
+/*/*/jl_*/
+.vscode
+_freeze
+_site
+.quarto
/.quarto/
-_site/
\ No newline at end of file
+.venv
+venv
+
+404.html
+site_libs
+.DS_Store
+index_files
+digest.txt
\ No newline at end of file
diff --git a/_includes/card-listing.ejs b/_includes/card-listing.ejs
new file mode 100644
index 000000000..6565a97b8
--- /dev/null
+++ b/_includes/card-listing.ejs
@@ -0,0 +1,52 @@
+```{=html}
+
+```
\ No newline at end of file
diff --git a/_includes/citation/cite.qmd b/_includes/citation/cite.qmd
new file mode 100644
index 000000000..cdad06b7c
--- /dev/null
+++ b/_includes/citation/cite.qmd
@@ -0,0 +1,223 @@
+
+
+```{=html}
+
+
Turing.jl is an MIT
Licensed Open Source Project
+
If you use Turing.jl in your research, please consider citing our papers.
+
+
+
+
+
+
+
+```
\ No newline at end of file
diff --git a/_includes/featured-tutorials.yml b/_includes/featured-tutorials.yml
new file mode 100644
index 000000000..b78a8148a
--- /dev/null
+++ b/_includes/featured-tutorials.yml
@@ -0,0 +1,20 @@
+- title: "Get Started with Turing.jl"
+ href: "https://turinglang.org/docs/getting-started/"
+ description: "Our step-by-step tutorials will guide you from installation to your first probabilistic models."
+ category:
+ - "Basics"
+ - "Getting Started"
+
+- title: "Introduction: Coin Flipping"
+ href: "https://turinglang.org/docs/tutorials/coin-flipping/"
+ description: "Learn the basic concepts of Bayesian modeling by working through a simple coin-flipping example."
+ category:
+ - "Basics"
+ - "Modeling"
+
+- title: "Core Functionality"
+ href: "https://turinglang.org/docs/core-functionality/"
+ description: "This article provides an overview of the core functionality in Turing.jl, which are likely to be used across a wide range of models."
+ category:
+ - "Basics"
+ - "Features"
diff --git a/_includes/header.qmd b/_includes/header.qmd
new file mode 100644
index 000000000..2c619c18a
--- /dev/null
+++ b/_includes/header.qmd
@@ -0,0 +1,13 @@
+```{=html}
+
+
+
+
+
Bayesian inference with probabilistic programming
+
+
+
+```
\ No newline at end of file
diff --git a/_quarto.yml b/_quarto.yml
index 16db4adaa..867100723 100644
--- a/_quarto.yml
+++ b/_quarto.yml
@@ -1,7 +1,7 @@
project:
type: website
preview:
- # Change port if it's busy in your system or just remove this line so that It will automatically use any free port
+ # Change port if it's busy in your system or just comment below line so that It will automatically use any free port
port: 4200
browser: true
@@ -15,10 +15,8 @@ website:
location: navbar
type: overlay
navbar:
- logo: "assets/images/turing-logo.svg"
- logo-href: https://turinglang.org/
- background: "#073c44"
- foreground: "#ffffff"
+ logo: "assets/logo/turing-logo.svg"
+ # logo-href: https://turinglang.org/ -- Keep this commented so clicking on logo in dev mode doesn't redirect to the site
left:
- text: Get Started
href: https://turinglang.org/docs/getting-started/
@@ -37,33 +35,19 @@ website:
- icon: github
text: Turing GitHub
href: https://github.com/TuringLang
-
- 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/turinglang.github.io/
- repo-actions: [edit, issue]
+ # repo-actions: [edit, issue]
repo-link-target: _blank
page-navigation: true
format:
html:
theme:
- light: cosmo
+ light: [cosmo, theming/theme-light.scss]
dark: [cosmo, theming/theme-dark.scss]
- css: theming/styles.css
+ highlight-style: github
toc: true
smooth-scroll: true
code-overflow: wrap
@@ -79,6 +63,52 @@ format:
"url" : "https://turinglang.org/",
}
+ include-after-body:
+ - text: |
+
# Global Variables to use in any qmd files using:
# {{< meta site-url >}}
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/assets/images/team/shravan-goswami.jpeg b/assets/images/team/shravan-goswami.jpeg
deleted file mode 100644
index 822215e4c..000000000
Binary files a/assets/images/team/shravan-goswami.jpeg and /dev/null differ
diff --git a/assets/images/team/shravan-goswami.jpg b/assets/images/team/shravan-goswami.jpg
new file mode 100644
index 000000000..49091c070
Binary files /dev/null and b/assets/images/team/shravan-goswami.jpg differ
diff --git a/assets/logo/turing-logo-dark.svg b/assets/logo/turing-logo-dark.svg
new file mode 100644
index 000000000..87dab0a03
--- /dev/null
+++ b/assets/logo/turing-logo-dark.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/logo/turing-logo-light.svg b/assets/logo/turing-logo-light.svg
new file mode 100644
index 000000000..d787e8b11
--- /dev/null
+++ b/assets/logo/turing-logo-light.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/images/turing-logo-wide.svg b/assets/logo/turing-logo-wide.svg
similarity index 100%
rename from assets/images/turing-logo-wide.svg
rename to assets/logo/turing-logo-wide.svg
diff --git a/assets/images/turing-logo.svg b/assets/logo/turing-logo.svg
similarity index 100%
rename from assets/images/turing-logo.svg
rename to assets/logo/turing-logo.svg
diff --git a/assets/logo/turing-text-logo.svg b/assets/logo/turing-text-logo.svg
new file mode 100644
index 000000000..d787e8b11
--- /dev/null
+++ b/assets/logo/turing-text-logo.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/index.qmd b/index.qmd
index d2bf8a679..00c9d11d3 100644
--- a/index.qmd
+++ b/index.qmd
@@ -1,55 +1,275 @@
---
-# pagetitle: "Turing"
+pagetitle: The Turing Language
toc: false
page-layout: custom
section-divs: false
hide-description: true
description: |
Turing.jl is a probabilistic programming language and Bayesian modelling framework for the Julia programming language.
+listing:
+ - id: news-and-updates
+ contents: "news/posts/*/index.qmd"
+ template: _includes/card-listing.ejs
+ sort: "date desc"
+ max-items: 6
+ include:
+ on_landing: true
+ - id: featured-tutorials
+ contents:
+ - "./_includes/featured-tutorials.yml"
+ template: _includes/card-listing.ejs
+ max-items: 6
---
-::: {.hero-banner}
-::: {.grid}
-::: {.g-col-1}
+:::::: {.side-space}
+
+
+::: {.logo-header}
+
+{{< include _includes/header.qmd >}}
+
+:::
+
+
+
+:::: {.section-start-space}
+
+### What is Turing.jl?
+Turing.jl is a Julia library for general-purpose probabilistic programming.
+
+::::
+
+::::: {.d-flex .flex-row .flex-wrap .panel-wrapper .gap-4 .section-end-space}
+
+::: {.panel .box}
+##### Expressive {.panel-title .pb-1}
+Turing models are easy to write and communicate, with syntax that is close to the mathematical specification of the model.
+:::
+
+::: {.panel .box}
+##### General-purpose {.panel-title .pb-1}
+Turing supports models with discrete parameters and stochastic control flow.
+:::
+
+::: {.panel .box}
+##### Composable {.panel-title .pb-1}
+Turing is written entirely in Julia, and is interoperable with its powerful ecosystem.
+:::
+
+:::::
+
+
+
+:::: {.section-header .section-start-space}
+
+::: {#start}
+
+### Start Your Journey
+Whether you're new to Bayesian modeling or an experienced researcher, find the resources you need.
+
+:::
+
+```{=html}
+Research Papers on Turing.jl →
+```
+
+::::
+
+::::: {.d-flex .flex-row .flex-wrap .panel-wrapper .gap-4 .section-end-space}
+
+:::: {.panel .box}
+
+::: {style="font-size: 2.5rem; text-align: center;"}
+```{=html}
+🚀
+```
+:::
+
+##### New to Turing? {.panel-title .pb-1 .text-center}
+Begin with the basics. Our step-by-step tutorials will guide you from installation to your first probabilistic models.
+
+::: {.d-flex .flex-column .align-items-center .gap-2 .pt-3}
+```{=html}
+Get Started
+Beginner's Walkthrough
+```
+:::
+
+::::
+
+:::: {.panel .box}
+
+::: {style="font-size: 2.5rem; text-align: center;"}
+```{=html}
+🔬
+```
+:::
+
+##### For Researchers {.panel-title .pb-1 .text-center}
+
+Dive into advanced models, explore the rich package ecosystem, and learn how to cite Turing.jl in your work.
+
+::: {.d-flex .flex-column .align-items-center .gap-2 .pt-3}
+
+```{=html}
+Explore Ecosystem
+Cite Turing.jl
+```
+
+:::
+
+::::
+
+:::: {.panel .box}
+
+::: {style="font-size: 2.5rem; text-align: center;"}
+```{=html}
+💻
+```
+:::
+
+##### For Developers {.panel-title .pb-1 .text-center}
+
+Join our community, contribute to the project on GitHub, and connect with fellow developers on Slack.
+
+::: {.d-flex .flex-column .align-items-center .gap-2 .pt-3}
+
+```{=html}
+View on GitHub
+Join the Slack Channel
+```
:::
-::: {.g-col-8}
-# Turing.jl: Bayesian inference with probabilistic programming.
+::::
+
+:::::
-### Intuitive
-Turing models are easy to write and communicate — syntax is close to mathematical notations.
+::: {.mobile-only-button-container}
+```{=html}
+Research Papers on Turing.jl →
+```
+:::
+
-### General-purpose
-Turing supports models with discrete parameters and stochastic control flow.
+
+:::: {.section-header .section-start-space}
-### Modular and composable
-Turing is modular, written entirely in Julia, and is interoperable with the powerful Julia ecosystem.
+::: {#core-packages-header-content}
+### Core Packages {#core-packages}
+The Turing ecosystem is built on a foundation of powerful, composable packages.
-::: {.hero-buttons style="position: relative; display: flex; justify-content: center;"}
-[Get Started]({{< meta get-started >}}){.btn-action-primary .btn-action .btn .btn-lg role="button" style="background-color: #073c44; color: white"}
:::
-::: {.g-col-3}
+```{=html}
+Explore Ecosystem →
+```
+
+::::
+
+::::: {.core-packages-grid .section-end-space}
+
+::: {.package-card .box #core-card}
+
+##### [DynamicPPL.jl ](https://turinglang.org/DynamicPPL.jl/){.panel-title}
+
+A domain-specific language and backend for probabilistic programming languages, used by [Turing.jl.](https://github.com/TuringLang/Turing.jl)
+
:::
+
+::: {.package-card .box #core-card}
+
+##### [JuliaBUGS.jl ](https://turinglang.org/JuliaBUGS.jl/){.panel-title}
+
+A modern implementation of the [BUGS](https://en.wikipedia.org/wiki/Bayesian_inference_using_Gibbs_sampling) probabilistic programming language in Julia.
+
:::
+
+::: {.package-card .box #core-card}
+
+##### [TuringGLM.jl ](https://turinglang.org/TuringGLM.jl/){.panel-title}
+
+Bayesian Generalized Linear models using [`@formula`](https://turinglang.org/TuringGLM.jl/stable/#@formula) syntax and returns an instantiated [Turing](https://github.com/TuringLang/Turing.jl) model.
+
:::
+
+::: {.package-card .box #core-card}
+
+##### [AdvancedHMC.jl ](https://turinglang.org/AdvancedHMC.jl/){.panel-title}
+
+A robust, modular and efficient implementation of advanced HMC algorithms. ([abs](https://proceedings.mlr.press/v118/xu20a.html), [pdf](https://proceedings.mlr.press/v118/xu20a/xu20a.pdf))
+
:::
-::: {style="position: relative; display: flex; justify-content: center;"}
-::: {.grid}
-::: {.g-col-1}
+:::::
+
+::: {.mobile-only-button-container}
+```{=html}
+Explore Ecosystem →
+```
:::
-::: {.g-col-8}
-## Community Resources
+
-The Turing.jl [discourse forum](https://discourse.julialang.org/c/domain/probprog) provides support and discussion for all user levels.
-The [Turing.jl documentation]({{< meta get-started >}}) and [official tutorials]({{< meta tutorials-intro >}}) help users learn and use Turing.jl!
-There's also a [tutorial in Bayesian Statistics using Julia and Turing.jl](https://storopoli.io/Bayesian-Julia).
+
+
+:::: {.section-header .section-start-space}
+
+::: {#news}
+
+### News & Updates {#news-updates}
+
+Read the latest from the Turing team.
+
+:::
+
+```{=html}
+View more →
+```
+::::
+
+::: {#news-and-updates}
+:::
+
+::: {.mobile-only-button-container}
+```{=html}
+View more →
+```
+:::
+
+
+
+
+::: {.section-header .section-start-space}
+
+::: {#tutorials}
+
+### Featured Tutorials {#featured-tutorials}
+
+A selection of tutorials to get you started.
:::
-::: {.g-col-3}
+```{=html}
+View all tutorials →
+```
:::
+
+::: {#featured-tutorials}
:::
+
+::: {.mobile-only-button-container}
+```{=html}
+View all tutorials →
+```
:::
+
+
+
+
+
+{{< include _includes/citation/cite.qmd >}}
+
+
+
+
+::::::
diff --git a/library/index.qmd b/library/index.qmd
index f6cc00435..c13947309 100644
--- a/library/index.qmd
+++ b/library/index.qmd
@@ -2,59 +2,6 @@
title: "Turing Libraries"
search: false
toc: false
-include-in-header:
- - text: |
-
-
-
listing:
- id: libraries-main
template: table.ejs
diff --git a/news/index.qmd b/news/index.qmd
index 3b1d47dc4..5bce7790a 100644
--- a/news/index.qmd
+++ b/news/index.qmd
@@ -10,7 +10,7 @@ listing:
categories: true
feed: true
page-layout: full
-title-block-banner: "#EDF3F9"
+title-block-banner: true
title-block-banner-color: "black"
search: false
---
\ No newline at end of file
diff --git a/news/news.css b/news/news.css
index 07eb7337f..06d220ed0 100644
--- a/news/news.css
+++ b/news/news.css
@@ -8,28 +8,4 @@
.quarto-post {
max-height:fit-content;
-}
-
-/* @media (max-width: 768px) {
- .quarto-post {
- max-height: 200px;
- }
-}
-
-@media (max-width: 566px) {
- .quarto-post {
- max-height: 240px;
- }
-}
-
-@media (max-width: 512px) and (min-width: 310px) {
- .quarto-post {
- max-height: 260px;
- }
-}
-
-@media (max-width: 310px) {
- .quarto-post {
- max-height: 300px;
- }
-} */
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/news/posts/2019-12-14-initial-post/index.qmd b/news/posts/2019-12-14-initial-post/index.qmd
index 36b7858c0..2b13f5341 100644
--- a/news/posts/2019-12-14-initial-post/index.qmd
+++ b/news/posts/2019-12-14-initial-post/index.qmd
@@ -11,6 +11,7 @@ author:
affiliation:
- name: University of Oregon
date: 12/14/2019
+on_landing: true
---
All good open source projects should have a blog, and Turing is one such project. Later on, members of the Turing team may be populating this feed with posts on topics like
diff --git a/news/posts/2020-05-04-Imperial-Report13-analysis/index.qmd b/news/posts/2020-05-04-Imperial-Report13-analysis/index.qmd
index 865c91099..f281a24e6 100644
--- a/news/posts/2020-05-04-Imperial-Report13-analysis/index.qmd
+++ b/news/posts/2020-05-04-Imperial-Report13-analysis/index.qmd
@@ -45,6 +45,7 @@ include-in-header:
- text: |
resources: data/*
+on_landing: true
---
The Turing.jl team is currently exploring possibilities in an attempt to help with the ongoing SARS-CoV-2 crisis. As preparation for this and to get our feet wet, we decided to perform a replication study of the [Imperial Report 13](https://www.imperial.ac.uk/mrc-global-infectious-disease-analysis/covid-19/report-13-europe-npi-impact/), which attempts to estimate the real number of infections and impact of non-pharmaceutical interventions on COVID-19. In the report, the inference was performed using the probabilistic programming language (PPL) Stan. We have explicated their model and inference in Turing.jl, a Julia-based PPL. We believe the results and analysis of our study are relevant for the public, and for other researchers who are actively working on epidemiological models. To that end, our implementation and results are available [here](https://github.com/cambridge-mlg/Covid19).
diff --git a/news/posts/2022-02-17-gsoc/index.qmd b/news/posts/2022-02-17-gsoc/index.qmd
index 5dcd040f0..0ea20869c 100644
--- a/news/posts/2022-02-17-gsoc/index.qmd
+++ b/news/posts/2022-02-17-gsoc/index.qmd
@@ -13,6 +13,7 @@ author:
- name: the TuringLang team
url: /team/
date: 02/17/2022
+on_landing: true
---
It is another year of the [Google Summer of Code](https://summerofcode.withgoogle.com/) time, and we have compiled an updated list of exciting Turing projects!
diff --git a/news/posts/2025-06-20-newsletter-9/index.qmd b/news/posts/2025-06-20-newsletter-9/index.qmd
index 73b491c0e..69b6feae9 100644
--- a/news/posts/2025-06-20-newsletter-9/index.qmd
+++ b/news/posts/2025-06-20-newsletter-9/index.qmd
@@ -7,6 +7,7 @@ author:
- name: The TuringLang team
url: /team/
date: 2025-06-20
+on_landing: true
---
**Google Summer of Code**
diff --git a/news/posts/2025-07-11-newsletter-10/index.qmd b/news/posts/2025-07-11-newsletter-10/index.qmd
index bcc290603..4a605f219 100644
--- a/news/posts/2025-07-11-newsletter-10/index.qmd
+++ b/news/posts/2025-07-11-newsletter-10/index.qmd
@@ -7,6 +7,7 @@ author:
- name: The TuringLang team
url: /team/
date: 2025-07-11
+on_landing: true
---
**LKJCholesky**
diff --git a/team/team.css b/team/team.css
index 5bb698fd1..7c3637e40 100644
--- a/team/team.css
+++ b/team/team.css
@@ -6,7 +6,7 @@ a {
.team-member {
display: flex;
align-items: center;
- background-color: #f8f9fa;
+ background-color: #e9ecef; /*gray-200, same as $color-mute-bg */
border-radius: 0.5rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
margin-bottom: 2rem;
diff --git a/team/team.ejs b/team/team.ejs
index 65e852daf..46a0dabc3 100644
--- a/team/team.ejs
+++ b/team/team.ejs
@@ -64,12 +64,8 @@
<% } %>
<% if (member.gsoc_report) { %>
- Contributions & Report
-
-
+ Contributions & Report
+
<% } %>
```
diff --git a/team/team.yml b/team/team.yml
index df54459a1..b05850161 100644
--- a/team/team.yml
+++ b/team/team.yml
@@ -208,7 +208,7 @@
- mail: markus@mhauru.org
- name: Shravan Goswami
- image: shravan-goswami.jpeg
+ image: shravan-goswami.jpg
university: Uka Tarsadia University
links:
- website: https://shravangoswami.com/
diff --git a/theming/rules/_citations.scss b/theming/rules/_citations.scss
new file mode 100644
index 000000000..661035265
--- /dev/null
+++ b/theming/rules/_citations.scss
@@ -0,0 +1,48 @@
+.citation-container {
+ margin: auto;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+}
+
+.citation-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
+
+.citation-entry {
+ padding: 1.5rem !important;
+ margin-bottom: 0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 1rem;
+}
+
+.citation-content {
+ flex-grow: 1;
+}
+
+.citation-text {
+ font-size: 0.95rem;
+ line-height: 1.6;
+ color: $text-muted;
+ margin: 0;
+
+ em {
+ font-style: italic;
+ }
+}
+
+.citation-title {
+ font-weight: 600;
+ color: $text-color;
+}
+
+.citation-actions {
+ display: flex;
+ gap: 0.5rem;
+ flex-shrink: 0;
+}
diff --git a/theming/rules/_footer.scss b/theming/rules/_footer.scss
new file mode 100644
index 000000000..183b209f0
--- /dev/null
+++ b/theming/rules/_footer.scss
@@ -0,0 +1,127 @@
+/* Custom Footer */
+.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;
+ }
+ }
+ }
+
+ .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-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;
+ }
+ }
+
+ .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;
+}
diff --git a/theming/rules/_forms.scss b/theming/rules/_forms.scss
new file mode 100644
index 000000000..0c6d8c256
--- /dev/null
+++ b/theming/rules/_forms.scss
@@ -0,0 +1,24 @@
+.quarto-listing-sort, .quarto-listing-filter {
+ .input-group-text {
+ background-color: $background-body;
+ border-color: $btn-border-color;
+ color: $text-muted;
+ }
+
+ .form-select, .form-control {
+ background-color: $background-body;
+ border-color: $btn-border-color;
+ color: $text-color;
+
+ &:focus {
+ border-color: $links;
+ box-shadow: 0 0 0 0.25rem rgba($links, 0.25);
+ background-color: $background-body;
+ color: $text-color;
+ }
+ }
+
+ .form-select {
+ background-image: $form-select-bg-image;
+ }
+}
diff --git a/theming/rules/_hoverables-dark.scss b/theming/rules/_hoverables-dark.scss
new file mode 100644
index 000000000..c230633df
--- /dev/null
+++ b/theming/rules/_hoverables-dark.scss
@@ -0,0 +1,182 @@
+.box {
+ border-radius: 12px;
+ padding: 2rem;
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease,
+ background-color 0.3s ease,
+ border-color 0.3s ease;
+ box-shadow: 0 5px 20px darken($box-shadow-color, 30%);
+ background-color: $panel-bg;
+ border: 1px solid $btn-border-color;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 8px 25px darken($box-shadow-color, 50%); // intended is rgba(0, 0, 0, 0.08)
+ border-color: transparent;
+ }
+
+ &--splash {
+ background-color: lighten($teal, 15%); // #eef7f7 intended
+ }
+
+ code {
+ background-color: lighten($code-block-bg, 5%) !important;
+ }
+}
+
+.button {
+ display: inline-block;
+ padding: 10px 24px;
+ border-radius: 50px;
+ font-weight: 600;
+ text-align: center;
+ cursor: pointer;
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease;
+ text-decoration: none;
+ border-style: solid;
+ border-width: 2px;
+ background-color: $panel-bg;
+ border-color: $btn-border-color;
+ color: $text-color;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px darken($box-shadow-color, 50%);
+ text-decoration: none;
+ color: $white !important;
+ border-color: transparent;
+ }
+
+ &--fill {
+ background-color: $teal;
+ border-color: transparent;
+ color: $white !important;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px darken($box-shadow-color, 50%);
+ text-decoration: none;
+ border-color: lighten($teal, 15%);
+ background-color: darken($teal, 5%);
+ }
+ }
+}
+
+.card {
+ border: 2px solid $btn-border-color;
+ color: $text-color;
+
+ &:hover {
+ background-color: lighten($panel-bg, 10%);
+ border-color: transparent;
+ }
+
+ .card-title {
+ color: $text-color;
+ }
+
+ .card-text {
+ color: $text-muted;
+ }
+}
+
+/* UNIFIED CARD GRID */
+
+.unified-card {
+ display: flex;
+ flex-direction: column;
+ text-decoration: none;
+ background-color: $panel-bg;
+ border-radius: 12px;
+ padding: 0;
+ overflow: hidden;
+ transition: all 0.3s ease;
+ flex: 1 1 320px;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 10px 30px darken($box-shadow-color, 5%);
+ text-decoration: none;
+ border-color: transparent;
+ position: relative;
+ z-index: 10;
+ }
+}
+
+.turing-license-link code {
+ color: $teal-license !important;
+ text-decoration: none !important;
+
+ &:hover {
+ color: lighten($teal-license, 5%) !important;
+ }
+}
+
+.citation-icon-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ border: 2px solid $btn-border-color;
+ background-color: lighten($panel-bg, 7%);
+ color: $text-muted;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ padding: 0;
+ text-decoration: none;
+
+ svg {
+ width: 16px;
+ height: 16px;
+ fill: currentColor;
+ }
+
+ &:hover {
+ background-color: lighten($panel-bg, 7%);
+ border-color: transparent;
+ color: $teal;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px $box-shadow-color;
+ text-decoration: none;
+ }
+
+ .citation-copied {
+ background-color: $green;
+ border-color: $green;
+ color: $panel-bg;
+ font-size: 1.2rem;
+ font-weight: bold;
+
+ &:hover {
+ background-color: $green;
+ border-color: $green;
+ color: $panel-bg;
+ transform: translateY(0);
+ box-shadow: none;
+ }
+ }
+}
+
+.link-muted {
+ color: $text-muted;
+
+ &:hover {
+ color: $links-hover;
+ text-decoration: underline;
+ }
+}
+
+a {
+ text-decoration: none;
+ color: $links;
+
+ &:hover {
+ text-decoration: underline;
+ color: $links-hover;
+ }
+}
diff --git a/theming/rules/_hoverables-light.scss b/theming/rules/_hoverables-light.scss
new file mode 100644
index 000000000..ddb8a72d1
--- /dev/null
+++ b/theming/rules/_hoverables-light.scss
@@ -0,0 +1,173 @@
+.box {
+ border-radius: 12px;
+ padding: 2rem;
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease,
+ background-color 0.3s ease,
+ border-color 0.3s ease;
+ box-shadow: 0 5px 20px darken($box-shadow-color, 30%);
+ background-color: $panel-bg;
+ border: 1px solid $btn-border-color;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 8px 25px darken($box-shadow-color, 50%);
+ border-color: transparent;
+ }
+
+ &--splash {
+ background-color: lighten($teal, 15%);
+ }
+}
+
+.button {
+ display: inline-block;
+ padding: 10px 24px;
+ border-radius: 50px;
+ font-weight: 600;
+ text-align: center;
+ cursor: pointer;
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease;
+ text-decoration: none;
+ border-style: solid;
+ border-width: 2px;
+ background-color: $panel-bg;
+ border-color: $btn-border-color;
+ color: $text-color;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px darken($box-shadow-color, 50%);
+ border-color: transparent;
+ text-decoration: none;
+ }
+
+ &--fill {
+ background-color: $teal;
+ border-color: darken($teal, 5%);
+ color: $white;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px darken($box-shadow-color, 50%);
+ text-decoration: none;
+ border-color: transparent;
+ }
+ }
+}
+
+.card {
+ border: 2px solid $btn-border-color;
+ color: $text-color;
+
+ &:hover {
+ background-color: lighten($panel-bg, 10%);
+ border-color: transparent;
+ }
+
+ .card-title {
+ color: $text-color;
+ }
+
+ .card-text {
+ color: $text-muted;
+ }
+}
+
+/* UNIFIED CARD GRID */
+
+.unified-card {
+ display: flex;
+ flex-direction: column;
+ text-decoration: none;
+ background-color: $panel-bg;
+ border-radius: 12px;
+ padding: 0;
+ overflow: hidden;
+ transition: all 0.3s ease;
+ flex: 1 1 320px;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 10px 30px darken($box-shadow-color, 5%);
+ text-decoration: none;
+ border-color: transparent;
+ position: relative;
+ z-index: 10;
+ }
+}
+
+.turing-license-link code {
+ color: $teal-license !important;
+ text-decoration: none !important;
+
+ &:hover {
+ color: lighten($teal-license, 5%) !important;
+ }
+}
+
+.citation-icon-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ border: 2px solid $btn-border-color;
+ background-color: lighten($panel-bg, 7%);
+ color: $text-muted;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ padding: 0;
+ text-decoration: none;
+
+ svg {
+ width: 16px;
+ height: 16px;
+ fill: currentColor;
+ }
+
+ &:hover {
+ background-color: lighten($panel-bg, 7%);
+ border-color: transparent;
+ color: $teal;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px $box-shadow-color;
+ text-decoration: none;
+ }
+
+ .citation-copied {
+ background-color: $green;
+ border-color: $green;
+ color: $panel-bg;
+ font-size: 1.2rem;
+ font-weight: bold;
+
+ &:hover {
+ background-color: $green;
+ border-color: $green;
+ color: $panel-bg;
+ transform: translateY(0);
+ box-shadow: none;
+ }
+ }
+}
+
+.link-muted {
+ color: $text-muted;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+a {
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
diff --git a/theming/rules/_layouts.scss b/theming/rules/_layouts.scss
new file mode 100644
index 000000000..c73f81223
--- /dev/null
+++ b/theming/rules/_layouts.scss
@@ -0,0 +1,261 @@
+.hero-section {
+ padding: 4rem 1rem;
+ padding-bottom: 0%;
+ text-align: center;
+}
+
+.hero-content {
+ max-width: 800px;
+ margin: 0 auto 3rem auto;
+}
+
+.hero-logo {
+ max-width: 55%;
+ height: auto;
+ margin-bottom: 1.5rem;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.hero-subtitle {
+ font-size: clamp(1.1rem, 3vw, 1.5rem);
+ color: #34495e;
+ margin-bottom: 2.5rem;
+ max-width: 600px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.hero-cta-buttons {
+ display: flex;
+ justify-content: center;
+ gap: 1rem;
+ flex-wrap: wrap;
+}
+
+// Not hoverable? Maybe have to move? Maybe not.
+.btn-lg {
+ padding: 14px 32px;
+ font-size: 1.1rem;
+}
+
+.section-end-space {
+ padding-bottom: 2rem;
+}
+
+.section-start-space {
+ padding-top: 2rem;
+}
+
+.content-panel {
+ padding: 1.5rem;
+}
+
+.panel {
+ color: $text-muted;
+ font-size: 17px;
+ font-weight: 400;
+ min-height: 150px;
+ min-width: 300px;
+ max-width: 31%;
+
+ /* Does this bit achieve anything? I think it's inherited?
+ p {
+ color: $text-muted;
+ font-size: 17px;
+ font-weight: 400;
+ }
+ */
+
+ .panel-title {
+ color: $text-color !important;
+ font-size: 1.4rem;
+ font-weight: 700;
+ margin-bottom: 1rem;
+ }
+}
+
+.panel-wrapper {
+ justify-content: center;
+}
+
+.navbar {
+ background-color: $navbar-bg;
+
+ .nav-link,
+ .navbar-title,
+ .quarto-navigation-tool {
+ color: $navbar-color !important;
+ transition: color 0.2s ease;
+
+ &:hover {
+ color: $links-hover !important;
+ }
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+}
+
+.section-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ h3 {
+ margin-bottom: 0;
+ }
+}
+
+.side-space {
+ max-width: 1350px;
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 4rem;
+ padding-right: 4rem;
+}
+
+.example-code {
+ flex: 0 1 45%;
+}
+
+.example-text {
+ flex: 0 1 53%;
+}
+
+/* === Core Packages Section === */
+.core-packages-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 1.5rem;
+ justify-content: center;
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.package-card {
+ text-align: left;
+
+ p {
+ margin-bottom: 0%;
+ }
+
+ h5 {
+ text-align: center;
+ }
+
+ .panel-title {
+ color: $text-color;
+ font-weight: 600;
+ font-size: 1.25rem;
+ }
+}
+
+.logo-header {
+ padding: 0%;
+ margin-bottom: 0%;
+}
+
+.mobile-only-button-container {
+ display: none;
+}
+
+// UNIFIED CARD GRID
+.unified-card-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ align-items: stretch;
+ padding: 0 1rem;
+ padding-top: 0.5rem;
+}
+
+.unified-card-body {
+ padding: 1rem;
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ padding-bottom: 0%;
+}
+
+.unified-card-title {
+ font-size: 1.2rem;
+ line-height: 1.4;
+ font-weight: 600;
+ color: $text-color;
+ margin-bottom: 0.75rem;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+
+.unified-card-text {
+ font-size: 0.95rem;
+ line-height: 1.6;
+ color: $text-muted;
+ margin-bottom: 1rem;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ line-clamp: 3;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+
+.unified-card-categories {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin-bottom: 0.75rem;
+}
+
+.category-tag {
+ background-color: $btn-border-color !important;
+ color: $text-muted !important;
+ padding: 0.25rem 0.75rem;
+ border-radius: 20px;
+ font-size: 0.8rem;
+ font-weight: 500;
+ white-space: nowrap;
+}
+
+.unified-card-footer {
+ padding: 1rem 1.5rem;
+ border-top: 1px solid lighten($panel-bg, 7%);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 0.85rem;
+ color: $text-muted;
+ background-color: $background-body;
+}
+
+.unified-card-meta {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ min-width: 0;
+ flex-grow: 1;
+}
+
+.unified-card-author {
+ font-weight: 600;
+ color: $text-color;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.unified-card-date {
+ font-size: 0.8rem;
+ color: $text-muted;
+}
+
+.unified-card-reading-time {
+ font-weight: 600;
+ color: $teal;
+ white-space: nowrap;
+ font-size: 0.8rem;
+}
diff --git a/theming/rules/_library.scss b/theming/rules/_library.scss
new file mode 100644
index 000000000..c5a867620
--- /dev/null
+++ b/theming/rules/_library.scss
@@ -0,0 +1,91 @@
+.packages-table {
+ width: 100%;
+ border-collapse: collapse;
+ background-color: $panel-bg;
+ color: $text-color;
+
+ th,
+ td {
+ padding: 0.75rem 1rem;
+ text-align: left;
+ border-bottom: 1px solid $btn-border-color;
+ }
+
+ thead {
+ background-color: $background-body;
+ }
+
+ tbody tr:nth-child(odd) {
+ background-color: lighten($background-body, 1%);
+ }
+
+ @media (min-width: 769px) {
+ tbody tr:hover {
+ background-color: if(lightness($panel-bg) > 50, darken($panel-bg, 4%), lighten($panel-bg, 5%));
+ }
+ }
+
+ th {
+ font-weight: 600;
+ }
+
+ .badge.deprecated {
+ display: inline-block;
+ margin-left: 0.5em;
+ padding: 0.2em 0.4em;
+ font-size: 0.75em;
+ font-weight: 600;
+ border-radius: 0.2em;
+ color: $deprecated-fg;
+ background-color: $deprecated-bg;
+ }
+}
+
+@media (max-width: 768px) {
+ .packages-table {
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+
+ thead {
+ display: none;
+ }
+
+ tr:nth-child(odd) {
+ background-color: lighten($background-body, 1%);
+ }
+
+ tr {
+ display: block;
+ margin-bottom: 1rem;
+ border: 2px solid $btn-border-color;
+ border-radius: $border-radius-sm;
+ padding: 0.5rem;
+ background-color: $panel-bg;
+ }
+
+ td {
+ display: grid;
+ grid-template-columns: 100px 1fr;
+ gap: 1rem;
+ align-items: center;
+ text-align: left;
+ border-bottom: 1px solid transparent;
+ padding: 0.75rem 0.5rem;
+
+ &::before {
+ content: attr(data-label);
+ font-weight: 600;
+ color: $text-muted;
+ }
+ }
+
+ tr td:last-child {
+ padding-bottom: 0.75rem;
+ }
+
+ tr td:not(:last-child) {
+ border-bottom: 1px solid $btn-border-color;
+ }
+ }
+}
diff --git a/theming/rules/_news.scss b/theming/rules/_news.scss
new file mode 100644
index 000000000..e06be6d70
--- /dev/null
+++ b/theming/rules/_news.scss
@@ -0,0 +1,51 @@
+.quarto-post {
+ padding: 1.25rem 0.5rem;
+ border: none;
+ border-bottom: 1px solid $btn-border-color;
+ border-radius: 0;
+ transition: none;
+
+ &:hover {
+ .listing-title a {
+ color: $links-hover;
+ }
+ }
+}
+
+.listing-title a {
+ text-decoration: none;
+ color: $text-color;
+ transition: color 0.2s ease;
+}
+
+.listing-description p {
+ color: $text-muted;
+}
+
+.metadata a {
+ text-decoration: none;
+ color: inherit;
+}
+
+.listing-category {
+ background-color: $btn-border-color !important;
+ color: $text-muted !important;
+ margin-top: 0.25rem !important;
+ border: none !important;
+ transition: background-color 0.2s ease, color 0.2s ease;
+
+ &:hover {
+ background-color: $links !important;
+ color: $panel-bg !important;
+ }
+}
+
+.quarto-listing-category .category.active {
+ font-weight: bold;
+ color: $links;
+}
+
+.quarto-listing-category .category:not(.active):hover {
+ color: $links-hover;
+ cursor: pointer;
+}
diff --git a/theming/rules/_quarto-tweaks.scss b/theming/rules/_quarto-tweaks.scss
new file mode 100644
index 000000000..d6b335f9c
--- /dev/null
+++ b/theming/rules/_quarto-tweaks.scss
@@ -0,0 +1,54 @@
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ color: $text-color !important;
+ border-bottom-color: $btn-border-color;
+}
+
+p {
+ color: $text-muted !important;
+}
+
+.sourceCode,
+code {
+ background-color: $code-block-bg !important;
+ color: $text-muted !important;
+ border-radius: $border-radius-sm;
+}
+
+.quarto-container {
+ background-color: $background-body;
+}
+
+.cell-output {
+ border: $border-width dashed;
+}
+
+.cell-output-stdout code {
+ word-break: break-word !important;
+ white-space: pre-wrap !important;
+}
+
+.cell-output-display {
+ svg {
+ height: fit-content;
+ width: fit-content;
+ }
+
+ img {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain;
+ }
+}
+
+.quarto-post {
+ border-bottom: 1px solid $btn-border-color !important
+}
+
+.quarto-title-banner {
+ background-color: $navbar-bg !important;
+}
diff --git a/theming/rules/_responsive.scss b/theming/rules/_responsive.scss
new file mode 100644
index 000000000..beac865c3
--- /dev/null
+++ b/theming/rules/_responsive.scss
@@ -0,0 +1,142 @@
+@media (max-width: 1200px) {
+ .core-packages-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@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) {
+ .side-space {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ }
+
+ .section-header {
+ flex-direction: column;
+ align-items: stretch;
+ gap: 1rem;
+ }
+
+ .section-header .desktop-only-button {
+ display: none;
+ }
+
+ .mobile-only-button-container {
+ display: block;
+ margin-top: 0.3rem;
+ text-align: center;
+
+ .button {
+ display: inline-block;
+ width: auto;
+ }
+ }
+
+ .core-packages-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .unified-card {
+ flex-basis: 90%;
+ }
+
+ .unified-card-title {
+ font-size: 1.1rem;
+ }
+
+ .unified-card-text {
+ font-size: 0.9rem;
+ }
+
+ .unified-card-body {
+ padding: 1.25rem;
+ padding-bottom: 0%;
+ }
+
+ .unified-card-footer {
+ padding: 0.75rem 1.25rem;
+ }
+
+ .unified-card-meta {
+ gap: 0.15rem;
+ }
+
+ .citation-entry {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .citation-actions {
+ margin-top: 1rem;
+ align-self: flex-end;
+ }
+
+ .custom-footer .footer-bottom {
+ flex-direction: column;
+ gap: 1.5rem;
+ text-align: center;
+ }
+}
+
+@media (max-width: 576px) {
+ .unified-card-title {
+ font-size: 1rem;
+ }
+
+ .unified-card-text {
+ font-size: 0.85rem;
+ }
+
+ .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;
+ }
+ }
+ .partner-logo {
+ flex-basis: auto;
+ width: 100%;
+ max-width: 220px;
+ }
+
+ .footer-brands .logo-grid {
+ flex-direction: column;
+ gap: 1.5rem;
+ align-items: center;
+ }
+ }
+}
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/rules/_team.scss b/theming/rules/_team.scss
new file mode 100644
index 000000000..dad6e103f
--- /dev/null
+++ b/theming/rules/_team.scss
@@ -0,0 +1,10 @@
+.team-member, .input-group-text {
+ background-color: $navbar-bg !important;
+}
+
+a.gsoc-report svg {
+ width: .6em;
+ height: .6em;
+ margin-left: 3px;
+ transform: translateY(0px)
+}
\ No newline at end of file
diff --git a/theming/styles.css b/theming/styles.css
deleted file mode 100644
index 446151cda..000000000
--- a/theming/styles.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/* css styles */
-/* .cell-output {
- background-color: #f1f3f5;
-} */
-
-/* .cell-output img {
- max-width: 100%;
- height: auto;
-} */
-
-/* .cell-output-display pre {
- word-break: break-wor !important;
- white-space: pre-wrap !important;
-}
- */
-
-.navbar a:hover {
- text-decoration: none;
-}
-
-.cell-output {
- border: 1px dashed;
-}
-
-.cell-output-stdout code {
- word-break: break-wor !important;
- white-space: pre-wrap !important;
-}
-
-
-.cell-output-display svg {
- height: fit-content;
- width: fit-content;
-}
-
-.cell-output-display img {
- max-width: 100%;
- max-height: 100%;
- object-fit: contain;
-}
-
-.nav-footer-center {
- display: flex;
- justify-content: center;
-}
diff --git a/theming/theme-dark.scss b/theming/theme-dark.scss
index 9c4361b91..f54f90524 100644
--- a/theming/theme-dark.scss
+++ b/theming/theme-dark.scss
@@ -1,172 +1,34 @@
/*-- scss:defaults --*/
-// Cosmo 5.3.3
-// Bootswatch
-$theme: "cosmo" !default;
+@import "variables/grays";
+@import "variables/colors-dark";
+@import "variables/borders";
-// Manually-added colors
+/*-- scss:rules --*/
+@import "rules/layouts";
+@import "rules/news";
+@import "rules/team";
+@import "rules/footer";
+@import "rules/citations";
+@import "rules/library";
+@import "rules/search";
+@import "rules/forms";
+@import "rules/quarto-tweaks";
+@import "rules/responsive";
+@import "rules/hoverables-dark";
-$background-nav: #192222;
-$background-body: #131818;
-$foreground: #1bb3ac;
-$foreground-dark: #073c44;
-$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 {
- color: $links !important;
-}
-
-a:hover {
- color: $links-hover !important;
-}
-
-code, p code, li code {
- background-color: $code-background-color !important;
- color: $links;
-}
-
-li {
- color: $li !important;
+.hero-logo-light {
+ display: none;
}
-.menu-text:hover {
- color: $links-hover !important;
+.hero-logo-dark {
+ display: block;
}
-.quarto-title-banner {
- background-color: $foreground-dark !important;
+.custom-footer .brands-light-mode-logo {
+ display: none !important;
}
-.title {
- color: $white !important;
+.custom-footer .brands-dark-mode-logo {
+ display: inline !important;
}
-
-.listing-description a {
- color: $li !important;
-}
-
-p {
- color: $li !important;
-}
-
-
-.team-member, .input-group-text {
- background-color: $background-nav !important;
-}
-
-.level4, .listing-category {
- color: $foreground !important;
-}
-
-::selection {
- color: $links-hover;
- background: $background-nav;
-}
-
-.tooltip {
- --bs-tooltip-color: $black !important;
- --bs-tooltip-bg: $white !important;
-}
-
-// table background & text
-.packages-table {
- background-color: $background-body !important;
- color: $li !important;
-}
-
-// cell borders
-.packages-table th,
-.packages-table td {
- border-bottom-color: $gray-900 !important;
-}
-
-// header row
-.packages-table thead {
- background-color: $gray-900 !important;
-}
-
-// zebra stripes
-.packages-table tbody tr:nth-child(odd) {
- background-color: darken($gray-900, 5%) !important;
-}
-
-// hover state
-.packages-table tbody tr:hover {
- background-color: lighten($background-nav, 5%) !important;
-}
-
-// “Deprecated” badge styling
-.badge.deprecated {
- color: $white !important;
- background-color: $red !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..3242b3f3a
--- /dev/null
+++ b/theming/theme-light.scss
@@ -0,0 +1,34 @@
+/*-- scss:defaults --*/
+
+@import "variables/grays";
+@import "variables/colors-light";
+@import "variables/borders";
+
+/*-- scss:rules --*/
+@import "rules/layouts";
+@import "rules/footer";
+@import "rules/news";
+@import "rules/team";
+@import "rules/citations";
+@import "rules/library";
+@import "rules/search";
+@import "rules/forms";
+@import "rules/responsive";
+@import "rules/quarto-tweaks";
+@import "rules/hoverables-light";
+
+.hero-logo-light {
+ display: block;
+}
+
+.hero-logo-dark {
+ display: none;
+}
+
+.custom-footer .brands-light-mode-logo {
+ display: inline !important;
+}
+
+.custom-footer .brands-dark-mode-logo {
+ display: none !important;
+}
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..905bdce6f
--- /dev/null
+++ b/theming/variables/_colors-dark.scss
@@ -0,0 +1,34 @@
+$teal: #4db6ac;
+$green: #229954;
+
+// This is very similar to the "normal" teal. Can we collapse those into the same?
+$teal-license: #34b8bf;
+
+$links: $teal-license;
+$links-hover: lighten($links, 10%);
+
+$box-shadow-color: rgba(0, 0, 0, 0.4);
+
+$code-block-bg: #212529;
+
+$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;
+
+$deprecated-fg: #f5c6cb;
+$deprecated-bg: #491217;
+
+$form-select-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
\ No newline at end of file
diff --git a/theming/variables/_colors-light.scss b/theming/variables/_colors-light.scss
new file mode 100644
index 000000000..fc138978e
--- /dev/null
+++ b/theming/variables/_colors-light.scss
@@ -0,0 +1,29 @@
+$teal: #4db6ac;
+$green: #229954;
+
+// This is very similar to the "normal" teal. Can we collapse those into the same?
+$teal-license: #34b8bf;
+
+$links: $teal-license;
+$links-hover: lighten($links, 10%);
+
+$box-shadow-color: rgba(0, 0, 0, 0.06);
+
+$code-block-bg: $gray-100;
+
+$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;
+
+$deprecated-fg: #721c24;
+$deprecated-bg: #f8d7da;
+
+$form-select-bg-image: null;
\ No newline at end of file
diff --git a/theming/variables/_grays.scss b/theming/variables/_grays.scss
new file mode 100644
index 000000000..dfa4c528d
--- /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;
\ No newline at end of file