diff --git a/_includes/package-grid.html b/_includes/package-grid.html index b8a911a7..98ea2a9c 100644 --- a/_includes/package-grid.html +++ b/_includes/package-grid.html @@ -1,65 +1,55 @@ -
-
-

- {{ apackage.package_name }} -

-

- - {% if apackage.all_current_maintainers %} - {% for maintainer in apackage.all_current_maintainers %} - - {% if maintainer.name %} - {{ maintainer.name }}{% if forloop.last == false %},{% endif %} - {% else %} - {{ maintainer.github_username }}{% if forloop.last == false %},{% endif %} - {% endif %} - - {% endfor %} - {% elsif apackage.submitting_author.name != 'Name' %} - - {{ apackage.submitting_author.name }} - - {% else %} - - {{ apackage.submitting_author.github_username }} - - {% endif %} - -

- -

- {{ apackage.package_description | markdownify }} -

-
- -
- {% if include.community %} -

Package stats

- +
+

+ {{ apackage.package_name }} +

+ +
+ + + {% if apackage.all_current_maintainers %} + {% for maintainer in apackage.all_current_maintainers %} + + {% if maintainer.name %} + {{ maintainer.name }}{% if forloop.last == false %},{% endif %} + {% else %} + {{ maintainer.github_username }}{% if forloop.last == false %},{% endif %} + {% endif %} + + {% endfor %} + {% elsif apackage.submitting_author.name != 'Name' %} + + {{ apackage.submitting_author.name }} + + {% else %} + + {{ apackage.submitting_author.github_username }} + {% endif %} -
+ +
+ +
+ {{ apackage.package_description | markdownify }} +
+ + + diff --git a/_includes/people-grid.html b/_includes/people-grid.html index 9f8f3d8b..33f82169 100644 --- a/_includes/people-grid.html +++ b/_includes/people-grid.html @@ -1,63 +1,74 @@ -
+ {% endfor %}" data-category="data"> +{% else %} +
+{% endif %} +
+ {% if aperson.github_image_id %} +
+ GitHub photo of {{ aperson.name }} +
+ {% endif %} -
- {% if aperson.github_image_id %} -
- GitHub photo of {{ aperson.name }} -
+

+ + {% if aperson.name %} + {{ aperson.name }} + {% else %} + @{{ aperson.github_username }} {% endif %} -

- - {% if aperson.name %} - {{ aperson.name }} - {% else %} - @{{ aperson.github_username }} - {% endif %} - -

-

- {% if aperson.partners %} + +

+ +

+ {% if aperson.partners %} {{ aperson.partners | join: ', ' }} - {% endif %} -

-

+ {% endif %} +

+ +

{% if aperson.title %} - - {{ aperson.title | join: ', ' }} - + + {{ aperson.title | join: ', ' }} + {% endif %} -

-

{{ aperson.organization }}

-
+

+ +

{{ aperson.organization }}

