@use "../../styles/variables.scss" as *; @media all and ($mobile) { .page > #quartz-body { // Shift page position when toggling Explorer on mobile. & > :not(.sidebar.left:has(.explorer)) { transform: translateX(0); transition: transform 300ms ease-in-out; } &.lock-scroll > :not(.sidebar.left:has(.explorer)) { transform: translateX(100dvw); transition: transform 300ms ease-in-out; } // Sticky top bar (stays in place when scrolling down on mobile). .sidebar.left:has(.explorer) { box-sizing: border-box; position: sticky; background-color: var(--light); } // Hide Explorer on mobile until done loading. // Prevents ugly animation on page load. .hide-until-loaded ~ #explorer-content { display: none; } } } .explorer { display: flex; height: 100%; flex-direction: column; overflow-y: hidden; @media all and ($mobile) { order: -1; height: initial; overflow: hidden; flex-shrink: 0; align-self: flex-start; } button#mobile-explorer { display: none; } button#desktop-explorer { display: flex; } @media all and ($mobile) { button#mobile-explorer { display: flex; } button#desktop-explorer { display: none; } } &.desktop-only { @media all and not ($mobile) { display: flex; } } /*&:after { pointer-events: none; content: ""; width: 100%; height: 50px; position: absolute; left: 0; bottom: 0; opacity: 1; transition: opacity 0.3s ease; background: linear-gradient(transparent 0px, var(--light)); }*/ } button#mobile-explorer, button#desktop-explorer { background-color: transparent; border: none; text-align: left; cursor: pointer; padding: 0; color: var(--dark); display: flex; align-items: center; & h2 { font-size: 1rem; display: inline-block; margin: 0; } & .fold { margin-left: 0.5rem; transition: transform 0.3s ease; opacity: 0.8; } &.collapsed .fold { transform: rotateZ(-90deg); } } .folder-outer { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.3s ease-in-out; } .folder-outer.open { grid-template-rows: 1fr; } .folder-outer > ul { overflow: hidden; } #explorer-content { list-style: none; overflow: hidden; overflow-y: auto; max-height: 0px; transition: max-height 0.35s ease, visibility 0s linear 0.35s; margin-top: 0.5rem; visibility: hidden; &.collapsed { max-height: 100%; transition: max-height 0.35s ease, visibility 0s linear 0s; visibility: visible; } & ul { list-style: none; margin: 0.08rem 0; padding: 0; transition: max-height 0.35s ease, transform 0.35s ease, opacity 0.2s ease; & li > a { color: var(--dark); opacity: 0.75; pointer-events: all; } } > #explorer-ul { max-height: none; } } svg { pointer-events: all; & > polyline { pointer-events: none; } } .folder-container { flex-direction: row; display: flex; align-items: center; user-select: none; & div > a { color: var(--secondary); font-family: var(--headerFont); font-size: 0.95rem; font-weight: $semiBoldWeight; line-height: 1.5rem; display: inline-block; } & div > a:hover { color: var(--tertiary); } & div > button { color: var(--dark); background-color: transparent; border: none; text-align: left; cursor: pointer; padding-left: 0; padding-right: 0; display: flex; align-items: center; font-family: var(--headerFont); & span { font-size: 0.95rem; display: inline-block; color: var(--secondary); font-weight: $semiBoldWeight; margin: 0; line-height: 1.5rem; pointer-events: none; } } } .folder-icon { margin-right: 5px; color: var(--secondary); cursor: pointer; transition: transform 0.3s ease; backface-visibility: visible; } li:has(> .folder-outer:not(.open)) > .folder-container > svg { transform: rotate(-90deg); } .folder-icon:hover { color: var(--tertiary); } .no-background::after { background: none !important; } #explorer-end { // needs height so IntersectionObserver gets triggered height: 4px; // remove default margin from li margin: 0; } .explorer { @media all and ($mobile) { #explorer-content { box-sizing: border-box; overscroll-behavior: none; z-index: 100; position: absolute; top: 0; background-color: var(--light); max-width: 100dvw; left: -100dvw; width: 100%; transition: transform 300ms ease-in-out; overflow: hidden; padding: $topSpacing 2rem 2rem; height: 100dvh; max-height: 100dvh; margin-top: 0; visibility: hidden; &:not(.collapsed) { transform: translateX(100dvw); visibility: visible; } ul.overflow { max-height: 100%; width: 100%; } &.collapsed { transform: translateX(0); visibility: visible; } } #mobile-explorer { margin: 5px; z-index: 101; &:not(.collapsed) .lucide-menu { transform: rotate(-90deg); transition: transform 200ms ease-in-out; } .lucide-menu { stroke: var(--darkgray); transition: transform 200ms ease; &:hover { stroke: var(--dark); } } } } } .no-scroll { opacity: 0; overflow: hidden; } html:has(.no-scroll) { overflow: hidden; } @media all and not ($mobile) { .no-scroll { opacity: 1 !important; overflow: auto !important; } html:has(.no-scroll) { overflow: auto !important; } }