//// /// Copyright (c) 2016-2023 Martin Donath /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), /// to deal in the Software without restriction, including without limitation /// the rights to use, copy, modify, merge, publish, distribute, sublicense, /// and/or sell copies of the Software, and to permit persons to whom the /// Software is furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL /// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING /// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER /// DEALINGS //// // ---------------------------------------------------------------------------- // Rules // ---------------------------------------------------------------------------- // Details variables :root { --md-details-icon: svg-load("material/chevron-right.svg"); } // ---------------------------------------------------------------------------- // Scoped in typesetted content to match specificity of regular content .md-typeset { // Details details { @extend .admonition; display: flow-root; padding-top: 0; overflow: visible; // Details title icon - rotate icon on transition to open state &[open] > summary::after { transform: rotate(90deg); } // Adjust spacing for details in closed state &:not([open]) { padding-bottom: 0; box-shadow: none; // Hack: we cannot set `overflow: hidden` on the `details` element (which // is why we set it to `overflow: visible`, as the outline would not be // visible when focusing. Therefore, we must set the border radius on the // summary explicitly. > summary { border-radius: px2rem(2px); } } } // Details title summary { @extend .admonition-title; display: block; min-height: px2rem(20px); padding-inline-end: px2rem(36px); cursor: pointer; border-start-start-radius: px2rem(2px); border-start-end-radius: px2rem(2px); // Show outline for keyboard devices &.focus-visible { outline-color: var(--md-accent-fg-color); outline-offset: px2rem(4px); } // Hide outline for pointer devices &:not(.focus-visible) { outline: none; -webkit-tap-highlight-color: transparent; } // Details marker &::after { position: absolute; top: px2em(10px); width: px2rem(20px); height: px2rem(20px); content: ""; background-color: currentcolor; transition: transform 250ms; transform: rotate(0deg); inset-inline-end: px2rem(8px); mask-image: var(--md-details-icon); mask-position: center; mask-repeat: no-repeat; mask-size: contain; // Adjust for right-to-left languages [dir="rtl"] & { transform: rotate(180deg); } } // Hide native details marker - modern &::marker { display: none; } // Hide native details marker - legacy, must be split into a seprate rule, // so older browsers don't consider the selector list as invalid &::-webkit-details-marker { display: none; } } }