body { width: 100%; height: 100%; margin: 0 auto; scroll-behavior: smooth; background-color: var(--background-outer); } a { color: var(--link); // also set in JSX (pages/_app.tsx) text-decoration: none; background-position: 0% 100%; background-repeat: no-repeat; background-size: 0% 2px; padding-bottom: 2px; transition: background-size 0.25s ease-in-out; background-image: linear-gradient(var(--link-underline), var(--link-underline)); &:hover { background-size: 100% 2px; } } // set an anchor's class to `no-underline` to disable all of this .no-underline { background: none !important; padding-bottom: 0; } // make SVG icons relative to surrounding text // https://github.com/twitter/twemoji#inline-styles .icon { display: inline-block; height: 1.2em; width: 1.2em; vertical-align: -0.2em; } // all code code { font-size: 0.925em; page-break-inside: avoid; } // inline code in paragraphs/elsewhere (single backticks) :not(pre) > code { padding: 0.075em 0.25em; border: 1px solid var(--kinda-light); } .center { text-align: center; margin-left: auto; margin-right: auto; } // sub-heading anchor styles .h-anchor { margin: 0 0.25em; padding: 0 0.25em; color: var(--medium-light); background: none; font-weight: 300; opacity: 0; // overridden on hover user-select: none; &::before { content: "\0023"; // pound sign `#`, done here to keep content DOM cleaner } &:hover { color: var(--link); } } // make anchor `#` link show up on hover over the corresponding heading h2, h3, h4 { &:hover { .h-anchor { opacity: 1; } } } // offset (approximately) with sticky header so jumped-to content isn't hiding behind it h2 { scroll-margin-top: 4em; } h3, h4 { scroll-margin-top: 5em; } @media screen and (max-width: 768px) { h2 { scroll-margin-top: 5em; } h3, h4 { scroll-margin-top: 6em; } } // https://web.dev/prefers-reduced-motion/#(bonus)-forcing-reduced-motion-on-all-websites @media (prefers-reduced-motion: reduce) { *, ::before, ::after { animation-delay: -1ms !important; animation-duration: 1ms !important; animation-iteration-count: 1 !important; transition-duration: 0s !important; transition-delay: 0s !important; } }