diff --git a/.github/workflows/create_announcements.yml b/.github/workflows/create_announcements.yml
new file mode 100644
index 00000000000..4b38198e93b
--- /dev/null
+++ b/.github/workflows/create_announcements.yml
@@ -0,0 +1,104 @@
+name: Create announcements
+
+# =====================================================================
+# Generates FORRT announcement posts from the "FORRT Announcements"
+# Google Sheet and delivers them to the deploy as an ARTIFACT — it never
+# commits to main and never runs the full data-processing pipeline.
+#
+# Flow:
+# 1. Download the previous run's announcements artifact (for the cached
+# sheet hash) to decide whether anything changed.
+# 2. Run scripts/create_announcements.R. It no-ops (exits early) when the
+# sheet hash is unchanged.
+# 3. If — and only if — the sheet changed, upload content/post as the
+# `announcements-artifact` and fire the `data-update` repository_dispatch.
+#
+# deploy.yaml downloads `announcements-artifact` and unpacks it over
+# content/post before the Hugo build (see "Apply announcements" there). The
+# latest successful artifact always holds the full current set of posts, so
+# deploys triggered by anything else still pick up the announcements.
+# =====================================================================
+
+on:
+ schedule:
+ - cron: '15 * * * *' # hourly (offset to balance runner load)
+ workflow_dispatch:
+
+concurrency:
+ group: create-announcements
+ cancel-in-progress: false
+
+jobs:
+ announcements:
+ name: Generate announcements
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ actions: read # read previous artifact
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Download previous announcements artifact (for change detection)
+ id: prev
+ uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295
+ continue-on-error: true
+ with:
+ workflow: create_announcements.yml
+ name: announcements-artifact
+ path: .prev
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ search_artifacts: true
+ if_no_artifact_found: warn
+
+ - name: Seed previous hash
+ run: |
+ if [ -f .prev/gs_announcement_hash.txt ]; then
+ cp .prev/gs_announcement_hash.txt gs_announcement_hash.txt
+ echo "Seeded previous hash."
+ else
+ echo "No previous hash — first run or expired artifact."
+ fi
+
+ - name: Setup r2u
+ uses: eddelbuettel/github-actions/r2u-setup@master
+
+ - name: Install R package dependencies
+ run: Rscript -e 'install.packages(c("googlesheets4", "httr", "digest"))'
+
+ - name: Generate announcement posts
+ id: gen
+ run: |
+ before="$(cat gs_announcement_hash.txt 2>/dev/null || echo none)"
+ Rscript scripts/create_announcements.R
+ after="$(cat gs_announcement_hash.txt 2>/dev/null || echo none)"
+ if [ "$before" = "$after" ]; then
+ echo "changed=false" >> "$GITHUB_OUTPUT"
+ echo "Sheet unchanged — nothing to publish."
+ else
+ echo "changed=true" >> "$GITHUB_OUTPUT"
+ echo "Sheet changed — packaging announcements."
+ fi
+
+ - name: Package announcements
+ if: steps.gen.outputs.changed == 'true'
+ run: tar czf announcements.tar.gz content/post
+
+ - name: Upload announcements artifact
+ if: steps.gen.outputs.changed == 'true'
+ uses: actions/upload-artifact@v7
+ with:
+ name: announcements-artifact
+ path: |
+ announcements.tar.gz
+ gs_announcement_hash.txt
+ retention-days: 90
+
+ - name: Trigger production deploy
+ if: steps.gen.outputs.changed == 'true'
+ run: |
+ curl -s -X POST \
+ -H "Authorization: Bearer ${{ secrets.FORRT_PAT }}" \
+ -H "Accept: application/vnd.github+json" \
+ "https://api.github.com/repos/${{ github.repository }}/dispatches" \
+ -d '{"event_type": "data-update"}'
diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml
index 7639e0af497..afd5c362e36 100644
--- a/.github/workflows/deploy.yaml
+++ b/.github/workflows/deploy.yaml
@@ -149,6 +149,31 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
run_id: ${{ steps.data-processing.outputs.run_id }}
+ # =======================
+ # Announcements (generated by create_announcements.yml, delivered as an artifact)
+ # =======================
+ - name: Download announcements artifact
+ id: download-announcements
+ uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295
+ continue-on-error: true
+ with:
+ workflow: create_announcements.yml
+ name: announcements-artifact
+ path: .announcements
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ search_artifacts: true
+ if_no_artifact_found: warn
+
+ - name: Apply announcements
+ if: steps.download-announcements.outcome == 'success'
+ run: |
+ if [ -f .announcements/announcements.tar.gz ]; then
+ echo "📥 Applying announcement posts from artifact..."
+ tar xzf .announcements/announcements.tar.gz
+ else
+ echo "::warning::announcements artifact present but tarball missing; skipping."
+ fi
+
# =======================
# Hugo Build Environment
# =======================
diff --git a/assets/scss/custom.scss b/assets/scss/custom.scss
index c1908fe41b8..e5d6b8ed228 100644
--- a/assets/scss/custom.scss
+++ b/assets/scss/custom.scss
@@ -2990,3 +2990,326 @@ h1.clusters-site-heading.clusters-hub-page__title {
gap: 0.25rem;
}
}
+
+/* ============================================================
+ * Announcements (card grid) — homepage widget + /post/ page
+ * ============================================================ */
+.announcements-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1.6rem;
+}
+.announcement-card {
+ display: flex;
+ flex-direction: column;
+ background: #fff;
+ border: 1px solid #ece9db;
+ border-radius: 12px;
+ overflow: hidden;
+ box-shadow: 0 1px 3px rgba(0, 64, 85, 0.06);
+ transition: transform 0.15s, box-shadow 0.15s;
+ color: inherit;
+ text-decoration: none;
+ height: 100%;
+}
+.announcement-card:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 22px rgba(0, 64, 85, 0.12);
+ text-decoration: none;
+}
+.announcement-card .ac-thumb {
+ aspect-ratio: 16 / 9;
+ background: #eef1ec;
+ overflow: hidden;
+}
+.announcement-card .ac-thumb img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+.announcement-card .ac-body {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ padding: 1rem 1.1rem 1.2rem;
+}
+.announcement-card .ac-meta {
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ margin-bottom: 0.55rem;
+}
+.announcement-card .ac-date {
+ font-size: 0.78rem;
+ color: #8a8a8a;
+}
+.announcement-card h3 {
+ font-size: 1.06rem;
+ line-height: 1.3;
+ color: #004055;
+ margin: 0 0 0.5rem;
+}
+.announcement-card .ac-summary {
+ flex: 1;
+ font-size: 0.9rem;
+ line-height: 1.5;
+ color: #4a4a4a;
+ margin: 0 0 0.9rem;
+ /* Clamp to a few lines so cards stay even regardless of summary length. */
+ display: -webkit-box;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+.announcement-card .ac-summary p { margin: 0; }
+.announcement-card .ac-summary a { color: inherit; text-decoration: underline; }
+.announcement-card .ac-more {
+ font-size: 0.86rem;
+ font-weight: 700;
+ color: #8e0000;
+}
+.announcement-card:hover .ac-more { color: #ff6bbc; }
+
+/* Image-less cards: a slim brand accent on top so they don't read as bare. */
+.announcement-card.no-image { border-top: 3px solid #69b3a2; }
+.announcement-card.no-image .ac-body { padding-top: 1.1rem; }
+
+/* category pills */
+.ac-cat {
+ display: inline-block;
+ font-size: 0.68rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ padding: 0.16rem 0.5rem;
+ border-radius: 999px;
+ color: #004055;
+ background: #d9eef2;
+}
+.ac-cat.event { color: #7a1f47; background: #f7dce8; }
+.ac-cat.opportunity { color: #7a4a00; background: #fbeccd; }
+.ac-cat.resource { color: #1f5e52; background: #d8efe9; }
+.ac-cat.milestone { color: #5c2e8e; background: #ece0f7; }
+.ac-cat.newsletter { color: #004055; background: #d9eef2; }
+
+.announcements-all { text-align: center; margin-top: 40px; }
+
+/* dedicated-page filter chips */
+.ac-filters {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ justify-content: center;
+ margin: 0 0 36px;
+}
+.ac-chip {
+ font-family: inherit;
+ font-size: 0.82rem;
+ color: #004055;
+ border: 1px solid #cfd9d3;
+ background: #fff;
+ padding: 0.32rem 0.9rem;
+ border-radius: 999px;
+ cursor: pointer;
+}
+.ac-chip.active { background: #004055; color: #fff; border-color: #004055; }
+
+@media (max-width: 820px) { .announcements-grid { grid-template-columns: 1fr 1fr; } }
+@media (max-width: 560px) { .announcements-grid { grid-template-columns: 1fr; } }
+
+/* ---- YouTube lightbox thumbnail (compact "video in lightbox") ---- */
+.yt-lightbox {
+ position: relative;
+ display: block;
+ width: 100%;
+ border-radius: 10px;
+ overflow: hidden;
+ line-height: 0;
+}
+.yt-lightbox img { width: 100%; height: auto; }
+.yt-lightbox .yt-play {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(0, 0, 0, 0.18);
+ transition: background 0.15s;
+}
+.yt-lightbox:hover .yt-play { background: rgba(0, 0, 0, 0.34); }
+.yt-lightbox .yt-play i {
+ color: #fff;
+ font-size: 1.6rem;
+ width: 64px;
+ height: 64px;
+ line-height: 64px;
+ text-align: center;
+ padding-left: 6px;
+ border-radius: 50%;
+ background: rgba(184, 51, 106, 0.92);
+}
+
+/* ============================================================
+ * Unified homepage section-heading divider.
+ * One real rule for every home section title, replacing the ad-hoc
+ * `subtitle = "---"` / `***` content dividers (which some sections had and
+ * others didn't). Scoped to .home-section so inner pages are unaffected.
+ * ============================================================ */
+.home-section .section-heading h1::after,
+.home-section.wg-about-welcome h1::after {
+ content: "";
+ display: block;
+ height: 1px;
+ background: rgba(0, 64, 85, 0.18);
+ margin: 16px auto 0;
+}
+
+/* ============================================================
+ * Newsletter (EmailOctopus) submit button — ships Bootstrap-purple;
+ * repaint it in FORRT teal. High specificity + !important to beat the
+ * embed's own injected, later-loaded styles.
+ * ============================================================ */
+[id^="octopus-form"] input.btn.btn-primary,
+[id^="octopus-form"] input[type="submit"],
+[id^="octopus-form"] button[type="submit"] {
+ background-color: #004055 !important;
+ border-color: #004055 !important;
+ color: #fff !important;
+}
+[id^="octopus-form"] input.btn.btn-primary:hover,
+[id^="octopus-form"] input[type="submit"]:hover,
+[id^="octopus-form"] button[type="submit"]:hover {
+ background-color: #00566f !important;
+ border-color: #00566f !important;
+}
+
+/* ============================================================
+ * Combined Achievements & Awards section (two columns)
+ * ============================================================ */
+.aa-grid {
+ display: grid;
+ grid-template-columns: 1fr 1.05fr;
+ gap: 2.8rem;
+ align-items: start;
+ max-width: 980px;
+ margin: 0 auto;
+}
+.aa-col img { max-width: 100%; height: auto; }
+.aa-achievements { text-align: center; }
+.aa-achievements img { max-width: 440px; }
+.aa-awards p:first-child { margin-top: 0; }
+@media (max-width: 768px) {
+ .aa-grid { grid-template-columns: 1fr; gap: 1.4rem; }
+}
+
+/* ============================================================
+ * Rotating-quote hero (wg-hero-quotes)
+ * ============================================================ */
+.hero-quotes {
+ max-width: 1000px;
+ margin: 0 auto;
+ text-align: center;
+}
+.hq-eyebrow {
+ font-family: 'Domine', serif;
+ font-size: 0.82rem;
+ text-transform: uppercase;
+ letter-spacing: 0.18em;
+ color: #69b3a2;
+ font-weight: 700;
+ margin: 0 0 1.6rem;
+}
+/* All quotes share one grid cell so the hero height = tallest quote (no shift).
+ minmax(0,1fr) stops the column auto-sizing to the longest quote's one-line
+ (max-content) width, which would otherwise overflow narrow viewports. */
+.hq-stage { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; align-items: center; }
+.hq-quote {
+ grid-area: 1 / 1;
+ /* Match the site-wide section-title treatment: Domine, weight 400, #313131. */
+ font-family: 'Domine', serif;
+ color: #313131;
+ font-weight: 400;
+ font-size: 3.3rem;
+ line-height: 1.22;
+ margin: 0 auto;
+ max-width: 22ch;
+ /* Neutralise the theme's default blockquote treatment (left border, padding). */
+ border: 0;
+ padding: 0;
+ /* Resting state: waiting just below, hidden. Active slides up into place;
+ leaving keeps sliding up and out — a continuous upward motion. */
+ opacity: 0;
+ transform: translateY(34px);
+ transition: opacity 0.55s ease, transform 0.55s cubic-bezier(0.22, 0.61, 0.36, 1);
+ pointer-events: none;
+}
+.hq-quote.is-active { opacity: 1; transform: translateY(0); pointer-events: auto; }
+.hq-quote.is-leaving { opacity: 0; transform: translateY(-34px); }
+.hq-quote .accent { color: #b8336a; }
+@media (prefers-reduced-motion: reduce) {
+ .hq-quote { transition: opacity 0.4s ease; transform: none; }
+ .hq-quote.is-leaving { transform: none; }
+}
+.hq-actions {
+ display: flex;
+ gap: 0.8rem;
+ justify-content: center;
+ margin-top: 1.8rem;
+}
+.hq-dots {
+ display: flex;
+ gap: 0.5rem;
+ justify-content: center;
+ margin-top: 1.8rem;
+}
+.hq-dot {
+ width: 9px;
+ height: 9px;
+ padding: 0;
+ border: 0;
+ border-radius: 50%;
+ background: #d8d4c2;
+ cursor: pointer;
+ transition: background 0.2s, transform 0.2s;
+}
+.hq-dot:hover { transform: scale(1.2); }
+.hq-dot.on { background: #b8336a; }
+@media (max-width: 992px) { .hq-quote { font-size: 2.5rem; } }
+@media (max-width: 640px) { .hq-quote { font-size: 1.8rem; max-width: 18ch; overflow-wrap: break-word; } }
+@media (max-width: 430px) { .hq-quote { font-size: 1.42rem; max-width: 17ch; } }
+
+/* ---- Compress the hero: cap the logo height so the top of the site is tighter.
+ Base rule keeps the logo within the viewport on every screen; the height
+ cap (which needs width:auto) only kicks in on large screens. ---- */
+.wg-hero-welcome .hero-media img {
+ max-width: 100%;
+ height: auto;
+}
+@media (min-width: 992px) {
+ .wg-hero-welcome .hero-media img {
+ width: auto;
+ max-height: 240px;
+ margin: 0 auto;
+ display: block;
+ }
+}
+
+/* ---- "What is FORRT?" media column: logo + video stacked, text beside it. ---- */
+.wg-about-welcome .avatar {
+ width: 170px;
+ height: 170px;
+}
+.wg-about-welcome .profile-video {
+ display: block;
+ width: 100%;
+ max-width: 280px;
+ margin: 1.4rem auto 0;
+}
+.wg-about-welcome #profile { text-align: center; }
+.wg-about-welcome .network-icon { margin-top: 1.1rem; }
+/* On mobile, lead with the heading + intro text, then the logo/video/socials. */
+@media (max-width: 991px) {
+ .wg-about-welcome .row { flex-direction: column; }
+ .wg-about-welcome .col-lg-8 { order: 1; }
+ .wg-about-welcome .col-lg-4 { order: 2; margin-top: 1.5rem; }
+}
diff --git a/content/authors/forrt/_index.md b/content/authors/forrt/_index.md
index 82b06685a26..1bb12b70d17 100644
--- a/content/authors/forrt/_index.md
+++ b/content/authors/forrt/_index.md
@@ -52,13 +52,8 @@ user_groups:
display_name: false
---
-***
In a nutshell, FORRT is a ***F***ramework for ***O***pen and ***R***eproducible ***R***esearch ***T***raining advancing research transparency, reproducibility, rigor, and ethics through pedagogical reform and meta-scientific research. FORRT provides a pedagogical infrastructure & didactic resources designed to recognize and support the teaching and mentoring of open and reproducible science. FORRT strives to raise awareness of the pedagogical implications of open and reproducible science and its associated challenges (i.e., curricular reform, epistemological uncertainty, methods of education) and advocates for the opening and formal recognition of teaching and mentoring materials to facilitate access, discovery, and learning to those who otherwise would be educationally disenfranchised.
-{{< youtube XlL54egjSoA >}}
-
-
-
{{< expand "Expand to learn more" >}}
diff --git a/content/home/1-hero.md b/content/home/1-hero.md
index a21073fe896..a75d385a46c 100644
--- a/content/home/1-hero.md
+++ b/content/home/1-hero.md
@@ -1,56 +1,35 @@
+++
-# Hero widget.
-widget = "hero_welcome" # See https://sourcethemes.com/academic/docs/page-builder/
+# Rotating-quote hero (see layouts/partials/widgets/hero_quotes.html).
+widget = "hero_quotes"
headless = true # This file represents a page section.
active = true # Activate this widget? true/false
weight = 10 # Order that this section will appear.
-title = "Framework for
Open and
Reproducible
Research
Training"
+eyebrow = "FORRT — a fort and a force"
-# Hero image (optional). Enter filename of an image in the `static/img/` folder.
-hero_media = "FORRT.svg"
-hero_media_alttext = "Logo of FORRT is a fort."
-# [design.spacing]
-# # Customize the section spacing. Order is top, right, bottom, left.
-# padding = ["20px", "0", "20px", "0"]
-
-[design.background]
- # Apply a background color, gradient, or image.
- # Uncomment (by removing `#`) an option to apply it.
- # Choose a light or dark text color by setting `text_color_light`.
- # Any HTML color name or Hex value is valid.
+# Key statements to cycle through. Wrap the part to highlight in
+# …. Drawn from FORRT's vision and mission.
+[[quote]]
+ text = 'Care is not a distraction from the work. It is the work.'
+[[quote]]
+ text = 'Scientific excellence and social justice, inseparable.'
+[[quote]]
+ text = 'From a culture of competition to one of community.'
+[[quote]]
+ text = 'Teaching and community building, on equal footing with discovery.'
- # Background color.
- # color = "#fefdf6"
-
- # Background gradient.
- # gradient_start = "#4bb4e3"
- # gradient_end = "#2b94c3"
-
- # Background image.
- # image = "FORRT.svg" # Name of image in `static/img/`.
- # image_darken = 0.6 # Darken the image? Range 0-1 where 0 is transparent and 1 is opaque.
- # image_size = "cover" # Options are `cover` (default), `contain`, or `actual` size.
- # image_position = "center" # Options include `left`, `center` (default), or `right`.
- # image_parallax = true # Use a fun parallax-like fixed background effect? true/false
-
- # Text color (true=light or false=dark).
- text_color_light = false
+[primary_cta]
+ label = "Get involved"
+ url = "/about/get-involved/"
+
+[secondary_cta]
+ label = "About FORRT"
+ url = "/about/us/"
-# Call to action links (optional).
-# Display link(s) by specifying a URL and label below. Icon is optional for `[cta]`.
-# Remove a link/note by deleting a cta/note block.
-# [cta]
-# url = "https://sourcethemes.com/academic/docs/install/"
-# label = "Get Started"
-# icon_pack = "fas"
-# icon = "download"
-
-# [cta_alt]
-# url = "https://sourcethemes.com/academic/"
-# label = "View Documentation"
+[design.spacing]
+ # Customize the section spacing. Order is top, right, bottom, left.
+ padding = ["60px", "0", "56px", "0"]
-# Note. An optional note to show underneath the links.
-# [cta_note]
-# label = 'Latest release'
-+++
\ No newline at end of file
+[design.background]
+ text_color_light = false
++++
diff --git a/content/home/2-welcome.md b/content/home/2-welcome.md
index 6df2f9e526b..467c054110c 100644
--- a/content/home/2-welcome.md
+++ b/content/home/2-welcome.md
@@ -5,7 +5,7 @@
widget = "blank" # See https://sourcethemes.com/academic/docs/page-builder/
headless = true # This file represents a page section.
-active = true # Activate this widget? true/false
+active = false # Disabled: redundant with the hero. Its tagline now lives in the hero lead (1-hero.md).
weight = 20 # Order that this section will appear.
title = "**Welcome to FORRT**
------
"
diff --git a/content/home/3-what-is-forrt.md b/content/home/3-what-is-forrt.md
index 9efc6d972d9..9d84446eedf 100644
--- a/content/home/3-what-is-forrt.md
+++ b/content/home/3-what-is-forrt.md
@@ -12,9 +12,12 @@ title = "What is FORRT?"
# See https://sourcethemes.com/academic/docs/get-started/#introduce-yourself
author = "forrt"
+# YouTube video shown (as a click-to-play lightbox) in the left media column.
+video_id = "XlL54egjSoA"
+
[design.spacing]
# Customize the section spacing. Order is top, right, bottom, left.
- padding = ["60px", "0", "60px", "0"]
+ padding = ["24px", "0", "24px", "0"]
+++
diff --git a/content/home/3b-announcements.md b/content/home/3b-announcements.md
new file mode 100644
index 00000000000..a19849217e3
--- /dev/null
+++ b/content/home/3b-announcements.md
@@ -0,0 +1,17 @@
++++
+# Announcements section (custom card widget).
+widget = "announcements" # See layouts/partials/widgets/announcements.html
+headless = true # This file represents a page section.
+active = true # Activate this widget? true/false
+weight = 35 # Order that this section will appear (after "What is FORRT?", before Products).
+
+title = "News & Announcements"
+# Divider under the header comes from the shared .home-section heading rule (custom.scss).
+
+# Number of recent announcements to show.
+count = 3
+
+[design.spacing]
+ # Customize the section spacing. Order is top, right, bottom, left.
+ padding = ["20px", "0", "50px", "0"]
++++
diff --git a/content/home/4-products.md b/content/home/4-products.md
index 6f081926ff0..4a51caa5b47 100644
--- a/content/home/4-products.md
+++ b/content/home/4-products.md
@@ -6,8 +6,6 @@ active = true # Activate this widget? true/false
weight = 40 # Order that this section will appear.
title = "Open Educational Resources &
Metascientific Works"
-subtitle = "---"
-
# Showcase personal skills or business features.
#
diff --git a/content/home/5-achievements.md b/content/home/5-achievements.md
index 0cd4ce648c1..158b7a479ca 100644
--- a/content/home/5-achievements.md
+++ b/content/home/5-achievements.md
@@ -1,67 +1,39 @@
+++
-# A Demo section created with the Blank widget.
-# Any elements can be added in the body: https://sourcethemes.com/academic/docs/writing-markdown-latex/
-# Add more sections by duplicating this file and customizing to your requirements.
-
+# Combined Achievements & Awards section (two columns).
widget = "blank" # See https://sourcethemes.com/academic/docs/page-builder/
headless = true # This file represents a page section.
active = true # Activate this widget? true/false
weight = 50 # Order that this section will appear.
-title = "Achievements"
-subtitle = "---"
-
+title = "Achievements & Awards"
[design]
# Choose how many columns the section has. Valid values: 1 or 2.
columns = "1"
[design.background]
- # Apply a background color, gradient, or image.
- # Uncomment (by removing `#`) an option to apply it.
- # Choose a light or dark text color by setting `text_color_light`.
- # Any HTML color name or Hex value is valid.
-
- # Background color.
- color = "#fefdf6"
-
- # Background gradient.
- # gradient_start = "DeepSkyBlue"
- # gradient_end = "SkyBlue"
-
- # Background image.
- # image = "headers/bubbles-wide.webp" # Name of image in `static/img/`.
- # image_darken = 0.6 # Darken the image? Range 0-1 where 0 is transparent and 1 is opaque.
- # image_size = "cover" # Options are `cover` (default), `contain`, or `actual` size.
- # image_position = "center" # Options include `left`, `center` (default), or `right`.
- # image_parallax = true # Use a fun parallax-like fixed background effect? true/false
-
- # Text color (true=light or false=dark).
+ color = "#fefdf6"
text_color_light = false
[design.spacing]
# Customize the section spacing. Order is top, right, bottom, left.
- padding = ["60px", "0", "60px", "0"]
-
-[advanced]
- # Custom CSS.
- css_style = ""
-
- # CSS class.
- css_class = ""
+ padding = ["40px", "0", "40px", "0"]
+++
-
-
-
+
+
+ {{ end }}
+