roadmap/quartz/styles/base.scss

481 lines
7.8 KiB
SCSS
Raw Normal View History

2023-07-25 04:54:47 +00:00
@use "./custom.scss";
@use "./syntax.scss";
@use "./callouts.scss";
@use "./variables.scss" as *;
2023-06-01 21:35:31 +00:00
html {
scroll-behavior: smooth;
2023-07-23 18:02:45 +00:00
-webkit-text-size-adjust: none;
text-size-adjust: none;
overflow-x: hidden;
2023-08-07 05:07:08 +00:00
width: 100vw;
2023-06-01 21:35:31 +00:00
}
body,
section {
2023-06-01 21:35:31 +00:00
margin: 0;
max-width: 100%;
box-sizing: border-box;
background-color: var(--light);
font-family: var(--bodyFont);
2023-08-13 00:44:35 +00:00
color: var(--darkgray);
2023-06-01 21:35:31 +00:00
}
.text-highlight {
2023-07-10 02:32:24 +00:00
background-color: #fff23688;
2023-06-01 21:35:31 +00:00
padding: 0 0.1rem;
border-radius: 5px;
}
::selection {
background: color-mix(in srgb, var(--tertiary) 75%, transparent);
2023-08-24 19:31:15 +00:00
color: var(--darkgray);
}
2023-07-23 00:27:41 +00:00
p,
ul,
text,
a,
tr,
td,
li,
ol,
ul,
.katex,
.math {
2023-06-01 21:35:31 +00:00
color: var(--darkgray);
fill: var(--darkgray);
overflow-wrap: anywhere;
hyphens: auto;
2023-06-01 21:35:31 +00:00
}
2023-07-10 02:32:24 +00:00
.math {
&.math-display {
text-align: center;
}
}
2023-06-01 21:35:31 +00:00
a {
font-weight: 600;
text-decoration: none;
2023-07-02 20:08:29 +00:00
transition: color 0.2s ease;
2023-06-01 21:35:31 +00:00
color: var(--secondary);
&:hover {
color: var(--tertiary) !important;
}
&.internal {
text-decoration: none;
background-color: var(--highlight);
padding: 0 0.1rem;
border-radius: 5px;
}
}
.desktop-only {
display: initial;
@media all and (max-width: $fullPageWidth) {
display: none;
}
}
.mobile-only {
display: none;
@media all and (max-width: $fullPageWidth) {
display: initial;
}
}
2023-06-01 21:35:31 +00:00
.page {
@media all and (max-width: $fullPageWidth) {
margin: 0 auto;
padding: 0 1rem;
2023-08-07 05:07:08 +00:00
max-width: $pageWidth;
}
& article {
2023-10-05 20:48:52 +00:00
position: relative;
& > h1 {
font-size: 2rem;
}
2023-07-23 00:27:41 +00:00
& li:has(> input[type="checkbox"]) {
list-style-type: none;
padding-left: 0;
2023-07-26 05:27:59 +00:00
}
& li:has(> input[type="checkbox"]:checked) {
text-decoration: line-through;
text-decoration-color: var(--gray);
color: var(--gray);
}
2023-07-10 02:32:24 +00:00
& li > * {
2023-07-26 05:27:59 +00:00
margin-top: 0;
margin-bottom: 0;
2023-07-10 02:32:24 +00:00
}
p > strong {
color: var(--dark);
}
2023-06-17 21:36:06 +00:00
}
2023-07-02 20:08:29 +00:00
& > #quartz-body {
width: 100%;
display: flex;
@media all and (max-width: $fullPageWidth) {
flex-direction: column;
}
2023-07-02 20:08:29 +00:00
2023-07-05 00:14:15 +00:00
& .sidebar {
2023-07-02 20:08:29 +00:00
flex: 1;
display: flex;
flex-direction: column;
gap: 2rem;
top: 0;
width: $sidePanelWidth;
margin-top: $topSpacing;
2023-07-02 20:08:29 +00:00
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;
}
2023-07-02 20:08:29 +00:00
}
2023-07-05 00:14:15 +00:00
& .sidebar.left {
left: calc(calc(100vw - $pageWidth) / 2 - $sidePanelWidth);
@media all and (max-width: $fullPageWidth) {
2023-07-31 04:08:32 +00:00
gap: 0;
align-items: center;
}
2023-07-02 20:08:29 +00:00
}
2023-07-05 00:14:15 +00:00
& .sidebar.right {
right: calc(calc(100vw - $pageWidth) / 2 - $sidePanelWidth);
& > * {
@media all and (max-width: $fullPageWidth) {
flex: 1;
}
}
2023-07-02 20:08:29 +00:00
}
2023-06-17 21:36:06 +00:00
}
& .page-header {
width: $pageWidth;
margin: $topSpacing auto 0 auto;
@media all and (max-width: $fullPageWidth) {
width: initial;
margin-top: 2rem;
2023-06-17 21:36:06 +00:00
}
2023-06-01 21:35:31 +00:00
}
2023-07-23 00:27:41 +00:00
& .center,
& footer {
margin-left: auto;
margin-right: auto;
2023-08-07 05:07:08 +00:00
width: $pageWidth;
@media all and (max-width: $fullPageWidth) {
width: initial;
margin-left: 0;
margin-right: 0;
2023-07-02 20:08:29 +00:00
}
2023-06-01 21:35:31 +00:00
}
}
2023-07-10 02:32:24 +00:00
.footnotes {
margin-top: 2rem;
border-top: 1px solid var(--lightgray);
}
2023-07-02 20:08:29 +00:00
input[type="checkbox"] {
transform: translateY(2px);
color: var(--secondary);
2023-07-26 05:27:59 +00:00
border: 1px solid var(--lightgray);
border-radius: 3px;
2023-07-02 20:08:29 +00:00
background-color: var(--light);
2023-07-26 05:27:59 +00:00
position: relative;
margin-inline-end: 0.2rem;
margin-inline-start: -1.4rem;
appearance: none;
width: 16px;
height: 16px;
&:checked {
border-color: var(--secondary);
background-color: var(--secondary);
&::after {
content: "";
position: absolute;
left: 4px;
top: 1px;
width: 4px;
height: 8px;
display: block;
2023-07-31 04:08:32 +00:00
border: solid var(--light);
2023-07-26 05:27:59 +00:00
border-width: 0 2px 2px 0;
transform: rotate(45deg);
}
}
2023-07-02 20:08:29 +00:00
}
2023-06-01 21:35:31 +00:00
blockquote {
2023-06-07 02:48:37 +00:00
margin: 1rem 0;
2023-06-01 21:35:31 +00:00
border-left: 3px solid var(--secondary);
padding-left: 1rem;
transition: border-color 0.2s ease;
}
h1,
h2,
h3,
h4,
h5,
h6,
thead {
font-family: var(--headerFont);
color: var(--dark);
font-weight: revert;
2023-07-10 02:32:24 +00:00
margin-bottom: 0;
2023-06-01 21:35:31 +00:00
2023-06-01 23:48:38 +00:00
article > & > a {
color: var(--dark);
&.internal {
background-color: transparent;
}
2023-06-01 21:35:31 +00:00
}
2023-06-01 23:48:38 +00:00
}
2023-06-01 21:35:31 +00:00
2023-07-23 00:27:41 +00:00
h1,
h2,
h3,
h4,
h5,
h6 {
2023-07-02 20:08:29 +00:00
&[id] > a[href^="#"] {
2023-06-01 23:48:38 +00:00
margin: 0 0.5rem;
opacity: 0;
transition: opacity 0.2s ease;
2023-06-03 19:07:19 +00:00
transform: translateY(-0.1rem);
display: inline-block;
2023-06-01 23:48:38 +00:00
font-family: var(--codeFont);
user-select: none;
}
2023-07-23 18:02:45 +00:00
2023-06-01 23:48:38 +00:00
&[id]:hover > a {
opacity: 1;
2023-06-01 21:35:31 +00:00
}
}
2023-07-23 18:02:45 +00:00
// typography improvements
h1 {
font-size: 1.75rem;
2023-08-09 03:36:24 +00:00
margin-top: 2.25rem;
margin-bottom: 1rem;
2023-07-23 18:02:45 +00:00
}
h2 {
font-size: 1.4rem;
2023-08-09 03:36:24 +00:00
margin-top: 1.9rem;
margin-bottom: 1rem;
2023-07-23 18:02:45 +00:00
}
h3 {
font-size: 1.12rem;
2023-08-09 03:36:24 +00:00
margin-top: 1.62rem;
margin-bottom: 1rem;
2023-07-23 18:02:45 +00:00
}
2023-07-23 18:04:20 +00:00
h4,
h5,
h6 {
2023-07-23 18:02:45 +00:00
font-size: 1rem;
2023-08-09 03:36:24 +00:00
margin-top: 1.5rem;
margin-bottom: 1rem;
2023-07-23 18:02:45 +00:00
}
2023-06-01 21:35:31 +00:00
div[data-rehype-pretty-code-fragment] {
2023-07-23 18:02:45 +00:00
line-height: 1.6rem;
2023-06-01 21:35:31 +00:00
position: relative;
& > div[data-rehype-pretty-code-title] {
font-family: var(--codeFont);
font-size: 0.9rem;
2023-07-10 02:32:24 +00:00
padding: 0.1rem 0.5rem;
2023-06-01 21:35:31 +00:00
border: 1px solid var(--lightgray);
width: max-content;
border-radius: 5px;
2023-07-10 02:32:24 +00:00
margin-bottom: -0.5rem;
2023-06-01 21:35:31 +00:00
color: var(--darkgray);
}
2023-07-10 02:32:24 +00:00
& > pre {
padding: 0.5rem 0;
}
2023-06-01 23:05:14 +00:00
}
2023-06-01 21:35:31 +00:00
2023-06-01 23:05:14 +00:00
pre {
font-family: var(--codeFont);
padding: 0.5rem;
border-radius: 5px;
overflow-x: auto;
2023-06-01 23:05:14 +00:00
border: 1px solid var(--lightgray);
2023-07-08 21:36:02 +00:00
&:has(> code.mermaid) {
border: none;
}
2023-06-01 23:05:14 +00:00
& > code {
background: none;
padding: 0;
2023-06-07 02:48:37 +00:00
font-size: 0.85rem;
2023-06-01 23:05:14 +00:00
counter-reset: line;
counter-increment: line 0;
display: grid;
2023-07-10 02:32:24 +00:00
& [data-highlighted-chars] {
background-color: var(--highlight);
border-radius: 5px;
}
& > [data-line] {
2023-06-01 23:05:14 +00:00
padding: 0 0.25rem;
box-sizing: border-box;
border-left: 3px solid transparent;
2023-07-10 02:32:24 +00:00
&[data-highlighted-line] {
2023-06-01 23:05:14 +00:00
background-color: var(--highlight);
border-left: 3px solid var(--secondary);
}
2023-06-01 21:35:31 +00:00
2023-06-01 23:05:14 +00:00
&::before {
content: counter(line);
counter-increment: line;
width: 1rem;
margin-right: 1rem;
display: inline-block;
text-align: right;
2023-07-10 02:32:24 +00:00
color: rgba(115, 138, 148, 0.6);
2023-06-01 21:35:31 +00:00
}
}
2023-07-10 02:32:24 +00:00
2023-07-23 00:27:41 +00:00
&[data-line-numbers-max-digits="2"] > [data-line]::before {
2023-07-10 02:32:24 +00:00
width: 2rem;
}
2023-07-23 00:27:41 +00:00
&[data-line-numbers-max-digits="3"] > [data-line]::before {
2023-07-10 02:32:24 +00:00
width: 3rem;
}
2023-06-01 21:35:31 +00:00
}
}
code {
font-size: 0.9em;
2023-06-20 03:37:45 +00:00
color: var(--dark);
2023-06-01 21:35:31 +00:00
font-family: var(--codeFont);
border-radius: 5px;
padding: 0.1rem 0.2rem;
background: var(--lightgray);
}
2023-07-23 00:27:41 +00:00
tbody,
li,
p {
2023-07-23 18:02:45 +00:00
line-height: 1.6rem;
2023-06-01 21:35:31 +00:00
}
table {
2023-08-07 02:52:30 +00:00
margin: 1rem;
2023-06-01 21:35:31 +00:00
padding: 1.5rem;
border-collapse: collapse;
2023-08-07 02:52:30 +00:00
& > * {
line-height: 2rem;
}
2023-06-01 21:35:31 +00:00
}
2023-07-23 00:27:41 +00:00
th {
2023-08-07 02:52:30 +00:00
text-align: left;
padding: 0.4rem 1rem;
border-bottom: 2px solid var(--gray);
}
td {
2023-06-01 21:35:31 +00:00
padding: 0.2rem 1rem;
2023-08-07 02:52:30 +00:00
}
tr {
border-bottom: 1px solid var(--lightgray);
&:last-child {
border-bottom: none;
}
2023-06-01 21:35:31 +00:00
}
img {
max-width: 100%;
border-radius: 5px;
margin: 1rem 0;
}
p > img + em {
display: block;
transform: translateY(-1rem);
}
hr {
width: 100%;
margin: 2rem auto;
height: 1px;
border: none;
background-color: var(--lightgray);
}
2023-07-23 00:27:41 +00:00
audio,
video {
2023-06-06 07:00:38 +00:00
width: 100%;
border-radius: 5px;
}
2023-06-18 17:47:07 +00:00
.spacer {
flex: 1 1 auto;
}
2023-07-23 00:27:41 +00:00
ul.overflow,
ol.overflow {
max-height: 400;
2023-08-20 04:55:09 +00:00
overflow-y: auto;
2023-07-10 02:32:24 +00:00
// clearfix
content: "";
clear: both;
& > li:last-of-type {
feat: implement file explorer component (closes #201) (#452) * feat: add basic explorer structure„ * feat: integrate new component/plugin * feat: add basic explorer structure * feat: add sort to FileNodes * style: improve style for explorer * refactor: remove unused explorer plugin * refactor: clean explorer structure, fix base (toc) * refactor: clean css, respect displayClass * style: add styling to chevron * refactor: clean up debug statements * refactor: remove unused import * fix: clicking folder icon sometimes turns invisible * refactor: clean css * feat(explorer): add config for title * feat: add config for folder click behavior * fix: `no-pointer` not being set for all elements new approach, have one `no-pointer` class, that removes pointer events and one `clickable` class on the svg and button (everything that can normally be clicked). then, find all children with `clickable` and toggle `no-pointer` * fix: bug where nested folders got incorrect height this fixes the bug where nested folders weren't calculating their total height correctly. done by adding class to main container of all children and calculating total * feat: introduce `folderDefaultState` config * feat: store depth for explorer nodes * feat: implement option for collapsed state + bug fixes folderBehavior: "link" still has bad styling, but major bugs with pointers fixed (not clean yet, but working) * fix: default folder icon rotation * fix: hitbox problem with folder links, fix style * fix: redirect url for nested folders * fix: inconsistent behavior with 'collapseFolders' opt * chore: add comments to `ExplorerNode` * feat: save explorer state to local storage (not clean) * feat: rework `getFolders()`, fix localstorage read + write * feat: set folder state from localStorage needs serious refactoring but functional (except folder icon orientation) * fix: folder icon orientation after local storage * feat: add config for `useSavedState` * refactor: clean `explorer.inline.ts` remove unused functions, comments, unused code, add types to EventHandler * refactor: clean explorer merge `isSvg` paths, remove console logs * refactor: add documentation, remove unused funcs * feat: rework folder collapse logic use grids instead of jank scuffed solution with calculating total heights * refactor: remove depth arg from insert * feat: restore collapse functionality to clicks allow folder icon + folder label to collapse folders again * refactor: remove `pointer-event` jank * feat: improve svg viewbox + remove unused props * feat: use css selector to toggle icon rework folder icon to work purely with css instead of JS manipulation * refactor: remove unused cfg * feat: move TOC to right sidebar * refactor: clean css * style: fix overflow + overflow margin * fix: use `resolveRelative` to resolve file paths * fix: `defaultFolderState` config option * refactor: rename import, rename `folderLi` + ul * fix: use `QuartzPluginData` type * docs: add explorer documentation
2023-09-15 16:39:16 +00:00
margin-bottom: 30px;
}
&:after {
pointer-events: none;
2023-07-23 00:27:41 +00:00
content: "";
width: 100%;
2023-07-23 00:27:41 +00:00
height: 50px;
position: absolute;
left: 0;
bottom: 0;
2023-07-10 02:32:24 +00:00
opacity: 1;
transition: opacity 0.3s ease;
background: linear-gradient(transparent 0px, var(--light));
}
}
.transclude {
ul {
padding-left: 1rem;
}
}