The flex properties (align-items, flex-direction, flex-wrap, justify-content)
were overriding the default layout unnecessarily on mobile.
Co-Authored-By: Claude <noreply@anthropic.com>
Was in a standalone @media (max-width: 960px) block; now lives inside
the existing mobile breakpoint block alongside sibling expand-row rules.
No visual change.
Co-Authored-By: Claude <noreply@anthropic.com>
Gives the focus ring a bit more breathing room so it doesn't
overlap the button text at the new border-radius.
Co-Authored-By: Claude <noreply@anthropic.com>
Footer text was too small to read comfortably. Bumping to --text-sm
improves legibility without breaking the footer layout.
Co-Authored-By: Claude <noreply@anthropic.com>
Moves overflow-x: clip from the 680px breakpoint into the 960px
breakpoint, removing the duplicate rule. The value was applied twice
across two consecutive breakpoints with no override in between.
Co-Authored-By: Claude <noreply@anthropic.com>
Replaces the width/padding/overflow hack with a clean display:none.
The previous approach collapsed the cells to zero size but kept them
in the layout flow; display:none removes them entirely.
Co-Authored-By: Claude <noreply@anthropic.com>
Add an expand-commit span inside the expand row that displays the last
commit date. Hidden on desktop, visible only on mobile (max-width: 960px)
via media query, mirroring the commit column that appears in the full
table. Relative time formatting is applied via JS on page load.
Co-Authored-By: Claude <noreply@anthropic.com>
Expand the .tag::after pseudo-element inset and add explicit min-height/
min-width of 44px so the interactive hit area satisfies WCAG 2.5.5. Also
nudge mobile tag padding and font-size slightly for visual consistency.
Co-Authored-By: Claude <noreply@anthropic.com>
Appends a small northeast arrow (↗) after target="_blank" anchors
in hero subtitle, expand description, expand also-see, and footer
sections to signal outbound navigation to keyboard and sighted users.
Co-Authored-By: Claude <noreply@anthropic.com>
Move cursor/hover/user-select styles from .sort-btn to th[data-sort]
so the entire column header cell is the interactive target, not just
the button text node.
Co-Authored-By: Claude <noreply@anthropic.com>
col-cat and expand-row cells need different treatment on mobile:
- col-cat uses display:none (whole column hidden)
- expand-row first/last cells collapse via width/padding/overflow
rather than display:none to avoid breaking table layout
Co-Authored-By: Claude <noreply@anthropic.com>
Table sort triggers were bare th elements, which are not keyboard
focusable or announced as interactive by screen readers. Replace with
button elements inside th so keyboard users can activate sorting and
get proper focus-visible ring.
Co-Authored-By: Claude <noreply@anthropic.com>
The "Xk+ stars on GitHub / Updated ..." text at oklch(68%) on the dark
hero gradient (oklch 14-28%) could dip below 4.5:1 contrast at the
darkest portions. Raising to oklch(75%) ensures the ratio stays above
4.5:1 across the full gradient range.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Download Cormorant Garamond 600 and Manrope (variable, 400-800) woff2
files for latin + latin-ext subsets. Add @font-face declarations to
style.css and remove the Google Fonts <link> and preconnect hints from
base.html.
Eliminates the render-blocking CSS fetch to fonts.googleapis.com that
delayed First Contentful Paint by 100-300ms on typical connections.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 23 design tokens to :root for colors previously hardcoded inline:
hero text (kicker, proof), hero background gradient, hero button gradient,
accent underline (shared across 3 rules), page background gradient,
table row states (hover, focus, open), sticky header bg, search shadows
and focus ring, tag states, and CTA background.
Decorative one-off values (hero noise, sheen, grid overlay) left inline
since they are tightly coupled to their visual effects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bump margin-bottom from 0.9rem to 1.5rem and font-size from
--text-xs to --text-sm for .hero-kicker and .section-label to
improve readability and visual breathing room.
Co-Authored-By: Claude <noreply@anthropic.com>
Display the awesome-python repo's star count (formatted as '230k+') and
the last data refresh date below the hero CTA. Fetches the self-repo
star count by always including vinta/awesome-python in the stars fetch.
Also removes the footer date stamp, which is now surfaced in the hero.
Co-Authored-By: Claude <noreply@anthropic.com>
The .tag-subcat class was removed from the HTML templates but its
CSS rules remained. Remove the orphaned base styles and clean up
the mobile media query that also referenced the class.
Co-Authored-By: Claude <noreply@anthropic.com>
Entries nested under a plain-text subcategory heading (e.g. "Frameworks"
inside Testing) now carry a subcategory field populated by the parser.
The build pipeline collects these into a subcategories list on each merged
entry, and the template renders them as tag-subcat buttons that plug into
the existing data-cats filter mechanism.
A dedicated .tag-subcat style distinguishes them visually from category
tags, and both are hidden on mobile alongside .tag-group.
Co-Authored-By: Claude <noreply@anthropic.com>
Moves .table-wrap overflow-x rule from the 680px breakpoint to 768px
so the table becomes scrollable before it gets too narrow to read.
Co-Authored-By: Claude <noreply@anthropic.com>
Consolidate two conflicting mobile footer rules into one, setting
flex-direction to column, align-items to center, and text-align to
center so the footer is symmetrically centered on narrow viewports.
Co-Authored-By: Claude <noreply@anthropic.com>
Split hero-topbar and footer selectors to apply distinct responsive
styles. The topbar now uses a horizontal row layout with nowrap so
the nav link does not stack vertically, while hero-topbar-actions
and hero-topbar-link get auto widths to avoid stretching full-width.
Co-Authored-By: Claude <noreply@anthropic.com>
The "Jump to the list" anchor duplicated the "Browse the List" button.
Removes the element, its CSS rules, the scroll-line keyframe animation,
and cleans up the offscreen pause and focus-visible selector lists.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The projects/categories/topic groups stats added visual clutter to the
hero without contributing to the core purpose of the section.
Co-Authored-By: Claude <noreply@anthropic.com>
Hardcoded oklch() values in footer rules are replaced with named tokens
(--footer-bg, --footer-text, --footer-link, --footer-link-hover,
--footer-muted, --footer-sep) declared in :root. No visual change.
Co-Authored-By: Claude <noreply@anthropic.com>
Suppressing the outline on a focus-visible rule is self-defeating —
it opts into the intent-based focus ring selector but then hides it.
The row already receives a visible inset box-shadow on focus, so the
outline:none was redundant and harmful to keyboard accessibility.
Co-Authored-By: Claude <noreply@anthropic.com>
Neither variable was referenced anywhere in the stylesheet.
Removing dead tokens keeps the design token surface minimal.
Co-Authored-By: Claude <noreply@anthropic.com>
.expand-meta links can overflow their container on narrow viewports.
Apply ellipsis truncation to keep the row tidy.
.expand-row td[colspan] gains symmetric inline padding on mobile to match
the surrounding table spacing.
Co-Authored-By: Claude <noreply@anthropic.com>
Drops the blur(14px) backdrop-filter on the sticky table header and
raises the background opacity from 0.92 to 0.97 so the header remains
clearly readable without the compositing overhead.
Co-Authored-By: Claude <noreply@anthropic.com>
Apply contain: layout style to .results-section and
contain: layout style paint to the detail panel element to reduce
browser layout recalculation scope during search interactions.
Co-Authored-By: Claude <noreply@anthropic.com>
Uses IntersectionObserver to toggle an .offscreen class on the hero
element, which sets animation-play-state: paused on the sheen, noise,
and scroll-cue animations. Avoids unnecessary GPU work while the hero
is not visible.
Co-Authored-By: Claude <noreply@anthropic.com>
Narrowed the Cormorant Garamond request to 600 only and Manrope to
400/600/700/800, removing the unused 500 and 700 variants. Added
font-weight: 600 to .final-cta h2 so the heading explicitly uses
the retained weight.
Co-Authored-By: Claude <noreply@anthropic.com>
- Add aria-sort attributes to table header on sort state changes
- Replace .table-wrap:focus outline:none with focus-visible outline
- Move noscript message above the fold into main, before content
- Upgrade hero-topbar div to nav with aria-label for landmark semantics
- Remove role=button from tr elements (invalid ARIA on native elements)
- Fix back-to-top button label and text (was labelled 'Back to search')
- Switch font-size from 16px to 100% to respect user browser preferences
- Add overflow-wrap and word-break to .col-name and description cells
Co-Authored-By: Claude <noreply@anthropic.com>
Both variables mapped to near-identical small-text sizes already covered
by --text-xs. Remove the redundant variables and migrate all call sites,
including two remaining hardcoded rem values, to the shared token.
Co-Authored-By: Claude <noreply@anthropic.com>
Move display:grid and gap from .final-cta to .final-cta > .section-shell
so the grid context is applied to the correct container element, not the
outer section. Wrap final-cta content in index.html with a section-shell
div accordingly. Also fix .no-results bottom padding that was missing.
Co-Authored-By: Claude <noreply@anthropic.com>
When a search or filter yields no results, the message now includes
an inline button that resets both the search input and the active
filter. Improves discoverability and reduces dead-end frustration.
Co-Authored-By: Claude <noreply@anthropic.com>
On narrow screens the category column is hidden. This adds a .mobile-cat
span inside the name cell that renders the first category below the
project name, giving mobile users the context they were missing.
Co-Authored-By: Claude <noreply@anthropic.com>