diff --git a/assets/main.scss b/assets/main.scss index a21c7c7..72a2bf4 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -1447,6 +1447,13 @@ body { width: $contentwidthwide; } + // The extra width is for card grids. Prose keeps the normal column, or the measure sits in + // the middle of it with all the slack pushed to one side. + #page-content:has(.with-toc--prose) { + max-width: $maxwidth; + width: $contentwidth; + } + .with-toc { display: grid; grid-template-columns: 13rem minmax(0, 1fr); @@ -3420,3 +3427,181 @@ body { } } } + +// Specific to /about — long-form prose pages + +#about-content { + // Without this the body falls back to the browser default and the section reads as four + // descending sizes: lead, body, callout, rows + font-size: 1.05rem; + line-height: 1.75; + text-wrap: pretty; + + // The column is sized for card grids; prose needs a readable measure inside it + > p, + > ul, + > ol, + > blockquote { + max-width: 54rem; + } + + > p { + margin-bottom: 1.15rem; + } + + // One size for all prose. Hierarchy is the headings' job; varying paragraph sizes within a + // section reads as inconsistency rather than emphasis. + + // Optional elaboration, folded away so it does not interrupt the argument + .aside { + max-width: 54rem; + margin: 1.5rem 0; + background-color: $tilebg4; + border-radius: $card-radius; + + summary { + padding: 0.8rem 1.1rem; + font-weight: 700; + color: $tiletext; + cursor: pointer; + list-style: none; + + &::-webkit-details-marker { + display: none; + } + &::before { + content: "›"; + display: inline-block; + width: 1rem; + font-weight: 400; + color: $greydesc; + transition: transform 200ms ease-in-out; + } + &:hover { + color: black; + } + } + &[open] summary::before { + transform: rotate(90deg); + } + } + + .aside-body { + padding: 0 1.1rem 1rem 2.1rem; + + p { + margin: 0; + color: $tiletext2; + } + } + + @media (max-width: 50rem) { + font-size: 1rem; + } + + // Five principles with uneven text: any multi-column grid strands one card and leaves the + // short ones half empty, so these are rows, which align by construction. + .stat-row { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); + gap: 1rem; + max-width: 54rem; + margin: 1.75rem 0 2rem; + } + + a.stat { + display: flex; + flex-direction: column; + gap: 0.15rem; + padding: 1.1rem 1.25rem; + text-decoration: none; + background-color: white; + border: 1px solid $overline; + border-radius: $card-radius; + transition: all 200ms ease-in-out; + + &:hover { + border-color: $tilebg2; + box-shadow: 0 0.6rem 1.5rem rgba(0, 0, 0, 0.06); + transform: translateY(-2px); + } + } + + .stat-value { + font-size: 2rem; + font-weight: 800; + line-height: 1.1; + letter-spacing: -0.02em; + font-variant-numeric: tabular-nums; + color: $tiletext; + } + + // Written as a descendant rather than nested under .stat-value: `&` there would carry the + // whole ancestor chain and put .stat in front of #about-content + @each $hue in $eco-hues { + .stat[data-hue="#{index($eco-hues, $hue) - 1}"] .stat-value { + color: darken($hue, 15%); + } + } + + .stat-label { + font-size: 0.9rem; + color: $greydesc; + } + + .principle-list { + display: flex; + flex-direction: column; + gap: 0.35rem; + max-width: 54rem; + margin: 1.75rem 0 2.5rem; + padding: 0; + list-style: none; + } + + .principle { + display: grid; + grid-template-columns: 3rem 1fr; + column-gap: 1.2rem; + align-items: start; + padding: 1.1rem 1.2rem; + border-radius: $card-radius; + transition: background-color 200ms ease-in-out; + + &:hover { + background-color: $tilebg4; + } + + // Element selector included to beat the generic `#page-content .post h3` margins + h3 { + margin: 0 0 0.3rem; + font-size: 1.05rem; + font-weight: 800; + letter-spacing: -0.01em; + } + + p { + margin: 0; + max-width: none; + line-height: 1.6; + color: $tiletext2; + } + } + + .principle-icon { + grid-row: span 2; + display: grid; + place-items: center; + width: 3rem; + height: 3rem; + font-size: 1.25rem; + color: $tiletext; + border-radius: 50%; + + @each $hue in $eco-hues { + &[data-hue="#{index($eco-hues, $hue) - 1}"] { + background-color: rgba($hue, 0.22); + } + } + } +} diff --git a/content/about/mission/_index.md b/content/about/mission/_index.md index 032e5ab..1b9a1c8 100644 --- a/content/about/mission/_index.md +++ b/content/about/mission/_index.md @@ -1,6 +1,75 @@ +++ title = "Mission statement" description = "The goals, organization and vision of the scverse consortium." + +[[goals]] + name = "Interoperability" + icon = "bi-arrow-left-right" + text = "We focus on developing open, standardized, and efficient file formats to encourage data sharing and re-use." + +[[goals]] + name = "Diversity" + icon = "bi-people" + text = "We believe in removing barriers to participation in research, including economic factors and institutional culture. Our tools will have the most impact if they are developed by and for a diverse community." + +[[goals]] + name = "Transparency" + icon = "bi-eye" + text = "We do our work as openly as possible and welcome our community to join the decision making process." + +[[goals]] + name = "Simplicity" + icon = "bi-boxes" + text = "Invent as little as possible and work with standard pydata types. We strive for easy-to-use interfaces that reduce mental overhead." + +[[goals]] + name = "Efficiency" + icon = "bi-lightning-charge" + text = "Our tools should require as little computational resources as possible. This makes analysis of large datasets more accessible, and makes cutting edge research possible." +[[user_support]] + name = "Documentation" + icon = "bi-journal-text" + text = "Clear documentation of code and usage via docs and tutorials." + +[[user_support]] + name = "Participation" + icon = "bi-git" + text = "Participation in development through issues and pull requests." + +[[user_support]] + name = "Forums and chat" + icon = "bi-chat-dots" + text = "Our [Discourse](https://discourse.scverse.org/) and [Zulip](https://scverse.zulipchat.com/), alongside the other [ways to reach us](/join/)." + +[[user_support]] + name = "Workshops" + icon = "bi-mortarboard" + text = "Workshops at which we teach analysis workflows based on the scverse ecosystem." + +[[developer_support]] + name = "Stable APIs" + icon = "bi-plug" + text = "Providing stable APIs to build on top of." + +[[developer_support]] + name = "Shared data structures" + icon = "bi-hdd-stack" + text = "Providing standardized and well-supported data structures to pass around data." + +[[developer_support]] + name = "Recognition" + icon = "bi-award" + text = "Making sure all contributions are recognized in our change logs and documentation." + +[[developer_support]] + name = "Promotion" + icon = "bi-megaphone" + text = "Promoting [ecosystem packages](/packages/#ecosystem) that rely on scverse via our website and social media feeds." + +[[developer_support]] + name = "Open channels" + icon = "bi-chat-square-text" + text = "Establishing open communication channels for discussion and collaboration between developers, and a common forum for user support and engagement." +++ @@ -8,48 +77,39 @@ description = "The goals, organization and vision of the scverse consortium." We as scverse® want to make analysis tools for omics data in the life sciences as accessible as possible. This means: -* Interoperability -- we focus on developing open, standardized, and efficient file formats to encourage data sharing and re-use. -* Diversity -- we believe in removing barriers to participation in research, including economic factors and institutional culture. Our tools will have the most impact if they are developed by and for a diverse community. -* Transparency -- we do our work as openly as possible and welcome our community to join the decision making process. -* Simplicity -- invent as little as possible and work with standard pydata types. We strive for easy-to-use interfaces that reduce mental overhead. -* Efficiency -- our tools should require as little computational resources as possible. This makes analysis of large datasets more accessible, and makes cutting edge research possible. +{{< principles "goals" >}} ## Organization and vision The growing adoption of Python for single-cell omics data analysis has been catalyzed by [Scanpy](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-017-1382-0) and [AnnData](https://anndata.scverse.org/). -Around this infrastructure an ecosystem of packages has been created by various developers and institutions — extending single-cell analysis to different modalities and addressing challenges at the cutting-edge of single-cell research. We believe that progress in this field can't be silo'd to a few groups. To further nurture the growth of this ecosystem, we've formed a new organization -- scverse. +Around this infrastructure an ecosystem of packages has been created by various developers and institutions — extending single-cell analysis to different modalities and addressing challenges at the cutting-edge of single-cell research. We believe that progress in this field can't be siloed to a few groups. To further nurture the growth of this ecosystem, we've formed a new organization — scverse. + +{{< stats >}} Scverse is a consortium of tools with users and developers across the world. To sustain the utility and growth of the ecosystem, it’s essential that the core analytic tools are robust and well-maintained. This entails consistent support and improvement of tools beyond what's possible in the conventional single-lab academic setting. -Scverse provides high quality infrastructure for analysis of single cell omics data. These *core* tools are well documented, tested, and provide broad functionality. They work with standardized data structures which use common Python numeric types and have interchange-friendly on-disk formats. +Scverse provides high quality infrastructure for analysis of single cell omics data. These [core tools](/packages/) are well documented, tested, and provide broad functionality. They work with standardized data structures which use common Python numeric types and have interchange-friendly on-disk formats. -We define *core* tools as those which facilitate sharing data through common formats, or provide foundational support for single cell datatypes (e.g. modality-specific IO, toolkits) and analyses. -These tools are placed under shared maintenance and development in the scverse GitHub organization. +{{< aside "What counts as a core tool?" >}} +Those which facilitate sharing data through common formats, or provide foundational support for single cell datatypes (e.g. modality-specific IO, toolkits) and analyses. +They are placed under [shared maintenance](/about/roles/) and development in the [scverse GitHub organization](https://github.com/scverse). +{{< /aside >}} -Scverse *core* tools are expected to interface with and be supplemented by other tools in the ecosystem. Scverse strives for synergy and interoperability with the ecosystem of packages built around these *core* tools, to ultimately provide users to cutting-edge and varied selection of analysis methods. +Scverse strives for synergy and interoperability with the ecosystem of packages built around these core tools, to ultimately give users a cutting-edge and varied selection of analysis methods. ## User engagement We are community-driven and committed to keeping the scverse community open. We strive to actively foster a community where everyone is and feels welcomed, and where there are no barriers to contributions in any form. We welcome newcomers and pledge to build an environment where they can grow as contributors, developers, and community members. Together with technical and development support, we also support our users through: -* Clear documentation of code and usage via docs and tutorials. -* Participation in development through issues and pull requests. -* Community forums, such as our Discourse, Zulip, and Twitter. -* Workshops at which we teach analysis workflows based on the scverse ecosystem. +{{< principles "user_support" >}} ## Developer engagement -Tools within scverse are deliberately not unified under a single package, and instead form a consortium of *core* analytic tools with shared maintenance responsibilities. -Development of these packages is not restricted – contributions are welcomed and publicly acknowledged. +Tools within scverse are deliberately not unified under a single package, and instead form a consortium of core analytic tools with shared maintenance responsibilities. +Development of these packages is not restricted — contributions are welcomed and publicly acknowledged. However, scverse aims to support the external development of new approaches to analyze and work with single cell data. -We encourage the creation of new methods and tools on top of the *core* packages and data-structures. +We encourage the creation of new methods and tools on top of the core packages and data-structures. We support the development of these ecosystem packages by: -* Providing stable APIs to build on top of. -* Providing standardized and well-supported data structure to pass around data. -* Making sure all contributions are recognized in our change logs and documentation. -* Promoting 3rd party packages that rely on scverse via our websites and social media feeds. -* Establishing open communication channels for: - * Discussion and collaboration between developers. - * A common forum for user support and engagement. +{{< principles "developer_support" >}} diff --git a/content/join/_index.md b/content/join/_index.md index 8228600..477fb2a 100644 --- a/content/join/_index.md +++ b/content/join/_index.md @@ -4,36 +4,49 @@ description = "How to reach the scverse community on GitHub, Zulip, Discourse an [[resources]] id = "github" + icon = "bi-github" title = "GitHub" text = "Follow our organisation on GitHub" link = "https://github.com/scverse" [[resources]] id = "zulip" + icon = "i-zulip" title = "Zulip" text = "Chat with us on Zulip" link = "https://scverse.zulipchat.com/" [[resources]] id = "twitter" + icon = "i-xcom" title = "" text = "Follow us on X (fka Twitter)" link = "https://x.com/scverse_team" [[resources]] id = "bluesky" + icon = "i-bluesky" title = "Bluesky" text = "Follow us on Bluesky" link = "https://bsky.app/profile/scverse.bsky.social" +[[resources]] + id = "linkedin" + icon = "bi-linkedin" + title = "LinkedIn" + text = "Follow us on LinkedIn" + link = "https://www.linkedin.com/company/scverse" + [[resources]] id = "discourse" + icon = "i-discourse" title = "Discourse" text = "Ask questions on Discourse" link = "https://discourse.scverse.org/" [[resources]] id = "youtube" + icon = "bi-youtube" title = "YouTube" text = "Subscribe to our YouTube channel" link = "https://www.youtube.com/channel/UCpsvsIAW3R5OdftJKKuLNMA" diff --git a/layouts/about/list.html b/layouts/about/list.html index d8b4779..ed12938 100644 --- a/layouts/about/list.html +++ b/layouts/about/list.html @@ -1,6 +1,13 @@ {{ define "main" }} -
{{ $item.text }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index d454093..c02d623 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -42,6 +42,7 @@{{ $item.text | markdownify }}
+