From 4de1553c2176fa6ef05e3595d3db39606c9718d0 Mon Sep 17 00:00:00 2001 From: Vincent Lannurien Date: Mon, 17 Aug 2026 20:28:35 +0200 Subject: [PATCH] Replace the grey theme with a green-slate light/dark pair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PaperMod ships grey on grey, which read as flat and dim on pages that are mostly tables. Both schemes are now redefinitions of PaperMod's own variables, so the theme picks them up without further overrides, plus --accent, --warm and --wash for the placements below. Every text pair clears WCAG AA. Venue tables drop the full 1px grid for horizontal rules, a tinted header and an accent row hover; domain and tag code spans become chips. Warm marks the one cell worth finding first in a headered table — the ICORE rank, the SCImago quartile, the still-open cycle — and detail-page fact tables are excluded, since bold there is a row label, not emphasis. The FullCalendar variable mapping was dark-only, leaving light mode on the library's stock chrome; it now maps once through theme variables and covers both. Event colours were saturated with white text on top, so they become five pale chips carrying explicit dark ink, legible on either theme. Ranks were also emitting '**A***', which closes the emphasis on the second star and leaves the third loose — visible once ranks had their own colour. Co-Authored-By: Claude Opus 5 --- site/assets/css/extended/custom.css | 187 ++++++++++++++++- site/content/cloud-edge/calendar/_index.md | 188 ++++++++++++------ .../venues/conferences/OSDI/_index.md | 2 +- .../venues/conferences/SOSP/_index.md | 2 +- .../cloud-edge/venues/conferences/_index.md | 4 +- site/layouts/partials/extend_head.html | 28 ++- src/publish_assistant/generate_content.py | 43 +++- 7 files changed, 364 insertions(+), 90 deletions(-) diff --git a/site/assets/css/extended/custom.css b/site/assets/css/extended/custom.css index 135fadb..bae901d 100644 --- a/site/assets/css/extended/custom.css +++ b/site/assets/css/extended/custom.css @@ -3,6 +3,175 @@ themes/PaperMod submodule — those never get committed, and CI checks the submodule out fresh, so they would be missing from the deployed site. */ +/* --------------------------------------------------------------------------- + Palette + + PaperMod ships a neutral grey on grey. This replaces both schemes with a + quieter green-slate pair: paper under morning light, and a desk lamp at + night. Every colour below is a redefinition of a PaperMod variable, plus + four of our own (--accent, --accent-soft, --accent-line, --warm, --wash), + so the rest of the theme picks the palette up without further overrides. +--------------------------------------------------------------------------- */ + +:root { + --theme: #f2f5f3; + --entry: #ffffff; + --primary: #1e2b28; + --secondary: #5b6d68; + --tertiary: #d8e0db; + --content: #2b3a36; + --border: #e3eae5; + --code-bg: #e8efea; + --code-block-bg: #1b2523; + + --accent: #14705f; + --accent-soft: rgba(20, 112, 95, 0.09); + --accent-line: rgba(20, 112, 95, 0.32); + --warm: #9a5f22; + --wash: rgba(20, 112, 95, 0.07); + --shadow: 0 1px 2px rgba(30, 43, 40, 0.04), 0 8px 24px rgba(30, 43, 40, 0.05); + --shadow-hover: 0 2px 4px rgba(30, 43, 40, 0.06), 0 14px 32px rgba(30, 43, 40, 0.09); +} + +:root[data-theme="dark"] { + --theme: #131917; + --entry: #1b2321; + --primary: #e0e8e4; + --secondary: #94a5a0; + --tertiary: #2c3a36; + --content: #c6d3ce; + --border: #26312e; + --code-bg: #202a27; + --code-block-bg: #0f1513; + + --accent: #6ec7ae; + --accent-soft: rgba(110, 199, 174, 0.11); + --accent-line: rgba(110, 199, 174, 0.30); + --warm: #e0b478; + --wash: rgba(110, 199, 174, 0.06); + --shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.20); + --shadow-hover: 0 2px 4px rgba(0, 0, 0, 0.30), 0 14px 32px rgba(0, 0, 0, 0.28); +} + +/* A single soft light source behind the header, fixed so it stays put while + long venue tables scroll. Low enough alpha to read as tint, not gradient. */ +body { + background-image: radial-gradient(1100px 420px at 50% -140px, var(--wash), transparent 72%); + background-attachment: fixed; +} + +/* PaperMod tints list pages with --code-bg, which now belongs to code chips. + Keep every page on the same ground. */ +.list, +[data-theme="dark"] .list { + background-color: var(--theme); +} + +::selection { + background: var(--accent-soft); +} + +:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +/* --------------------------------------------------------------------------- + Accent placement +--------------------------------------------------------------------------- */ + +.md-content a:not(.anchor) { + color: var(--accent); + text-decoration-color: var(--accent-line); +} + +.md-content a:not(.anchor):hover { + text-decoration-color: var(--accent); +} + +.md-content blockquote { + border-inline-start-color: var(--accent-line); +} + +.menu .active { + color: var(--accent); + text-decoration-color: var(--accent); +} + +.header { + border-bottom: 1px solid var(--border); +} + +.post-entry { + box-shadow: var(--shadow); +} + +.post-entry:hover, +.post-entry:focus-within { + border-color: var(--accent-line); + box-shadow: var(--shadow-hover); +} + +.pagination a, +.paginav a { + color: var(--accent); +} + +/* --------------------------------------------------------------------------- + Venue tables + + The tracker is mostly tables, and PaperMod's full 1px grid is what made them + read as a spreadsheet. Rules run horizontally only; the header carries the + tint, and the hovered row tells you which venue you are reading across. +--------------------------------------------------------------------------- */ + +.md-content table th, +.md-content table:not(.highlighttable, .highlight table, .gist .highlight) td { + border: 0; + border-bottom: 1px solid var(--border); +} + +.md-content table th { + background: var(--code-bg); + color: var(--secondary); + font-size: 0.8em; + font-weight: 600; + letter-spacing: 0.03em; + text-transform: uppercase; + border-bottom: 1px solid var(--tertiary); +} + +.md-content table tbody tr:hover { + background: var(--accent-soft); +} + +/* Venue detail pages carry headerless fact tables. Their empty header row would + now show as a tinted bar above the first fact. */ +.md-content table thead:not(:has(th:not(:empty))) { + display: none; +} + +/* In a table that does have headers, bold marks the one cell worth finding + first: the ICORE rank, the SCImago quartile, the cycle that is still open. + Warm keeps it separate from the run of dates beside it. Detail pages are + excluded — there bold marks every row label, which is not emphasis. */ +.md-content table:has(thead th:not(:empty)) td strong { + color: var(--warm); +} + +/* Domains and tags are inline code spans. Chips, not code. */ +.md-content :not(pre) > code { + background: var(--accent-soft); + color: var(--accent); + border-radius: 999px; + padding: 0.15em 0.55em; + font-size: 0.72em; +} + +/* --------------------------------------------------------------------------- + Layout adjustments (predate the palette) +--------------------------------------------------------------------------- */ + /* Shorter hero block: PaperMod reserves 320px / 260px for a lead image we don't use, which pushed the venue tables below the fold. */ .first-entry { @@ -19,7 +188,7 @@ full title weight; the topic reads as a secondary breadcrumb. */ .logo-sep { margin: 0 6px; - color: var(--secondary); + color: var(--tertiary); font-size: 24px; font-weight: 400; } @@ -30,6 +199,10 @@ color: var(--secondary); } +.logo .logo-topic:hover { + color: var(--accent); +} + /* Topic cards on the home page. The stats line and the section shortcuts sit inside PaperMod's .post-entry, whose ::before overlay swallows clicks, so the shortcut links need to be lifted above it to stay clickable. */ @@ -44,6 +217,11 @@ color: var(--secondary); } +.topic-stats strong { + color: var(--primary); + font-weight: 600; +} + .topic-links { display: flex; gap: 16px; @@ -53,7 +231,12 @@ } .topic-links a { - box-shadow: 0 1px 0 var(--primary); + color: var(--accent); + box-shadow: 0 1px 0 var(--accent-line); +} + +.topic-links a:hover { + box-shadow: 0 1px 0 var(--accent); } /* Intro copy above a list of cards. PaperMod gives .post-entry a bottom margin diff --git a/site/content/cloud-edge/calendar/_index.md b/site/content/cloud-edge/calendar/_index.md index e9581d1..b7864d5 100644 --- a/site/content/cloud-edge/calendar/_index.md +++ b/site/content/cloud-edge/calendar/_index.md @@ -1,13 +1,14 @@ --- title: Submission Deadlines layout: calendar -generated: '2026-08-17T18:03:33Z' +generated: '2026-08-17T18:20:48Z' draft: false events: - title: OSDI — abstract deadline start: '2026-12-01' url: /cloud-edge/venues/conferences/osdi/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Baltimore, MD, USA @@ -15,7 +16,8 @@ events: - title: OSDI — paper deadline start: '2026-12-08' url: /cloud-edge/venues/conferences/osdi/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Baltimore, MD, USA @@ -23,7 +25,8 @@ events: - title: OSDI — notification start: '2027-03-16' url: /cloud-edge/venues/conferences/osdi/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Baltimore, MD, USA @@ -31,7 +34,8 @@ events: - title: OSDI start: '2027-07-07' url: /cloud-edge/venues/conferences/osdi/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2027-07-10' extendedProps: @@ -39,7 +43,8 @@ events: - title: SOSP — abstract deadline start: '2026-03-26' url: /cloud-edge/venues/conferences/sosp/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Prague, Czechia @@ -47,7 +52,8 @@ events: - title: SOSP — paper deadline start: '2026-04-01' url: /cloud-edge/venues/conferences/sosp/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Prague, Czechia @@ -55,7 +61,8 @@ events: - title: SOSP — notification start: '2026-07-03' url: /cloud-edge/venues/conferences/sosp/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Prague, Czechia @@ -63,7 +70,8 @@ events: - title: SOSP start: '2026-09-29' url: /cloud-edge/venues/conferences/sosp/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-10-03' extendedProps: @@ -71,7 +79,8 @@ events: - title: NSDI Spring — abstract deadline start: '2026-04-16' url: /cloud-edge/venues/conferences/nsdi/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Providence, RI, USA @@ -80,7 +89,8 @@ events: - title: NSDI Spring — paper deadline start: '2026-04-23' url: /cloud-edge/venues/conferences/nsdi/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Providence, RI, USA @@ -89,7 +99,8 @@ events: - title: NSDI Spring — notification start: '2026-07-23' url: /cloud-edge/venues/conferences/nsdi/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Providence, RI, USA @@ -98,7 +109,8 @@ events: - title: NSDI Fall — abstract deadline start: '2026-09-10' url: /cloud-edge/venues/conferences/nsdi/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Providence, RI, USA @@ -107,7 +119,8 @@ events: - title: NSDI Fall — paper deadline start: '2026-09-17' url: /cloud-edge/venues/conferences/nsdi/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Providence, RI, USA @@ -116,7 +129,8 @@ events: - title: NSDI Fall — notification start: '2026-12-08' url: /cloud-edge/venues/conferences/nsdi/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Providence, RI, USA @@ -125,7 +139,8 @@ events: - title: NSDI start: '2027-05-11' url: /cloud-edge/venues/conferences/nsdi/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2027-05-14' extendedProps: @@ -133,7 +148,8 @@ events: - title: EuroSys Spring — abstract deadline start: '2026-05-07' url: /cloud-edge/venues/conferences/eurosys/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Rabat, Morocco @@ -142,7 +158,8 @@ events: - title: EuroSys Spring — paper deadline start: '2026-05-14' url: /cloud-edge/venues/conferences/eurosys/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Rabat, Morocco @@ -151,7 +168,8 @@ events: - title: EuroSys Spring — notification start: '2026-08-21' url: /cloud-edge/venues/conferences/eurosys/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Rabat, Morocco @@ -160,7 +178,8 @@ events: - title: EuroSys Fall — abstract deadline start: '2026-09-17' url: /cloud-edge/venues/conferences/eurosys/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Rabat, Morocco @@ -169,7 +188,8 @@ events: - title: EuroSys Fall — paper deadline start: '2026-09-24' url: /cloud-edge/venues/conferences/eurosys/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Rabat, Morocco @@ -178,7 +198,8 @@ events: - title: EuroSys Fall — notification start: '2027-01-29' url: /cloud-edge/venues/conferences/eurosys/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Rabat, Morocco @@ -187,7 +208,8 @@ events: - title: EuroSys start: '2027-04-19' url: /cloud-edge/venues/conferences/eurosys/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2027-04-24' extendedProps: @@ -195,7 +217,8 @@ events: - title: ATC — paper deadline start: '2026-06-10' url: /cloud-edge/venues/conferences/atc/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Hong Kong @@ -203,7 +226,8 @@ events: - title: ATC — notification start: '2026-09-18' url: /cloud-edge/venues/conferences/atc/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Hong Kong @@ -211,7 +235,8 @@ events: - title: ATC start: '2026-11-16' url: /cloud-edge/venues/conferences/atc/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-11-19' extendedProps: @@ -219,7 +244,8 @@ events: - title: SoCC Round 1 — abstract deadline start: '2026-02-06' url: /cloud-edge/venues/conferences/socc/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Singapore @@ -228,7 +254,8 @@ events: - title: SoCC Round 1 — paper deadline start: '2026-02-13' url: /cloud-edge/venues/conferences/socc/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Singapore @@ -237,7 +264,8 @@ events: - title: SoCC Round 1 — notification start: '2026-04-29' url: /cloud-edge/venues/conferences/socc/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Singapore @@ -246,7 +274,8 @@ events: - title: SoCC Round 2 — abstract deadline start: '2026-07-07' url: /cloud-edge/venues/conferences/socc/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Singapore @@ -255,7 +284,8 @@ events: - title: SoCC Round 2 — paper deadline start: '2026-07-14' url: /cloud-edge/venues/conferences/socc/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Singapore @@ -264,7 +294,8 @@ events: - title: SoCC Round 2 — notification start: '2026-09-26' url: /cloud-edge/venues/conferences/socc/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Singapore @@ -273,7 +304,8 @@ events: - title: SoCC start: '2026-11-18' url: /cloud-edge/venues/conferences/socc/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-11-21' extendedProps: @@ -281,7 +313,8 @@ events: - title: Middleware Winter — abstract deadline start: '2025-12-09' url: /cloud-edge/venues/conferences/middleware/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Tarragona, Spain @@ -290,7 +323,8 @@ events: - title: Middleware Winter — paper deadline start: '2025-12-12' url: /cloud-edge/venues/conferences/middleware/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Tarragona, Spain @@ -299,7 +333,8 @@ events: - title: Middleware Winter — notification start: '2026-03-06' url: /cloud-edge/venues/conferences/middleware/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Tarragona, Spain @@ -308,7 +343,8 @@ events: - title: Middleware Summer — abstract deadline start: '2026-05-29' url: /cloud-edge/venues/conferences/middleware/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Tarragona, Spain @@ -317,7 +353,8 @@ events: - title: Middleware Summer — paper deadline start: '2026-06-05' url: /cloud-edge/venues/conferences/middleware/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Tarragona, Spain @@ -326,7 +363,8 @@ events: - title: Middleware Summer — notification start: '2026-08-28' url: /cloud-edge/venues/conferences/middleware/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Tarragona, Spain @@ -335,7 +373,8 @@ events: - title: Middleware start: '2026-12-14' url: /cloud-edge/venues/conferences/middleware/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-12-19' extendedProps: @@ -343,7 +382,8 @@ events: - title: IPDPS — abstract deadline start: '2026-10-01' url: /cloud-edge/venues/conferences/ipdps/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Seattle, WA, USA @@ -351,7 +391,8 @@ events: - title: IPDPS — paper deadline start: '2026-10-08' url: /cloud-edge/venues/conferences/ipdps/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Seattle, WA, USA @@ -359,7 +400,8 @@ events: - title: IPDPS — notification start: '2027-02-02' url: /cloud-edge/venues/conferences/ipdps/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Seattle, WA, USA @@ -367,7 +409,8 @@ events: - title: IPDPS start: '2027-06-01' url: /cloud-edge/venues/conferences/ipdps/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2027-06-06' extendedProps: @@ -375,7 +418,8 @@ events: - title: SC — abstract deadline start: '2026-04-01' url: /cloud-edge/venues/conferences/sc/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Chicago, IL, USA @@ -383,7 +427,8 @@ events: - title: SC — paper deadline start: '2026-04-08' url: /cloud-edge/venues/conferences/sc/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Chicago, IL, USA @@ -391,7 +436,8 @@ events: - title: SC — notification start: '2026-07-01' url: /cloud-edge/venues/conferences/sc/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Chicago, IL, USA @@ -399,7 +445,8 @@ events: - title: SC start: '2026-11-15' url: /cloud-edge/venues/conferences/sc/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-11-21' extendedProps: @@ -407,7 +454,8 @@ events: - title: HPDC — abstract deadline start: '2026-01-29' url: /cloud-edge/venues/conferences/hpdc/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Cleveland, OH, USA @@ -415,7 +463,8 @@ events: - title: HPDC — paper deadline start: '2026-02-05' url: /cloud-edge/venues/conferences/hpdc/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Cleveland, OH, USA @@ -423,7 +472,8 @@ events: - title: HPDC — notification start: '2026-03-31' url: /cloud-edge/venues/conferences/hpdc/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Cleveland, OH, USA @@ -431,7 +481,8 @@ events: - title: HPDC start: '2026-07-13' url: /cloud-edge/venues/conferences/hpdc/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-07-17' extendedProps: @@ -439,7 +490,8 @@ events: - title: MobiSys — abstract deadline start: '2025-11-28' url: /cloud-edge/venues/conferences/mobisys/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: location: Cambridge, UK @@ -447,7 +499,8 @@ events: - title: MobiSys — paper deadline start: '2025-12-05' url: /cloud-edge/venues/conferences/mobisys/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Cambridge, UK @@ -455,7 +508,8 @@ events: - title: MobiSys — notification start: '2026-03-02' url: /cloud-edge/venues/conferences/mobisys/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Cambridge, UK @@ -463,7 +517,8 @@ events: - title: MobiSys start: '2026-06-22' url: /cloud-edge/venues/conferences/mobisys/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-06-25' extendedProps: @@ -471,34 +526,39 @@ events: - title: SEC — abstract deadline start: '2026-05-08' url: /cloud-edge/venues/conferences/sec/ - color: '#f4a261' + color: '#f0d2a4' + textColor: '#4a3212' allDay: true extendedProps: cfp_url: https://acm-ieee-sec.org/2026/ - title: SEC — paper deadline start: '2026-05-08' url: /cloud-edge/venues/conferences/sec/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: cfp_url: https://acm-ieee-sec.org/2026/ - title: SEC — notification start: '2026-07-29' url: /cloud-edge/venues/conferences/sec/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: cfp_url: https://acm-ieee-sec.org/2026/ - title: SEC start: '2026-10-13' url: /cloud-edge/venues/conferences/sec/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-10-17' - title: CCGrid — paper deadline start: '2025-12-21' url: /cloud-edge/venues/conferences/ccgrid/ - color: '#e63946' + color: '#f2b3ac' + textColor: '#5a1f19' allDay: true extendedProps: location: Sydney, Australia @@ -506,7 +566,8 @@ events: - title: CCGrid — notification start: '2026-02-10' url: /cloud-edge/venues/conferences/ccgrid/ - color: '#2a9d8f' + color: '#b9dfd0' + textColor: '#14402f' allDay: true extendedProps: location: Sydney, Australia @@ -514,7 +575,8 @@ events: - title: CCGrid start: '2026-05-18' url: /cloud-edge/venues/conferences/ccgrid/ - color: '#457b9d' + color: '#bdd2ee' + textColor: '#1a3557' allDay: true end: '2026-05-22' extendedProps: diff --git a/site/content/cloud-edge/venues/conferences/OSDI/_index.md b/site/content/cloud-edge/venues/conferences/OSDI/_index.md index 98f5847..450912f 100644 --- a/site/content/cloud-edge/venues/conferences/OSDI/_index.md +++ b/site/content/cloud-edge/venues/conferences/OSDI/_index.md @@ -23,7 +23,7 @@ camera_ready: Jun 3, 2027 | | | |---|---| -| **ICORE Rank** | **A*** | +| **ICORE Rank** | **A\*** | | **Domains** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | | **Website** | [https://www.usenix.org/conference/osdi26](https://www.usenix.org/conference/osdi26) | | **Latest digest** | [OSDI 2025](/cloud-edge/digests/osdi-2025/) — 13 papers | diff --git a/site/content/cloud-edge/venues/conferences/SOSP/_index.md b/site/content/cloud-edge/venues/conferences/SOSP/_index.md index 92fbab6..7b22dfa 100644 --- a/site/content/cloud-edge/venues/conferences/SOSP/_index.md +++ b/site/content/cloud-edge/venues/conferences/SOSP/_index.md @@ -24,7 +24,7 @@ cfp_url: https://sigops.org/s/conferences/sosp/2026/cfp.html | | | |---|---| -| **ICORE Rank** | **A*** | +| **ICORE Rank** | **A\*** | | **Domains** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | | **Website** | [https://sigops.org/s/conferences/sosp/](https://sigops.org/s/conferences/sosp/) | | **Latest digest** | [SOSP 2025](/cloud-edge/digests/sosp-2025/) — 14 papers | diff --git a/site/content/cloud-edge/venues/conferences/_index.md b/site/content/cloud-edge/venues/conferences/_index.md index f209a7c..336e723 100644 --- a/site/content/cloud-edge/venues/conferences/_index.md +++ b/site/content/cloud-edge/venues/conferences/_index.md @@ -6,8 +6,8 @@ draft: false | Conference | Full name | ICORE | Domains | Abstract | Paper deadline | Notification | Event | Location | Digests | |---|---|---|---|---|---|---|---|---|---| -| [OSDI](/cloud-edge/venues/conferences/osdi/) | USENIX Symposium on Operating Systems Design and Implementation | **A*** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | Dec 1, 2026 | Dec 8, 2026 | Mar 16, 2027 | Jul 7-9, 2027 | Baltimore, MD, USA | 2 | -| [SOSP](/cloud-edge/venues/conferences/sosp/) | ACM Symposium on Operating Systems Principles | **A*** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | Mar 26, 2026 | Apr 1, 2026 | Jul 3, 2026 | Sep 29, 2026 - Oct 2, 2026 | Prague, Czechia | 2 | +| [OSDI](/cloud-edge/venues/conferences/osdi/) | USENIX Symposium on Operating Systems Design and Implementation | **A\*** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | Dec 1, 2026 | Dec 8, 2026 | Mar 16, 2027 | Jul 7-9, 2027 | Baltimore, MD, USA | 2 | +| [SOSP](/cloud-edge/venues/conferences/sosp/) | ACM Symposium on Operating Systems Principles | **A\*** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | Mar 26, 2026 | Apr 1, 2026 | Jul 3, 2026 | Sep 29, 2026 - Oct 2, 2026 | Prague, Czechia | 2 | | [EuroSys](/cloud-edge/venues/conferences/eurosys/) | European Conference on Computer Systems | **A** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | Sep 17, 2026 | Sep 24, 2026 (Fall) | Jan 29, 2027 | Apr 19-23, 2027 | Rabat, Morocco | 2 | | [HPDC](/cloud-edge/venues/conferences/hpdc/) | IEEE International Symposium on High Performance Distributed Computing | **A** | `edge-and-cloud`, `hpc`, `distributed-systems` | Jan 29, 2026 | Feb 5, 2026 | Mar 31, 2026 | Jul 13, 2026 - Jul 16, 2026 | Cleveland, OH, USA | 2 | | [IPDPS](/cloud-edge/venues/conferences/ipdps/) | IEEE International Parallel and Distributed Processing Symposium | **A** | `edge-and-cloud`, `parallel-computing`, `distributed-systems` | Oct 1, 2026 | Oct 8, 2026 | Feb 2, 2027 | Jun 1-5, 2027 | Seattle, WA, USA | 2 | diff --git a/site/layouts/partials/extend_head.html b/site/layouts/partials/extend_head.html index f55e536..6c76e23 100644 --- a/site/layouts/partials/extend_head.html +++ b/site/layouts/partials/extend_head.html @@ -7,22 +7,30 @@ .fc table { display: table; overflow-x: visible; margin-bottom: 0; border-radius: 0; word-break: normal; } .fc th { min-width: 0; text-align: center; } .fc td:first-child, .fc th:first-child { width: auto; } - /* Map PaperMod dark theme to FullCalendar CSS variables */ - [data-theme="dark"] #pa-calendar { - --fc-page-bg-color: var(--theme); - --fc-neutral-bg-color: var(--entry); + /* Map the site palette onto FullCalendar's variables. The values are theme + variables, so one mapping covers both light and dark. */ + #pa-calendar { + --fc-page-bg-color: var(--entry); + --fc-neutral-bg-color: var(--code-bg); --fc-neutral-text-color: var(--secondary); --fc-border-color: var(--border); - --fc-today-bg-color: rgba(255, 220, 40, 0.08); - --fc-list-event-hover-bg-color: var(--entry); + --fc-today-bg-color: var(--accent-soft); + --fc-list-event-hover-bg-color: var(--accent-soft); --fc-button-text-color: var(--primary); --fc-button-bg-color: var(--entry); --fc-button-border-color: var(--border); - --fc-button-hover-bg-color: var(--tertiary); - --fc-button-hover-border-color: var(--border); - --fc-button-active-bg-color: var(--tertiary); - --fc-button-active-border-color: var(--border); + --fc-button-hover-bg-color: var(--code-bg); + --fc-button-hover-border-color: var(--accent-line); + --fc-button-active-bg-color: var(--accent-soft); + --fc-button-active-border-color: var(--accent-line); + background: var(--entry); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1rem; color: var(--primary); } + .fc .fc-daygrid-day-number, .fc .fc-col-header-cell-cushion { color: var(--secondary); } + .fc .fc-day-today .fc-daygrid-day-number { color: var(--accent); font-weight: 600; } + .fc-event { border-radius: 4px; } {{- end }} diff --git a/src/publish_assistant/generate_content.py b/src/publish_assistant/generate_content.py index a1b81ca..1c1da34 100644 --- a/src/publish_assistant/generate_content.py +++ b/src/publish_assistant/generate_content.py @@ -178,6 +178,12 @@ def load_venue_digests(papers_dir: Path) -> dict[str, list[dict]]: # Markdown body renderers # --------------------------------------------------------------------------- +def _bold_rank(rank: str) -> str: + """Bold a rank that may carry a literal asterisk. '**A***' closes the + emphasis on the second star, leaving the third one loose outside it.""" + return "**" + str(rank).replace("*", r"\*") + "**" + + def _conf_body(fm: dict, digests: list[dict] | None = None, base_path: str = "") -> str: rank = fm.get("icore_rank") or "—" hp = fm.get("homepage") or "" @@ -196,7 +202,7 @@ def _conf_body(fm: dict, digests: list[dict] | None = None, base_path: str = "") lines = [f"\n*{fm.get('full_name', '')}*\n"] lines += [ "| | |", "|---|---|", - f"| **ICORE Rank** | **{rank}** |", + f"| **ICORE Rank** | {_bold_rank(rank)} |", f"| **Domains** | {domains} |", ] if hp: @@ -471,7 +477,7 @@ def _conferences_section_body(venues: dict, icore: dict, deadlines: dict, link = f"[{acronym}]({base_path}/venues/conferences/{acronym.lower()}/)" abs_cell = abstract if (abstract and abstract != paper) else "" dig_cell = str(n_dig) if n_dig else "—" - lines.append(f"| {link} | {full_name} | **{rank}** | {domains} | {abs_cell} | {paper} | {notif} | {event} | {location} | {dig_cell} |") + lines.append(f"| {link} | {full_name} | {_bold_rank(rank)} | {domains} | {abs_cell} | {paper} | {notif} | {event} | {location} | {dig_cell} |") return "\n".join(lines) + "\n" @@ -503,6 +509,18 @@ def _journals_section_body(venues: dict, venue_digests: dict | None = None, base # Calendar events builder (for FullCalendar) # --------------------------------------------------------------------------- +# One chip colour per event kind. Backgrounds stay pale and dark ink is set +# explicitly, so a chip is legible on both the light and the dark site theme — +# FullCalendar's default white event text would not be. +EVENT_COLORS = { + "abstract": ("#f0d2a4", "#4a3212"), + "paper": ("#f2b3ac", "#5a1f19"), + "notification": ("#b9dfd0", "#14402f"), + "event": ("#bdd2ee", "#1a3557"), + "special": ("#d8c8f0", "#35215c"), +} + + def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list[dict]: events: list[dict] = [] for conf in venues.get("conferences") or []: @@ -515,15 +533,17 @@ def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list cycle_name = cycle.get("name") or "" prefix = f"{acronym} {cycle_name}".strip() cfp_url = cycle.get("cfp_url") or dl.get("cfp_url") or "" - for field, label, color in [ - ("abstract_deadline", "abstract deadline", "#f4a261"), - ("submission_deadline", "paper deadline", "#e63946"), - ("notification", "notification", "#2a9d8f"), + for field, label, kind in [ + ("abstract_deadline", "abstract deadline", "abstract"), + ("submission_deadline", "paper deadline", "paper"), + ("notification", "notification", "notification"), ]: + color, text_color = EVENT_COLORS[kind] iso = _parse_date(cycle.get(field) or "") if iso: ev: dict = {"title": f"{prefix} — {label}", "start": iso, - "url": url, "color": color, "allDay": True} + "url": url, "color": color, + "textColor": text_color, "allDay": True} props: dict = {} if location: props["location"] = location @@ -537,16 +557,17 @@ def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list start, end = _parse_date_range(dl.get("event_dates") or "") if start: + color, text_color = EVENT_COLORS["event"] ev = {"title": acronym, "start": start, "url": url, - "color": "#457b9d", "allDay": True} + "color": color, "textColor": text_color, "allDay": True} if end: ev["end"] = end if location: ev["extendedProps"] = {"location": location} events.append(ev) - # Journal special issue deadlines — one purple series, distinct from conferences - journal_color = "#7b2cbf" + # Journal special issue deadlines — one violet series, distinct from conferences + journal_color, journal_text_color = EVENT_COLORS["special"] for journal in venues.get("journals") or []: acronym = journal.get("acronym", "") url = f"{base_path}/venues/journals/{acronym.lower()}/" @@ -563,7 +584,7 @@ def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list if iso: ev = {"title": f"{acronym} SI — {si_title} — {label}", "start": iso, "url": url, "color": journal_color, - "allDay": True} + "textColor": journal_text_color, "allDay": True} if cfp_url: ev["extendedProps"] = {"cfp_url": cfp_url} events.append(ev)