Replace the grey theme with a green-slate light/dark pair
All checks were successful
Build and deploy static pages / build-and-push (push) Successful in 13s

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 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 20:28:35 +02:00
parent 69b2c06b28
commit 4de1553c21
7 changed files with 364 additions and 90 deletions

View File

@@ -3,6 +3,175 @@
themes/PaperMod submodule — those never get committed, and CI checks the themes/PaperMod submodule — those never get committed, and CI checks the
submodule out fresh, so they would be missing from the deployed site. */ 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 /* Shorter hero block: PaperMod reserves 320px / 260px for a lead image we
don't use, which pushed the venue tables below the fold. */ don't use, which pushed the venue tables below the fold. */
.first-entry { .first-entry {
@@ -19,7 +188,7 @@
full title weight; the topic reads as a secondary breadcrumb. */ full title weight; the topic reads as a secondary breadcrumb. */
.logo-sep { .logo-sep {
margin: 0 6px; margin: 0 6px;
color: var(--secondary); color: var(--tertiary);
font-size: 24px; font-size: 24px;
font-weight: 400; font-weight: 400;
} }
@@ -30,6 +199,10 @@
color: var(--secondary); color: var(--secondary);
} }
.logo .logo-topic:hover {
color: var(--accent);
}
/* Topic cards on the home page. The stats line and the section shortcuts sit /* 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 inside PaperMod's .post-entry, whose ::before overlay swallows clicks, so the
shortcut links need to be lifted above it to stay clickable. */ shortcut links need to be lifted above it to stay clickable. */
@@ -44,6 +217,11 @@
color: var(--secondary); color: var(--secondary);
} }
.topic-stats strong {
color: var(--primary);
font-weight: 600;
}
.topic-links { .topic-links {
display: flex; display: flex;
gap: 16px; gap: 16px;
@@ -53,7 +231,12 @@
} }
.topic-links a { .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 /* Intro copy above a list of cards. PaperMod gives .post-entry a bottom margin

View File

@@ -1,13 +1,14 @@
--- ---
title: Submission Deadlines title: Submission Deadlines
layout: calendar layout: calendar
generated: '2026-08-17T18:03:33Z' generated: '2026-08-17T18:20:48Z'
draft: false draft: false
events: events:
- title: OSDI — abstract deadline - title: OSDI — abstract deadline
start: '2026-12-01' start: '2026-12-01'
url: /cloud-edge/venues/conferences/osdi/ url: /cloud-edge/venues/conferences/osdi/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Baltimore, MD, USA location: Baltimore, MD, USA
@@ -15,7 +16,8 @@ events:
- title: OSDI — paper deadline - title: OSDI — paper deadline
start: '2026-12-08' start: '2026-12-08'
url: /cloud-edge/venues/conferences/osdi/ url: /cloud-edge/venues/conferences/osdi/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Baltimore, MD, USA location: Baltimore, MD, USA
@@ -23,7 +25,8 @@ events:
- title: OSDI — notification - title: OSDI — notification
start: '2027-03-16' start: '2027-03-16'
url: /cloud-edge/venues/conferences/osdi/ url: /cloud-edge/venues/conferences/osdi/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Baltimore, MD, USA location: Baltimore, MD, USA
@@ -31,7 +34,8 @@ events:
- title: OSDI - title: OSDI
start: '2027-07-07' start: '2027-07-07'
url: /cloud-edge/venues/conferences/osdi/ url: /cloud-edge/venues/conferences/osdi/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2027-07-10' end: '2027-07-10'
extendedProps: extendedProps:
@@ -39,7 +43,8 @@ events:
- title: SOSP — abstract deadline - title: SOSP — abstract deadline
start: '2026-03-26' start: '2026-03-26'
url: /cloud-edge/venues/conferences/sosp/ url: /cloud-edge/venues/conferences/sosp/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Prague, Czechia location: Prague, Czechia
@@ -47,7 +52,8 @@ events:
- title: SOSP — paper deadline - title: SOSP — paper deadline
start: '2026-04-01' start: '2026-04-01'
url: /cloud-edge/venues/conferences/sosp/ url: /cloud-edge/venues/conferences/sosp/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Prague, Czechia location: Prague, Czechia
@@ -55,7 +61,8 @@ events:
- title: SOSP — notification - title: SOSP — notification
start: '2026-07-03' start: '2026-07-03'
url: /cloud-edge/venues/conferences/sosp/ url: /cloud-edge/venues/conferences/sosp/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Prague, Czechia location: Prague, Czechia
@@ -63,7 +70,8 @@ events:
- title: SOSP - title: SOSP
start: '2026-09-29' start: '2026-09-29'
url: /cloud-edge/venues/conferences/sosp/ url: /cloud-edge/venues/conferences/sosp/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-10-03' end: '2026-10-03'
extendedProps: extendedProps:
@@ -71,7 +79,8 @@ events:
- title: NSDI Spring — abstract deadline - title: NSDI Spring — abstract deadline
start: '2026-04-16' start: '2026-04-16'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -80,7 +89,8 @@ events:
- title: NSDI Spring — paper deadline - title: NSDI Spring — paper deadline
start: '2026-04-23' start: '2026-04-23'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -89,7 +99,8 @@ events:
- title: NSDI Spring — notification - title: NSDI Spring — notification
start: '2026-07-23' start: '2026-07-23'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -98,7 +109,8 @@ events:
- title: NSDI Fall — abstract deadline - title: NSDI Fall — abstract deadline
start: '2026-09-10' start: '2026-09-10'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -107,7 +119,8 @@ events:
- title: NSDI Fall — paper deadline - title: NSDI Fall — paper deadline
start: '2026-09-17' start: '2026-09-17'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -116,7 +129,8 @@ events:
- title: NSDI Fall — notification - title: NSDI Fall — notification
start: '2026-12-08' start: '2026-12-08'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Providence, RI, USA location: Providence, RI, USA
@@ -125,7 +139,8 @@ events:
- title: NSDI - title: NSDI
start: '2027-05-11' start: '2027-05-11'
url: /cloud-edge/venues/conferences/nsdi/ url: /cloud-edge/venues/conferences/nsdi/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2027-05-14' end: '2027-05-14'
extendedProps: extendedProps:
@@ -133,7 +148,8 @@ events:
- title: EuroSys Spring — abstract deadline - title: EuroSys Spring — abstract deadline
start: '2026-05-07' start: '2026-05-07'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -142,7 +158,8 @@ events:
- title: EuroSys Spring — paper deadline - title: EuroSys Spring — paper deadline
start: '2026-05-14' start: '2026-05-14'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -151,7 +168,8 @@ events:
- title: EuroSys Spring — notification - title: EuroSys Spring — notification
start: '2026-08-21' start: '2026-08-21'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -160,7 +178,8 @@ events:
- title: EuroSys Fall — abstract deadline - title: EuroSys Fall — abstract deadline
start: '2026-09-17' start: '2026-09-17'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -169,7 +188,8 @@ events:
- title: EuroSys Fall — paper deadline - title: EuroSys Fall — paper deadline
start: '2026-09-24' start: '2026-09-24'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -178,7 +198,8 @@ events:
- title: EuroSys Fall — notification - title: EuroSys Fall — notification
start: '2027-01-29' start: '2027-01-29'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Rabat, Morocco location: Rabat, Morocco
@@ -187,7 +208,8 @@ events:
- title: EuroSys - title: EuroSys
start: '2027-04-19' start: '2027-04-19'
url: /cloud-edge/venues/conferences/eurosys/ url: /cloud-edge/venues/conferences/eurosys/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2027-04-24' end: '2027-04-24'
extendedProps: extendedProps:
@@ -195,7 +217,8 @@ events:
- title: ATC — paper deadline - title: ATC — paper deadline
start: '2026-06-10' start: '2026-06-10'
url: /cloud-edge/venues/conferences/atc/ url: /cloud-edge/venues/conferences/atc/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Hong Kong location: Hong Kong
@@ -203,7 +226,8 @@ events:
- title: ATC — notification - title: ATC — notification
start: '2026-09-18' start: '2026-09-18'
url: /cloud-edge/venues/conferences/atc/ url: /cloud-edge/venues/conferences/atc/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Hong Kong location: Hong Kong
@@ -211,7 +235,8 @@ events:
- title: ATC - title: ATC
start: '2026-11-16' start: '2026-11-16'
url: /cloud-edge/venues/conferences/atc/ url: /cloud-edge/venues/conferences/atc/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-11-19' end: '2026-11-19'
extendedProps: extendedProps:
@@ -219,7 +244,8 @@ events:
- title: SoCC Round 1 — abstract deadline - title: SoCC Round 1 — abstract deadline
start: '2026-02-06' start: '2026-02-06'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -228,7 +254,8 @@ events:
- title: SoCC Round 1 — paper deadline - title: SoCC Round 1 — paper deadline
start: '2026-02-13' start: '2026-02-13'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -237,7 +264,8 @@ events:
- title: SoCC Round 1 — notification - title: SoCC Round 1 — notification
start: '2026-04-29' start: '2026-04-29'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -246,7 +274,8 @@ events:
- title: SoCC Round 2 — abstract deadline - title: SoCC Round 2 — abstract deadline
start: '2026-07-07' start: '2026-07-07'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -255,7 +284,8 @@ events:
- title: SoCC Round 2 — paper deadline - title: SoCC Round 2 — paper deadline
start: '2026-07-14' start: '2026-07-14'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -264,7 +294,8 @@ events:
- title: SoCC Round 2 — notification - title: SoCC Round 2 — notification
start: '2026-09-26' start: '2026-09-26'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Singapore location: Singapore
@@ -273,7 +304,8 @@ events:
- title: SoCC - title: SoCC
start: '2026-11-18' start: '2026-11-18'
url: /cloud-edge/venues/conferences/socc/ url: /cloud-edge/venues/conferences/socc/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-11-21' end: '2026-11-21'
extendedProps: extendedProps:
@@ -281,7 +313,8 @@ events:
- title: Middleware Winter — abstract deadline - title: Middleware Winter — abstract deadline
start: '2025-12-09' start: '2025-12-09'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -290,7 +323,8 @@ events:
- title: Middleware Winter — paper deadline - title: Middleware Winter — paper deadline
start: '2025-12-12' start: '2025-12-12'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -299,7 +333,8 @@ events:
- title: Middleware Winter — notification - title: Middleware Winter — notification
start: '2026-03-06' start: '2026-03-06'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -308,7 +343,8 @@ events:
- title: Middleware Summer — abstract deadline - title: Middleware Summer — abstract deadline
start: '2026-05-29' start: '2026-05-29'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -317,7 +353,8 @@ events:
- title: Middleware Summer — paper deadline - title: Middleware Summer — paper deadline
start: '2026-06-05' start: '2026-06-05'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -326,7 +363,8 @@ events:
- title: Middleware Summer — notification - title: Middleware Summer — notification
start: '2026-08-28' start: '2026-08-28'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Tarragona, Spain location: Tarragona, Spain
@@ -335,7 +373,8 @@ events:
- title: Middleware - title: Middleware
start: '2026-12-14' start: '2026-12-14'
url: /cloud-edge/venues/conferences/middleware/ url: /cloud-edge/venues/conferences/middleware/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-12-19' end: '2026-12-19'
extendedProps: extendedProps:
@@ -343,7 +382,8 @@ events:
- title: IPDPS — abstract deadline - title: IPDPS — abstract deadline
start: '2026-10-01' start: '2026-10-01'
url: /cloud-edge/venues/conferences/ipdps/ url: /cloud-edge/venues/conferences/ipdps/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Seattle, WA, USA location: Seattle, WA, USA
@@ -351,7 +391,8 @@ events:
- title: IPDPS — paper deadline - title: IPDPS — paper deadline
start: '2026-10-08' start: '2026-10-08'
url: /cloud-edge/venues/conferences/ipdps/ url: /cloud-edge/venues/conferences/ipdps/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Seattle, WA, USA location: Seattle, WA, USA
@@ -359,7 +400,8 @@ events:
- title: IPDPS — notification - title: IPDPS — notification
start: '2027-02-02' start: '2027-02-02'
url: /cloud-edge/venues/conferences/ipdps/ url: /cloud-edge/venues/conferences/ipdps/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Seattle, WA, USA location: Seattle, WA, USA
@@ -367,7 +409,8 @@ events:
- title: IPDPS - title: IPDPS
start: '2027-06-01' start: '2027-06-01'
url: /cloud-edge/venues/conferences/ipdps/ url: /cloud-edge/venues/conferences/ipdps/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2027-06-06' end: '2027-06-06'
extendedProps: extendedProps:
@@ -375,7 +418,8 @@ events:
- title: SC — abstract deadline - title: SC — abstract deadline
start: '2026-04-01' start: '2026-04-01'
url: /cloud-edge/venues/conferences/sc/ url: /cloud-edge/venues/conferences/sc/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Chicago, IL, USA location: Chicago, IL, USA
@@ -383,7 +427,8 @@ events:
- title: SC — paper deadline - title: SC — paper deadline
start: '2026-04-08' start: '2026-04-08'
url: /cloud-edge/venues/conferences/sc/ url: /cloud-edge/venues/conferences/sc/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Chicago, IL, USA location: Chicago, IL, USA
@@ -391,7 +436,8 @@ events:
- title: SC — notification - title: SC — notification
start: '2026-07-01' start: '2026-07-01'
url: /cloud-edge/venues/conferences/sc/ url: /cloud-edge/venues/conferences/sc/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Chicago, IL, USA location: Chicago, IL, USA
@@ -399,7 +445,8 @@ events:
- title: SC - title: SC
start: '2026-11-15' start: '2026-11-15'
url: /cloud-edge/venues/conferences/sc/ url: /cloud-edge/venues/conferences/sc/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-11-21' end: '2026-11-21'
extendedProps: extendedProps:
@@ -407,7 +454,8 @@ events:
- title: HPDC — abstract deadline - title: HPDC — abstract deadline
start: '2026-01-29' start: '2026-01-29'
url: /cloud-edge/venues/conferences/hpdc/ url: /cloud-edge/venues/conferences/hpdc/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cleveland, OH, USA location: Cleveland, OH, USA
@@ -415,7 +463,8 @@ events:
- title: HPDC — paper deadline - title: HPDC — paper deadline
start: '2026-02-05' start: '2026-02-05'
url: /cloud-edge/venues/conferences/hpdc/ url: /cloud-edge/venues/conferences/hpdc/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cleveland, OH, USA location: Cleveland, OH, USA
@@ -423,7 +472,8 @@ events:
- title: HPDC — notification - title: HPDC — notification
start: '2026-03-31' start: '2026-03-31'
url: /cloud-edge/venues/conferences/hpdc/ url: /cloud-edge/venues/conferences/hpdc/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cleveland, OH, USA location: Cleveland, OH, USA
@@ -431,7 +481,8 @@ events:
- title: HPDC - title: HPDC
start: '2026-07-13' start: '2026-07-13'
url: /cloud-edge/venues/conferences/hpdc/ url: /cloud-edge/venues/conferences/hpdc/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-07-17' end: '2026-07-17'
extendedProps: extendedProps:
@@ -439,7 +490,8 @@ events:
- title: MobiSys — abstract deadline - title: MobiSys — abstract deadline
start: '2025-11-28' start: '2025-11-28'
url: /cloud-edge/venues/conferences/mobisys/ url: /cloud-edge/venues/conferences/mobisys/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cambridge, UK location: Cambridge, UK
@@ -447,7 +499,8 @@ events:
- title: MobiSys — paper deadline - title: MobiSys — paper deadline
start: '2025-12-05' start: '2025-12-05'
url: /cloud-edge/venues/conferences/mobisys/ url: /cloud-edge/venues/conferences/mobisys/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cambridge, UK location: Cambridge, UK
@@ -455,7 +508,8 @@ events:
- title: MobiSys — notification - title: MobiSys — notification
start: '2026-03-02' start: '2026-03-02'
url: /cloud-edge/venues/conferences/mobisys/ url: /cloud-edge/venues/conferences/mobisys/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Cambridge, UK location: Cambridge, UK
@@ -463,7 +517,8 @@ events:
- title: MobiSys - title: MobiSys
start: '2026-06-22' start: '2026-06-22'
url: /cloud-edge/venues/conferences/mobisys/ url: /cloud-edge/venues/conferences/mobisys/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-06-25' end: '2026-06-25'
extendedProps: extendedProps:
@@ -471,34 +526,39 @@ events:
- title: SEC — abstract deadline - title: SEC — abstract deadline
start: '2026-05-08' start: '2026-05-08'
url: /cloud-edge/venues/conferences/sec/ url: /cloud-edge/venues/conferences/sec/
color: '#f4a261' color: '#f0d2a4'
textColor: '#4a3212'
allDay: true allDay: true
extendedProps: extendedProps:
cfp_url: https://acm-ieee-sec.org/2026/ cfp_url: https://acm-ieee-sec.org/2026/
- title: SEC — paper deadline - title: SEC — paper deadline
start: '2026-05-08' start: '2026-05-08'
url: /cloud-edge/venues/conferences/sec/ url: /cloud-edge/venues/conferences/sec/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
cfp_url: https://acm-ieee-sec.org/2026/ cfp_url: https://acm-ieee-sec.org/2026/
- title: SEC — notification - title: SEC — notification
start: '2026-07-29' start: '2026-07-29'
url: /cloud-edge/venues/conferences/sec/ url: /cloud-edge/venues/conferences/sec/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
cfp_url: https://acm-ieee-sec.org/2026/ cfp_url: https://acm-ieee-sec.org/2026/
- title: SEC - title: SEC
start: '2026-10-13' start: '2026-10-13'
url: /cloud-edge/venues/conferences/sec/ url: /cloud-edge/venues/conferences/sec/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-10-17' end: '2026-10-17'
- title: CCGrid — paper deadline - title: CCGrid — paper deadline
start: '2025-12-21' start: '2025-12-21'
url: /cloud-edge/venues/conferences/ccgrid/ url: /cloud-edge/venues/conferences/ccgrid/
color: '#e63946' color: '#f2b3ac'
textColor: '#5a1f19'
allDay: true allDay: true
extendedProps: extendedProps:
location: Sydney, Australia location: Sydney, Australia
@@ -506,7 +566,8 @@ events:
- title: CCGrid — notification - title: CCGrid — notification
start: '2026-02-10' start: '2026-02-10'
url: /cloud-edge/venues/conferences/ccgrid/ url: /cloud-edge/venues/conferences/ccgrid/
color: '#2a9d8f' color: '#b9dfd0'
textColor: '#14402f'
allDay: true allDay: true
extendedProps: extendedProps:
location: Sydney, Australia location: Sydney, Australia
@@ -514,7 +575,8 @@ events:
- title: CCGrid - title: CCGrid
start: '2026-05-18' start: '2026-05-18'
url: /cloud-edge/venues/conferences/ccgrid/ url: /cloud-edge/venues/conferences/ccgrid/
color: '#457b9d' color: '#bdd2ee'
textColor: '#1a3557'
allDay: true allDay: true
end: '2026-05-22' end: '2026-05-22'
extendedProps: extendedProps:

View File

@@ -23,7 +23,7 @@ camera_ready: Jun 3, 2027
| | | | | |
|---|---| |---|---|
| **ICORE Rank** | **A*** | | **ICORE Rank** | **A\*** |
| **Domains** | `edge-and-cloud`, `operating-systems`, `distributed-systems` | | **Domains** | `edge-and-cloud`, `operating-systems`, `distributed-systems` |
| **Website** | [https://www.usenix.org/conference/osdi26](https://www.usenix.org/conference/osdi26) | | **Website** | [https://www.usenix.org/conference/osdi26](https://www.usenix.org/conference/osdi26) |
| **Latest digest** | [OSDI 2025](/cloud-edge/digests/osdi-2025/) — 13 papers | | **Latest digest** | [OSDI 2025](/cloud-edge/digests/osdi-2025/) — 13 papers |

View File

@@ -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` | | **Domains** | `edge-and-cloud`, `operating-systems`, `distributed-systems` |
| **Website** | [https://sigops.org/s/conferences/sosp/](https://sigops.org/s/conferences/sosp/) | | **Website** | [https://sigops.org/s/conferences/sosp/](https://sigops.org/s/conferences/sosp/) |
| **Latest digest** | [SOSP 2025](/cloud-edge/digests/sosp-2025/) — 14 papers | | **Latest digest** | [SOSP 2025](/cloud-edge/digests/sosp-2025/) — 14 papers |

View File

@@ -6,8 +6,8 @@ draft: false
| Conference | Full name | ICORE | Domains | Abstract | Paper deadline | Notification | Event | Location | Digests | | 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 | | [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 | | [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 | | [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 | | [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 | | [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 |

View File

@@ -7,22 +7,30 @@
.fc table { display: table; overflow-x: visible; margin-bottom: 0; border-radius: 0; word-break: normal; } .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 th { min-width: 0; text-align: center; }
.fc td:first-child, .fc th:first-child { width: auto; } .fc td:first-child, .fc th:first-child { width: auto; }
/* Map PaperMod dark theme to FullCalendar CSS variables */ /* Map the site palette onto FullCalendar's variables. The values are theme
[data-theme="dark"] #pa-calendar { variables, so one mapping covers both light and dark. */
--fc-page-bg-color: var(--theme); #pa-calendar {
--fc-neutral-bg-color: var(--entry); --fc-page-bg-color: var(--entry);
--fc-neutral-bg-color: var(--code-bg);
--fc-neutral-text-color: var(--secondary); --fc-neutral-text-color: var(--secondary);
--fc-border-color: var(--border); --fc-border-color: var(--border);
--fc-today-bg-color: rgba(255, 220, 40, 0.08); --fc-today-bg-color: var(--accent-soft);
--fc-list-event-hover-bg-color: var(--entry); --fc-list-event-hover-bg-color: var(--accent-soft);
--fc-button-text-color: var(--primary); --fc-button-text-color: var(--primary);
--fc-button-bg-color: var(--entry); --fc-button-bg-color: var(--entry);
--fc-button-border-color: var(--border); --fc-button-border-color: var(--border);
--fc-button-hover-bg-color: var(--tertiary); --fc-button-hover-bg-color: var(--code-bg);
--fc-button-hover-border-color: var(--border); --fc-button-hover-border-color: var(--accent-line);
--fc-button-active-bg-color: var(--tertiary); --fc-button-active-bg-color: var(--accent-soft);
--fc-button-active-border-color: var(--border); --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); 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; }
</style> </style>
{{- end }} {{- end }}

