From f1343a28875b327d32613d31ae14c00187b53d07 Mon Sep 17 00:00:00 2001 From: Ivan Ogasawara Date: Wed, 17 Jun 2026 16:13:05 +0000 Subject: [PATCH] theme: Improve layout --- mkdocs.yml | 1 + pages/about/sponsorship/index.md | 2 +- theme/blog-post.html | 133 ++++---- theme/css/base.css | 47 ++- theme/css/blog.css | 168 +++++++++- theme/css/content.css | 552 +++++++++++++++++++++++++++++++ theme/css/home.css | 8 + theme/css/partners.css | 15 +- theme/css/team.css | 151 ++++++--- theme/css/tokens.css | 35 ++ theme/events.html | 159 +++++---- theme/main.html | 26 ++ theme/partners.html | 7 + theme/projects.html | 120 ++++--- theme/single-sidebar.html | 103 +++--- theme/team.html | 86 +++-- 16 files changed, 1293 insertions(+), 320 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 82fb95a0..67a3386b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -89,6 +89,7 @@ nav: - Governance: about/governance/index.md - Team: about/team/index.md - Fiscal Sponsor: about/fiscal-sponsor/index.md + - Sponsorship: about/sponsorship/index.md - Guidelines: - Overview: about/guidelines/index.md - Articles: about/guidelines/articles/index.md diff --git a/pages/about/sponsorship/index.md b/pages/about/sponsorship/index.md index 27f1488b..b627d27c 100644 --- a/pages/about/sponsorship/index.md +++ b/pages/about/sponsorship/index.md @@ -6,7 +6,7 @@ description: > pathways. date: "2026-06-17" authors: ["OSL Team"] -template: main.html +template: single-sidebar.html --- # Sponsorship diff --git a/theme/blog-post.html b/theme/blog-post.html index b2a4883b..f19f50d6 100644 --- a/theme/blog-post.html +++ b/theme/blog-post.html @@ -1,39 +1,61 @@ -{% extends "main.html" %} +{% extends "base.html" %} -{% block content_inner %} +{% block content %} +{% set title = page.meta.get("title", page.title) %} +{% set slug = page.meta.get("slug") %} +{% set thumbnail = page.meta.get("thumbnail") %} -
-

- - {{ page.meta["title"] }} - -

+
+
+
+

Open Science Labs Blog

+

{{ title }}

