diff --git a/content/index.tree b/content/index.tree
index cb78dfb..1a73cdf 100644
--- a/content/index.tree
+++ b/content/index.tree
@@ -1,50 +1,35 @@
%% title = "liquidex's treehouse"
styles = ["page/index.css"]
-% id = "treehouse"
-- # liquidex's treehouse
+% id = "01H8V556P1PND8DQ73XBTZZJH7"
+- welcome! make yourself at home. = --w-- =
-::: oops-you-seem-to-have-gotten-stuck
-*achievement unlocked:* _I don't want anything to do with this bullshit_\
-...either that, or you folded the entire tree by accident.\
-feel free to go back at any time by clicking here.
-:::
+% id = "01H8VWEHX501SNYQTE61WX7YJC"
+- :folder: [_"owo, what's this?"_][page:kuroneko]{.secret}
- % id = "01H8V556P1PND8DQ73XBTZZJH7"
- - welcome! make yourself at home. = --w-- =
+ % id = "about"
+ content.link = "about"
+ + ## about me
- % id = "01H8VWEHX501SNYQTE61WX7YJC"
- - :folder: [_"owo, what's this?"_][page:kuroneko]{.secret}
+ % id = "about-treehouse"
+ content.link = "about-treehouse"
+ + ## about this
- % id = "about"
- content.link = "about"
- + ## about me
+% id = "01H8V556P1GRAA3717VH3QJFMV"
+ classes.branch_children = "index:hobby-corners"
+- :folder: hobby corners
- % id = "about-treehouse"
- content.link = "about-treehouse"
- + ## about this
-
- % id = "01H8V556P1GRAA3717VH3QJFMV"
- classes.branch_children = "index:hobby-corners"
- - :folder: hobby corners
-
- % id = "programming"
- content.link = "programming"
- + ## programming
- ``` =html
-
+```
- % id = "01HFYZKREWE2AM61ZRW3R501H6"
- - :folder: /var
+ % id = "programming"
+ content.link = "programming"
+ + ## ``{=html}programming
- % id = "short-thoughts"
- content.link = "short-thoughts"
- + ## [sh](https://www.youtube.com/watch?v=rFL2VOdb944){.secret}ort thoughts
+ % id = "design"
+ content.link = "design"
+ + ## ``{=html}design
- % id = "philosophy"
- content.link = "philosophy"
- + ## philosophy and worldview
+ % id = "music"
+ content.link = "music"
+ + ## ``{=html}music
+
+ % id = "games"
+ content.link = "games"
+ + ## ``{=html}games
+
+% id = "01HFYZKREWE2AM61ZRW3R501H6"
+- :folder: /var
+
+ % id = "short-thoughts"
+ content.link = "short-thoughts"
+ + ## [sh](https://www.youtube.com/watch?v=rFL2VOdb944){.secret}ort thoughts
+
+ % id = "philosophy"
+ content.link = "philosophy"
+ + ## philosophy and worldview
diff --git a/crates/treehouse/src/html/tree.rs b/crates/treehouse/src/html/tree.rs
index 5d1c612..07da10d 100644
--- a/crates/treehouse/src/html/tree.rs
+++ b/crates/treehouse/src/html/tree.rs
@@ -220,14 +220,14 @@ pub fn branch_to_html(
EscapeAttribute(link),
)
.unwrap();
+ } else {
+ write!(
+ s,
+ "",
+ EscapeAttribute(&branch.named_id)
+ )
+ .unwrap();
}
-
- write!(
- s,
- "",
- EscapeAttribute(&branch.named_id)
- )
- .unwrap();
}
s.push_str("");
diff --git a/static/css/base.css b/static/css/base.css
new file mode 100644
index 0000000..b7eb4e4
--- /dev/null
+++ b/static/css/base.css
@@ -0,0 +1,61 @@
+/* Color scheme. */
+
+:root {
+ /* naturally */
+ --liquidex-brand-blue: #058ef0;
+ /* but also: */
+ --liquidex-brand-red: #eb134a;
+ --liquidex-brand-yellow: #ffc31f;
+ --liquidex-brand-green: #06ca4a;
+
+ --text-color-light: #55423e;
+ --link-color-light: #004ec8;
+ --link-color-visited-light: #6c2380;
+
+ --background-color: rgb(255, 253, 246);
+ --background-color-tooltip: rgb(226, 223, 214);
+ --text-color: #55423e;
+ --link-color: #004ec8;
+ --link-color-visited: #6c2380;
+
+ --shaded-background: rgba(0, 0, 0, 5%);
+ --border-1: rgba(0, 0, 0, 15%);
+ --border-2: rgba(0, 0, 0, 30%);
+ --hover: rgba(0, 0, 0, 15%);
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background-color: rgb(30, 40, 53);
+ --background-color-tooltip: rgb(23, 31, 41);
+ --text-color: #d7cdbf;
+ --link-color: #93cce8;
+ --link-color-visited: #f7afde;
+
+ --shaded-background: #f7e5df0c;
+ --border-0: #f7e5df1a;
+ --border-1: #f7e5df26;
+ --border-1-and-a-half: #f7e5df3a;
+ --border-2: #f7e5df4d;
+ }
+}
+
+:root {
+ /* Font size-responsive measurements. treehouse was designed against a font size of 14px;
+ each of these sizes is (n / 14)rem where n is the number of pixels. */
+ --1px: 0.07142857143rem;
+ --2px: 0.1428571429rem;
+ --3px: 0.2142857143rem;
+ --4px: 0.2857142857rem;
+ --6px: 0.4285714286rem;
+ --8px: 0.5714285714rem;
+ --10px: 0.7142857143rem;
+ --12px: 0.8571428571rem;
+ --16px: 1.142857143rem;
+}
+
+/* Reset things to more sensible sizing rules */
+
+* {
+ box-sizing: border-box;
+}
diff --git a/static/css/main.css b/static/css/main.css
index e23f9eb..d584c28 100644
--- a/static/css/main.css
+++ b/static/css/main.css
@@ -1,115 +1,129 @@
-/* Color scheme. */
-
-:root {
- /* naturally */
- --liquidex-brand-blue: #058ef0;
- /* but also: */
- --liquidex-brand-red: #eb134a;
- --liquidex-brand-yellow: #ffc31f;
- --liquidex-brand-green: #06ca4a;
-
- --text-color-light: #55423e;
- --link-color-light: #004ec8;
- --link-color-visited-light: #6c2380;
-
- --background-color: rgb(255, 253, 246);
- --background-color-tooltip: rgb(226, 223, 214);
- --text-color: #55423e;
- --link-color: #004ec8;
- --link-color-visited: #6c2380;
-
- --shaded-background: rgba(0, 0, 0, 5%);
- --border-1: rgba(0, 0, 0, 15%);
- --border-2: rgba(0, 0, 0, 30%);
- --hover: rgba(0, 0, 0, 15%);
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --background-color: rgb(30, 40, 53);
- --background-color-tooltip: rgb(23, 31, 41);
- --text-color: #d7cdbf;
- --link-color: #93cce8;
- --link-color-visited: #f7afde;
-
- --shaded-background: #f7e5df0c;
- --border-0: #f7e5df1a;
- --border-1: #f7e5df26;
- --border-1-and-a-half: #f7e5df3a;
- --border-2: #f7e5df4d;
- }
-}
-
-:root {
- /* Font size-responsive measurements. treehouse was designed against a font size of 14px;
- each of these sizes is (n / 14)rem where n is the number of pixels. */
- --1px: 0.07142857143rem;
- --2px: 0.1428571429rem;
- --3px: 0.2142857143rem;
- --4px: 0.2857142857rem;
- --6px: 0.4285714286rem;
- --8px: 0.5714285714rem;
- --10px: 0.7142857143rem;
- --12px: 0.8571428571rem;
- --16px: 1.142857143rem;
-}
-
-/* Article-style layout. Center everything and give it a maximum width */
+/* Lay out the main containers. */
body {
- max-width: 1200px;
- margin-left: auto;
- margin-right: auto;
+ --top-min-spacing: 40px;
- display: flex;
- flex-direction: column;
+ margin: 0;
+
+ display: grid;
+ grid-template-columns:
+ [left] minmax(
+ 0,
+ clamp(80px, calc(100vw - (1920px - 360px - 160px)), 160px)
+ )
+ [center] minmax(0, auto)
+ [right] minmax(0, calc(100vw - (1920px - 360px)));
+ grid-template-rows:
+ [top] minmax(
+ clamp(
+ var(--top-min-spacing),
+ calc(100vw - (1920px - 360px - 160px)),
+ 128px
+ ),
+ min-content
+ )
+ [title] minmax(6rem, min-content)
+ [main] 1fr
+ [bottom] min-content;
+}
+
+html {
+ /* Try to always leave a bunch of empty space at the bottom, but don't overdo it.
+ It's kind of awkward when you scroll to the bottom and your page just turns blank. */
+ --virtual-space-ratio: 1.75;
+
+ height: calc(100% * var(--virtual-space-ratio));
+}
+
+body {
+ min-height: calc(100% / var(--virtual-space-ratio));
+}
+
+.noscript {
+ grid-row: top;
+ grid-column: center;
+}
+
+#nav-logo {
+ grid-row: title;
+ grid-column: left;
+
+ align-self: center;
+ justify-self: end;
+}
+
+section.page-header {
+ grid-row: title;
+ grid-column: center;
+
+ align-self: center;
}
main {
- padding: 0 var(--16px);
+ grid-row: main;
+ grid-column: center / center;
+
+ margin-right: 8px;
}
-@media screen and (max-width: 480px) {
+footer {
+ grid-row: bottom;
+ grid-column: center / center;
+}
+
+@media (max-width: 1200px) {
main {
- padding: 0 var(--8px);
+ grid-column: left / -1;
+ }
+
+ footer {
+ grid-column: 1 / -1;
+ }
+}
+
+@media (max-width: 450px) {
+ body {
+ --top-min-spacing: 0px;
+ }
+
+ section.page-header {
+ grid-column: 1 / -1;
+ }
+
+ nav#nav-logo {
+ display: none;
}
}
/* Choose more pretty colors than vanilla HTML */
+body {
+ background-color: var(--background-color);
+ color: var(--text-color);
+}
+
:root {
scrollbar-color: var(--border-2) var(--shaded-background);
scrollbar-width: auto;
scrollbar-gutter: stable;
}
-body {
- background-color: var(--background-color);
- color: var(--text-color);
-
-}
-
-body::selection {
- /* Even though this color doesn't yield the most readable text, browsers */
- background-color: var(--liquidex-brand-blue);
-}
-
/* Set up typography */
@font-face {
- font-family: 'RecVar';
+ font-family: "RecVar";
/* NOTE: I put the hash in here manually instead of adding the complexity of piping CSS through
Handlebars because I don't really think it's worth it for this single asset.
Other assets are referenced rarely enough that caching probably isn't gonna make too much of
an impact.
It's unlikely I'll ever update the font anyways, so eh, whatever. */
- src: url('../font/Recursive_VF_1.085.woff2?cache=b3-445487d5');
+ src: url("../font/Recursive_VF_1.085.woff2?cache=b3-445487d5");
}
@font-face {
- font-family: 'RecVarMono';
- src: url('../font/Recursive_VF_1.085.woff2?cache=b3-445487d5');
- font-variation-settings: "MONO" 1.0;
+ font-family: "RecVarMono";
+ src: url("../font/Recursive_VF_1.085.woff2?cache=b3-445487d5");
+ font-variation-settings: "MONO" 1;
}
body,
@@ -117,7 +131,7 @@ pre,
code,
kbd,
button {
- font-family: 'RecVar', sans-serif;
+ font-family: "RecVar", sans-serif;
line-height: 1.5;
}
@@ -133,10 +147,10 @@ button {
}
:root {
- --recursive-mono: 0.0;
- --recursive-casl: 1.0;
+ --recursive-mono: 0;
+ --recursive-casl: 1;
--recursive-wght: 400;
- --recursive-slnt: 0.0;
+ --recursive-slnt: 0;
--recursive-crsv: 0.5;
--recursive-simplified-f: "ss03";
@@ -156,17 +170,14 @@ button {
"slnt" var(--recursive-slnt),
"CRSV" var(--recursive-crsv);
- font-feature-settings:
- var(--recursive-simplified-f),
- var(--recursive-simplified-g),
- var(--recursive-simplified-l),
- var(--recursive-simplified-r),
- var(--recursive-no-serif-L-Z);
+ font-feature-settings: var(--recursive-simplified-f),
+ var(--recursive-simplified-g), var(--recursive-simplified-l),
+ var(--recursive-simplified-r), var(--recursive-no-serif-L-Z);
}
h1 {
- --recursive-slnt: 0.0;
- --recursive-casl: 0.0;
+ --recursive-slnt: 0;
+ --recursive-casl: 0;
--recursive-wght: 900;
font-size: 3.5rem;
@@ -174,7 +185,7 @@ h1 {
}
h2 {
- --recursive-slnt: 0.0;
+ --recursive-slnt: 0;
--recursive-casl: 0.5;
--recursive-wght: 800;
@@ -182,7 +193,7 @@ h2 {
}
h3 {
- --recursive-slnt: 0.0;
+ --recursive-slnt: 0;
--recursive-casl: 0.5;
--recursive-wght: 700;
@@ -190,7 +201,7 @@ h3 {
}
h4 {
- --recursive-slnt: 0.0;
+ --recursive-slnt: 0;
--recursive-casl: 0.5;
--recursive-wght: 700;
@@ -201,9 +212,9 @@ pre,
code,
kbd,
th-literate-program {
- --recursive-mono: 1.0;
- --recursive-casl: 0.0;
- --recursive-slnt: 0.0;
+ --recursive-mono: 1;
+ --recursive-casl: 0;
+ --recursive-slnt: 0;
--recursive-wght: 450;
}
@@ -214,10 +225,19 @@ strong {
i,
em {
- --recursive-slnt: -16.0;
+ --recursive-slnt: -16;
font-style: normal;
}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ text-wrap: balance;
+}
+
/* Lay out elements a bit more compactly */
p,
@@ -234,12 +254,6 @@ h6 {
margin: var(--4px) 0;
}
-/* Lay out elements a little less compactly (actually just have some blank space past the end) */
-
-body {
- padding-bottom: 10rem;
-}
-
/* Make code examples a little prettier by giving them visual separation from the rest of the page */
code,
@@ -271,7 +285,6 @@ th-literate-program {
}
@media (prefers-color-scheme: light) {
-
pre,
th-literate-program {
background-color: transparent;
@@ -279,8 +292,8 @@ th-literate-program {
}
}
-pre>code,
-th-literate-program>code {
+pre > code,
+th-literate-program > code {
padding: 0;
background: none;
border-radius: 0;
@@ -314,29 +327,29 @@ img.pic {
/* Image hints for tweaking rendering */
img {
- &[src*='+pixel'] {
+ &[src*="+pixel"] {
image-rendering: pixelated;
border-radius: 0;
}
/* TODO: These could be autogenerated! */
- &[src*='+width72'] {
+ &[src*="+width72"] {
width: 72px;
height: auto;
}
- &[src*='+width160'] {
+ &[src*="+width160"] {
width: 160px;
height: auto;
}
- &[src*='+width640'] {
+ &[src*="+width640"] {
width: 640px;
height: auto;
}
- &[src*='+width752'] {
+ &[src*="+width752"] {
width: 752px;
height: auto;
}
@@ -415,6 +428,12 @@ hr {
width: fit-content;
margin-left: auto;
margin-right: auto;
+ margin-top: 16px;
+ margin-bottom: 16px;
+}
+
+.noscript:empty {
+ display: none;
}
.noscript p {
@@ -434,48 +453,40 @@ hr {
color: var(--link-color-visited-light);
}
-/* also, webkit. */
-#webkit-makes-me-go-insane {
- display: none;
+/* Navigation button */
+
+#nav-logo {
+ width: min-content;
+ height: min-content;
}
-/* Style the navigation bar. */
+#nav-logo .logo {
+ width: 64px;
+ height: 64px;
-nav {
- display: flex;
- align-items: center;
-}
-
-nav .nav-page {
- display: flex;
- flex-grow: 1;
- flex-direction: column;
-}
-
-/* Give the logo on the top some nicer looks */
-nav .logo {
- width: 48px;
- height: 48px;
- padding: 16px;
display: block;
opacity: 100%;
color: var(--text-color);
}
-/* Style page titles */
+/* Navigation header (contains page title & breadcrumbs) */
+
h1.page-title {
- --recursive-wght: 800;
+ --recursive-wght: 850;
margin-top: 0;
margin-bottom: 0;
margin-left: 2.25rem;
- font-size: 1.25rem;
+ font-size: 2.5rem;
& a {
color: var(--text-color);
- text-decoration: none;
+ text-decoration: underline;
+ text-decoration-color: transparent;
+
+ transition: var(--transition-duration) text-decoration-color;
&:hover {
- text-decoration: underline;
+ text-decoration-color: var(--text-color);
}
}
}
@@ -492,8 +503,6 @@ a[data-cast~="new"] {
color: var(--text-color);
opacity: 50%;
- margin-right: var(--16px);
-
&.has-news {
opacity: 100%;
text-decoration: none;
@@ -513,7 +522,7 @@ a[data-cast~="new"] {
span.badge {
--recursive-wght: 800;
--recursive-slnt: 0;
- --recursive-mono: 1.0;
+ --recursive-mono: 1;
--recursive-casl: 0;
border-radius: 999px;
@@ -536,10 +545,13 @@ span.badge {
}
/* Style the footer */
+
footer {
+ padding-left: 1rem;
+ padding-right: 1rem;
+
margin-top: 4rem;
- padding-right: 1.75rem;
- text-align: right;
+ padding-bottom: 4rem;
display: flex;
flex-direction: row;
@@ -559,31 +571,38 @@ footer {
justify-content: end;
opacity: 50%;
- padding-left: 1.75rem;
transition: var(--transition-duration) opacity;
& .icon-history {
display: inline-block;
- width: 24px;
- height: 24px;
- padding-right: 1.75rem;
+ width: 32px;
+ height: 32px;
+ margin-right: 0.5rem;
background-image: var(--icon-history);
background-repeat: no-repeat;
background-position: 50% 50%;
}
-
- &>ul {
+
+ & > ul {
display: flex;
flex-direction: row;
- list-style: none;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+
margin: 0;
padding-left: 0;
+
+ list-style: none;
opacity: 0%;
transition: var(--transition-duration) opacity;
}
- &>ul>li:not(:first-child)::before {
- content: '·';
+ & > ul > li {
+ flex-shrink: 0;
+ }
+
+ & > ul > li:not(:first-child)::before {
+ content: "·";
text-decoration: none;
display: inline-block;
padding-left: 0.75em;
@@ -595,28 +614,32 @@ footer {
color: var(--text-color);
}
- &:hover>ul {
+ &:hover > ul {
opacity: 100%;
}
}
& #footer-icon {
- display: flex;
- padding-right: 1.75rem;
-
- &>a {
- display: flex;
- flex-direction: row;
+ & > a {
+ display: block;
}
- &>a>svg {
- display: flex;
+ & > a > svg {
+ display: block;
color: var(--text-color);
opacity: 40%;
}
}
}
+@media (hover: none) {
+ footer > #version-info {
+ & > ul {
+ opacity: 100%;
+ }
+ }
+}
+
/* Style emojis to be readable */
img[data-cast~="emoji"] {
@@ -655,7 +678,7 @@ th-emoji-tooltip {
th-emoji-tooltip.transitioned-in {
opacity: 100%;
filter: blur(0);
- transform: translateX(-50%) scale(1.0);
+ transform: translateX(-50%) scale(1);
}
th-emoji-tooltip img {
@@ -701,7 +724,10 @@ th-emoji-tooltip p {
opacity: 0%;
}
-#index\:treehouse>details:not([open])>summary .oops-you-seem-to-have-gotten-stuck {
+#index\:treehouse
+ > details:not([open])
+ > summary
+ .oops-you-seem-to-have-gotten-stuck {
display: inline;
animation: 4s hello-there forwards;
}
@@ -759,7 +785,7 @@ th-literate-program[data-mode="output"] {
display: none;
}
- & pre>code {
+ & pre > code {
display: block;
}
@@ -772,7 +798,7 @@ th-literate-program[data-mode="output"] {
}
&::after {
- content: 'Error';
+ content: "Error";
padding: var(--8px);
@@ -796,7 +822,7 @@ th-literate-program[data-mode="output"] {
}
&::after {
- content: 'Console';
+ content: "Console";
padding: var(--8px);
@@ -840,7 +866,7 @@ th-literate-program[data-mode="output"] {
.th-syntax-highlighting span {
&.comment {
- --recursive-slnt: -16.0;
+ --recursive-slnt: -16;
color: var(--syntax-comment);
}
diff --git a/static/css/page/index.css b/static/css/page/index.css
index ac77e5a..632d329 100644
--- a/static/css/page/index.css
+++ b/static/css/page/index.css
@@ -1,42 +1,75 @@
-.index\:hobby-corners {
- &>li {
- margin: var(--8px) 0px;
+h1.page-title {
+ --recursive-wght: 900;
+ font-size: 3.5rem;
+}
- &>details {
- border-top: var(--4px) solid var(--section-color);
+@media (hover: none) {
+ h1.page-title a {
+ text-decoration: none;
+ }
+}
+
+@media (max-width: 450px) {
+ body {
+ --top-min-spacing: 40px;
+ }
+
+ nav#nav-logo {
+ display: block;
+
+ & .logo {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 75vw;
+ height: 75vw;
+ transform: translate(-25%, -20%);
+ pointer-events: none;
+ opacity: 15%;
}
+ }
+}
- &>details>summary {
- position: relative;
- overflow: clip;
- box-sizing: border-box;
+#index\:treehouse {
+ & > details > summary {
+ padding-left: 1rem;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
+ & > th-bp {
+ display: none;
+ }
+ }
+}
- &>th-bb>.icon {
- opacity: 100%;
- }
+.index\:hobby-corners {
+ /* Optical text offset to make the icons look less misaligned.
+ This is adjusted per each hobby corner to fit the icons.
+
+ Although the icons may be aligned in terms of bounds, optically they do not look
+ very good next to the text, having awkward blank space to the right.
+
+ This aims to improve the readability of that a bit without being too noticable. */
+ --section-text-offset: 0em;
- & .background-icon {
- position: absolute;
- right: calc(var(--button-bar-icon-size) * 2);
- bottom: 0;
- color: var(--text-color);
- opacity: 40%;
+ & > li {
+ & > details > summary {
+ text-decoration: 4px underline var(--section-color);
+ text-underline-offset: 4px;
- width: 6.85rem;
- height: auto;
+ & > th-bc .hobby-icon {
+ width: auto;
+ height: 48px;
- pointer-events: none;
+ margin-right: calc(0.2em + var(--section-text-offset));
+
+ vertical-align: -38%;
}
}
}
-
}
#index\:programming {
--section-color: var(--liquidex-brand-red);
+ --section-text-offset: -0.1em;
}
#index\:design {
@@ -45,8 +78,10 @@
#index\:music {
--section-color: var(--liquidex-brand-green);
+ --section-text-offset: -0.05em;
}
#index\:games {
--section-color: var(--liquidex-brand-blue);
+ --section-text-offset: 0.05em;
}
diff --git a/static/css/tree.css b/static/css/tree.css
index 15a4dba..898d1c7 100644
--- a/static/css/tree.css
+++ b/static/css/tree.css
@@ -25,7 +25,7 @@
}
.breadcrumb::before {
- content: '';
+ content: "";
display: inline-block;
background-image: var(--icon-breadcrumb);
@@ -40,8 +40,9 @@
}
.breadcrumb a {
- --recursive-mono: 1.0;
+ --recursive-mono: 1;
--recursive-wght: 500;
+ --recursive-casl: 0;
color: var(--text-color);
text-decoration: none;
@@ -51,6 +52,29 @@
text-decoration: underline;
}
+.breadcrumbs > .root-breadcrumb {
+ display: none; /* only when main logo is hidden */
+ margin-right: -8px;
+
+ & a,
+ & svg {
+ display: block;
+ }
+
+ & .logo {
+ width: 48px;
+ height: 48px;
+ padding: 8px;
+ color: var(--text-color);
+ }
+}
+
+@media (max-width: 450px) {
+ .breadcrumbs > .root-breadcrumb {
+ display: block;
+ }
+}
+
/*** Tree ***/
.tree {
@@ -72,7 +96,11 @@
/* Use an indent level appropriate for the viewport. */
.tree ul {
- --tree-responsive-indent-width: clamp(var(--8px), 2vw, var(--tree-indent-width));
+ --tree-responsive-indent-width: clamp(
+ var(--8px),
+ 2vw,
+ var(--tree-indent-width)
+ );
/* Draw indent guides. */
padding-left: calc(var(--tree-responsive-indent-width) / 2);
@@ -82,21 +110,19 @@
transition: border-left-color var(--transition-duration);
}
-.tree details:has(.branch-container:hover)>ul {
+.tree details:has(.branch-container:hover) > ul {
border-left-color: var(--tree-indent-guide-highlighted);
}
-
/* Top level should not have an indent or a border. */
-.tree>ul {
+.tree > ul {
padding-left: 0;
border-left: none;
}
.tree details {
-
/* Disable the rightwards chevron in elements */
- &>summary {
+ & > summary {
list-style: none;
cursor: pointer;
@@ -112,13 +138,13 @@
list-style: none;
/* Stretch branch content to the full width of the page */
- &>div,
- &>details {
+ & > div,
+ & > details {
width: 100%;
}
/* Add an underline for leaf branches */
- &>div {
+ & > div {
box-sizing: border-box;
margin-bottom: calc(- var(--1px));
@@ -130,18 +156,17 @@
}
}
- &>div,
- &>details>summary {
+ & > div,
+ & > details > summary {
/* Child elements are laid out horizontally in a flexbox. */
display: flex;
align-items: center;
}
-
}
/* is used for the visual content of branches with children. It's the large horizontal bar
and notably *excludes* children. */
-.tree details>summary {
+.tree details > summary {
/* Slightly round for elegance */
border-radius: var(--8px);
@@ -156,13 +181,12 @@
/* For media without hover functionality, draw a bottom border everywhere as a visual anchor for where to tap */
@media (hover: none) {
-
- .tree li>div:first-child,
- .tree li>details>summary:first-child {
+ .tree li > div:first-child,
+ .tree li > details > summary:first-child {
border-bottom: var(--1px) solid var(--border-1);
}
- .tree details>summary {
+ .tree details > summary {
/* In that case summaries shall not be rounded. */
border-radius: 0;
}
@@ -185,11 +209,11 @@ th-bp {
}
/* Change image of th-bp if it has children and/or is collapsible */
-.tree details[open]>summary>th-bp {
+.tree details[open] > summary > th-bp {
background-image: var(--icon-collapse);
}
-.tree details:not([open])>summary>th-bp {
+.tree details:not([open]) > summary > th-bp {
background-image: var(--icon-expand);
}
@@ -199,8 +223,9 @@ th-bc {
padding-top: var(--6px);
padding-bottom: var(--6px);
- /* Grow to fill the entire available space. This pushes out th-bb to the far right. */
- flex-grow: 1;
+ /* Lines that are too long get very hard to read. */
+ width: 100%;
+ max-width: 72em;
/* Bit of a hack to make
s in have scrollbars proper. */
&:has(pre, th-literate-program) {
@@ -213,9 +238,8 @@ th-bc {
/* NOTE: Linked branches have a slightly different structure (extra