| | |
| | | @use "sass:map"; |
| | | |
| | | @use "./variables.scss" as *; |
| | | @use "./syntax.scss"; |
| | | @use "./callouts.scss"; |
| | |
| | | width: 100vw; |
| | | } |
| | | |
| | | body, |
| | | section { |
| | | body { |
| | | margin: 0; |
| | | max-width: 100%; |
| | | box-sizing: border-box; |
| | | background-color: var(--light); |
| | | font-family: var(--bodyFont); |
| | |
| | | } |
| | | |
| | | .text-highlight { |
| | | background-color: #fff23688; |
| | | background-color: var(--textHighlight); |
| | | padding: 0 0.1rem; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | ::selection { |
| | | background: color-mix(in srgb, var(--tertiary) 60%, rgba(255, 255, 255, 0)); |
| | | color: var(--darkgray); |
| | |
| | | ol, |
| | | ul, |
| | | .katex, |
| | | .math { |
| | | .math, |
| | | .typst-doc, |
| | | .typst-doc * { |
| | | color: var(--darkgray); |
| | | fill: var(--darkgray); |
| | | hyphens: auto; |
| | | } |
| | | |
| | | p, |
| | | ul, |
| | | text, |
| | | a, |
| | | li, |
| | | ol, |
| | | ul, |
| | | .katex, |
| | | .math { |
| | | overflow-wrap: anywhere; |
| | | /* tr and td removed from list of selectors for overflow-wrap, allowing them to use default 'normal' property value */ |
| | | overflow-wrap: break-word; |
| | | text-wrap: pretty; |
| | | } |
| | | |
| | | .math { |
| | |
| | | } |
| | | } |
| | | |
| | | article { |
| | | > mjx-container.MathJax, |
| | | blockquote > div > mjx-container.MathJax { |
| | | display: flex; |
| | | > svg { |
| | | margin-left: auto; |
| | | margin-right: auto; |
| | | } |
| | | } |
| | | blockquote > div > mjx-container.MathJax > svg { |
| | | margin-top: 1rem; |
| | | margin-bottom: 1rem; |
| | | } |
| | | } |
| | | |
| | | strong { |
| | | font-weight: $semiBoldWeight; |
| | | } |
| | |
| | | color: var(--secondary); |
| | | |
| | | &:hover { |
| | | color: var(--tertiary) !important; |
| | | color: var(--tertiary); |
| | | } |
| | | |
| | | &.internal { |
| | |
| | | border-radius: 5px; |
| | | line-height: 1.4rem; |
| | | |
| | | &.broken { |
| | | color: var(--secondary); |
| | | opacity: 0.5; |
| | | transition: opacity 0.2s ease; |
| | | &:hover { |
| | | opacity: 0.8; |
| | | } |
| | | } |
| | | |
| | | &:has(> img) { |
| | | background-color: none; |
| | | background-color: transparent; |
| | | border-radius: 0; |
| | | padding: 0; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | .flex-component { |
| | | display: flex; |
| | | } |
| | | |
| | | .desktop-only { |
| | | display: initial; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | &.flex-component { |
| | | display: flex; |
| | | } |
| | | @media all and ($mobile) { |
| | | &.flex-component { |
| | | display: none; |
| | | } |
| | | display: none; |
| | | } |
| | | } |
| | | |
| | | .mobile-only { |
| | | display: none; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | &.flex-component { |
| | | display: none; |
| | | } |
| | | @media all and ($mobile) { |
| | | &.flex-component { |
| | | display: flex; |
| | | } |
| | | display: initial; |
| | | } |
| | | } |
| | | |
| | | .page { |
| | | @media all and (max-width: $fullPageWidth) { |
| | | margin: 0 auto; |
| | | padding: 0 1rem; |
| | | max-width: $pageWidth; |
| | | } |
| | | |
| | | max-width: calc(#{map.get($breakpoints, desktop)} + 300px); |
| | | margin: 0 auto; |
| | | & article { |
| | | & > h1 { |
| | | font-size: 2rem; |
| | |
| | | } |
| | | |
| | | & > #quartz-body { |
| | | width: 100%; |
| | | display: flex; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | flex-direction: column; |
| | | display: grid; |
| | | grid-template-columns: #{map.get($desktopGrid, templateColumns)}; |
| | | grid-template-rows: #{map.get($desktopGrid, templateRows)}; |
| | | column-gap: #{map.get($desktopGrid, columnGap)}; |
| | | row-gap: #{map.get($desktopGrid, rowGap)}; |
| | | grid-template-areas: #{map.get($desktopGrid, templateAreas)}; |
| | | |
| | | @media all and ($tablet) { |
| | | grid-template-columns: #{map.get($tabletGrid, templateColumns)}; |
| | | grid-template-rows: #{map.get($tabletGrid, templateRows)}; |
| | | column-gap: #{map.get($tabletGrid, columnGap)}; |
| | | row-gap: #{map.get($tabletGrid, rowGap)}; |
| | | grid-template-areas: #{map.get($tabletGrid, templateAreas)}; |
| | | } |
| | | @media all and ($mobile) { |
| | | grid-template-columns: #{map.get($mobileGrid, templateColumns)}; |
| | | grid-template-rows: #{map.get($mobileGrid, templateRows)}; |
| | | column-gap: #{map.get($mobileGrid, columnGap)}; |
| | | row-gap: #{map.get($mobileGrid, rowGap)}; |
| | | grid-template-areas: #{map.get($mobileGrid, templateAreas)}; |
| | | } |
| | | |
| | | @media all and not ($desktop) { |
| | | padding: 0 1rem; |
| | | } |
| | | @media all and ($mobile) { |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | & .sidebar { |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 2rem; |
| | | gap: 1.2rem; |
| | | top: 0; |
| | | width: $sidePanelWidth; |
| | | margin-top: $topSpacing; |
| | | box-sizing: border-box; |
| | | padding: 0 4rem; |
| | | position: fixed; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | position: initial; |
| | | flex-direction: row; |
| | | padding: 0; |
| | | width: initial; |
| | | margin-top: 2rem; |
| | | } |
| | | padding: $topSpacing 2rem 2rem 2rem; |
| | | display: flex; |
| | | height: 100vh; |
| | | position: sticky; |
| | | } |
| | | |
| | | & .sidebar.left { |
| | | left: calc(calc(100vw - $pageWidth) / 2 - $sidePanelWidth); |
| | | @media all and (max-width: $fullPageWidth) { |
| | | z-index: 1; |
| | | grid-area: grid-sidebar-left; |
| | | flex-direction: column; |
| | | @media all and ($mobile) { |
| | | gap: 0; |
| | | align-items: center; |
| | | position: initial; |
| | | display: flex; |
| | | height: unset; |
| | | flex-direction: row; |
| | | padding: 0; |
| | | padding-top: 2rem; |
| | | } |
| | | } |
| | | |
| | | & .sidebar.right { |
| | | right: calc(calc(100vw - $pageWidth) / 2 - $sidePanelWidth); |
| | | flex-wrap: wrap; |
| | | & > * { |
| | | @media all and (max-width: $fullPageWidth) { |
| | | grid-area: grid-sidebar-right; |
| | | margin-right: 0; |
| | | flex-direction: column; |
| | | @media all and ($mobile) { |
| | | margin-left: inherit; |
| | | margin-right: inherit; |
| | | } |
| | | @media all and not ($desktop) { |
| | | position: initial; |
| | | height: unset; |
| | | width: 100%; |
| | | flex-direction: row; |
| | | padding: 0; |
| | | & > * { |
| | | flex: 1; |
| | | min-width: 140px; |
| | | max-height: 24rem; |
| | | } |
| | | & > .toc { |
| | | display: none; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | & .page-header { |
| | | width: $pageWidth; |
| | | margin: $topSpacing auto 0 auto; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | width: initial; |
| | | margin-top: 2rem; |
| | | & .page-header, |
| | | & .page-footer { |
| | | margin-top: 1rem; |
| | | } |
| | | } |
| | | |
| | | & .center, |
| | | & footer { |
| | | margin-left: auto; |
| | | margin-right: auto; |
| | | width: $pageWidth; |
| | | @media all and (max-width: $fullPageWidth) { |
| | | width: initial; |
| | | & .page-header { |
| | | grid-area: grid-header; |
| | | margin: $topSpacing 0 0 0; |
| | | @media all and ($mobile) { |
| | | margin-top: 0; |
| | | padding: 0; |
| | | } |
| | | } |
| | | |
| | | & .center > article { |
| | | grid-area: grid-center; |
| | | } |
| | | |
| | | & footer { |
| | | grid-area: grid-footer; |
| | | } |
| | | |
| | | & .center, |
| | | & footer { |
| | | max-width: 100%; |
| | | min-width: 100%; |
| | | margin-left: auto; |
| | | margin-right: auto; |
| | | @media all and ($tablet) { |
| | | margin-right: 0; |
| | | } |
| | | @media all and ($mobile) { |
| | | margin-right: 0; |
| | | margin-left: 0; |
| | | } |
| | | } |
| | | & footer { |
| | | margin-left: 0; |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | } |
| | |
| | | &[id]:hover > a { |
| | | opacity: 1; |
| | | } |
| | | |
| | | &:not([id]) > a[role="anchor"] { |
| | | display: none; |
| | | } |
| | | } |
| | | |
| | | // typography improvements |
| | |
| | | font-size: 0.9rem; |
| | | padding: 0.1rem 0.5rem; |
| | | border: 1px solid var(--lightgray); |
| | | width: max-content; |
| | | width: fit-content; |
| | | border-radius: 5px; |
| | | margin-bottom: -0.5rem; |
| | | color: var(--darkgray); |
| | |
| | | counter-increment: line 0; |
| | | display: grid; |
| | | padding: 0.5rem 0; |
| | | overflow-x: scroll; |
| | | overflow-x: auto; |
| | | |
| | | & [data-highlighted-chars] { |
| | | background-color: var(--highlight); |
| | |
| | | max-width: 100%; |
| | | border-radius: 5px; |
| | | margin: 1rem 0; |
| | | content-visibility: auto; |
| | | } |
| | | |
| | | p > img + em { |
| | |
| | | } |
| | | |
| | | .spacer { |
| | | flex: 1 1 auto; |
| | | flex: 2 1 auto; |
| | | } |
| | | |
| | | div:has(> .overflow) { |
| | | position: relative; |
| | | max-height: 100%; |
| | | overflow-y: hidden; |
| | | } |
| | | |
| | | ul.overflow, |
| | | ol.overflow { |
| | | max-height: 400; |
| | | max-height: 100%; |
| | | overflow-y: auto; |
| | | width: 100%; |
| | | margin-bottom: 0; |
| | | |
| | | // clearfix |
| | | content: ""; |
| | | clear: both; |
| | | |
| | | & > li:last-of-type { |
| | | margin-bottom: 30px; |
| | | & > li.overflow-end { |
| | | height: 0.5rem; |
| | | margin: 0; |
| | | } |
| | | |
| | | &: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)); |
| | | &.gradient-active { |
| | | mask-image: linear-gradient(to bottom, black calc(100% - 50px), transparent 100%); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | .katex-display { |
| | | display: initial; |
| | | overflow-x: auto; |
| | | overflow-y: hidden; |
| | | } |
| | | |
| | | .external-embed.youtube, |
| | | iframe.pdf { |
| | | aspect-ratio: 16 / 9; |
| | | height: 100%; |
| | | width: 100%; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | .navigation-progress { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 0; |
| | | height: 3px; |
| | | background: var(--secondary); |
| | | transition: width 0.2s ease; |
| | | z-index: 9999; |
| | | } |