+ +
{% if aperson.twitter %} - - - + + + {% endif %} {% if aperson.github_username %} - - + + + {% endif %} {% if aperson.website %} - - + + + {% endif %} {% if aperson.orcidid %} - - + + + {% endif %} - {% if aperson.mastodon %} - - - + + + {% endif %}
-
+
diff --git a/_pages/contributors.md b/_pages/contributors.md index 807b0f7e..f7580d55 100644 --- a/_pages/contributors.md +++ b/_pages/contributors.md @@ -24,7 +24,7 @@ by an expert team of volunteer advisory members who help steer the direction of
{% for aperson in advisory_sorted %} - {% include people-grid.html %} + {% include people-grid.html %} {% endfor %}
@@ -46,7 +46,7 @@ the organization.
{% for aperson in advisory_working %} - {% include people-grid.html %} + {% include people-grid.html %} {% endfor %}
@@ -64,7 +64,7 @@ leadership councils.
{% for aperson in emeritus_advisory %} {{ aperson.person_name }} - {% include people-grid.html %} + {% include people-grid.html %} {% endfor %}
@@ -81,7 +81,7 @@ leadership councils.
{% for aperson in editorial %} - {% include people-grid.html %} + {% include people-grid.html %} {% endfor %}
@@ -117,6 +117,6 @@ pyOpenSci has a diverse and vibrant community of pythonistas! To date,
{% for aperson in ppl_sorted %} - {% include people-grid.html %} + {% include people-grid.html isotope=true %} {% endfor %}
diff --git a/_pages/python-packages.md b/_pages/python-packages.md index d9c7d9b0..2d201139 100644 --- a/_pages/python-packages.md +++ b/_pages/python-packages.md @@ -47,7 +47,8 @@ To view packages affiliated with our partner communities that are a part of ourp
-
+
+
{% for apackage in packages_sorted %} {% if apackage.active == true %} {% include package-grid.html %} @@ -60,7 +61,8 @@ To view packages affiliated with our partner communities that are a part of ourp Archived packages are packages that have successfully completed [pyOpenSci's software peer review process](https://www.pyopensci.org/about-peer-review/index.html) but are no longer maintained. [Check out our software maintenance policy for how we determine when a package becomes archived.](https://www.pyopensci.org/software-peer-review/our-process/policies.html#package-maintenance-and-maintainer-responsiveness) -
+
+
{% for apackage in packages_sorted %} {% if apackage.active == false %} {% include package-grid.html %} diff --git a/_sass/minimal-mistakes/_pyos-grid.scss b/_sass/minimal-mistakes/_pyos-grid.scss index 15e71e41..fc782808 100644 --- a/_sass/minimal-mistakes/_pyos-grid.scss +++ b/_sass/minimal-mistakes/_pyos-grid.scss @@ -163,30 +163,19 @@ $colors: ( // do not adjust the display or structure of the cards element. /* Package cards splash */ -.element-item.cards { - padding: 0; - margin: 2em; -} - +// Base card styles - shared by both people and package cards .cards { top: 0px; position: relative; background-color: #fff;//#fcfbf5; text-decoration: none; - z-index: 0; + z-index: 1; overflow: hidden; font-size: .8em; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15); margin-right: auto!important; margin-left: auto!important; - // Remove padding from top for person images - .person_img { - margin-top: 0; - margin-left: 0; - margin-right: 0; - } - &__image { max-height: calc($small / 3); overflow: hidden; @@ -549,3 +538,24 @@ $colors: ( } } + +// Isotope grid cards - override base .cards auto margins that break isotope layout +.grid-isotope .element-item.cards { + margin-left: 0 !important; + margin-right: 0 !important; +} + +// People cards in isotope grid - specific styling +.grid-isotope .element-item.cards.people-card { + padding: 0; + margin: 8px; + + // Remove padding from top for person images + .person_img { + margin-top: 0; + margin-left: 0; + margin-right: 0; + } +} + +// Package cards in isotope grid - styles are now in _pyos-isotope.scss diff --git a/_sass/minimal-mistakes/_pyos-isotope.scss b/_sass/minimal-mistakes/_pyos-isotope.scss index dc63c6b5..f41fd407 100644 --- a/_sass/minimal-mistakes/_pyos-isotope.scss +++ b/_sass/minimal-mistakes/_pyos-isotope.scss @@ -2,6 +2,12 @@ /* ---- isotope styles ---- */ * { box-sizing: border-box; } +// Isotope grid column widths - separate for people and packages +// People cards: 25% = 4 columns +$isotope-column-width: 25%; +// Package cards: 33.33% = 3 columns +$package-column-width: 33.33%; + // body { // font-family: $body-font!important; // } @@ -98,10 +104,26 @@ input[type="text"] { /* ---- grid ---- */ +/* Grid isotope container - must contain floats and establish proper layout */ +.grid-isotope { + position: relative; + width: 100%; + margin: 1em 0; + padding: 0; +} /* Layout */ .grid-sizer { - width: 22.5%; + width: $isotope-column-width; + /* Isotope needs to measure this element */ + visibility: hidden; + height: 0; + overflow: hidden; +} + +/* Package grid uses different column width */ +.package-grid-isotope .grid-sizer { + width: $package-column-width; } @@ -111,22 +133,168 @@ input[type="text"] { width: auto; } + .element-item { position: relative; float: left; - width: 22.5%; - margin: 8px; - padding: 15px; + padding: 0; box-sizing: border-box; -} + display: block; + visibility: visible; + opacity: 1; -@media screen and (max-width:1199px) { - .element-item { - width: 22.5%; + // People cards - override isotope defaults + &.people-card { + padding: 0 !important; + margin: 20px; + // Account for 25px margins on each side (50px total) + width: calc(#{$isotope-column-width} - 50px); } - } +} .element-item > * { margin: 0; padding: 0; } + +/* ---- Package Cards - Separate concerns ---- */ + +.element-item.package-card { + margin: 8px; + padding: 0; + overflow: visible; + // Account for 8px margins on each side (16px total) + width: calc(#{$package-column-width} - 16px); + + .package-card__content { + background: #fff; + border: 1px solid #e0e0e0; + border-top: 10px solid $pyos-darkpurple; + border-radius: 8px; + padding: 1.5em; + height: 100%; + display: flex; + flex-direction: column; + transition: box-shadow 0.2s ease, transform 0.2s ease; + position: relative; + overflow: visible; + + &:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + transform: translateY(-2px); + } + } + + .package-card__title { + font-size: 1.25em; + font-weight: 600; + margin: 0 0 0.75em 0; + color: #333; + line-height: 1.3; + } + + .package-card__meta { + font-size: 0.875em; + color: #666; + margin-bottom: 1em; + display: flex; + align-items: center; + gap: 0.5em; + + i { + color: #999; + } + + a { + color: #666; + text-decoration: none; + + &:hover { + color: $pyos-darkpurple; + text-decoration: underline; + } + } + } + + .package-card__description { + font-size: 0.9375em; + line-height: 1.6; + color: #555; + margin-bottom: 1.25em; + flex-grow: 1; + + p { + margin: 0; + } + } + + .package-card__links { + list-style-type: none; + margin-left: 0; + margin-top: auto; + padding: 0.2em; + padding-top: 1em; + border-top: 1px solid #f0f0f0; + + li { + font-size: 1rem; + margin-bottom: 0.3em; + + a { + text-decoration: none; + color: $pyos-darkpurple; + display: inline-flex; + align-items: center; + gap: 0.4em; + transition: color 0.2s ease; + + &:hover { + color: darken($pyos-darkpurple, 10%); + } + + i { + font-size: 0.9em; + } + + img { + height: 18px; + vertical-align: middle; + } + } + + // Archived badge styling + &.package-card__archived { + color: #999; + font-size: 0.875em; + display: inline-flex; + align-items: center; + gap: 0.4em; + } + } + } +} + +// Responsive adjustments for package cards +@media screen and (max-width: 1199px) { + .element-item.package-card { + width: calc(#{$package-column-width} - 16px); + } +} + +@media screen and (max-width: 768px) { + .element-item.package-card { + width: calc(50% - 16px); + + .package-card__content { + padding: 1.25em; + } + } +} + +@media screen and (max-width: 480px) { + .element-item.package-card { + width: 100%; + margin-left: 0; + margin-right: 0; + } +}