diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbbe097c..8f8d0801 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,8 +90,9 @@ jobs: run: | rsync -a --delete \ --exclude '.meta/' --exclude '.ssg/' --exclude '.ssg-cache/' \ - --exclude '.ssg-plugin-cache.json' --exclude '_csp' --exclude '_headers' \ + --exclude '.ssg-plugin-cache.json' --exclude '_headers' \ docs/ _site/ + touch _site/.nojekyll test -s _site/index.html test "$(cat _site/CNAME)" = "bankstatementparser.com" grep -q '^Contact:' _site/.well-known/security.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e0cf04a..c32888c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ All notable changes to this website are documented here. The format follows ## [Unreleased] +## [0.0.8] - 2026-10-31 + +### Fixed + +- Preserved `docs/_csp/` assets and emitted `.nojekyll` during GitHub Pages + staging in `.github/workflows/ci.yml` and `scripts/post-build.py` so the + extracted search widget stylesheet and script no longer return HTTP 404 in + production. +- Embedded `#ssg-search-btn` and `#ssg-search-overlay` rules directly in + `styles.css` and `_layouts/styles.css` to prevent unstyled SVG search icons + and modal overlays from appearing in the page flow. +- Updated `.footer-grid` in `styles.css` and `_layouts/styles.css` from 3 + columns to 4 columns (`1.4fr 1fr 1fr 1fr`) to match the 4-column footer + layout in `_layouts/footer.html`. + ## [0.0.7] - 2026-10-30 ### Fixed diff --git a/CITATION.cff b/CITATION.cff index 099000c5..3d4eed91 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,8 +2,8 @@ cff-version: 1.2.0 message: "If you reference the Bank Statement Parser documentation, please cite it as below." title: "bankstatementparser.com: Fast, secure financial statement parsing documentation" type: software -version: 0.0.7 -date-released: 2026-10-30 +version: 0.0.8 +date-released: 2026-10-31 authors: - family-names: Rousseau given-names: Sebastien diff --git a/VERSION b/VERSION index 5a5831ab..d169b2f2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.7 +0.0.8 diff --git a/_layouts/styles.css b/_layouts/styles.css index 6332bee2..4360a059 100644 --- a/_layouts/styles.css +++ b/_layouts/styles.css @@ -1639,7 +1639,7 @@ figcaption { margin-block-start: 1.5rem; color: var(--ink-muted); } #ssg-search-btn { --ssg-search-top: 18px; } #ssg-search-btn kbd { margin-block: 0; } .site-nav > #ssg-search-btn { position: static; inset: auto; flex: 0 0 auto; box-shadow: none; } -.footer-grid { display: grid; grid-template-columns: 1.2fr 0.7fr 1fr; gap: 3rem; } +.footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 2.5rem; } .footer-grid > div { display: grid; align-content: start; gap: 1rem; } .footer-grid h2 { font: 800 var(--step--1)/1.2 var(--font-sans); letter-spacing: 0.05em; text-transform: uppercase; } .footer-grid ul { display: grid; gap: 0.45rem; padding: 0; list-style: none; } @@ -2022,4 +2022,133 @@ html { scroll-padding-block-start: 5.5rem; } } .site-nav > #ssg-search-btn span, .site-nav > #ssg-search-btn kbd { display: none; } +#ssg-search-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + min-height: 44px; + padding: 8px 16px; + background: #ffffff; + border: 1px solid #878d9b; + border-radius: 50%; + cursor: pointer; + font-family: -apple-system, system-ui, sans-serif; + font-size: 14px; + color: #505057; + transition: border-color .15s, box-shadow .15s; +} +#ssg-search-btn:hover { border-color: #4b5563; } +#ssg-search-btn svg { + width: 16px; + height: 16px; + stroke: currentColor; + fill: none; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + flex-shrink: 0; +} +#ssg-search-widget { display: contents; } +#ssg-search-overlay { + display: none; + position: fixed; + inset: 0; + z-index: 9999; + background: rgba(0, 0, 0, .5); + align-items: flex-start; + justify-content: center; + padding-top: 12vh; +} +#ssg-search-overlay.active { display: flex; } +#ssg-search-box { + background: #ffffff; + color: #111111; + border-radius: 12px; + width: 92%; + max-width: 640px; + box-shadow: 0 25px 60px rgba(0, 0, 0, .3); + overflow: hidden; + font-family: -apple-system, system-ui, sans-serif; +} +#ssg-search-header { + display: flex; + align-items: center; + padding: 0 16px; + border-bottom: 1px solid #e5e7eb; +} +#ssg-search-header svg { + width: 20px; + height: 20px; + stroke: #6b7280; + fill: none; + stroke-width: 2; + flex-shrink: 0; +} +#ssg-search-input { + flex: 1; + padding: 16px 12px; + font-size: 16px; + border: none; + outline: none; + background: transparent; + color: inherit; +} +#ssg-search-results { max-height: 50vh; overflow-y: auto; } +#ssg-sr-status { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.ssg-result { + display: block; + padding: 12px 20px; + text-decoration: none; + color: #111111; + border-bottom: 1px solid #f3f4f6; + transition: background .1s; +} +.ssg-result:hover, .ssg-result.active { background: #f3f0f8; } +.ssg-result-title { font-weight: 600; font-size: 15px; margin-bottom: 3px; } +.ssg-result-snippet { font-size: 13px; color: #4b5563; line-height: 1.5; } +.ssg-result-snippet mark { background: #fef08a; color: inherit; border-radius: 2px; padding: 0 2px; } +.ssg-no-results { padding: 32px 20px; text-align: center; color: #4b5563; font-size: 14px; } +.ssg-search-footer { + display: flex; + gap: 16px; + padding: 10px 20px; + font-size: 12px; + color: #4b5563; + border-top: 1px solid #e5e7eb; + justify-content: flex-end; +} +.ssg-search-footer kbd { + font-family: inherit; + font-size: 11px; + padding: 1px 5px; + background: #f3f4f6; + border: 1px solid #e5e7eb; + border-radius: 3px; +} +:root[data-theme="dark"] #ssg-search-btn { background: #151928; border-color: #5d6375; color: #ffffff; } +:root[data-theme="dark"] #ssg-search-box { background: #19151f; color: #f8f5fa; } +:root[data-theme="dark"] #ssg-search-header { border-color: #374151; } +:root[data-theme="dark"] .ssg-result { color: #f8f5fa; border-color: #2d2337; } +:root[data-theme="dark"] .ssg-result:hover, :root[data-theme="dark"] .ssg-result.active { background: #2d2337; } +:root[data-theme="dark"] .ssg-result-snippet, :root[data-theme="dark"] .ssg-no-results, :root[data-theme="dark"] .ssg-search-footer { color: #d2cbd6; border-color: #374151; } +:root[data-theme="dark"] .ssg-search-footer kbd { background: #2d2337; border-color: #4b5563; color: #f8f5fa; } +@media (prefers-color-scheme: dark) { + :root:not([data-theme="light"]) #ssg-search-btn { background: #151928; border-color: #5d6375; color: #ffffff; } + :root:not([data-theme="light"]) #ssg-search-box { background: #19151f; color: #f8f5fa; } + :root:not([data-theme="light"]) #ssg-search-header { border-color: #374151; } + :root:not([data-theme="light"]) .ssg-result { color: #f8f5fa; border-color: #2d2337; } + :root:not([data-theme="light"]) .ssg-result:hover, :root:not([data-theme="light"]) .ssg-result.active { background: #2d2337; } + :root:not([data-theme="light"]) .ssg-result-snippet, :root:not([data-theme="light"]) .ssg-no-results, :root:not([data-theme="light"]) .ssg-search-footer { color: #d2cbd6; border-color: #374151; } + :root:not([data-theme="light"]) .ssg-search-footer kbd { background: #2d2337; border-color: #4b5563; color: #f8f5fa; } +} .made-with-ssg { color: inherit; } diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/.ssg-plugin-cache.json b/docs/.ssg-plugin-cache.json index fe8a3515..e8ff198b 100644 --- a/docs/.ssg-plugin-cache.json +++ b/docs/.ssg-plugin-cache.json @@ -1,22 +1,22 @@ { - "public/404/index.html": 6685502511262101402, - "public/about/index.html": 7114907689150801667, - "public/accessibility/index.html": 11633326847604842706, - "public/api/index.html": 16738817662723772396, - "public/architecture/index.html": 2547062936051338519, - "public/benchmarks/index.html": 9264854718161004577, - "public/changelog/index.html": 7719752161556317238, - "public/contact/index.html": 15851191858446219194, - "public/contributing/index.html": 12888048974157366658, - "public/faqs/index.html": 2804181515689989929, - "public/formats/index.html": 11710041785705889780, - "public/getting-started/index.html": 11140463277879458902, - "public/index.html": 12274476345404019556, - "public/made-with-ssg/index.html": 15477769817683305848, - "public/offline/index.html": 18005033801483657585, - "public/privacy/index.html": 13968717483738852506, - "public/security/index.html": 13742719349778952529, - "public/terms/index.html": 10262982558920552677, - "public/thanks/index.html": 10563712724046691414, - "public/use-cases/index.html": 8181875099486738189 + "public/404/index.html": 7259093385209876975, + "public/about/index.html": 12949456559420021308, + "public/accessibility/index.html": 5713522207449664177, + "public/api/index.html": 11397964784032987743, + "public/architecture/index.html": 6915802455650842912, + "public/benchmarks/index.html": 2021468413810795982, + "public/changelog/index.html": 18270345507824245213, + "public/contact/index.html": 10355855238041785199, + "public/contributing/index.html": 12520701021490290597, + "public/faqs/index.html": 11983471379327613372, + "public/formats/index.html": 1052158472452750897, + "public/getting-started/index.html": 1865910444430193385, + "public/index.html": 2989877783651903019, + "public/made-with-ssg/index.html": 2015761978985704885, + "public/offline/index.html": 6011093415955977822, + "public/privacy/index.html": 11811363588876036415, + "public/security/index.html": 14062708075236181358, + "public/terms/index.html": 141328437173614684, + "public/thanks/index.html": 8068784464901517319, + "public/use-cases/index.html": 15672533206450610668 } \ No newline at end of file diff --git a/docs/404/index.html b/docs/404/index.html index 4ec6105e..ea533b0b 100644 --- a/docs/404/index.html +++ b/docs/404/index.html @@ -1,4 +1,4 @@ - Page Not Found (404 Error) | Bank Statement Parser