$padding-basis: 0.75em; .d-toc-main { display: none; width: 225px; border-left: 1px solid var(--primary-low); box-sizing: border-box; a { display: block; padding: 0.15em 0; color: var(--primary-medium); &.scroll-to-bottom { padding-left: $padding-basis; } } #d-toc { max-height: calc(100vh - 4.5em - var(--header-offset)); padding-bottom: 0.5em; overflow: auto; ul { list-style-type: none; margin: 0; padding: 0; } li.d-toc-item { margin: 0; padding: 0; padding-left: $padding-basis; line-height: 1.6em; > ul { max-height: 0; overflow: hidden; opacity: 0.5; transition: opacity 0.3s ease-in-out, max-height 0.3s ease-in-out; } &.active, .d-toc-wrapper.overlay & { ul { max-height: 50em; overflow: visible; opacity: 1; } } &.direct-active > a { position: relative; color: var(--primary); &:before { content: ""; width: 1px; margin-top: -1px; background-color: var(--tertiary); position: absolute; height: 100%; } } } > ul > li > ul { font-size: var(--font-down-1); li.direct-active > a:before { // it's odd that we need this margin-left: -1px; } ul { margin-bottom: 0.5em; } } } } // active line marker $selector: "> ul > li.direct-active > a:before"; $sub: "> ul > li"; $map: ( "left": "html:not(.rtl)", "right": "html.rtl", ); /* // loop below generates styling for non-RTL and RTL // Example: html:not(.rtl) SELECTOR { left: -.75em } html.rtl SELECTOR { right: -.75em } */ @each $prop, $parent in $map { #{$parent} #d-toc { #{$selector} { #{$prop}: (-$padding-basis); } #{$sub} #{$selector} { #{$prop}: (-$padding-basis) * 2; } #{$sub} #{$sub} #{$selector} { #{$prop}: (-$padding-basis) * 3; } #{$sub} #{$sub} #{$sub} #{$selector} { #{$prop}: (-$padding-basis) * 4; } #{$sub} #{$sub} #{$sub} #{$sub} #{$selector} { #{$prop}: (-$padding-basis) * 5; } #{$sub} #{$sub} #{$sub} #{$sub} #{$sub} #{$selector} { #{$prop}: (-$padding-basis) * 6; } } } // END active line marker .d-toc-mini, a.d-toc-close { display: none; } .d-toc-timeline-visible { .d-toc-main, .d-toc-mini { display: block; } // overlayed timeline (on mobile and narrow screens) .topic-navigation.with-topic-progress { .d-toc-wrapper { position: fixed; margin-top: 0.25em; height: calc(100vh - 50px - var(--header-offset)); opacity: 0.5; right: -100vw; top: var(--header-offset); width: 75vw; max-width: 350px; background-color: var(--secondary); box-shadow: shadow("dropdown"); z-index: z("modal", "overlay"); transition: all 0.2s ease-in-out; .d-toc-main { width: 100%; padding: 0.5em; height: 100%; #d-toc { max-height: calc(100% - 3em); } } &.overlay { right: 0; width: 75vw; opacity: 1; .d-toc-main #d-toc li.d-toc-item ul { transition: none; } } a.scroll-to-bottom, a.d-toc-close { display: inline-block; padding: 0.5em; } .d-toc-icons { text-align: right; } } } // core overrides when timeline is active .timeline-container, #topic-progress { display: none; } .container.posts .topic-navigation.with-topic-progress { align-self: start; } } // RTL Support .rtl { .d-toc-main { border-left: none; border-right: 1px solid var(--primary-low); #d-toc li.d-toc-item, a.scroll-to-bottom { padding-left: 0; padding-right: $padding-basis; } } .d-toc-timeline-visible .topic-navigation.with-topic-progress .d-toc-wrapper { right: unset; left: -100vw; &.overlay { right: unset; left: 0; } } } // Composer preview notice .edit-title .d-editor-preview [data-theme-toc] { background: var(--tertiary); color: var(--secondary); border-top: 2px solid var(--secondary); position: sticky; top: 0; height: 30px; display: flex; align-items: center; justify-content: center; &:before { content: "#{$composer_toc_text}"; } }