//// /// 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 //// @use "sass:color"; @use "sass:list"; // ---------------------------------------------------------------------------- // Variables // ---------------------------------------------------------------------------- /// Admonition flavours $admonitions: ( "note": pencil-circle $clr-blue-a200, "abstract": clipboard-text $clr-light-blue-a400, "info": information $clr-cyan-a700, "tip": fire $clr-teal-a700, "success": check $clr-green-a700, "question": help-circle $clr-light-green-a700, "warning": alert $clr-orange-a400, "failure": close $clr-red-a200, "danger": lightning-bolt-circle $clr-red-a400, "bug": shield-bug $clr-pink-a400, "example": test-tube $clr-deep-purple-a200, "quote": format-quote-close $clr-grey ) !default; // ---------------------------------------------------------------------------- // Rules: layout // ---------------------------------------------------------------------------- // Admonition variables :root { @each $name, $props in $admonitions { --md-admonition-icon--#{$name}: svg-load("material/#{list.nth($props, 1)}.svg"); } } // ---------------------------------------------------------------------------- // Scoped in typesetted content to match specificity of regular content .md-typeset { // Admonition - note that all styles also apply to details tags, which are // rendered as collapsible admonitions with summary elements as titles. .admonition { display: flow-root; padding: 0 px2rem(12px); margin: px2em(20px, 12.8px) 0; font-size: px2rem(12.8px); color: var(--md-admonition-fg-color); background-color: var(--md-admonition-bg-color); border: px2rem(1.5px) solid $clr-blue-a200; border-radius: px2rem(4px); box-shadow: var(--md-shadow-z1); transition: box-shadow 125ms; page-break-inside: avoid; // [print]: Omit shadow as it may lead to rendering errors @media print { box-shadow: none; } // Admonition on focus &:focus-within { box-shadow: 0 0 0 px2rem(4px) color.adjust($clr-blue-a200, $alpha: -0.9); } // Hack: Chrome exhibits a weird issue where it will set nested elements to // content-box. Doesn't happen in other browsers, so looks like a bug. > * { box-sizing: border-box; } // Adjust vertical spacing for nested admonitions .admonition { margin-top: 1em; margin-bottom: 1em; } // Adjust spacing for contained table wrappers .md-typeset__scrollwrap { margin: 1em px2rem(-12px); } // Adjust spacing for contained tables .md-typeset__table { padding: 0 px2rem(12px); } // Adjust spacing for single-child tabbed block container > .tabbed-set:only-child { margin-top: 0; } // Adjust spacing on last child html & > :last-child { margin-bottom: px2rem(12px); } } // Admonition title .admonition-title { position: relative; padding-block: px2rem(8px); padding-inline: px2rem(40px) px2rem(12px); margin-block: 0; margin-inline: px2rem(-12px); font-weight: 700; background-color: color.adjust($clr-blue-a200, $alpha: -0.9); border: none; border-inline-start-width: px2rem(4px); border-start-start-radius: px2rem(2px); border-start-end-radius: px2rem(2px); // Adjust spacing for title-only admonitions html &:last-child { margin-bottom: 0; } // Admonition icon &::before { position: absolute; top: px2em(10px); width: px2rem(20px); height: px2rem(20px); content: ""; background-color: $clr-blue-a200; inset-inline-start: px2rem(12px); mask-image: var(--md-admonition-icon--note); mask-position: center; mask-repeat: no-repeat; mask-size: contain; } // Inline code block code { box-shadow: 0 0 0 px2rem(1px) var(--md-default-fg-color--lightest); } } } // ---------------------------------------------------------------------------- // Rules: flavours // ---------------------------------------------------------------------------- // Define admonition flavors @each $name, $props in $admonitions { $tint: list.nth($props, 2); // Admonition flavour .md-typeset .admonition.#{$name} { border-color: $tint; // Admonition on focus &:focus-within { box-shadow: 0 0 0 px2rem(4px) color.adjust($tint, $alpha: -0.9); } } // Admonition flavour title .md-typeset .#{$name} > .admonition-title { background-color: color.adjust($tint, $alpha: -0.9); // Admonition icon &::before { background-color: $tint; mask-image: var(--md-admonition-icon--#{$name}); } // Details marker &::after { color: $tint; } } }