Code change:
{{- layout.external_html.before_content | safe -}} <nav class="sidebar"> {#- -#} <div class="sidebar-menu" role="button">&#9776;</div> {#- -#} <del> <a class="sidebar-logo" href='{{page.root_path | safe}}{{krate_with_trailing_slash | safe}}index.html'> {#- -#} <div class='logo-container rust-logo'> {#- -#} <img src=' {%- if layout.logo -%} {{layout.logo}} {%- else -%} {{static_root_path | safe}}rust-logo{{page.resource_suffix}}.png {%- endif -%} ' alt='logo'> {#- -#} </div> {#- -#} </del> <ins> <a class="sidebar-logo" href="{{page.root_path | safe}}{{krate_with_trailing_slash | safe}}index.html"> {#- -#} <div class="logo-container"> {#- -#} {%- if layout.logo -%} <img src="{{layout.logo}}" alt="logo"> {#- -#} {%- else -%} <img class="rust-logo" src="{{static_root_path | safe}}rust-logo{{page.resource_suffix}}.png" alt="logo"> {#- -#} {%- endif -%} </div> </ins> </a> {#- -#} {{- sidebar | safe -}} </nav> {#- -#} <main> {#- -#} <div class="width-limiter"> {#- -#} <div class="sub-container"> {#- -#} <del> <a class="sub-logo-container rust-logo" href='{{page.root_path | safe}}{{krate_with_trailing_slash | safe}}index.html'> {#- -#} <img src=' {%- if layout.logo -%} {{layout.logo}} {%- else -%} {{static_root_path | safe}}rust-logo{{page.resource_suffix}}.png {%- endif -%} ' alt='logo'> {#- -#} </del> <ins> <a class="sub-logo-container" href="{{page.root_path | safe}}{{krate_with_trailing_slash | safe}}index.html"> {#- -#} {%- if layout.logo -%} <img src="{{layout.logo}}" alt="logo"> {%- else -%} <img class="rust-logo" src="{{static_root_path | safe}}rust-logo{{page.resource_suffix}}.png" alt="logo"> {%- endif -%} </ins> </a> {#- -#} <nav class="sub"> {#- -#} <div class="theme-picker"> {#- -#}

Related discussion:
text: In RustCrypto crates we use which changes style depending on preferred theme using CSS rules. You can see the for an example which uses it. But the problem is how the logo gets rendered on dark themes: ! ! The reason for such horrible result is the white shadow filter applied to the logo. I understand why it was , but I think it's a wrong approach, especially for projects which aim to properly support dark themes in their media files.
There was a mention back when this was implemented about how it is not possible for a media query approach to work, when I look at the sha2 docs it looks like ! because I use a light theme generally in my browser, but have rustdoc explicitly set to a dark theme. I'm confused why the outline is being applied to these docs though, was meant to only apply it to the default rust logo, and I don't see any relevant newer PRs when searching for .
I believe I broke this in In we are supposed to apply the class only when the logo is the default one. In I missed that distinction and now the always gets the rust-logo class, even when it's a custom logo. I'll fix.
By the way, to confirm what said: the media query embedded in the SVG isn't really right. That gets the browser's preferred light/dark mode, but the user may have overridden that in rustdoc settings. As a concrete example, I'm using Chrome on Linux, which doesn't have a light/dark mode setting. I can select a dark theme in rustdoc settings, which will get me this for the Rust Crypto logo (with applied): ! That's still an improvement over the status quo, and overall I think it's fine. But if we really wanted to support theme-sensitive logos perfectly, I think we'd need to offer separate configuration options for a light logo and a dark logo.
I believe that the media query approach is a correct one in principle. But I agree that, unfortunately, the current state of browsers is far from ideal, e.g. it would be nice to have a way to switch preferred mode for a page using CSS or JS. I'm using Chrome on Linux, which doesn't have a light/dark mode setting Well, it kind of has. Try launching it with (I don't have Chrome installed, but I think it should work similarly).