diff --git a/assets/sass/post.scss b/assets/sass/post.scss index 6b3dab7..3d10bea 100644 --- a/assets/sass/post.scss +++ b/assets/sass/post.scss @@ -107,4 +107,57 @@ color: #666; text-align: center; margin-bottom: 10px; +} + +// Trophy table — ranked comparison tables with gold/silver/bronze columns. +// Usage in markdown posts: +//
+// ...
+//
+// Expects columns in order: label | first | second | third +.tpl-post { + .trophy-table-wrap { + overflow-x: auto; + margin: 0 0 24px; + } + + .trophy-table { + width: 100%; + margin-bottom: 0; // wrapper handles spacing, override .tpl-post table default + border-collapse: collapse; + font-size: 1rem; + line-height: 1.4; + + th, + td { + border: 1px solid #a8b3c1; + padding: 12px 16px; + text-align: left; + vertical-align: middle; + } + + thead th { + background-color: #dbe4f0; + color: $brand_dark_blue; + font-weight: 700; + letter-spacing: 0.01em; + } + + tbody th { + background-color: #ffffff; + color: $brand_dark_blue; + font-weight: 700; + white-space: nowrap; + } + + tbody td { + font-variant-numeric: tabular-nums; + font-weight: 500; + color: #1a1a1a; + } + + tbody td:nth-child(2) { background-color: #e8c547; } // gold + tbody td:nth-child(3) { background-color: #c8c8c8; } // silver + tbody td:nth-child(4) { background-color: #d08b4a; } // bronze + } } \ No newline at end of file diff --git a/content/en/blog/2026-04-09-26Q1-Rustls-Performance.md b/content/en/blog/2026-04-09-26Q1-Rustls-Performance.md new file mode 100644 index 0000000..3035d77 --- /dev/null +++ b/content/en/blog/2026-04-09-26Q1-Rustls-Performance.md @@ -0,0 +1,85 @@ +--- +author: Josh Aas +date: 2026-04-09T00:00:00Z +slug: 26Q1-Rustls-Performance +title: "Q1 2026 Rustls Performance Update" +excerpt: "Test results comparing Rustls performance to other TLS libraries." +display_default_footer: true +display_inline_newsletter_embed: false +--- + + +## Overview + +Offering top tier performance is a primary goal for the [Rustls](https://github.com/rustls/rustls) project. As such, the project has developed benchmarks representing some of the most performance critical functions and monitors them closely. + +The Rustls project [periodically publishes test results](https://rustls.dev/perf/) that compare Rustls performance to other popular TLS libraries, OpenSSL and BoringSSL. + +The previously published test results are from [July of 2025](https://rustls.dev/perf/2025-07-31-report/). The Rustls project is planning to start publishing performance reports more frequently going forward. + +Here's how library versions have changed since the previous results: + +- Rustls: 0.23.31 (aws-lc-rs 1.13.1) -> 0.23.37 (aws-lc-rs 1.16.0) +- OpenSSL: 3.5.1 -> 3.6.1 +- BoringSSL: July 2024 -> March 2026 snapshot + +The testing discussed here was done in March of 2026. + +## Results + +![Bulk throughput speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-bulk-throughput.png) + +![Full handshake speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-full-handshake.png) + +![Resumed handshake speed comparison across BoringSSL, OpenSSL, and Rustls](/images/blog/blog-2026-04-09-resumed-handshake.png) + +## Analysis + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LibraryFirst PlaceSecond PlaceThird Place
Rustls1420
BoringSSL2104
OpenSSL0412
+
+ +Since the last tests in July of 2025, neither BoringSSL or OpenSSL significantly improved or regressed in any test. Rustls got a bit faster in a few tests, likely because of improvements to the underlying cryptography via updates to [aws-lc-rs](https://github.com/aws/aws-lc-rs). + +The results on the whole are roughly what we'd expect. OpenSSL is [known](https://www.feistyduck.com/newsletter/issue_132_openssl_performance_still_under_scrutiny) to have serious performance issues, BoringSSL avoids most of those, and Rustls takes performance a step further. + +## Looking Forward + +Rustls 0.24 will be released this year with a large number of changes focused on building a strong foundation for a 1.0 release. In particular, Rustls is making some changes to its APIs that will serve users better for the long term. + +One performance-related change we are pursuing is "split mode". This is where — after the TLS handshake — a connection can be split into sender and receiver objects. The sender can send TLS-protected data, while the receiver can receive it. Historically this has been challenging because in TLS, a receiver may need to occasionally write (e.g. to send an alert). To address this challenge the split objects have an internal relationship to ensure that (for example) if the receiver object needs to send a message, that can happen in a transparent way. This is a very infrequent occurrence, so doesn't cause contention in normal use. + +The intention is that those objects can be used on separate threads, which allows total throughput for a connection to be roughly doubled. The above measurements are per-core, but we're not aware of other TLS libraries that allow the use of one connection from two threads like this. Therefore, the send and receive measurements of Rustls could be added together. We'll confirm that is practically possible in a future performance report. + +That is all caveated on applications that can be structured to benefit from full-duplex use of a single connection. Luckily, `tokio` already has this pattern as a first-class concept. We hope the Rustls split-mode feature will contribute to cementing Rust as a great choice for mega-fast and safer network services. + +Large releases like this can be a mixed bag for performance, but the team monitors regressions closely and so at a minimum, no significant regressions are expected. For some of the closely contested results it's possible that Rustls 0.24 could pick up or lose a place. If that happens, we'll prioritize improvements that get Rustls back to the prior position. \ No newline at end of file diff --git a/content/en/initiative/rustls.html b/content/en/initiative/rustls.html index 1fabe30..785cd6b 100644 --- a/content/en/initiative/rustls.html +++ b/content/en/initiative/rustls.html @@ -4,7 +4,7 @@ background: dce0e9 funders: ["Google", "Flyio", "AWS", "Sovereign-Tech-Agency", "Alpha-Omega"] image: /images/rustls.png -blog_posts: ["2025-10-01-rustls-error-handling.md", "2025-09-03-rustls-joins-rust-foundation-rust-innovation-lab.md", "2025-05-13-rustls-server-perf.md", "2024-10-22-rustls-performance.md", "2024-06-13-rustls-ECH-support.md", "2024-05-08-Rustls-Nginx-Compatibility-layer.md", "2024-03-26-PQ-key-exchange.md", "2024-02-29-Rustls-with-aws-Crypto-back-end-and-FIPS.md", "2024-01-04-rustls-performance.md", "2023-03-29-rustls-new-features.md", "2021-04-20-preparing-rustls.md"] +blog_posts: ["2026-04-09-26Q1-Rustls-Performance.md", "2025-10-01-rustls-error-handling.md", "2025-09-03-rustls-joins-rust-foundation-rust-innovation-lab.md", "2025-05-13-rustls-server-perf.md", "2024-10-22-rustls-performance.md", "2024-06-13-rustls-ECH-support.md", "2024-05-08-Rustls-Nginx-Compatibility-layer.md", "2024-03-26-PQ-key-exchange.md", "2024-02-29-Rustls-with-aws-Crypto-back-end-and-FIPS.md", "2024-01-04-rustls-performance.md", "2023-03-29-rustls-new-features.md", "2021-04-20-preparing-rustls.md"] ---

The Story

diff --git a/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.content b/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.content index e1da60a..29c7f5d 100644 --- a/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.content +++ b/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.content @@ -1 +1 @@ -a{color:#082659 !important;text-decoration-color:#082659;text-decoration-thickness:1px}a:hover{text-decoration:underline;text-decoration-color:#082659;text-decoration-thickness:1px}a.nav-link:hover{text-decoration:none}.btn:hover{text-decoration:none}.btn-primary{background-color:#082659 !important;border-color:#082659 !important;color:#fff !important}.btn-outline-primary{border-color:#082659 !important;color:#082659 !important}.btn-outline-primary:hover{background-color:#082659 !important;color:#fff !important}.text-primary{color:#082659 !important}.btn-scroll-top{background-color:#082659 !important}.btn-scroll-top i{color:#fff}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-item:hover>.nav-link,.dropdown-item:hover,.dropdown-item:focus{color:#082659 !important}.btn-mint{background-color:#14dfb4 !important;color:#082659 !important;border-color:#14dfb4;font-weight:700 !important;font-family:open sans;border:1px solid transparent}.btn-mint:hover{border-color:#082659 !important}footer a{color:#fff !important}:root{--font-family-sans-serif:"Open Sans", sans-serif}body,.tooltip,.popover{font-family:open sans,sans-serif}.bg-dark{background-color:#051735 !important}@media(min-width:768px){.pt-md-8{padding-top:8rem !important}}.pt-10{padding-top:1}.pt-7{padding-top:7rem !important}.pt-8{padding-top:8rem !important}.pt-9{padding-top:9rem !important}.pt-10{padding-top:10rem !important}.accordion-button{color:#082659 !important;font-size:20px;line-height:34px}.accordion-button::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3e%3cpath fill-rule='evenodd' d='M7.999.667c.368 0 .667.298.667.667v6h6c.368 0 .667.298.667.667s-.299.667-.667.667h-6v6c0 .368-.298.667-.667.667s-.667-.299-.667-.667v-6h-6C.964 8.667.666 8.369.666 8s.298-.667.667-.667h6v-6c0-.368.298-.667.667-.667z' fill='%2314dfb4'/%3e%3c/svg%3e") !important}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3e%3cpath fill-rule='evenodd' d='M.666 8c0-.368.298-.667.667-.667v1.333C.964 8.666.666 8.368.666 8zm14 0v.667H1.333V7.333h13.333V8zm0 0v.667c.368 0 .667-.298.667-.667s-.299-.667-.667-.667V8z' fill='%2314dfb4'/%3e%3c/svg%3e") !important}.btn>[class^=ci-],.btn>[class*=" ci-"]{font-size:1em}.cs-page-wrapper{-ms-flex:1 0 auto;flex:1 0 auto}#dd-container .mg-forms-button,#dd-container .mg-forms-button.disabled,#dd-container .mg-forms-button[disabled],#dd-container .mg-forms-button.disabled:hover,#dd-container .mg-forms-button[disabled]:hover,#dd-container .mg-forms-button.disabled:focus,#dd-container .mg-forms-button[disabled]:focus,.dtd-plugin .mg-forms-button,.dtd-plugin .mg-forms-button.disabled,.dtd-plugin .mg-forms-button[disabled],.dtd-plugin .mg-forms-button.disabled:hover,.dtd-plugin .mg-forms-button[disabled]:hover,.dtd-plugin .mg-forms-button.disabled:focus,.dtd-plugin .mg-forms-button[disabled]:focus,#dd-container .mg-guidelines-button,#dd-container .mg-guidelines-button.disabled,#dd-container .mg-guidelines-button[disabled],#dd-container .mg-guidelines-button.disabled:hover,#dd-container .mg-guidelines-button[disabled]:hover,#dd-container .mg-guidelines-button.disabled:focus,#dd-container .mg-guidelines-button[disabled]:focus,.dtd-plugin .mg-guidelines-button,.dtd-plugin .mg-guidelines-button.disabled,.dtd-plugin .mg-guidelines-button[disabled],.dtd-plugin .mg-guidelines-button.disabled:hover,.dtd-plugin .mg-guidelines-button[disabled]:hover,.dtd-plugin .mg-guidelines-button.disabled:focus,.dtd-plugin .mg-guidelines-button[disabled]:focus{background-color:#14dfb4 !important;font-size:14px !important;font-family:open sans !important;font-weight:700 !important;color:#082659 !important;border:0 !important;padding:10px 32px !important}#dd-container .lets-check,#dd-container .lets-check.disabled,#dd-container .lets-check[disabled],#dd-container .lets-check.disabled:hover,#dd-container .lets-check[disabled]:hover,#dd-container .lets-check.disabled:focus,#dd-container .lets-check[disabled]:focus,.dtd-plugin .lets-check,.dtd-plugin .lets-check.disabled,.dtd-plugin .lets-check[disabled],.dtd-plugin .lets-check.disabled:hover,.dtd-plugin .lets-check[disabled]:hover,.dtd-plugin .lets-check.disabled:focus,.dtd-plugin .lets-check[disabled]:focus{background-color:#082659 !important;font-size:14px !important;font-family:open sans !important;font-weight:700 !important;color:#fff !important;border:0 !important;padding:10px 32px !important}#dd-container body,.dtd-plugin body,#dd-container,.dtd-plugin,#dd-container h1,#dd-container .h1,#dd-container h2,#dd-container .h2,#dd-container h3,#dd-container .h3,#dd-container h4,#dd-container .h4,#dd-container h5,#dd-container .h5,#dd-container h6,#dd-container .h6,.dtd-plugin h1,.dtd-plugin .h1,.dtd-plugin h2,.dtd-plugin .h2,.dtd-plugin h3,.dtd-plugin .h3,.dtd-plugin h4,.dtd-plugin .h4,.dtd-plugin h5,.dtd-plugin .h5,.dtd-plugin h6,.dtd-plugin .h6{font-family:open sans,sans-serif !important}footer{color:#fff}footer input[type=radio]+label{padding-left:10px}footer label.checkbox{margin-left:8px}footer p{margin-bottom:4px}footer .font-small{font-size:12px;line-height:1.14;color:rgba(255,255,255,.6) !important}footer .font-small a{color:rgba(255,255,255,.6) !important}#mc_embed_signup{clear:left;color:#fff;font:14px Helvetica,Arial,sans-serif}#mc-embedded-subscribe-form input[type=checkbox]{display:inline;width:auto;margin-right:10px}#mergeRow-gdpr{margin-top:5px}#mergeRow-gdpr fieldset label{font-weight:400}#mc-embedded-subscribe-form .mc_fieldset{border:none;min-height:0;padding-bottom:0}#mc_embed_signup form{padding-left:0 !important;padding-top:0 !important}#mc_embed_signup div#mce-responses{padding-left:0 !important;padding-right:0 !important;width:100%}#mc_embed_signup div.response{width:100% !important;margin-top:0 !important;padding-top:0 !important;font-size:16px;font-weight:400}#mc_embed_signup div#mce-responses{margin:0 !important}#mc_embed_signup #mce-success-response{color:#fff !important}.tpl-page .cs-page-wrapper{margin-top:100px}.tpl-page h1{text-align:center;color:#082659}.footnotes{padding-top:10px}.footnotes hr{margin-bottom:10px}.footnotes ol{padding-left:17px}.initiative-funders .funder-logos{justify-items:start;gap:10px}.initiative-funders .funder-logos .funder img{max-height:60px}.funder-logos{display:grid;grid-template-columns:repeat(3,1fr);gap:50px;align-items:center;justify-items:center}.funder-logos .funder{flex-basis:calc(33% - 6.67px)}#funders-home .funder-logos .funder{margin-bottom:0}.funder-logos .funder img{max-height:44px}.funder-logos .funder:last-child{margin-bottom:0}.no-br{white-space:nowrap}@media screen and (min-width:992px){.pt-lg-55{padding-top:5rem !important}}.tpl-initiative .initiative-hero{margin-bottom:35px !important}.contact-page{margin-top:2.5rem}.contact-page .contact-grid{display:grid;grid-template-columns:1fr;gap:16px;max-width:520px;margin:0 auto;text-align:center}.contact-page .contact-card{padding:.6rem 0;border:none;background:0 0;box-shadow:none}.contact-page .contact-label{font-size:1.2rem;font-weight:700;margin:0 0 .4rem;color:#082659}.contact-page .contact-email{display:inline-flex;align-items:center;gap:10px;font-weight:600;color:#082659 !important;text-decoration:none;padding:.45rem .75rem;border-radius:999px;background:rgba(20,223,180,.12);border:1px solid rgba(20,223,180,.35);box-shadow:none;margin:0 auto}.contact-page .contact-email:hover{background:rgba(20,223,180,.22);border-color:#14dfb4}.tpl-post .cs-page-wrapper{margin-top:100px}.tpl-post h1{text-align:center;color:#082659}.tpl-post .slice,.tpl-post .page-content,.tpl-page .slice,.tpl-page .page-content{max-width:768px;margin-left:auto;margin-right:auto}.tpl-post .page-content pre+p,.tpl-page .page-content pre+p{margin-top:1.5rem}.tpl-post table{width:100%;margin-bottom:20px}.tpl-post table th{vertical-align:bottom}.tpl-post table td{vertical-align:top}@media(min-width:768px){.pic-quote-right{float:right !important;max-width:33.33333%;margin-left:25px;flex:0 0 33.33333%}}.mw-240px{max-width:240px}.post-footer{background-color:#14dfb4;color:#082659;padding:1.5rem;margin-top:2rem}.post-footer a{text-decoration-color:#fff !important;text-underline-offset:3px}.post-footer a:hover{color:#fff !important}.post-footer h6{font-size:20px;color:#082659;line-height:1;font-weight:700;margin-top:0}.post-footer p:last-child{margin-bottom:0}.tectonics-readout-name-container{display:grid;grid-template-rows:repeat(20,auto);grid-auto-flow:column;gap:10px}@media(min-width:767.98px){.tectonics-readout-name-container{grid-template-rows:repeat(13,auto)}}.page-content figure{margin-bottom:24px}.page-content figure:has(>figcaption) .highlight{margin-bottom:10px}.page-content figure figcaption{font-size:14px;color:#666;text-align:center;margin-bottom:10px}.bg{background-color:#fff}.chroma{background-color:#fff}.chroma .err{color:#a61717;background-color:#e3d2d2}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#ffc}.chroma .lnt{white-space:pre;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#000;font-weight:700}.chroma .kc{color:#000;font-weight:700}.chroma .kd{color:#000;font-weight:700}.chroma .kn{color:#000;font-weight:700}.chroma .kp{color:#000;font-weight:700}.chroma .kr{color:#000;font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#0086b3}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:700}.chroma .ni{color:purple}.chroma .ne{color:#900;font-weight:700}.chroma .nf{color:#900;font-weight:700}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .vc{color:teal}.chroma .vg{color:teal}.chroma .vi{color:teal}.chroma .s{color:#d14}.chroma .sa{color:#d14}.chroma .sb{color:#d14}.chroma .sc{color:#d14}.chroma .dl{color:#d14}.chroma .sd{color:#d14}.chroma .s2{color:#d14}.chroma .se{color:#d14}.chroma .sh{color:#d14}.chroma .si{color:#d14}.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .m{color:#099}.chroma .mb{color:#099}.chroma .mf{color:#099}.chroma .mh{color:#099}.chroma .mi{color:#099}.chroma .il{color:#099}.chroma .mo{color:#099}.chroma .o{color:#000;font-weight:700}.chroma .ow{color:#000;font-weight:700}.chroma .c{color:#998;font-style:italic}.chroma .ch{color:#998;font-style:italic}.chroma .cm{color:#998;font-style:italic}.chroma .c1{color:#998;font-style:italic}.chroma .cs{color:#999;font-weight:700;font-style:italic}.chroma .cp{color:#999;font-weight:700;font-style:italic}.chroma .cpf{color:#999;font-weight:700;font-style:italic}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{color:#000;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}body{color:#082659 !important}#footer-logo{max-width:300px;max-height:55px;margin-bottom:5px}.footer-text a{text-decoration:underline;text-decoration-color:#14dfb4;text-underline-offset:2px}.footer-text a:hover{color:#14dfb4 !important}.btn-large{font-size:18px}.logo-container{max-width:200px;max-height:200px}.logo-container img{width:100%;height:100%;max-width:100%;max-height:200px;object-fit:contain}.home-initiatives .logo-image{max-height:120px}.text-primary-knockout{color:#082659;padding:3px 0;display:inline-block;white-space:nowrap}.initiative_list_item{align-items:center}.initiative_list_item .initiative-status{text-align:center;display:flex;align-items:center}.initiative_list_item .initiative-status__item{white-space:nowrap;width:100%}.initiative_list_item__blogLanding{margin-bottom:20px}.initiative_list_item__blogLanding h2,.initiative_list_item__blogLanding p{margin-bottom:.5rem}.initiative-description ol{padding-left:17px}@media screen and (min-width:768px){.initiative_list_item__meta{display:flex}.initiative_list_item .initiative-status{padding-left:25px;line-height:21px;text-align:left !important}}@media screen and (max-width:767.98px){.initiative-status{padding-top:20px}}@media screen and (max-width:991.98px){#prossimoNavbar{box-shadow:0 10px 10px -2px rgba(0,0,0,.2)}}.placeholder{font-weight:700;color:#f0f}.key-value-table th{text-align:right;padding-right:5px;white-space:nowrap;vertical-align:top}.key-value-table+p{margin-top:24px}.key-value-table td{vertical-align:top}#home-hero .btn{width:320px;position:relative}#home-hero .btn i{position:absolute;left:18px;top:16px}.sponsor-highlight{background:#e8fcf8;text-align:center;padding:20px 10px 10px;margin:10px 0 20px}.sponsor-highlight h2{font-size:20px;text-transform:uppercase;letter-spacing:.5px}.sponsor-highlight p{font-size:20px}pre.code-block{margin:10px 0 20px;border-radius:10px;background:#eee}.highlight{margin:10px 0 20px}.highlight .chroma{border-radius:10px;background:#eee}#donate-via-paypal{background:#e8fcf8;padding:10px}#donate-via-paypal h2{text-align:center}#donate-via-paypal #paypal-button-container .paypal-buttons{margin:20px auto;display:block}#copyright-line{background-color:#292c37}#copyright-line a{text-decoration:none}#copyright-line a:hover{text-decoration:underline;text-decoration-color:#14dfb4}.back-to-top-btn:hover .btn-scroll-top{background-color:#14dfb4 !important}.back-to-top-btn:hover .btn-scroll-top>.btn-scroll-top-icon{color:#082659 !important}label.checkbox input[type=checkbox]+span{margin-left:10px}@media screen and (max-width:525px){#see-if-organization-matches{white-space:normal !important}}.navbar-floating{z-index:1030}a[name]{scroll-margin-top:110px}code{color:#082659;font-weight:700}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{color:#000}a.autoanchor{text-decoration:none;color:grey;font-size:.8em;margin-left:.5em;background-image:url(/images/link-solid.svg);background-repeat:no-repeat;background-position:50%;color:transparent;height:24px;width:24px;transform:translateY(2px)}.scroll-offset-for-sticky-nav{scroll-margin-top:100px}html[dir=rtl] a.autoanchor{margin-right:.5em;margin-left:0}.page-content h1 .autoanchor,.page-content h2 .autoanchor,.page-content h3 .autoanchor{display:none}.page-content h1:hover .autoanchor,.page-content h2:hover .autoanchor,.page-content h3:hover .autoanchor{display:inline-block !important}.home-headline{font-size:33px;border-bottom:1px solid #000;margin-bottom:30px}.home-headline a{text-decoration:none;color:#000 !important}.home-headline a:hover{color:#082659 !important}.home-eyebrow{font-size:16px;line-height:20px;text-transform:uppercase;margin-bottom:30px}.home-eyebrow::after{content:'';width:100%;height:1px;background:#14dfb4;display:block;position:relative;top:-10px;z-index:1}.home-eyebrow a,.home-eyebrow span{text-decoration:none;color:#000 !important;color:#082659 !important;display:inline-block;background:#fff;padding:0 10px 0 0;z-index:2;letter-spacing:.75px;position:relative}.home-eyebrow a:hover{color:#082659 !important;text-decoration:underline}.blog-title-link{font-size:24px;text-decoration:none;color:#000 !important}.blog-title-link:hover{color:#082659 !important}.read-more-link{color:#000 !important}.read-more-link:hover{color:#082659 !important}#blog .blog-title-link{font-weight:400;font-size:22px;line-height:1.4 !important;display:block}.blog-date{color:#888;font-size:14px}.home-h3{font-weight:900}@media(min-width:768px){.pr-md-1{padding-right:.25rem !important}.pl-md-1{padding-left:.25rem !important}.pr-md-2{padding-right:.5rem !important}.pl-md-2{padding-left:.5rem !important}.pr-md-3{padding-right:1rem !important}.pr-md-4{padding-right:1.5rem !important}.pr-md-5{padding-right:3rem !important}.pl-md-3{padding-left:1rem !important}.pl-md-4{padding-left:1.5rem !important}}.code-block{color:#3c3c3c}.code-red{color:#fe1016}.code-blue{color:#124bc0}.code-green{color:#609e4c}#site-banner a{display:block;text-align:center;padding:10px 0;color:#14dfb4 !important;font-weight:700;background-color:#082659}#site-banner a:hover{background-color:#04122a;text-decoration:none}div[data-netlify-site-id]{display:none;pointer-events:none}.rss-feed-link{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#14dfb4;text-decoration:none;transition:color 150ms}.rss-feed-link:hover{color:#39edc7;text-decoration:none}.rss-feed-link .rss-icon{display:inline-block;flex-shrink:0;width:14px;height:14px;background-color:currentColor;-webkit-mask-image:url(/images/rss-icon.svg);mask-image:url(/images/rss-icon.svg);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat} \ No newline at end of file +a{color:#082659!important;text-decoration-color:#082659;text-decoration-thickness:1px}a:hover{text-decoration:underline;text-decoration-color:#082659;text-decoration-thickness:1px}a.nav-link:hover{text-decoration:none}.btn:hover{text-decoration:none}.btn-primary{background-color:#082659!important;border-color:#082659!important;color:#fff!important}.btn-outline-primary{border-color:#082659!important;color:#082659!important}.btn-outline-primary:hover{background-color:#082659!important;color:#fff!important}.text-primary{color:#082659!important}.btn-scroll-top{background-color:#082659!important}.btn-scroll-top i{color:#fff}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-item:hover>.nav-link,.dropdown-item:hover,.dropdown-item:focus{color:#082659!important}.btn-mint{background-color:#14dfb4!important;color:#082659!important;border-color:#14dfb4;font-weight:700!important;font-family:open sans;border:1px solid transparent}.btn-mint:hover{border-color:#082659!important}footer a{color:#fff!important}:root{--font-family-sans-serif:"Open Sans", sans-serif}body,.tooltip,.popover{font-family:open sans,sans-serif}.bg-dark{background-color:#051735!important}@media(min-width:768px){.pt-md-8{padding-top:8rem!important}}.pt-10{padding-top:1}.pt-7{padding-top:7rem!important}.pt-8{padding-top:8rem!important}.pt-9{padding-top:9rem!important}.pt-10{padding-top:10rem!important}.accordion-button{color:#082659!important;font-size:20px;line-height:34px}.accordion-button::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3e%3cpath fill-rule='evenodd' d='M7.999.667c.368 0 .667.298.667.667v6h6c.368 0 .667.298.667.667s-.299.667-.667.667h-6v6c0 .368-.298.667-.667.667s-.667-.299-.667-.667v-6h-6C.964 8.667.666 8.369.666 8s.298-.667.667-.667h6v-6c0-.368.298-.667.667-.667z' fill='%2314dfb4'/%3e%3c/svg%3e")!important}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3e%3cpath fill-rule='evenodd' d='M.666 8c0-.368.298-.667.667-.667v1.333C.964 8.666.666 8.368.666 8zm14 0v.667H1.333V7.333h13.333V8zm0 0v.667c.368 0 .667-.298.667-.667s-.299-.667-.667-.667V8z' fill='%2314dfb4'/%3e%3c/svg%3e")!important}.btn>[class^=ci-],.btn>[class*=" ci-"]{font-size:1em}.cs-page-wrapper{-ms-flex:1 0 auto;flex:1 0 auto}#dd-container .mg-forms-button,#dd-container .mg-forms-button.disabled,#dd-container .mg-forms-button[disabled],#dd-container .mg-forms-button.disabled:hover,#dd-container .mg-forms-button[disabled]:hover,#dd-container .mg-forms-button.disabled:focus,#dd-container .mg-forms-button[disabled]:focus,.dtd-plugin .mg-forms-button,.dtd-plugin .mg-forms-button.disabled,.dtd-plugin .mg-forms-button[disabled],.dtd-plugin .mg-forms-button.disabled:hover,.dtd-plugin .mg-forms-button[disabled]:hover,.dtd-plugin .mg-forms-button.disabled:focus,.dtd-plugin .mg-forms-button[disabled]:focus,#dd-container .mg-guidelines-button,#dd-container .mg-guidelines-button.disabled,#dd-container .mg-guidelines-button[disabled],#dd-container .mg-guidelines-button.disabled:hover,#dd-container .mg-guidelines-button[disabled]:hover,#dd-container .mg-guidelines-button.disabled:focus,#dd-container .mg-guidelines-button[disabled]:focus,.dtd-plugin .mg-guidelines-button,.dtd-plugin .mg-guidelines-button.disabled,.dtd-plugin .mg-guidelines-button[disabled],.dtd-plugin .mg-guidelines-button.disabled:hover,.dtd-plugin .mg-guidelines-button[disabled]:hover,.dtd-plugin .mg-guidelines-button.disabled:focus,.dtd-plugin .mg-guidelines-button[disabled]:focus{background-color:#14dfb4!important;font-size:14px!important;font-family:open sans!important;font-weight:700!important;color:#082659!important;border:0!important;padding:10px 32px!important}#dd-container .lets-check,#dd-container .lets-check.disabled,#dd-container .lets-check[disabled],#dd-container .lets-check.disabled:hover,#dd-container .lets-check[disabled]:hover,#dd-container .lets-check.disabled:focus,#dd-container .lets-check[disabled]:focus,.dtd-plugin .lets-check,.dtd-plugin .lets-check.disabled,.dtd-plugin .lets-check[disabled],.dtd-plugin .lets-check.disabled:hover,.dtd-plugin .lets-check[disabled]:hover,.dtd-plugin .lets-check.disabled:focus,.dtd-plugin .lets-check[disabled]:focus{background-color:#082659!important;font-size:14px!important;font-family:open sans!important;font-weight:700!important;color:#fff!important;border:0!important;padding:10px 32px!important}#dd-container body,.dtd-plugin body,#dd-container,.dtd-plugin,#dd-container h1,#dd-container .h1,#dd-container h2,#dd-container .h2,#dd-container h3,#dd-container .h3,#dd-container h4,#dd-container .h4,#dd-container h5,#dd-container .h5,#dd-container h6,#dd-container .h6,.dtd-plugin h1,.dtd-plugin .h1,.dtd-plugin h2,.dtd-plugin .h2,.dtd-plugin h3,.dtd-plugin .h3,.dtd-plugin h4,.dtd-plugin .h4,.dtd-plugin h5,.dtd-plugin .h5,.dtd-plugin h6,.dtd-plugin .h6{font-family:open sans,sans-serif!important}footer{color:#fff}footer input[type=radio]+label{padding-left:10px}footer label.checkbox{margin-left:8px}footer p{margin-bottom:4px}footer .font-small{font-size:12px;line-height:1.14;color:rgba(255,255,255,.6)!important}footer .font-small a{color:rgba(255,255,255,.6)!important}#mc_embed_signup{clear:left;color:#fff;font:14px Helvetica,Arial,sans-serif}#mc-embedded-subscribe-form input[type=checkbox]{display:inline;width:auto;margin-right:10px}#mergeRow-gdpr{margin-top:5px}#mergeRow-gdpr fieldset label{font-weight:400}#mc-embedded-subscribe-form .mc_fieldset{border:none;min-height:0;padding-bottom:0}#mc_embed_signup form{padding-left:0!important;padding-top:0!important}#mc_embed_signup div#mce-responses{padding-left:0!important;padding-right:0!important;width:100%}#mc_embed_signup div.response{width:100%!important;margin-top:0!important;padding-top:0!important;font-size:16px;font-weight:400}#mc_embed_signup div#mce-responses{margin:0!important}#mc_embed_signup #mce-success-response{color:#fff!important}.tpl-page .cs-page-wrapper{margin-top:100px}.tpl-page h1{text-align:center;color:#082659}.footnotes{padding-top:10px}.footnotes hr{margin-bottom:10px}.footnotes ol{padding-left:17px}.initiative-funders .funder-logos{justify-items:start;gap:10px}.initiative-funders .funder-logos .funder img{max-height:60px}.funder-logos{display:grid;grid-template-columns:repeat(3,1fr);gap:50px;align-items:center;justify-items:center}.funder-logos .funder{flex-basis:calc(33% - 6.67px)}#funders-home .funder-logos .funder{margin-bottom:0}.funder-logos .funder img{max-height:44px}.funder-logos .funder:last-child{margin-bottom:0}.no-br{white-space:nowrap}@media screen and (min-width:992px){.pt-lg-55{padding-top:5rem!important}}.tpl-initiative .initiative-hero{margin-bottom:35px!important}.contact-page{margin-top:2.5rem}.contact-page .contact-grid{display:grid;grid-template-columns:1fr;gap:16px;max-width:520px;margin:0 auto;text-align:center}.contact-page .contact-card{padding:.6rem 0;border:none;background:0 0;box-shadow:none}.contact-page .contact-label{font-size:1.2rem;font-weight:700;margin:0 0 .4rem;color:#082659}.contact-page .contact-email{display:inline-flex;align-items:center;gap:10px;font-weight:600;color:#082659!important;text-decoration:none;padding:.45rem .75rem;border-radius:999px;background:rgba(20,223,180,.12);border:1px solid rgba(20,223,180,.35);box-shadow:none;margin:0 auto}.contact-page .contact-email:hover{background:rgba(20,223,180,.22);border-color:#14dfb4}.tpl-post .cs-page-wrapper{margin-top:100px}.tpl-post h1{text-align:center;color:#082659}.tpl-post .slice,.tpl-post .page-content,.tpl-page .slice,.tpl-page .page-content{max-width:768px;margin-left:auto;margin-right:auto}.tpl-post .page-content pre+p,.tpl-page .page-content pre+p{margin-top:1.5rem}.tpl-post table{width:100%;margin-bottom:20px}.tpl-post table th{vertical-align:bottom}.tpl-post table td{vertical-align:top}@media(min-width:768px){.pic-quote-right{float:right!important;max-width:33.33333%;margin-left:25px;flex:0 0 33.33333%}}.mw-240px{max-width:240px}.post-footer{background-color:#14dfb4;color:#082659;padding:1.5rem;margin-top:2rem}.post-footer a{text-decoration-color:#fff!important;text-underline-offset:3px}.post-footer a:hover{color:#fff!important}.post-footer h6{font-size:20px;color:#082659;line-height:1;font-weight:700;margin-top:0}.post-footer p:last-child{margin-bottom:0}.tectonics-readout-name-container{display:grid;grid-template-rows:repeat(20,auto);grid-auto-flow:column;gap:10px}@media(min-width:767.98px){.tectonics-readout-name-container{grid-template-rows:repeat(13,auto)}}.page-content figure{margin-bottom:24px}.page-content figure:has(>figcaption) .highlight{margin-bottom:10px}.page-content figure figcaption{font-size:14px;color:#666;text-align:center;margin-bottom:10px}.tpl-post .trophy-table-wrap{overflow-x:auto;margin:0 0 24px}.tpl-post .trophy-table{width:100%;margin-bottom:0;border-collapse:collapse;font-size:1rem;line-height:1.4}.tpl-post .trophy-table th,.tpl-post .trophy-table td{border:1px solid #a8b3c1;padding:12px 16px;text-align:left;vertical-align:middle}.tpl-post .trophy-table thead th{background-color:#dbe4f0;color:#082659;font-weight:700;letter-spacing:.01em}.tpl-post .trophy-table tbody th{background-color:#fff;color:#082659;font-weight:700;white-space:nowrap}.tpl-post .trophy-table tbody td{font-variant-numeric:tabular-nums;font-weight:500;color:#1a1a1a}.tpl-post .trophy-table tbody td:nth-child(2){background-color:#e8c547}.tpl-post .trophy-table tbody td:nth-child(3){background-color:#c8c8c8}.tpl-post .trophy-table tbody td:nth-child(4){background-color:#d08b4a}.bg{background-color:#fff}.chroma{background-color:#fff}.chroma .err{color:#a61717;background-color:#e3d2d2}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#ffc}.chroma .lnt{white-space:pre;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#000;font-weight:700}.chroma .kc{color:#000;font-weight:700}.chroma .kd{color:#000;font-weight:700}.chroma .kn{color:#000;font-weight:700}.chroma .kp{color:#000;font-weight:700}.chroma .kr{color:#000;font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#0086b3}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:700}.chroma .ni{color:purple}.chroma .ne{color:#900;font-weight:700}.chroma .nf{color:#900;font-weight:700}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .vc{color:teal}.chroma .vg{color:teal}.chroma .vi{color:teal}.chroma .s{color:#d14}.chroma .sa{color:#d14}.chroma .sb{color:#d14}.chroma .sc{color:#d14}.chroma .dl{color:#d14}.chroma .sd{color:#d14}.chroma .s2{color:#d14}.chroma .se{color:#d14}.chroma .sh{color:#d14}.chroma .si{color:#d14}.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .m{color:#099}.chroma .mb{color:#099}.chroma .mf{color:#099}.chroma .mh{color:#099}.chroma .mi{color:#099}.chroma .il{color:#099}.chroma .mo{color:#099}.chroma .o{color:#000;font-weight:700}.chroma .ow{color:#000;font-weight:700}.chroma .c{color:#998;font-style:italic}.chroma .ch{color:#998;font-style:italic}.chroma .cm{color:#998;font-style:italic}.chroma .c1{color:#998;font-style:italic}.chroma .cs{color:#999;font-weight:700;font-style:italic}.chroma .cp{color:#999;font-weight:700;font-style:italic}.chroma .cpf{color:#999;font-weight:700;font-style:italic}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{color:#000;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}body{color:#082659!important}#footer-logo{max-width:300px;max-height:55px;margin-bottom:5px}.footer-text a{text-decoration:underline;text-decoration-color:#14dfb4;text-underline-offset:2px}.footer-text a:hover{color:#14dfb4!important}.btn-large{font-size:18px}.logo-container{max-width:200px;max-height:200px}.logo-container img{width:100%;height:100%;max-width:100%;max-height:200px;object-fit:contain}.home-initiatives .logo-image{max-height:120px}.text-primary-knockout{color:#082659;padding:3px 0;display:inline-block;white-space:nowrap}.initiative_list_item{align-items:center}.initiative_list_item .initiative-status{text-align:center;display:flex;align-items:center}.initiative_list_item .initiative-status__item{white-space:nowrap;width:100%}.initiative_list_item__blogLanding{margin-bottom:20px}.initiative_list_item__blogLanding h2,.initiative_list_item__blogLanding p{margin-bottom:.5rem}.initiative-description ol{padding-left:17px}@media screen and (min-width:768px){.initiative_list_item__meta{display:flex}.initiative_list_item .initiative-status{padding-left:25px;line-height:21px;text-align:left!important}}@media screen and (max-width:767.98px){.initiative-status{padding-top:20px}}@media screen and (max-width:991.98px){#prossimoNavbar{box-shadow:0 10px 10px -2px rgba(0,0,0,.2)}}.placeholder{font-weight:700;color:#f0f}.key-value-table th{text-align:right;padding-right:5px;white-space:nowrap;vertical-align:top}.key-value-table+p{margin-top:24px}.key-value-table td{vertical-align:top}#home-hero .btn{width:320px;position:relative}#home-hero .btn i{position:absolute;left:18px;top:16px}.sponsor-highlight{background:#e8fcf8;text-align:center;padding:20px 10px 10px;margin:10px 0 20px}.sponsor-highlight h2{font-size:20px;text-transform:uppercase;letter-spacing:.5px}.sponsor-highlight p{font-size:20px}pre.code-block{margin:10px 0 20px;border-radius:10px;background:#eee}.highlight{margin:10px 0 20px}.highlight .chroma{border-radius:10px;background:#eee}#donate-via-paypal{background:#e8fcf8;padding:10px}#donate-via-paypal h2{text-align:center}#donate-via-paypal #paypal-button-container .paypal-buttons{margin:20px auto;display:block}#copyright-line{background-color:#292c37}#copyright-line a{text-decoration:none}#copyright-line a:hover{text-decoration:underline;text-decoration-color:#14dfb4}.back-to-top-btn:hover .btn-scroll-top{background-color:#14dfb4!important}.back-to-top-btn:hover .btn-scroll-top>.btn-scroll-top-icon{color:#082659!important}label.checkbox input[type=checkbox]+span{margin-left:10px}@media screen and (max-width:525px){#see-if-organization-matches{white-space:normal!important}}.navbar-floating{z-index:1030}a[name]{scroll-margin-top:110px}code{color:#082659;font-weight:700}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{color:#000}a.autoanchor{text-decoration:none;color:grey;font-size:.8em;margin-left:.5em;background-image:url(/images/link-solid.svg);background-repeat:no-repeat;background-position:50%;color:transparent;height:24px;width:24px;transform:translateY(2px)}.scroll-offset-for-sticky-nav{scroll-margin-top:100px}html[dir=rtl] a.autoanchor{margin-right:.5em;margin-left:0}.page-content h1 .autoanchor,.page-content h2 .autoanchor,.page-content h3 .autoanchor{display:none}.page-content h1:hover .autoanchor,.page-content h2:hover .autoanchor,.page-content h3:hover .autoanchor{display:inline-block!important}.home-headline{font-size:33px;border-bottom:1px solid #000;margin-bottom:30px}.home-headline a{text-decoration:none;color:#000!important}.home-headline a:hover{color:#082659!important}.home-eyebrow{font-size:16px;line-height:20px;text-transform:uppercase;margin-bottom:30px}.home-eyebrow::after{content:'';width:100%;height:1px;background:#14dfb4;display:block;position:relative;top:-10px;z-index:1}.home-eyebrow a,.home-eyebrow span{text-decoration:none;color:#000!important;color:#082659!important;display:inline-block;background:#fff;padding:0 10px 0 0;z-index:2;letter-spacing:.75px;position:relative}.home-eyebrow a:hover{color:#082659!important;text-decoration:underline}.blog-title-link{font-size:24px;text-decoration:none;color:#000!important}.blog-title-link:hover{color:#082659!important}.read-more-link{color:#000!important}.read-more-link:hover{color:#082659!important}#blog .blog-title-link{font-weight:400;font-size:22px;line-height:1.4!important;display:block}.blog-date{color:#888;font-size:14px}.home-h3{font-weight:900}@media(min-width:768px){.pr-md-1{padding-right:.25rem!important}.pl-md-1{padding-left:.25rem!important}.pr-md-2{padding-right:.5rem!important}.pl-md-2{padding-left:.5rem!important}.pr-md-3{padding-right:1rem!important}.pr-md-4{padding-right:1.5rem!important}.pr-md-5{padding-right:3rem!important}.pl-md-3{padding-left:1rem!important}.pl-md-4{padding-left:1.5rem!important}}.code-block{color:#3c3c3c}.code-red{color:#fe1016}.code-blue{color:#124bc0}.code-green{color:#609e4c}#site-banner a{display:block;text-align:center;padding:10px 0;color:#14dfb4!important;font-weight:700;background-color:#082659}#site-banner a:hover{background-color:#04122a;text-decoration:none}div[data-netlify-site-id]{display:none;pointer-events:none}.rss-feed-link{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#14dfb4;text-decoration:none;transition:color 150ms}.rss-feed-link:hover{color:#39edc7;text-decoration:none}.rss-feed-link .rss-icon{display:inline-block;flex-shrink:0;width:14px;height:14px;background-color:currentColor;-webkit-mask-image:url(/images/rss-icon.svg);mask-image:url(/images/rss-icon.svg);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat} \ No newline at end of file diff --git a/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.json b/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.json index 841219d..16de344 100644 --- a/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.json +++ b/resources/_gen/assets/sass/main.scss_77b10c8e87ff110a62c52933fe3f7f11.json @@ -1 +1 @@ -{"Target":"/sass/main.min.cd024e9c80ac2ff06994073b8c9aa9cf389ce7af713eca7f49c41aac00015c46.css","MediaType":"text/css","Data":{"Integrity":"sha256-zQJOnICsL/BplAc7jJqpzzic569xPsp/ScQarAABXEY="}} \ No newline at end of file +{"Target":"/sass/main.min.f5171ff4d4b87ca555b99b7d9107aae62aa1e4d180309d7a7a5ce12158f62179.css","MediaType":"text/css","Data":{"Integrity":"sha256-9Rcf9NS4fKVVuZt9kQeq5iqh5NGAMJ16elzhIVj2IXk="}} \ No newline at end of file diff --git a/static/images/blog/blog-2026-04-09-bulk-throughput.png b/static/images/blog/blog-2026-04-09-bulk-throughput.png new file mode 100644 index 0000000..2e748b7 Binary files /dev/null and b/static/images/blog/blog-2026-04-09-bulk-throughput.png differ diff --git a/static/images/blog/blog-2026-04-09-full-handshake.png b/static/images/blog/blog-2026-04-09-full-handshake.png new file mode 100644 index 0000000..1d42a09 Binary files /dev/null and b/static/images/blog/blog-2026-04-09-full-handshake.png differ diff --git a/static/images/blog/blog-2026-04-09-resumed-handshake.png b/static/images/blog/blog-2026-04-09-resumed-handshake.png new file mode 100644 index 0000000..b38cdf6 Binary files /dev/null and b/static/images/blog/blog-2026-04-09-resumed-handshake.png differ