From 303f04eadc41ccc20d71c36e82f00944cda277ef Mon Sep 17 00:00:00 2001 From: Jeff Triplett Date: Fri, 14 Aug 2026 13:41:56 -0500 Subject: [PATCH 1/2] Port config to zensical.toml and enable Zensical features Replace mkdocs.yml with a native zensical.toml config. Verified the generated URL set is identical to the mkdocs.yml build (101 pages), so no links change. - zensical.toml: nav, Django-green custom palette, extra_css, repo info - enable Zensical features: admonitions, superfences + mermaid, code copy/annotate/select, content tabs, footnote/content tooltips, instant navigation + prefetch, section grouping, search highlight/suggest, header anchor links (toc.permalink) - fix active nav link contrast in dark mode (accent green on slate) --- mkdocs.yml | 161 -------------------------------------------------- zensical.toml | 95 +++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 161 deletions(-) delete mode 100644 mkdocs.yml create mode 100644 zensical.toml diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 6f3474d..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,161 +0,0 @@ -markdown_extensions: - - def_list - - footnotes - - pymdownx.tasklist: - custom_checkbox: true - - tables: - - toc: - baselevel: 2 - permalink: false - -nav: - - "index.md" - - "Conference Chair": - - "conference_chair/about.md" - - "conference_chair/checklist.md" - - "conference_chair/history.md" - - "Drafts": - - "drafts/coc_about.md" - - "drafts/coc_complaint.md" - - "drafts/coc_violation.md" - - "drafts/drafts.md" - - "drafts/email-tutorials-faqs.md" - - "drafts/finaid_accepted.md" - - "drafts/finaid_rejected.md" - - "drafts/finaid_submitted.md" - - "drafts/recruiting.md" - - "drafts/talk_accepted.md" - - "drafts/talk_rejected.md" - - "drafts/talk_submitted.md" - - "drafts/volunteer-info-email.md" - - "drafts/volunteer.md" - - "drafts/why-to-attend.md" - - "A/V": - - "av/about.md" - - "av/checklist.md" - - "av/history.md" - - "Community": - - "community/about.md" - - "community/checklist.md" - - "community/visas.md" - - "community/orientation.md" - - "community/inclusion_checklist.md" - - "community/childcare.md" - - "community/inclusion.md" - - "community/history.md" - - "Conduct": - - "conduct/about.md" - - "conduct/checklist.md" - - "conduct/history.md" - - "Contribution Sprints": - - "contribution_sprints/about.md" - - "contribution_sprints/checklist.md" - - "contribution_sprints/history.md" - - "contribution_sprints/playbooks.md" - - "contribution_sprints/communication_examples.md" - - "Health and Safety": - - "health_and_safety/about.md" - - "health_and_safety/checklist.md" - - "health_and_safety/history.md" - - "Lightning Talks": - - "lightning_talks/about.md" - - "lightning_talks/checklist.md" - - "lightning_talks/history.md" - - "Logistics": - - "logistics/budget.md" - - "logistics/design_website_checklist.md" - - "logistics/logistics.md" - - "logistics/organizers.md" - - "logistics/photographer.md" - - "logistics/post_conference.md" - - "logistics/timeline.md" - - "Marketing": - - "marketing/about.md" - - "marketing/checklist.md" - - "marketing/history.md" - - "marketing/communications.md" - - "marketing/mailing_lists.md" - - "marketing/remarks.md" - - "Online Committee": - - "online_committee/about.md" - - "online_committee/checklist.md" - - "online_committee/history.md" - - "Opportunity Grants": - - "opportunity_grants/about.md" - - "opportunity_grants/checklist.md" - - "opportunity_grants/history.md" - - "Program and Schedule": - - "program_and_schedule/about.md" - - "program_and_schedule/checklist.md" - - "program_and_schedule/history.md" - - "program_and_schedule/example_schedule.md" - - "program_and_schedule/program.md" - - "program_and_schedule/timeline.md" - - "program_and_schedule/schedule.md" - - "Social Events": - - "social_events/about.md" - - "social_events/checklist.md" - - "social_events/history.md" - - "social_events/special_events.md" - - "Sponsors": - - "sponsors/about.md" - - "sponsors/checklist.md" - - "sponsors/history.md" - - "Swag": - - "swag/about.md" - - "swag/checklist.md" - - "swag/history.md" - - "Tickets": - - "tickets/about.md" - - "tickets/checklist.md" - - "tickets/history.md" - - "Venue": - - "venue/about.md" - - "venue/checklist.md" - - "venue/bathroom-baskets.md" - - "venue/experience.md" - - "venue/history.md" - - "Volunteer Team": - - "volunteer_team/about.md" - - "volunteer_team/checklist.md" - - "volunteer_team/handbook.md" - - "volunteer_team/session_emcee.md" - - "volunteer_team/session_manager.md" - - "volunteer_team/registration.md" - - "volunteer_team/email_templates.md" - - "volunteer_team/blog_template.md" - - "volunteer_team/automation.md" - - "volunteer_team/history.md" - - "Website": - - "website/about.md" - - "website/checklist.md" - - "website/history.md" - -plugins: - - search -repo_url: https://github.com/djangocon/docs.djangocon.us -site_name: DjangoCon US Docs -extra_css: - - stylesheets/django.css -theme: - name: material - features: - - navigation.instant - - navigation.top - - content.code.copy - - toc.follow - palette: - - media: "(prefers-color-scheme: light)" - scheme: default - primary: custom - accent: custom - toggle: - icon: material/weather-sunny - name: Switch to dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - primary: custom - accent: custom - toggle: - icon: material/weather-night - name: Switch to light mode diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 0000000..6459591 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,95 @@ +[project] +site_name = "DjangoCon US Docs" +site_url = "https://docs.djangocon.us/" +site_description = "DjangoCon US: organizer docs, tasks, and checklists" + +repo_url = "https://github.com/djangocon/docs.djangocon.us" +repo_name = "djangocon/docs.djangocon.us" + +extra_css = ["stylesheets/django.css"] + +nav = [ + "index.md", + { "Conference Chair" = ["conference_chair/about.md", "conference_chair/checklist.md", "conference_chair/history.md"] }, + { "Drafts" = ["drafts/coc_about.md", "drafts/coc_complaint.md", "drafts/coc_violation.md", "drafts/drafts.md", "drafts/email-tutorials-faqs.md", "drafts/finaid_accepted.md", "drafts/finaid_rejected.md", "drafts/finaid_submitted.md", "drafts/recruiting.md", "drafts/talk_accepted.md", "drafts/talk_rejected.md", "drafts/talk_submitted.md", "drafts/volunteer-info-email.md", "drafts/volunteer.md", "drafts/why-to-attend.md"] }, + { "A/V" = ["av/about.md", "av/checklist.md", "av/history.md"] }, + { "Community" = ["community/about.md", "community/checklist.md", "community/visas.md", "community/orientation.md", "community/inclusion_checklist.md", "community/childcare.md", "community/inclusion.md", "community/history.md"] }, + { "Conduct" = ["conduct/about.md", "conduct/checklist.md", "conduct/history.md"] }, + { "Contribution Sprints" = ["contribution_sprints/about.md", "contribution_sprints/checklist.md", "contribution_sprints/history.md", "contribution_sprints/playbooks.md", "contribution_sprints/communication_examples.md"] }, + { "Health and Safety" = ["health_and_safety/about.md", "health_and_safety/checklist.md", "health_and_safety/history.md"] }, + { "Lightning Talks" = ["lightning_talks/about.md", "lightning_talks/checklist.md", "lightning_talks/history.md"] }, + { "Logistics" = ["logistics/budget.md", "logistics/design_website_checklist.md", "logistics/logistics.md", "logistics/organizers.md", "logistics/photographer.md", "logistics/post_conference.md", "logistics/timeline.md"] }, + { "Marketing" = ["marketing/about.md", "marketing/checklist.md", "marketing/history.md", "marketing/communications.md", "marketing/mailing_lists.md", "marketing/remarks.md"] }, + { "Online Committee" = ["online_committee/about.md", "online_committee/checklist.md", "online_committee/history.md"] }, + { "Opportunity Grants" = ["opportunity_grants/about.md", "opportunity_grants/checklist.md", "opportunity_grants/history.md"] }, + { "Program and Schedule" = ["program_and_schedule/about.md", "program_and_schedule/checklist.md", "program_and_schedule/history.md", "program_and_schedule/example_schedule.md", "program_and_schedule/program.md", "program_and_schedule/timeline.md", "program_and_schedule/schedule.md"] }, + { "Social Events" = ["social_events/about.md", "social_events/checklist.md", "social_events/history.md", "social_events/special_events.md"] }, + { "Sponsors" = ["sponsors/about.md", "sponsors/checklist.md", "sponsors/history.md"] }, + { "Swag" = ["swag/about.md", "swag/checklist.md", "swag/history.md"] }, + { "Tickets" = ["tickets/about.md", "tickets/checklist.md", "tickets/history.md"] }, + { "Venue" = ["venue/about.md", "venue/checklist.md", "venue/bathroom-baskets.md", "venue/experience.md", "venue/history.md"] }, + { "Volunteer Team" = ["volunteer_team/about.md", "volunteer_team/checklist.md", "volunteer_team/handbook.md", "volunteer_team/session_emcee.md", "volunteer_team/session_manager.md", "volunteer_team/registration.md", "volunteer_team/email_templates.md", "volunteer_team/blog_template.md", "volunteer_team/automation.md", "volunteer_team/history.md"] }, + { "Website" = ["website/about.md", "website/checklist.md", "website/history.md"] }, +] + +[project.theme] +language = "en" +features = [ + "content.code.annotate", + "content.code.copy", + "content.code.select", + "content.footnote.tooltips", + "content.tabs.link", + "content.tooltips", + "navigation.footer", + "navigation.indexes", + "navigation.instant", + "navigation.instant.prefetch", + "navigation.sections", + "navigation.top", + "navigation.tracking", + "search.highlight", + "search.suggest", + "toc.follow", +] + +# Django-branded palette; custom primary/accent are driven by docs/stylesheets/django.css +[[project.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" +primary = "custom" +accent = "custom" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" + +[[project.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" +primary = "custom" +accent = "custom" +toggle.icon = "lucide/moon" +toggle.name = "Switch to light mode" + +[project.markdown_extensions] +abbr = {} +admonition = {} +attr_list = {} +def_list = {} +footnotes = {} +md_in_html = {} +tables = {} +toc = { permalink = true } +pymdownx.betterem = {} +pymdownx.caret = {} +pymdownx.details = {} +pymdownx.emoji = { emoji_generator = "zensical.extensions.emoji.to_svg", emoji_index = "zensical.extensions.emoji.twemoji" } +pymdownx.highlight = { anchor_linenums = true, line_spans = "__span", pygments_lang_class = true } +pymdownx.inlinehilite = {} +pymdownx.keys = {} +pymdownx.magiclink = {} +pymdownx.mark = {} +pymdownx.smartsymbols = {} +pymdownx.superfences = { custom_fences = [{ name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" }] } +pymdownx.tabbed = { alternate_style = true, combine_header_slug = true } +pymdownx.tasklist = { custom_checkbox = true } +pymdownx.tilde = {} From 7b36002c23c0006e60a1042af06d0c7322d0c1e4 Mon Sep 17 00:00:00 2001 From: Jeff Triplett Date: Fri, 14 Aug 2026 13:47:08 -0500 Subject: [PATCH 2/2] Fix active nav link contrast in dark mode The active nav item used the dark Django green, which is unreadable on the slate dark-mode background. Use the light accent green in dark mode. --- docs/stylesheets/django.css | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/stylesheets/django.css b/docs/stylesheets/django.css index a9a9c94..d9c3f44 100644 --- a/docs/stylesheets/django.css +++ b/docs/stylesheets/django.css @@ -88,7 +88,11 @@ background-color: var(--django-green-accent); } -/* Accent bar under the active nav item */ -.md-nav__link--active { +/* Active nav item — dark green in light mode, light accent green in dark mode + (the dark green is unreadable on the slate background). */ +[data-md-color-scheme="default"] .md-nav__link--active { color: var(--django-green) !important; } +[data-md-color-scheme="slate"] .md-nav__link--active { + color: var(--django-green-accent) !important; +}