From d1f8afc4404adc2ec4572888078183bd013f5155 Mon Sep 17 00:00:00 2001 From: Ed Chalstrey Date: Thu, 18 Jun 2026 11:14:51 +0100 Subject: [PATCH 1/6] feat: add interactive visuals slideshow to hero section and update configuration --- assets/css/gambit.css | 94 ++ config.yaml | 7 + layouts/partials/hero.html | 55 + static/images/visuals/kuhn-4-card.svg | 1764 +++++++++++++++++++++++++ static/images/visuals/test_image.jpg | Bin 0 -> 39944 bytes 5 files changed, 1920 insertions(+) create mode 100644 static/images/visuals/kuhn-4-card.svg create mode 100644 static/images/visuals/test_image.jpg diff --git a/assets/css/gambit.css b/assets/css/gambit.css index 7a8c638..2b63755 100644 --- a/assets/css/gambit.css +++ b/assets/css/gambit.css @@ -1110,3 +1110,97 @@ td { margin: 0; font-size: 0.9rem; } + +/* Visuals Slideshow */ +.visuals-slideshow { + position: relative; + max-width: 800px; + margin: 2rem auto; +} + +.visuals-track { + position: relative; + overflow: hidden; + border-radius: 8px; + box-shadow: var(--shadow-medium); +} + +.visuals-slide { + display: none; + flex-direction: column; + align-items: center; +} + +.visuals-slide.active { + display: flex; + animation: fadeIn 0.5s ease-in-out; +} + +.visuals-slide img { + width: 100%; + height: auto; + object-fit: contain; + max-height: 450px; + background: #f8f8f8; +} + +.visuals-caption { + padding: 0.75rem 1rem; + font-size: 0.9rem; + color: var(--color-text-medium); + text-align: center; + background: var(--color-white); + border-top: 1px solid #eee; + width: 100%; + box-sizing: border-box; +} + +.visuals-btn { + position: absolute; + top: 50%; + transform: translateY(-50%); + background: rgba(0,0,0,0.4); + color: white; + border: none; + width: 2.5rem; + height: 2.5rem; + border-radius: 50%; + font-size: 1.5rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background 0.2s; + z-index: 10; +} + +.visuals-btn:hover { background: rgba(0,0,0,0.65); } +.visuals-prev { left: 0.5rem; } +.visuals-next { right: 0.5rem; } + +.visuals-dots { + display: flex; + justify-content: center; + gap: 0.5rem; + margin-top: 0.75rem; +} + +.visuals-dot { + width: 10px; + height: 10px; + border-radius: 50%; + background: #ccc; + cursor: pointer; + transition: background 0.2s; +} + +.visuals-dot.active { background: var(--color-primary); } + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@media (max-width: 768px) { + .visuals-btn { width: 2rem; height: 2rem; font-size: 1.2rem; } +} diff --git a/config.yaml b/config.yaml index cbe2fab..7290336 100644 --- a/config.yaml +++ b/config.yaml @@ -28,6 +28,13 @@ params: description: - "Gambit is a set of software tools for doing computation on finite, noncooperative games in extensive or strategy form and a set of file formats for storing and communicating games to external tools." - "The Gambit Project was founded in the mid-1980s at the California Institute of Technology and to this day is actively developed by a community of contributors, with core development led by [The Alan Turing Institute](https://www.turing.ac.uk) as part of its project: [Automated analysis of strategic interactions](https://www.turing.ac.uk/research/research-projects/automated-analysis-strategic-interactions)." + visuals: + title: "Visualisations" + slides: + - image: visuals/kuhn-4-card.svg + caption: "Extensive form representation of a 4-card Kuhn poker game, illustrating information sets and strategy nodes." + - image: visuals/test_image.jpg + caption: "Placeholder image — replace with a screenshot or diagram from Gambit." software_title: "Open source & free to use" software: - name: PyGambit diff --git a/layouts/partials/hero.html b/layouts/partials/hero.html index 7967da0..0462235 100644 --- a/layouts/partials/hero.html +++ b/layouts/partials/hero.html @@ -109,6 +109,61 @@ {{ end }} + + {{- $visuals := index $hero "visuals" }} + {{ if $visuals }} + {{ with $visuals.title }} +
{{ . }}
+ {{ end }} +
+
+ {{- range $i, $slide := $visuals.slides }} +
+ {{ $slide.caption }} + {{ with $slide.caption }} +
{{ . }}
+ {{ end }} +
+ {{- end }} +
+ + +
+ {{- range $i, $slide := $visuals.slides }} + + {{- end }} +
+
+ + {{ end }} + {{- $testimonials := index $hero "testimonials" }} {{ if $testimonials }} diff --git a/static/images/visuals/kuhn-4-card.svg b/static/images/visuals/kuhn-4-card.svg new file mode 100644 index 0000000..0b48c80 --- /dev/null +++ b/static/images/visuals/kuhn-4-card.svg @@ -0,0 +1,1764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/visuals/test_image.jpg b/static/images/visuals/test_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89265d6a41838c3e84ac97cff0eaf50b86053262 GIT binary patch literal 39944 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 Date: Thu, 18 Jun 2026 11:20:35 +0100 Subject: [PATCH 2/6] refactor: reorder hero layout sections to position software and what-is-gambit blocks after the visuals slideshow --- layouts/partials/hero.html | 110 ++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/layouts/partials/hero.html b/layouts/partials/hero.html index 0462235..0cc8aac 100644 --- a/layouts/partials/hero.html +++ b/layouts/partials/hero.html @@ -54,61 +54,6 @@ - - {{- $softwareTitle := index $hero "software_title" }} - {{ if $softwareTitle }} -
{{ $softwareTitle }}
- {{ end }} - {{- $software := index $hero "software" }} - {{ if $software }} - - {{ end }} - - - {{- $whatgambitTitle := index $hero "whatgambit_title" }} - {{ if $whatgambitTitle }} -
{{ $whatgambitTitle }}
- {{ end }} - {{- $whatgambit := index $hero "whatgambit" }} - {{ if $whatgambit }} -
-
- {{- range $whatgambit }} - - {{- end }} -
-
- {{ end }} - {{- $visuals := index $hero "visuals" }} {{ if $visuals }} @@ -164,6 +109,61 @@ {{ end }} + + {{- $softwareTitle := index $hero "software_title" }} + {{ if $softwareTitle }} +
{{ $softwareTitle }}
+ {{ end }} + {{- $software := index $hero "software" }} + {{ if $software }} + + {{ end }} + + + {{- $whatgambitTitle := index $hero "whatgambit_title" }} + {{ if $whatgambitTitle }} +
{{ $whatgambitTitle }}
+ {{ end }} + {{- $whatgambit := index $hero "whatgambit" }} + {{ if $whatgambit }} +
+
+ {{- range $whatgambit }} + + {{- end }} +
+
+ {{ end }} + {{- $testimonials := index $hero "testimonials" }} {{ if $testimonials }} From c863dfd85afb2329570cd5e9eb825b3d07e5d7f2 Mon Sep 17 00:00:00 2001 From: Ed Chalstrey Date: Thu, 18 Jun 2026 11:29:03 +0100 Subject: [PATCH 3/6] feat: make hero slide transition interval configurable via config.yaml --- config.yaml | 1 + layouts/partials/hero.html | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 7290336..6aec28b 100644 --- a/config.yaml +++ b/config.yaml @@ -30,6 +30,7 @@ params: - "The Gambit Project was founded in the mid-1980s at the California Institute of Technology and to this day is actively developed by a community of contributors, with core development led by [The Alan Turing Institute](https://www.turing.ac.uk) as part of its project: [Automated analysis of strategic interactions](https://www.turing.ac.uk/research/research-projects/automated-analysis-strategic-interactions)." visuals: title: "Visualisations" + interval_seconds: 5 slides: - image: visuals/kuhn-4-card.svg caption: "Extensive form representation of a 4-card Kuhn poker game, illustrating information sets and strategy nodes." diff --git a/layouts/partials/hero.html b/layouts/partials/hero.html index 0cc8aac..0977326 100644 --- a/layouts/partials/hero.html +++ b/layouts/partials/hero.html @@ -84,6 +84,7 @@ const track = document.querySelector('.visuals-track'); const slides = track ? track.querySelectorAll('.visuals-slide') : []; const dots = document.querySelectorAll('.visuals-dot'); + const interval = {{ mul ($visuals.interval_seconds | default 5) 1000 }}; let current = 0, timer; function show(n) { @@ -95,7 +96,7 @@ } function startTimer() { - timer = setInterval(() => show(current + 1), 5000); + timer = setInterval(() => show(current + 1), interval); } document.querySelector('.visuals-prev')?.addEventListener('click', () => { clearInterval(timer); show(current - 1); startTimer(); }); From d8f14da83df87f343d9064bb1eb648f379c58293 Mon Sep 17 00:00:00 2001 From: Ed Chalstrey Date: Thu, 18 Jun 2026 16:43:09 +0100 Subject: [PATCH 4/6] refactor: replace hero slideshow with a responsive CSS grid layout --- assets/css/gambit.css | 92 ++++++++------------------------------ config.yaml | 7 ++- layouts/partials/hero.html | 56 ++++------------------- 3 files changed, 32 insertions(+), 123 deletions(-) diff --git a/assets/css/gambit.css b/assets/css/gambit.css index 2b63755..0a71ba6 100644 --- a/assets/css/gambit.css +++ b/assets/css/gambit.css @@ -1111,96 +1111,40 @@ td { font-size: 0.9rem; } -/* Visuals Slideshow */ -.visuals-slideshow { - position: relative; - max-width: 800px; - margin: 2rem auto; +/* Visuals Gallery */ +.visuals-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1.25rem; + margin: 2rem 0; } -.visuals-track { - position: relative; - overflow: hidden; +.visuals-item { + display: flex; + flex-direction: column; border-radius: 8px; + overflow: hidden; box-shadow: var(--shadow-medium); + background: var(--color-white); } -.visuals-slide { - display: none; - flex-direction: column; - align-items: center; -} - -.visuals-slide.active { - display: flex; - animation: fadeIn 0.5s ease-in-out; -} - -.visuals-slide img { +.visuals-item img { width: 100%; - height: auto; + aspect-ratio: 4 / 3; object-fit: contain; - max-height: 450px; background: #f8f8f8; } .visuals-caption { - padding: 0.75rem 1rem; - font-size: 0.9rem; + padding: 0.6rem 0.75rem; + font-size: 0.85rem; color: var(--color-text-medium); text-align: center; - background: var(--color-white); border-top: 1px solid #eee; - width: 100%; - box-sizing: border-box; -} - -.visuals-btn { - position: absolute; - top: 50%; - transform: translateY(-50%); - background: rgba(0,0,0,0.4); - color: white; - border: none; - width: 2.5rem; - height: 2.5rem; - border-radius: 50%; - font-size: 1.5rem; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.2s; - z-index: 10; -} - -.visuals-btn:hover { background: rgba(0,0,0,0.65); } -.visuals-prev { left: 0.5rem; } -.visuals-next { right: 0.5rem; } - -.visuals-dots { - display: flex; - justify-content: center; - gap: 0.5rem; - margin-top: 0.75rem; -} - -.visuals-dot { - width: 10px; - height: 10px; - border-radius: 50%; - background: #ccc; - cursor: pointer; - transition: background 0.2s; -} - -.visuals-dot.active { background: var(--color-primary); } - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } } @media (max-width: 768px) { - .visuals-btn { width: 2rem; height: 2rem; font-size: 1.2rem; } + .visuals-grid { + grid-template-columns: repeat(2, 1fr); + } } diff --git a/config.yaml b/config.yaml index 6aec28b..27b3493 100644 --- a/config.yaml +++ b/config.yaml @@ -30,12 +30,15 @@ params: - "The Gambit Project was founded in the mid-1980s at the California Institute of Technology and to this day is actively developed by a community of contributors, with core development led by [The Alan Turing Institute](https://www.turing.ac.uk) as part of its project: [Automated analysis of strategic interactions](https://www.turing.ac.uk/research/research-projects/automated-analysis-strategic-interactions)." visuals: title: "Visualisations" - interval_seconds: 5 slides: - image: visuals/kuhn-4-card.svg caption: "Extensive form representation of a 4-card Kuhn poker game, illustrating information sets and strategy nodes." - image: visuals/test_image.jpg - caption: "Placeholder image — replace with a screenshot or diagram from Gambit." + caption: "Placeholder image." + - image: visuals/test_image.jpg + caption: "Placeholder image 2." + - image: visuals/test_image.jpg + caption: "Placeholder image 3." software_title: "Open source & free to use" software: - name: PyGambit diff --git a/layouts/partials/hero.html b/layouts/partials/hero.html index 0977326..bc604ad 100644 --- a/layouts/partials/hero.html +++ b/layouts/partials/hero.html @@ -54,60 +54,22 @@ - + {{- $visuals := index $hero "visuals" }} {{ if $visuals }} {{ with $visuals.title }}
{{ . }}
{{ end }} -
-
- {{- range $i, $slide := $visuals.slides }} -
- {{ $slide.caption }} - {{ with $slide.caption }} -
{{ . }}
- {{ end }} -
- {{- end }} -
- - -
- {{- range $i, $slide := $visuals.slides }} - - {{- end }} +
+ {{- range $visuals.slides }} +
+ {{ .caption }} + {{ with .caption }} +
{{ . }}
+ {{ end }}
+ {{- end }}
- {{ end }} From 1dbd3fd8c2eb4a5362322bbebf6d1535d7c9f491 Mon Sep 17 00:00:00 2001 From: Ed Chalstrey Date: Thu, 18 Jun 2026 16:47:13 +0100 Subject: [PATCH 5/6] style: update visuals gallery grid layout and item styling with hover effects --- assets/css/gambit.css | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/assets/css/gambit.css b/assets/css/gambit.css index 0a71ba6..e5a87d4 100644 --- a/assets/css/gambit.css +++ b/assets/css/gambit.css @@ -1114,18 +1114,25 @@ td { /* Visuals Gallery */ .visuals-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 1.25rem; - margin: 2rem 0; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1rem; + margin: 2rem auto; + max-width: 80%; } .visuals-item { display: flex; flex-direction: column; - border-radius: 8px; + border-radius: 4px; overflow: hidden; - box-shadow: var(--shadow-medium); + border: 1.5px solid var(--color-border-light); background: var(--color-white); + transition: border-color 0.2s, box-shadow 0.2s; +} + +.visuals-item:hover { + border-color: var(--color-primary); + box-shadow: 0 2px 8px var(--shadow-hover); } .visuals-item img { @@ -1136,15 +1143,16 @@ td { } .visuals-caption { - padding: 0.6rem 0.75rem; - font-size: 0.85rem; + padding: 0.5rem 0.6rem; + font-size: 0.8rem; color: var(--color-text-medium); text-align: center; - border-top: 1px solid #eee; + border-top: 1.5px solid var(--color-border-light); } @media (max-width: 768px) { .visuals-grid { grid-template-columns: repeat(2, 1fr); + max-width: 100%; } } From c790aadeceac39c6831ac660cb375b4efa3a95e0 Mon Sep 17 00:00:00 2001 From: Ted Turocy Date: Fri, 19 Jun 2026 14:39:54 +0100 Subject: [PATCH 6/6] Update hero.html We don't really need to say "visualisations" it's obvious what they are! --- layouts/partials/hero.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/partials/hero.html b/layouts/partials/hero.html index bc604ad..bfbc8e1 100644 --- a/layouts/partials/hero.html +++ b/layouts/partials/hero.html @@ -57,9 +57,9 @@ {{- $visuals := index $hero "visuals" }} {{ if $visuals }} - {{ with $visuals.title }} +
{{- range $visuals.slides }}