Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
69f275c
feat(gallery): redesign gallery with intent-driven landing
mcanouil Aug 12, 2026
e80537f
fix(gallery): improve accessibility of landing and cards
mcanouil Aug 12, 2026
1157133
refactor(gallery): use domain as name where it duplicated author
mcanouil Aug 12, 2026
146da2d
fix(gallery): drop noahweidig.com, now Astro
mcanouil Sep 10, 2026
dcc2279
refactor: add the site palette and design tokens
mcanouil Oct 20, 2026
509b0e4
refactor: load the palette as a theme layer
mcanouil Oct 20, 2026
e691c12
refactor: set the Bootstrap variables from the palette
mcanouil Oct 20, 2026
6c0f993
feat: add a site-wide focus ring
mcanouil Oct 20, 2026
b7b4d12
feat: add section classes from directory metadata
mcanouil Oct 20, 2026
570a7f7
fix: resolve the default section colours in dark mode
mcanouil Oct 20, 2026
ad4de3b
feat: restyle the navbar, sidebar, breadcrumbs, headings and table of…
mcanouil Oct 20, 2026
6b26230
fix: keep the heading bar off link card titles
mcanouil Oct 20, 2026
11f0741
feat: restyle the link cards with section bars and glyphs
mcanouil Oct 20, 2026
5bc5987
refactor: share one tile style for tools and page choosers
mcanouil Oct 20, 2026
3bd8c02
feat: restyle chips and buttons on the tokens
mcanouil Oct 20, 2026
c5232b8
feat: restyle tables, code blocks and inputs
mcanouil Oct 20, 2026
58fa7e0
refactor: move the remaining partial colours to tokens
mcanouil Oct 20, 2026
f9bf233
refactor(gallery): use the site tokens and shared shapes
mcanouil Oct 20, 2026
edbea4f
feat(gallery): feature Quarto Wizard in Software Documentation
mcanouil Oct 20, 2026
7965353
docs(screenshots): use one top heading in the previews guide [skip ci]
mcanouil Oct 20, 2026
c16c054
feat: add the section chooser and the Hello Quarto card to the home page
mcanouil Oct 20, 2026
23a2721
refactor: drop colour rules that the tokens replace
mcanouil Oct 20, 2026
704d174
chore: update three widget contrast entries in the axe baseline [skip…
mcanouil Oct 20, 2026
628163a
refactor: merge repeated rules in the theme partials
mcanouil Oct 20, 2026
395dfcc
fix: style the collapsed table of contents as the panel
mcanouil Oct 20, 2026
d4eb662
fix: style the collapsed sidebar as the TOC toggle
mcanouil Oct 21, 2026
624dd8b
refactor: scope the sidebar toggle gap rule to its id
mcanouil Oct 21, 2026
9f98c2b
fix: leave the left table of contents toggle to Quarto
mcanouil Oct 21, 2026
deadc37
fix: give the collapsed toggles the panel surface
mcanouil Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .githooks/check-freeze.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,19 @@ while IFS= read -r qmd; do
[ -n "$qmd" ] || continue
freeze_rel="_freeze/${qmd%.qmd}/execute-results/html.json"

# Skip when the freeze file is intentionally removed in this change: the
# page no longer executes code (e.g. converted to the markdown engine), so
# its freeze entry is vestigial and correctly deleted, not stale.
if [ "$MODE" = "commit" ]; then
if git diff --cached --diff-filter=D --name-only 2>/dev/null | grep -Fxq "$freeze_rel"; then
continue
fi
else
if git diff "${REMOTE}..HEAD" --diff-filter=D --name-only 2>/dev/null | grep -Fxq "$freeze_rel"; then
continue
fi
fi

# Read freeze JSON from git objects, not working tree, to avoid false passes
# when the freeze file is updated on disk but not yet staged.
if [ "$MODE" = "commit" ]; then
Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,14 @@ jobs:
'docs/extensions/listings/custom-formats.yml': 'docs/extensions/index.html',
'docs/extensions/listings/revealjs-formats.yml': 'docs/extensions/index.html',
'docs/extensions/listings/revealjs.yml': 'docs/extensions/index.html',
// Gallery data files → gallery index
'docs/gallery/carousel.yml': 'docs/gallery/index.html',
'docs/gallery/gallery.yml': 'docs/gallery/index.html',
// Gallery data files → gallery pages
'docs/gallery/data/featured.yml': 'docs/gallery/index.html',
'docs/gallery/data/reports-analytics.yml': 'docs/gallery/reports-analytics.html',
'docs/gallery/data/dashboards-monitoring.yml': 'docs/gallery/dashboards-monitoring.html',
'docs/gallery/data/research-scholarship.yml': 'docs/gallery/research-scholarship.html',
'docs/gallery/data/teaching-learning.yml': 'docs/gallery/teaching-learning.html',
'docs/gallery/data/software-documentation.yml': 'docs/gallery/software-documentation.html',
'docs/gallery/data/personal-community.yml': 'docs/gallery/personal-community.html',
// Guide listing → guide index
'docs/guide/guide.yml': 'docs/guide/index.html',
// Download data → download index
Expand Down
6 changes: 3 additions & 3 deletions _axe-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@
"note": "third-party: leaflet, no upstream issue. leaflet.js gives each marker icon <img> alt=\"\" and also tabindex=\"0\", so it is presentational and focusable at the same time. axe adds the random htmlwidget ID because this page has three maps; update the ID when the page is refrozen."
},
{
"signature": "color-contrast :: #f8f8f8 on #dddddd",
"signature": "color-contrast :: #e8eef4 on #dddddd",
"pages": ["docs/interactive/index.html", "docs/interactive/widgets/jupyter.html"],
"impact": "serious",
"note": "third-party: leaflet, no upstream issue. The text color of the leaflet attribution control does not change in the Quarto dark theme, because leaflet.css has no dark theme."
Expand All @@ -710,7 +710,7 @@
"note": "third-party: leaflet, no upstream issue. The ESDIS link in the leaflet tile attribution is #0078a8 on the #343a40 page text, 2.32:1. Scoped to these leaflet pages because the signature also matches other low-contrast links."
},
{
"signature": "color-contrast :: #000000 on #151515",
"signature": "color-contrast :: #000000 on #161f28",
"pages": ["docs/interactive/widgets/htmlwidgets.html"],
"impact": "serious",
"note": "third-party: dygraphs, rstudio/dygraphs#241. dygraph.js 1.1.1 sets the axis-label color in an inline style, so CSS cannot change it. Clears when the R dygraphs package bundles dygraph.js 2.0 or later. Scoped to this page because the same signature on penguins-preview.html is a Quarto defect."
Expand Down Expand Up @@ -758,7 +758,7 @@
"note": "third-party: knitr, yihui/knitr#1747. kable() leaves the corner cell above the row names as an empty <th> on purpose. yihui/knitr#2500 added scope to the other header cells but kept this cell empty."
},
{
"signature": "color-contrast :: #f8f8f8 on #ffffff",
"signature": "color-contrast :: #e8eef4 on #ffffff",
"pages": ["docs/interactive/ojs/examples/arquero.html", "docs/interactive/ojs/libraries.html"],
"impact": "serious",
"note": "third-party: Arquero, no upstream issue. The Arquero table viewer sets background: #fff on its sticky header in an inline style, so in dark mode the header text gets the light theme text color. Scoped to the two pages with the viewer."
Expand Down
4 changes: 2 additions & 2 deletions _extensions/quartoorg/_extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ contributes:
html:
toc: true
theme:
light: [cosmo, scss/quartoorg.scss]
dark: [cosmo, scss/quartoorg-dark.scss]
light: [cosmo, scss/quartoorg.scss, scss/quartoorg-palette.scss]
dark: [cosmo, scss/quartoorg-dark.scss, scss/quartoorg-palette.scss]
code-copy: true
code-overflow: wrap
include-in-header:
Expand Down
6 changes: 3 additions & 3 deletions _extensions/quartoorg/scss/partials/_announcement.scss
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
padding: 1em;
font-size: 1em;
font-weight: bold;
color: $white;
background-color: #447099;
color: var(--qorg-on-brand);
background-color: var(--qorg-brand);
}