- - + + {% if slug and thumbnail %} +
+ {{ title }} +
{% endif %} +
- -
- -
+ - {% if show_tags and "tags" in page.meta %} - - {% endif %} -
- - -
-
- - {{ page.meta['title'] }} - -
-
- - -
- {{ page.content }} -
-
- -{# Related: show other blog pages #} -{% for nav_item in nav %} - {% if nav_item.title == "Blog" and nav_item.children %} -
- {% for sub_nav_item in nav_item.children if sub_nav_item.title != "main" %} -
- - {{ sub_nav_item.title }} - -

{{ sub_nav_item.title }}

-

{{ sub_nav_item.summary }}

- -
- {% endfor %} +
+ {{ page.content }}
- {% endif %} -{% endfor %} - -{% endblock content_inner %} +
+ +{% endblock content %} diff --git a/theme/css/base.css b/theme/css/base.css index d15fb77b..100fcf48 100644 --- a/theme/css/base.css +++ b/theme/css/base.css @@ -1,10 +1,38 @@ /* Reset & base layout */ +@font-face{ + font-family: "Metropolis"; + font-style: normal; + font-weight: 400; + src: url("../fonts/Metropolis-Regular.woff2") format("woff2"), + url("../fonts/Metropolis-Regular.woff") format("woff"); + font-display: swap; +} +@font-face{ + font-family: "Metropolis"; + font-style: normal; + font-weight: 600; + src: url("../fonts/Metropolis-SemiBold.woff2") format("woff2"), + url("../fonts/Metropolis-SemiBold.woff") format("woff"); + font-display: swap; +} +@font-face{ + font-family: "Metropolis"; + font-style: normal; + font-weight: 800; + src: url("../fonts/Metropolis-ExtraBold.woff2") format("woff2"), + url("../fonts/Metropolis-ExtraBold.woff") format("woff"); + font-display: swap; +} + * { box-sizing: border-box; -webkit-appearance: none; } html, body { min-height: 100%; } html { scroll-padding-top: 4.5rem; } body{ background: var(--bg); color: var(--fg); + font-family: "Metropolis", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-size: 1rem; + line-height: 1.65; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: relative; @@ -24,10 +52,21 @@ body::before{ /* Typography */ a{ color: var(--brand); text-decoration: none; } a:hover{ color: var(--brand-2); } -h1,h2,h3,h4,h5,h6{ font-weight: 300; line-height: 1.35; margin: 15px 0 5px; } -h1{ font-size: 175%; font-weight: 400; } -h2{ font-size: 150%; } h3{ font-size: 130%; } h4{ font-size: 120%; } h5{ font-size: 110%; } h6{ font-size: 100%; } -p{ padding: .8rem 0 0 0; } +h1,h2,h3,h4,h5,h6{ + color: var(--heading); + font-weight: 800; + letter-spacing: -.025em; + line-height: 1.15; + margin: 1.6rem 0 .75rem; +} +h1{ font-size: clamp(2.15rem, 5vw, 4.2rem); } +h2{ font-size: clamp(1.55rem, 3vw, 2.35rem); } +h3{ font-size: clamp(1.22rem, 2vw, 1.55rem); } +h4{ font-size: 1.15rem; } +h5{ font-size: 1.05rem; } +h6{ font-size: 1rem; text-transform: uppercase; letter-spacing: .06em; } +p{ margin: 0 0 1rem; padding: 0; } +strong{ font-weight: 800; color: color-mix(in oklab, var(--fg) 88%, var(--heading)); } /* Media */ img, svg{ max-width: 100%; height: auto; vertical-align: middle; } diff --git a/theme/css/blog.css b/theme/css/blog.css index 2cccce0d..5635dcea 100644 --- a/theme/css/blog.css +++ b/theme/css/blog.css @@ -42,17 +42,17 @@ .excerpt{ display: flex; /* keep thumbnail on top, body below */ flex-direction: column; - border: 1px solid rgba(255,255,255,.08); + border: 1px solid var(--border, rgba(255,255,255,.08)); border-radius: var(--radius, 16px); - background: rgba(255,255,255,.04); - box-shadow: var(--shadow, 0 10px 30px rgba(0,0,0,.25)); + background: var(--surface, rgba(255,255,255,.04)); + box-shadow: var(--shadow-card, 0 10px 30px rgba(0,0,0,.25)); overflow: hidden; transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background .18s ease; } .excerpt:hover{ transform: translateY(-2px); - border-color: rgba(255,255,255,.14); - background: rgba(255,255,255,.05); + border-color: color-mix(in oklab, var(--brand-strong, #3b82f6) 35%, var(--border)); + background: var(--surface-solid, rgba(255,255,255,.05)); } /* Thumbnail */ @@ -60,7 +60,7 @@ display: block; position: relative; aspect-ratio: 16 / 9; - background: linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.02)); + background: var(--surface-muted); } .post-thumb img{ width: 100%; @@ -108,13 +108,13 @@ font-size: .8rem; padding: .25rem .5rem; border-radius: .5rem; - border: 1px solid rgba(255,255,255,.16); + border: 1px solid var(--border, rgba(255,255,255,.16)); color: var(--fg); text-decoration: none; } .post_tag:hover{ - background: rgba(255,255,255,.08); - border-color: rgba(255,255,255,.22); + background: var(--surface-muted, rgba(255,255,255,.08)); + border-color: var(--border-strong, rgba(255,255,255,.22)); } /* Description (clamp to keep cards even-ish) */ @@ -158,6 +158,134 @@ } /* ===== Blog post page ===== */ +.blog-article--feature{ + width: min(1120px, 100%); + margin: 0 auto; +} + +.blog-hero{ + overflow: hidden; + display: grid; + grid-template-columns: minmax(0, 1.05fr) minmax(280px, .95fr); + gap: clamp(1.1rem, 3vw, 2rem); + align-items: stretch; + margin-bottom: clamp(1.2rem, 3vw, 2rem); + padding: clamp(1.1rem, 3vw, 1.45rem); + border: 1px solid var(--border); + border-radius: clamp(1.35rem, 4vw, 2.2rem); + background: + radial-gradient(circle at 14% 10%, rgba(255,170,0,.18), transparent 18rem), + linear-gradient(135deg, var(--surface), var(--surface-muted)); + box-shadow: var(--shadow-soft); +} + +.blog-hero__content{ + display: flex; + flex-direction: column; + justify-content: center; + padding: clamp(1rem, 3vw, 2rem); +} + +.blog-hero__kicker{ + display: inline-flex; + align-items: center; + gap: .5rem; + margin: 0 0 .8rem; + color: var(--brand-strong); + font-size: .78rem; + font-weight: 800; + letter-spacing: .12em; + text-transform: uppercase; +} + +.blog-hero__kicker::before{ + content: ""; + width: .55rem; + height: .55rem; + border-radius: 999px; + background: var(--accent); + box-shadow: 0 0 0 6px rgba(255,170,0,.16); +} + +.blog-hero h1{ + margin: 0; + font-size: clamp(2.1rem, 5vw, 4.25rem); + line-height: 1; +} + +.blog-hero .post_meta{ + margin: 1rem 0 0; +} + +.blog-hero .post_tags{ + margin-top: 1rem; +} + +.blog-hero__media{ + overflow: hidden; + min-height: 100%; + margin: 0; + border-radius: 1.45rem; + background: var(--surface-muted); +} + +.blog-hero__media img{ + display: block; + width: 100%; + height: 100%; + min-height: 320px; + margin: 0; + object-fit: cover; +} + +.blog-article__shell{ + display: grid; + grid-template-columns: 76px minmax(0, 820px); + gap: clamp(1rem, 3vw, 1.5rem); + justify-content: center; + align-items: start; +} + +.blog-share-panel{ + position: sticky; + top: 5.8rem; + display: grid; + gap: .45rem; + justify-items: center; + padding: .75rem .5rem; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface); + box-shadow: var(--shadow-card); +} + +.blog-share-panel span{ + color: var(--muted); + font-size: .7rem; + font-weight: 800; + letter-spacing: .08em; + text-transform: uppercase; + writing-mode: vertical-rl; +} + +.blog-share-panel a{ + display: grid; + place-items: center; + width: 2rem; + height: 2rem; + border-radius: 999px; + color: var(--brand-strong); +} + +.blog-share-panel a:hover{ + background: var(--surface-muted); +} + +.blog-share-panel .icon{ + width: 1rem; + height: 1rem; +} + .blog-article .post-title { margin: 0 0 .25rem 0; } @@ -232,3 +360,25 @@ /* Reserve space to reduce CLS when dimensions unknown */ min-height: 1px; } + +@media (max-width: 900px){ + .blog-hero{ + grid-template-columns: 1fr; + } + + .blog-article__shell{ + grid-template-columns: 1fr; + } + + .blog-share-panel{ + position: static; + display: flex; + justify-content: flex-start; + width: fit-content; + border-radius: 999px; + } + + .blog-share-panel span{ + writing-mode: initial; + } +} diff --git a/theme/css/content.css b/theme/css/content.css index e2202885..48a33876 100644 --- a/theme/css/content.css +++ b/theme/css/content.css @@ -42,3 +42,555 @@ blockquote{ display: grid; place-items: center; } .to_top .icon { width: 24px; height: 24px; } + +/* ───────── Polished non-home page system ───────── */ +.osl-page{ + position: relative; + isolation: isolate; +} + +.osl-page-shell{ + width: min(1040px, 100%); + margin: 0 auto; +} + +.osl-page--directory .osl-page-shell, +.osl-page--events .osl-page-shell, +.osl-page--team .osl-page-shell{ + width: min(1120px, 100%); +} + +.osl-page-hero{ + overflow: hidden; + position: relative; + margin-bottom: clamp(1.2rem, 3vw, 2rem); + padding: clamp(2rem, 5vw, 3.6rem); + border: 1px solid var(--border); + border-radius: clamp(1.35rem, 4vw, 2.2rem); + color: #fff; + background: + radial-gradient(circle at 14% 18%, rgba(255,170,0,.28), transparent 18rem), + radial-gradient(circle at 88% 12%, rgba(92,200,255,.28), transparent 24rem), + linear-gradient(135deg, #0f172a 0%, #12394c 48%, #087fa8 100%); + box-shadow: var(--shadow-soft); +} + +.osl-page-hero::before{ + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background-image: + linear-gradient(rgba(255,255,255,.08) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px); + background-size: 48px 48px; + mask-image: linear-gradient(90deg, rgba(0,0,0,.55), transparent 78%); +} + +.osl-page-hero::after{ + content: ""; + position: absolute; + right: clamp(1.2rem, 4vw, 3rem); + bottom: clamp(1rem, 3vw, 2.4rem); + width: clamp(5rem, 18vw, 11rem); + aspect-ratio: 1; + border-radius: 999px; + background: + linear-gradient(135deg, rgba(255,255,255,.22), rgba(255,255,255,.04)); + box-shadow: inset 0 0 0 1px rgba(255,255,255,.20); + opacity: .55; +} + +.osl-page-hero__content{ + position: relative; + z-index: 1; + max-width: 820px; +} + +.osl-page-kicker, +.directory-eyebrow{ + display: inline-flex; + align-items: center; + gap: .5rem; + margin: 0 0 .8rem; + color: #b8f0ff; + font-size: .78rem; + font-weight: 800; + letter-spacing: .12em; + line-height: 1.2; + text-transform: uppercase; +} + +.osl-page-kicker::before, +.directory-eyebrow::before{ + content: ""; + width: .55rem; + height: .55rem; + border-radius: 999px; + background: var(--accent); + box-shadow: 0 0 0 6px rgba(255,170,0,.16); +} + +.osl-page-hero h1{ + max-width: 880px; + margin: 0; + padding: 0; + color: #fff; + font-size: clamp(2.35rem, 6vw, 4.85rem); + font-weight: 800; + letter-spacing: -.065em; + line-height: .96; +} + +.osl-page-description{ + max-width: 760px; + margin: 1.1rem 0 0; + color: rgba(255,255,255,.84); + font-size: clamp(1.03rem, 1.6vw, 1.22rem); + line-height: 1.65; +} + +.osl-markdown{ + color: var(--fg); + background: var(--surface); + border: 1px solid var(--border); + border-radius: clamp(1.2rem, 3vw, 1.8rem); + box-shadow: var(--shadow-card); + padding: clamp(1.25rem, 4vw, 2.65rem); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); +} + +.osl-markdown > h1:first-child{ + display: none; +} + +.osl-markdown > .pt-5:first-child{ + display: none; +} + +.osl-markdown > :first-child{ + margin-top: 0; +} + +.osl-markdown > :last-child{ + margin-bottom: 0; +} + +.osl-markdown h2{ + margin-top: 2.25rem; + padding-top: 1.55rem; + border-top: 1px solid var(--border); +} + +.osl-markdown h2:first-child, +.osl-markdown > h1:first-child + h2{ + margin-top: 0; + padding-top: 0; + border-top: 0; +} + +.osl-markdown h3{ + color: color-mix(in oklab, var(--heading) 88%, var(--brand-strong)); +} + +.osl-markdown p, +.osl-markdown li{ + color: color-mix(in oklab, var(--fg) 86%, var(--muted)); +} + +.osl-markdown p{ + font-size: 1.02rem; +} + +.osl-markdown ul, +.osl-markdown ol{ + margin: 1rem 0 1.25rem; + padding-left: 1.25rem; +} + +.osl-markdown li{ + margin: .45rem 0; + padding-left: .15rem; +} + +.osl-markdown a:not(.btn):not(.post_tag):not(.post-thumb):not(.excerpt_more):not(.icon-btn):not(.osl-inline-button){ + color: var(--brand-strong); + font-weight: 700; + text-decoration: underline; + text-decoration-color: color-mix(in oklab, var(--brand-strong) 30%, transparent); + text-underline-offset: .18em; +} + +.osl-markdown a:hover{ + text-decoration-color: currentColor; +} + +.osl-markdown .btn, +.osl-inline-button{ + display: inline-flex; + align-items: center; + justify-content: center; + gap: .45rem; + width: fit-content; + margin: .35rem .4rem .7rem 0; + padding: .68rem 1rem; + border: 1px solid color-mix(in oklab, var(--brand-strong) 35%, transparent); + border-radius: 999px; + background: linear-gradient(135deg, var(--brand-strong), var(--brand-2)); + box-shadow: 0 14px 30px rgba(8,127,168,.18); + color: #fff !important; + font-weight: 800; + line-height: 1.1; + text-decoration: none !important; + transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease; +} + +.osl-markdown .btn:hover, +.osl-inline-button:hover{ + transform: translateY(-1px); + box-shadow: 0 18px 38px rgba(8,127,168,.24); +} + +.osl-inline-button--subtle{ + background: var(--surface-muted); + border-color: var(--border); + box-shadow: none; + color: var(--brand-strong) !important; +} + +.osl-inline-button--subtle:hover{ + border-color: color-mix(in oklab, var(--brand-strong) 38%, var(--border)); + box-shadow: 0 12px 28px rgba(15,23,42,.08); +} + +.osl-markdown img{ + display: block; + max-width: 100%; + margin: 1.4rem auto; + border-radius: 1.1rem; + box-shadow: 0 12px 34px rgba(15,23,42,.10); +} + +.osl-markdown blockquote{ + margin: 1.4rem 0; + padding: 1rem 1.2rem; + border: 1px solid var(--border); + border-left: 5px solid var(--brand-strong); + border-radius: 1rem; + background: var(--surface-muted); + color: var(--fg); +} + +.osl-markdown table{ + overflow: hidden; + border-radius: 1rem; + box-shadow: 0 0 0 1px var(--border); +} + +.osl-markdown .post-grid{ + margin: 1rem 0 0; + padding: 0; +} + +.osl-markdown .blog-index > .blog-title{ + display: none; +} + +.osl-markdown .post-grid li{ + margin: 0; + padding: 0; +} + +/* Sidebar documentation pages */ +.osl-page-layout{ + display: grid; + grid-template-columns: minmax(210px, 260px) minmax(0, 1fr); + gap: clamp(1rem, 2.5vw, 1.5rem); + align-items: start; +} + +.osl-side-nav{ + position: sticky; + top: 5.8rem; + display: grid; + gap: .35rem; + max-height: calc(100vh - 7rem); + overflow: auto; + padding: .9rem; + border: 1px solid var(--border); + border-radius: 1.25rem; + background: var(--surface); + box-shadow: var(--shadow-card); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); +} + +.osl-side-nav__title{ + margin: 0 0 .35rem; + padding: 0 .55rem .55rem; + border-bottom: 1px solid var(--border); + color: var(--muted); + font-size: .76rem; + font-weight: 800; + letter-spacing: .1em; + text-transform: uppercase; +} + +.osl-side-nav nav, +.osl-side-nav__group{ + display: grid; + gap: .18rem; +} + +.osl-side-nav__group{ + margin-top: .25rem; +} + +.osl-side-nav__group-title{ + padding: .65rem .65rem .25rem; + color: var(--heading); + font-size: .82rem; + font-weight: 800; +} + +.osl-side-nav a{ + display: block; + padding: .56rem .68rem; + border-radius: .8rem; + color: color-mix(in oklab, var(--fg) 78%, var(--muted)); + font-size: .92rem; + font-weight: 700; + line-height: 1.25; +} + +.osl-side-nav a:hover, +.osl-side-nav a.active{ + background: var(--surface-muted); + color: var(--brand-strong); +} + +/* Directory sections */ +.directory-heading{ + margin: clamp(1.35rem, 4vw, 2.6rem) 0 1rem; +} + +.directory-heading--inside{ + margin-top: 1rem; +} + +.directory-heading .directory-eyebrow{ + color: var(--brand-strong); +} + +.directory-heading h2{ + margin: 0; + padding: 0; + border: 0; +} + +.project-grid, +.event-grid{ + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); + gap: 1rem; +} + +.project-card, +.event-card, +.empty-state{ + overflow: hidden; + border: 1px solid var(--border); + border-radius: 1.35rem; + background: var(--surface); + box-shadow: var(--shadow-card); +} + +.project-card{ + display: flex; + flex-direction: column; + min-height: 100%; + padding: 1.15rem; + transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease; +} + +.project-card:hover, +.event-card:hover{ + transform: translateY(-2px); + border-color: color-mix(in oklab, var(--brand-strong) 38%, var(--border)); + box-shadow: 0 22px 52px rgba(15,23,42,.12); +} + +.project-card__top{ + display: grid; + gap: .7rem; +} + +.project-card h3{ + margin: 0; + font-size: 1.35rem; +} + +.project-card h3 a{ + color: var(--heading); +} + +.project-card h3 a:hover{ + color: var(--brand-strong); +} + +.project-badge{ + width: fit-content; + padding: .32rem .62rem; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-muted); + color: var(--brand-strong); + font-size: .72rem; + font-weight: 800; + letter-spacing: .08em; + text-transform: uppercase; +} + +.project-badge--incubated{ + background: var(--surface-warm); + color: #9a5b00; +} + +html[data-mode="dim"] .project-badge--incubated{ + color: #ffd166; +} + +.project-card__description{ + margin: .85rem 0 1.1rem; + color: color-mix(in oklab, var(--fg) 82%, var(--muted)); +} + +.project-meta{ + display: grid; + gap: .65rem; + margin: auto 0 1rem; +} + +.project-meta div{ + display: grid; + gap: .12rem; +} + +.project-meta dt{ + color: var(--muted); + font-size: .72rem; + font-weight: 800; + letter-spacing: .08em; + text-transform: uppercase; +} + +.project-meta dd{ + margin: 0; + color: var(--fg); + font-weight: 700; +} + +.project-card__footer{ + display: flex; + justify-content: flex-start; +} + +/* Events */ +.event-section{ + margin-top: clamp(1.4rem, 4vw, 2.8rem); +} + +.event-card{ + display: grid; + grid-template-rows: auto 1fr; + transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease; +} + +.event-card__media{ + display: grid; + min-height: 180px; + background: + linear-gradient(135deg, color-mix(in oklab, var(--brand-strong) 12%, transparent), transparent), + var(--surface-muted); +} + +.event-card__media a{ + display: grid; +} + +.event-card__media img{ + width: 100%; + height: 100%; + min-height: 180px; + max-height: 250px; + object-fit: cover; +} + +.event-card__body{ + display: flex; + flex-direction: column; + padding: 1.15rem; +} + +.event-card__date{ + margin: 0 0 .45rem; + color: var(--brand-strong); + font-size: .82rem; + font-weight: 800; + letter-spacing: .04em; + text-transform: uppercase; +} + +.event-card h3{ + margin: 0 0 .55rem; + font-size: 1.3rem; +} + +.event-card__body p:not(.event-card__date){ + color: color-mix(in oklab, var(--fg) 84%, var(--muted)); +} + +.event-card__body .osl-inline-button{ + margin-top: auto; +} + +.empty-state{ + padding: clamp(1.25rem, 3vw, 2rem); + background: + radial-gradient(circle at 10% 0%, color-mix(in oklab, var(--brand-strong) 14%, transparent), transparent 16rem), + var(--surface); +} + +.empty-state h3{ + margin-top: 0; +} + +@media (max-width: 900px){ + .osl-page-layout{ + grid-template-columns: 1fr; + } + + .osl-side-nav{ + position: static; + max-height: none; + } +} + +@media (max-width: 640px){ + .content-inner{ + padding-top: 1.2rem; + } + + .osl-page-hero{ + padding: 1.45rem; + } + + .osl-page-hero::after{ + display: none; + } + + .osl-markdown{ + padding: 1.1rem; + } +} diff --git a/theme/css/home.css b/theme/css/home.css index cae8ab4a..eef10409 100644 --- a/theme/css/home.css +++ b/theme/css/home.css @@ -19,21 +19,29 @@ --hero-overlay: linear-gradient(to bottom right, rgba(0,0,0,.60), rgba(0,0,0,.45)); } .home-hero .eyebrow{ + color: rgba(255,255,255,.9); letter-spacing: .08em; text-transform: uppercase; opacity: .85; + text-shadow: 0 2px 14px rgba(0,0,0,.45); } .home-hero h1{ + color: #fff; text-wrap: balance; + text-shadow: 0 3px 22px rgba(0,0,0,.55); } .home-hero .lead{ + color: rgba(255,255,255,.94); max-width: 52ch; opacity: .9; + text-shadow: 0 2px 16px rgba(0,0,0,.48); } .hero-bullets{ list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: .75rem 1.25rem; + color: rgba(255,255,255,.94); opacity: .95; + text-shadow: 0 2px 14px rgba(0,0,0,.42); } .hero-bullets .dot{ display: inline-block; width: .5rem; height: .5rem; border-radius: 50%; diff --git a/theme/css/partners.css b/theme/css/partners.css index 3a148237..c216c335 100644 --- a/theme/css/partners.css +++ b/theme/css/partners.css @@ -2,9 +2,9 @@ :root{ --pc-text: var(--fg, #e8eaf0); - --pc-bg: rgba(16,18,27,.6); - --pc-border: rgba(255,255,255,.12); - --pc-hover: rgba(255,255,255,.06); + --pc-bg: var(--surface, rgba(16,18,27,.6)); + --pc-border: var(--border, rgba(255,255,255,.12)); + --pc-hover: var(--surface-muted, rgba(255,255,255,.06)); } [data-bs-theme="light"]{ --pc-text: #111827; @@ -16,10 +16,10 @@ .partners-grid .partner-card{ background: var(--pc-bg); border: 1px solid var(--pc-border); - border-radius: 1rem; + border-radius: 1.35rem; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); - box-shadow: 0 10px 24px rgba(0,0,0,.08); + box-shadow: var(--shadow-card, 0 10px 24px rgba(0,0,0,.08)); transition: transform .15s ease, box-shadow .2s ease, border-color .2s ease; position: relative; } @@ -74,7 +74,7 @@ display: flex; align-items: center; justify-content: center; border-bottom: 1px dashed var(--pc-border); background: color-mix(in oklab, var(--pc-bg) 92%, transparent); - border-top-left-radius: 1rem; border-top-right-radius: 1rem; + border-top-left-radius: 1.35rem; border-top-right-radius: 1.35rem; } /* Logos: clamp both height and width so tall/wide marks don’t dominate */ @@ -82,6 +82,9 @@ display: block; object-fit: contain; width: auto; + margin: 0; + border-radius: 0; + box-shadow: none; max-width: 80%; /* prevent super-wide brands from touching edges */ max-height: clamp(44px, 8vw, 78px); /* scale responsively but never huge */ transform: scale(var(--logo-scale, 1)); /* per-partner fine-tune (see below) */ diff --git a/theme/css/team.css b/theme/css/team.css index 497bf0eb..dc4a2512 100644 --- a/theme/css/team.css +++ b/theme/css/team.css @@ -1,56 +1,129 @@ -/* ===== Team page (scoped) ===== */ -.team-grid .card{ - border-radius: 1rem; - border: 1px solid var(--card-border, rgba(255,255,255,.12)); - background: var(--card-bg, rgba(20,24,33,.6)); +/* ===== Team directory ===== */ +.team-directory{ + display: grid; + gap: clamp(1.6rem, 4vw, 3rem); +} + +.team-group{ + display: grid; + gap: 1rem; +} + +.team-grid{ + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); + gap: 1rem; +} + +.team-card{ overflow: hidden; + display: flex; + flex-direction: column; + min-height: 100%; + border: 1px solid var(--border); + border-radius: 1.35rem; + background: var(--surface); + box-shadow: var(--shadow-card); + transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease; +} + +.team-card:hover{ + transform: translateY(-2px); + border-color: color-mix(in oklab, var(--brand-strong) 38%, var(--border)); + box-shadow: 0 22px 52px rgba(15,23,42,.12); } -[data-bs-theme="light"] .team-grid .card{ - background: #fff; - border-color: rgba(0,0,0,.08); + +.team-card__media{ + position: relative; + overflow: hidden; + display: grid; + place-items: center; + aspect-ratio: 4 / 3; + background: + radial-gradient(circle at 20% 0%, color-mix(in oklab, var(--brand-strong) 24%, transparent), transparent 16rem), + var(--surface-muted); } -.team-grid .card-img-top{ - display:block; - width:100%; - aspect-ratio: 4 / 3; /* keeps consistent header area */ - object-fit: cover; /* crops tall/wide headshots neatly */ +.team-card__media img{ + display: block; + width: 100%; + height: 100%; + margin: 0; + object-fit: cover; } -.team-grid .card-title{ - font-size: 1.15rem; - margin-bottom: .25rem; +.team-card__avatar{ + display: grid; + place-items: center; + width: 7rem; + height: 7rem; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-solid); + color: var(--brand-strong); + font-size: 3rem; + font-weight: 800; } -/* Social icon row */ -.team-grid .social{ +.team-card__body{ display: flex; - align-items: center; - gap: .5rem; + flex: 1; + flex-direction: column; + padding: 1.1rem; } -/* Tight, consistent SVG icon sizing + inherit theme color */ -.team-grid .social .icon{ - width: 22px; /* <- right here: fix HUGE icon */ - height: 22px; - display: inline-block; - vertical-align: middle; - fill: currentColor; /* ensure symbols use text color */ +.team-card__header{ + display: flex; + gap: .75rem; + align-items: flex-start; + justify-content: space-between; +} + +.team-card h3{ + margin: 0; + font-size: 1.18rem; + letter-spacing: -.02em; +} + +.team-card p{ + margin: .65rem 0 0; + color: color-mix(in oklab, var(--fg) 84%, var(--muted)); + font-size: .96rem; } -.team-grid .social a{ - color: var(--fg, #e6e9f0); - opacity: .85; - text-decoration: none; + +.team-card__social{ + display: inline-grid; + flex: 0 0 auto; + place-items: center; + width: 2.15rem; + height: 2.15rem; + border: 1px solid var(--border); + border-radius: 999px; + background: var(--surface-muted); + color: var(--brand-strong); } -[data-bs-theme="light"] .team-grid .social a{ - color: #1f2937; + +.team-card__social:hover{ + background: var(--brand-strong); + color: #fff; } -.team-grid .social a:hover{ - color: var(--brand, #3b82f6); - opacity: 1; + +.team-card__social .icon{ + width: 1.1rem; + height: 1.1rem; +} + +.team-card__sponsor{ + display: grid; + gap: .35rem; + margin-top: auto; + padding-top: 1rem; } -/* Sponsor iframe wrapper spacing */ -.team-grid .sponsor{ - margin-top: .5rem; +.team-card__sponsor span{ + color: var(--muted); + font-size: .75rem; + font-weight: 800; + letter-spacing: .08em; + text-transform: uppercase; } diff --git a/theme/css/tokens.css b/theme/css/tokens.css index 431e00fb..04c41b72 100644 --- a/theme/css/tokens.css +++ b/theme/css/tokens.css @@ -4,9 +4,22 @@ --bg: #f8fafc; --fg: #101218; --muted: #5f6b7a; + --heading: #0f172a; --brand: #5cc8ff; --brand-2: #8a7dff; + --brand-strong: #087fa8; + --accent: #ffaa00; + + /* Content surfaces */ + --surface: rgba(255,255,255,.88); + --surface-solid: #ffffff; + --surface-muted: #eef7fb; + --surface-warm: #fff8e7; + --border: rgba(15,23,42,.10); + --border-strong: rgba(15,23,42,.16); + --shadow-soft: 0 18px 60px rgba(15,23,42,.10); + --shadow-card: 0 16px 38px rgba(15,23,42,.08); /* Nav / surfaces */ --nav-bg: rgba(255,255,255,.75); @@ -51,6 +64,17 @@ html[data-mode="dim"]{ --bg: #0b0d12; --fg: #e7ecf4; --muted: #a7b0c0; + --heading: #f8fafc; + --brand-strong: #76d8ff; + --accent: #ffc94a; + --surface: rgba(17,24,39,.76); + --surface-solid: #111827; + --surface-muted: rgba(255,255,255,.07); + --surface-warm: rgba(255,201,74,.10); + --border: rgba(255,255,255,.12); + --border-strong: rgba(255,255,255,.18); + --shadow-soft: 0 22px 70px rgba(0,0,0,.34); + --shadow-card: 0 18px 48px rgba(0,0,0,.28); --nav-bg: rgba(14,18,26,.55); --nav-border: rgba(255,255,255,.06); @@ -76,6 +100,17 @@ html[data-mode="dim"]{ --bg: #0b0d12; --fg: #e7ecf4; --muted: #a7b0c0; + --heading: #f8fafc; + --brand-strong: #76d8ff; + --accent: #ffc94a; + --surface: rgba(17,24,39,.76); + --surface-solid: #111827; + --surface-muted: rgba(255,255,255,.07); + --surface-warm: rgba(255,201,74,.10); + --border: rgba(255,255,255,.12); + --border-strong: rgba(255,255,255,.18); + --shadow-soft: 0 22px 70px rgba(0,0,0,.34); + --shadow-card: 0 18px 48px rgba(0,0,0,.28); --nav-bg: rgba(14,18,26,.55); --nav-border: rgba(255,255,255,.06); diff --git a/theme/events.html b/theme/events.html index 07bca23f..3beb485d 100644 --- a/theme/events.html +++ b/theme/events.html @@ -1,74 +1,111 @@ -{% extends "main.html" %} - -{% set colors=["", "bg-light"] %} +{% extends "base.html" %} {% block content %} - {{ page.content }} - -
-
- {%set upcoming_events = page.meta.get("events", {}).get("upcoming", {}) %} -

Upcoming Events

- {% for event in upcoming_events %} +{% set events = page.meta.get("events", {}) %} +{% set upcoming_events = events.get("upcoming", []) %} +{% set past_events = events.get("past_events", []) %} +{% set page_title = page.meta.get("title", page.title) %} +{% set page_description = page.meta.get("description", "Workshops, talks, study sessions, and community gatherings from Open Science Labs.") %} -
-
- - {{ event.name }} - -
-
-

{{ event.name }}

-

{{ event.description }}

-

- From {{ event.date_start }} to - {{ event.date_end }}. -

-

- More information -

-
+
+
+
+
+

Learning together

+

{{ page_title }}

+ {% if page_description and page_description != page_title %} +

{{ page_description }}

+ {% endif %}
+
- {% endfor %} - - {% if not upcoming_events %} - No upcoming events for now. - {% endif %} -
-
+
+ {{ page.content }} +
-
-
-

Past Events

- {%set past_events = page.meta.get("events", {}).get("past_events", {}) %} - {% for event in past_events %} +
+
+

What's next

+

Upcoming Events

+
-
-
- - {{ event.name }} - -
-
-

{{ event.name }}

-

{{ event.description }}

-

- From {{ event.date_start }} to - {{ event.date_end }}. -

-

- More information -

-
+ {% if upcoming_events %} +
+ {% for event in upcoming_events %} +
+
+ {% if event.url %} + + {{ event.name }} + + {% else %} + {{ event.name }} + {% endif %} +
+
+

+ {{ event.date_start }}{% if event.date_end and event.date_end != event.date_start %} — {{ event.date_end }}{% endif %} +

+

{{ event.name }}

+

{{ event.description }}

+ {% if event.url %} + + More information + + {% endif %} +
+
+ {% endfor %}
+ {% else %} +
+

No upcoming events yet

+

Check back soon or join our community channels to hear about new sessions first.

+
+ {% endif %} +
- {% endfor %} +
+
+

From the archive

+

Past Events

+
- {% if not past_events %} - No past events yet. + {% if past_events %} +
+ {% for event in past_events %} +
+
+ {% if event.url %} + + {{ event.name }} + + {% else %} + {{ event.name }} + {% endif %} +
+
+

+ {{ event.date_start }}{% if event.date_end and event.date_end != event.date_start %} — {{ event.date_end }}{% endif %} +

+

{{ event.name }}

+

{{ event.description }}

+ {% if event.url %} + + More information + + {% endif %} +
+
+ {% endfor %} +
+ {% else %} +
+

No past events yet

+

Past event recordings and notes will appear here when they are available.

+
{% endif %} -
+
- + {% endblock content %} diff --git a/theme/main.html b/theme/main.html index 94d9808c..a7755253 100644 --- a/theme/main.html +++ b/theme/main.html @@ -1 +1,27 @@ {% extends "base.html" %} + +{% block content %} +{% set page_title = page.meta.get("title", page.title) %} +{% set page_description = page.meta.get("description") %} +{% set section_label = page.meta.get("section_label", "Open Science Labs") %} + +
+
+
+
+

{{ section_label }}

+

{{ page_title or config.site_name }}

+ {% if page_description and page_description != page_title %} +

{{ page_description }}

+ {% endif %} +
+
+ +
+ {% block content_inner %} + {{ page.content }} + {% endblock content_inner %} +
+
+
+{% endblock content %} diff --git a/theme/partners.html b/theme/partners.html index 7aa502a0..5746de7c 100644 --- a/theme/partners.html +++ b/theme/partners.html @@ -7,6 +7,12 @@ {% block content_inner %} {{ page.content }} +
+
+

{{ page.meta["partners"]|length }} partners

+

Organizations collaborating with OSL

+
+
{% for partner in page.meta["partners"] %} @@ -55,4 +61,5 @@

{% endfor %}

+
{% endblock content_inner %} diff --git a/theme/projects.html b/theme/projects.html index 6075f814..995a0cf7 100644 --- a/theme/projects.html +++ b/theme/projects.html @@ -1,55 +1,87 @@ {% extends "base.html" %} -{% set colors=["", "bg-light"] %} -{% set text_colors=["", "text-secondary"] %} {% block content %} -
-
-
- {% block content_inner %} +{% set projects = page.meta.get("projects", []) %} +{% set page_title = page.meta.get("title", page.title) %} +{% set page_description = page.meta.get("description", "Explore the open-source projects growing with Open Science Labs.") %} + +
+
+
+
+

Project directory

+

{{ page_title }}

+ {% if page_description and page_description != page_title %} +

{{ page_description }}

+ {% endif %} +
+
+ +
{{ page.content }} - {% endblock content_inner %} -
-
+ + +
+
+

{{ projects|length }} projects

+

Projects under the OSL umbrella

+
+ +
+ {% for project in projects %} +
+
+ + {{ project.type|default("project")|title }} + +

+ + {{ project.name }} + +

+
+ +

{{ project.description }}

+ +
+ {% if project.maintainer_name %} +
+
Maintainer
+
+ {% if project.maintainer_email %} + {{ project.maintainer_name }} + {% else %} + {{ project.maintainer_name }} + {% endif %} +
+
+ {% endif %} -
-
- - {% for project in page.meta["projects"] %} - -
-
-

- - {% if project.type == "incubated" %} - Static Badge - {% elif project.type == "affiliated" %} - Static Badge - {% endif %} - {{ project.name }} - -

-

- Maintainer: {{ project.maintainer_name }} - <{{ project.maintainer_email }}>
{% if project.communication_channel %} - Communication Channel: - {{ project.communication_channel.provider.title() }} +

+
Community
+
+ {% if project.communication_channel.url and project.communication_channel.url != "TBA" %} + + {{ project.communication_channel.provider|default("channel")|title }} + + {% else %} + {{ project.communication_channel.provider|default("Channel")|title }} + {% endif %} +
+
{% endif %} -

-

{{ project.description }}

-
+
+ + +
+ {% endfor %}
- {% endfor %} -
+
{% endblock content %} diff --git a/theme/single-sidebar.html b/theme/single-sidebar.html index 97d19c49..bc68495b 100644 --- a/theme/single-sidebar.html +++ b/theme/single-sidebar.html @@ -1,54 +1,71 @@ {% extends "base.html" %} {% block content %} +{% set page_title = page.meta.get("title", page.title) %} +{% set page_description = page.meta.get("description") %} +{% set section_label = page.meta.get("section_label", "Open Science Labs") %} -
-
- {% block side_menu %} +{% set sidebar = namespace(title="", items=[]) %} +{% for nav_item in nav %} + {% if nav_item.children and nav_item.active %} + {% set sidebar.title = nav_item.title %} + {% set sidebar.items = nav_item.children %} + {% endif %} +{% endfor %} - {# prepare the nav3 content inside the side block -#} - {% set nav3_selected = [] -%} - {% for nav1 in nav -%} - {% for nav2 in (nav1.children or []) -%} - {% if nav2.active %} - {% for nav3 in (nav2.children or []) -%} - {% if nav3.title != "index" -%} - {{ nav3_selected.append(nav3) or "" -}} - {% endif %} - {% endfor -%} - {% endif -%} - {% endfor -%} - {% endfor %} - -
- -
- {% for nav3_item in nav3_selected %} - - {{ nav3_item.title }} - - {% endfor %} +
+
+
+
+

{{ section_label }}

+

{{ page_title or config.site_name }}

+ {% if page_description and page_description != page_title %} +

{{ page_description }}

+ {% endif %}
+
- {% if menu_3rd_level_selected %} -
- {% for menu_item_3rd_level in menu_3rd_level_selected %} -

- {{ menu_item_3rd_level.title }} -

- {% endfor %} -
+
+ {% if sidebar.items %} + {% endif %} -
- {% endblock side_menu %} -
- {% block content_inner %} - {{ page.content }} - {% endblock content_inner %} + +
+ {% block content_inner %} + {{ page.content }} + {% endblock content_inner %} +
diff --git a/theme/team.html b/theme/team.html index e51af337..5ffd9609 100644 --- a/theme/team.html +++ b/theme/team.html @@ -5,49 +5,64 @@ {% endblock header_extra %} {% block content %} -
-
-
- {% block content_inner %} - {{ page.content }} - {% endblock content_inner %} -
-
+{% set groups = page.meta.get("teams", []) %} +{% set page_title = page.meta.get("title", page.title) %} +{% set page_description = page.meta.get("description", "Meet the people helping Open Science Labs grow as a caring, practical, open community.") %} - {% for group in page.meta["teams"] %} -
-
-

{{ group.name }}

+
+
+
+
+

People behind OSL

+

{{ page_title }}

+ {% if page_description and page_description != page_title %} +

{{ page_description }}

+ {% endif %} +
+
+ + {% if page.content|trim %} +
+ {{ page.content }} +
+ {% endif %} - -
- {% for member in group.members %} -
-
- {% if member.image_url %} - {{ member.name }} - {% endif %} +
+ {% for group in groups %} +
+
+

{{ group.members|length }} members

+

{{ group.name }}

+
-
-
-

{{ member.name }}

+
+ {% for member in group.members %} +
+
+ {% if member.image_url %} + {{ member.name }} + {% else %} + + {% endif %} +
+
+
+

{{ member.name }}

{% if member.github_url %} - + {% endif %}
{% if member.bio %} -

{{ member.bio }}

+

{{ member.bio }}

{% endif %} {% if "github_sponsor" in member %} -