View File

@@ -178,6 +178,12 @@ def load_venue_digests(papers_dir: Path) -> dict[str, list[dict]]:
# Markdown body renderers # 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: def _conf_body(fm: dict, digests: list[dict] | None = None, base_path: str = "") -> str:
rank = fm.get("icore_rank") or "" rank = fm.get("icore_rank") or ""
hp = fm.get("homepage") 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"\n*{fm.get('full_name', '')}*\n"]
lines += [ lines += [
"| | |", "|---|---|", "| | |", "|---|---|",
f"| **ICORE Rank** | **{rank}** |", f"| **ICORE Rank** | {_bold_rank(rank)} |",
f"| **Domains** | {domains} |", f"| **Domains** | {domains} |",
] ]
if hp: 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()}/)" link = f"[{acronym}]({base_path}/venues/conferences/{acronym.lower()}/)"
abs_cell = abstract if (abstract and abstract != paper) else "" abs_cell = abstract if (abstract and abstract != paper) else ""
dig_cell = str(n_dig) if n_dig 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" 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) # 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]: def _calendar_events(venues: dict, deadlines: dict, base_path: str = "") -> list[dict]:
events: list[dict] = [] events: list[dict] = []
for conf in venues.get("conferences") or []: 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 "" cycle_name = cycle.get("name") or ""
prefix = f"{acronym} {cycle_name}".strip() prefix = f"{acronym} {cycle_name}".strip()
cfp_url = cycle.get("cfp_url") or dl.get("cfp_url") or "" cfp_url = cycle.get("cfp_url") or dl.get("cfp_url") or ""
for field, label, color in [ for field, label, kind in [
("abstract_deadline", "abstract deadline", "#f4a261"), ("abstract_deadline", "abstract deadline", "abstract"),
("submission_deadline", "paper deadline", "#e63946"), ("submission_deadline", "paper deadline", "paper"),
("notification", "notification", "#2a9d8f"), ("notification", "notification", "notification"),
]: ]:
color, text_color = EVENT_COLORS[kind]
iso = _parse_date(cycle.get(field) or "") iso = _parse_date(cycle.get(field) or "")
if iso: if iso:
ev: dict = {"title": f"{prefix}{label}", "start": 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 = {} props: dict = {}
if location: if location:
props["location"] = 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 "") start, end = _parse_date_range(dl.get("event_dates") or "")
if start: if start:
color, text_color = EVENT_COLORS["event"]
ev = {"title": acronym, "start": start, "url": url, ev = {"title": acronym, "start": start, "url": url,
"color": "#457b9d", "allDay": True} "color": color, "textColor": text_color, "allDay": True}
if end: if end:
ev["end"] = end ev["end"] = end
if location: if location:
ev["extendedProps"] = {"location": location} ev["extendedProps"] = {"location": location}
events.append(ev) events.append(ev)
# Journal special issue deadlines — one purple series, distinct from conferences # Journal special issue deadlines — one violet series, distinct from conferences
journal_color = "#7b2cbf" journal_color, journal_text_color = EVENT_COLORS["special"]
for journal in venues.get("journals") or []: for journal in venues.get("journals") or []:
acronym = journal.get("acronym", "") acronym = journal.get("acronym", "")
url = f"{base_path}/venues/journals/{acronym.lower()}/" 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: if iso:
ev = {"title": f"{acronym} SI — {si_title}{label}", ev = {"title": f"{acronym} SI — {si_title}{label}",
"start": iso, "url": url, "color": journal_color, "start": iso, "url": url, "color": journal_color,
"allDay": True} "textColor": journal_text_color, "allDay": True}
if cfp_url: if cfp_url:
ev["extendedProps"] = {"cfp_url": cfp_url} ev["extendedProps"] = {"cfp_url": cfp_url}
events.append(ev) events.append(ev)