#quarto-announcement a {
color: $white;
color: inherit;
}
40 changes: 29 additions & 11 deletions _extensions/quartoorg/scss/partials/_buttons.scss
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
.btn-action-primary {
color: white;
background-color: #447099;
// Action buttons (home hero, downloads). They set Bootstrap's --bs-btn-*
// variables, so .btn applies the colours in every state and the focus ring
// comes from _focus.scss. 44px minimum height for the target size.
.btn.btn-action {
min-width: 165px;
min-height: 44px;
border-width: 2px;
border-radius: 30px;
}

.btn-action-primary:hover {
background-color: #305775;
color: white;
.btn.btn-action-primary {
--bs-btn-color: var(--qorg-on-brand);
--bs-btn-bg: var(--qorg-brand);
--bs-btn-border-color: var(--qorg-brand);
--bs-btn-hover-color: var(--qorg-on-brand);
--bs-btn-hover-bg: var(--qorg-brand-hover);
--bs-btn-hover-border-color: var(--qorg-brand-hover);
--bs-btn-active-color: var(--qorg-on-brand);
--bs-btn-active-bg: var(--qorg-brand-hover);
--bs-btn-active-border-color: var(--qorg-brand-hover);
}

.btn-action {
min-width: 165px;
border-radius: 30px;
border: none;
// Outline button next to the primary one: strong line border (3:1).
.btn.btn-action.btn-secondary {
--bs-btn-color: var(--qorg-ink);
--bs-btn-bg: transparent;
--bs-btn-border-color: var(--qorg-line-strong);
--bs-btn-hover-color: var(--qorg-link);
--bs-btn-hover-bg: transparent;
--bs-btn-hover-border-color: var(--qorg-link);
--bs-btn-active-color: var(--qorg-link);
--bs-btn-active-bg: transparent;
--bs-btn-active-border-color: var(--qorg-link);
}

101 changes: 28 additions & 73 deletions _extensions/quartoorg/scss/partials/_cards.scss
Original file line number Diff line number Diff line change
@@ -1,105 +1,60 @@

@media (max-width: 575px) {

.link-cards .card {
margin-bottom: 20px;
margin-right: 35px;
}

}

@media (min-width: 576px) {
// Link cards from assets/ejs/links.ejs (Guide and Reference listings):
// card shell with the section bar, a glyph box, and the h2 title kept for
// heading order.
.link-cards {
display: flex;
flex-direction: row;
flex-wrap: wrap;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 1rem;
}

.link-cards .card {
width: 190px;
margin: 0 20px 12px 0;
@include qorg-card-shell;
}


.link-cards .card-body {
padding: 1rem 1rem 0.9rem;
}

.link-cards .card-body > p {
margin-bottom: 0.45rem;
}

.link-cards .card {
border: none;
padding: 0;
.link-cards .card-glyph {
@include qorg-glyph-box;
}

/* Card titles are h2 for heading order; keep the old h4 look */
.link-cards .card-title h2 {
font-size: 1.25rem;
font-weight: 400;
line-height: 1.2;
opacity: 0.9;
margin-top: 0;
margin-bottom: 0.5rem;
margin: 0 0 0.1rem;
padding-bottom: 0;
border-bottom: none;
}

.link-cards .card-title p {
margin-bottom: 0;
}

.link-cards .card-subtitle p {
font-size: 1.1rem;
font-weight: 700;
line-height: 1.2;
opacity: 0.9;
margin-bottom: 0.5rem;
}

.link-cards .card-subtitle {
margin-bottom: 0.7rem;
margin-bottom: 0.6rem;
font-size: 0.88rem;
line-height: 1.35;
}

.link-cards .card-body {
padding: 0.5rem;
padding-left: 0.1rem;
.link-cards .card-subtitle p {
margin-bottom: 0;
}

.link-cards .card-body ul {
margin-bottom: 0;
padding-left: 0;
list-style-type: none;
font-size: 0.95rem;
}

.link-cards .card-body ul a {
display: inline-block;
min-height: 24px;
text-decoration: none;
}

.link-cards .card-body ul li {
padding-bottom: 0.2rem;
}


.card .source-code {
margin-top: 3px;
}

.carousel.card {
font-size: 16px;
padding-top: 2em;
&:hover {
text-decoration: underline;
}
}

.carousel.card a {
text-decoration: none;
}

.carousel img {
width: 70%;
margin-bottom: 110px;
}

.carousel .carousel-control-prev-icon,
.carousel .carousel-control-next-icon {
margin-bottom: 110px;
}


.gallery-category {
column-gap: 10px;
}

Loading
Loading