Update source.org

This commit is contained in:
2025-11-20 16:32:06 +01:00
parent b0910578ce
commit cec99cbdac
70 changed files with 5295 additions and 3335 deletions

View File

@@ -1,3 +0,0 @@
.orgjq-contracted > div {
display: none;
}

View File

@@ -1,230 +0,0 @@
.poetry {
padding-top: 4rem;
padding-bottom: 4rem;
text-align: center;
}
.figure-number {
display: none;
}
.center, div.center {
text-align: center;
margin-left: auto;
margin-right: auto;
}
.center figure,
.center figcaption,
div.center figure,
div.center figcaption {
text-align: center;
margin-left: auto;
margin-right: auto;
}
.multi-img {
display: flex;
justify-content: center;
text-align: center;
margin: 20px;
gap: 20px;
}
.multi-img figure { margin: 0px; }
.caption {
padding-top: 0.5rem;
font-style: italic;
}
.outline-3, .outline-4, .outline-5 {
padding-left: 0.6rem;
border-radius: 0.2em;
margin: 0.7rem;
#box-shadow: 1px 1px 1px var(--grey2);
#border: 1px solid var(--grey4);
}
.outline-text-3, .outline-text-4, .outline-text-5 {
margin: 0.3rem 1rem 0.5rem 0.5rem;
}
/*
.outline-3 {
border-left: 1px inset var(--red5);
}
.outline-4 {
border-left: 1px inset var(--purple3);
}
.outline-5 {
border-left: 1px inset var(--blue4);
}
*/
/*
.outline-5::after {
content: "⇜";
display: block;
text-align: right;
margin-top: -2.0rem;
}
*/
.orgjq-expanded p {
margin-top: 0;
}
/*
.outline-3.orgjq-contracted h3::before {
content: "🡒 ";
}
.outline-4.orgjq-contracted h4::before {
content: "⤳ ";
}
.outline-5 h5::before {
content: "⇝ ";
}
*/
#content h2, #content h3, #content h4, #content h5 {
margin-bottom: 1rem;
margin-top: 0.5rem;
margin-left: 0.5rem;
}
#content h3 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
#content h4 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
#content h5 {
padding-top: 0.3rem;
padding-bottom: 0.3rem;
}
.orgjq-contracted h2, .orgjq-contracted h3, .orgjq-contracted h4, orgjq-contracted h5 {
padding-top: 0.3rem !important;
padding-bottom: 0.3rem !important;
}
#content h2 {
margin-top: 1rem;
}
.orgjq-expanded p {
padding-bottom: 1.5rem;
margin-bottom: 0;
}
#content, #footer {
box-shadow: 7px 7px 7px var(--grey1);
}
h2 {
line-height: 1.5rem;
text-align: center;
}
h3, h4, h5 {
text-align: center;
}
#table-of-contents {
display: none;
}
.done.YES, .todo.NO, .done.EXCELLENT, .done.FREED {
display: none;
}
h2:has(.done.YES), h3:has(.done.YES), h4:has(.done.YES), h5:has(.done.YES), .grid.YES {
color: var(--green3);
}
h2:has(.todo.NO), h3:has(.todo.NO), h4:has(.todo.NO), h5:has(.todo.NO), .grid.NO {
color: var(--red3);
}
h2:has(.done.EXCELLENT), h3:has(.done.EXCELLENT), h4:has(.done.EXCELLENT), h5:has(.done.EXCELLENT), .grid.EXCELLENT {
color: var(--blue3);
}
h2:has(.done.FREED), h3:has(.done.FREED), h4:has(.done.FREED), h5:has(.done.FREED), .grid.FREED {
color: var(--purpl3);
}
.tag { display: none; }
.habit-cell {
text-align: center;
vertical-align: middle;
width: 20px;
height: 10px;
cursor: pointer;
user-select: none;
}
.habit-cell.habit-brightness-1 { color: var(--grey5); outline-color: var(--grey5) !important; }
.habit-cell.habit-brightness-2 { color: var(--grey5); outline-color: var(--grey5) !important; }
.habit-cell.habit-brightness-3 { color: var(--grey5); outline-color: var(--grey5) !important; }
.habit-cell.habit-brightness-4 { color: var(--grey2); outline-color: var(--grey5) !important; }
.habit-cell.habit-brightness-5 { color: var(--grey3); outline-color: var(--grey5) !important; }
.habit-cell:not([data-body=""]) {
outline: dotted 2px;
outline-offset: -2px;
}
.habitgrid-selected {
outline: solid 2px var(--purple5) !important;
outline-offset: -2px;
}
.section-number-1, .section-number-2, .section-number-3, .section-number-4 { display: none; }
div:has(h3 .tag .journal) {
border: none;
box-shadow: none;
}
div:has(> h3 .tag .journal)::after {
content: '~ ❦ ~';
display: block;
text-align: center;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
color: var(--grey4);
font-size: 2rem;
}
h3:has(.tag .journal) {
text-align: left;
}
h4:has(.tag .jentry) {
display: none;
}
h4:has(.tag .habits) {
text-align: left;
}
.orgjq-expanded > h4:has(.tag .habits)::before {
content: '⮟ ';
}
.orgjq-contracted > :first-child::before {
content: '⮞ ';
}

View File

@@ -1,281 +0,0 @@
// Adapted from:
//
// esquemadorg.js
//
// m3.2010 Daniel Clemente Laboreo. http://www.danielclemente.com/
//
// Initially based on org-info-jq from Sebastian Rose (2009): http://github.com/SebastianRose/org-info-js/blob/master/org-info-jq.js
//
// Released under the GNU General Public License version 3
// see: http://www.gnu.org/licenses/
//
var HOW_TO_HIDE = 'hide';
function isHideable(div_obj) {
try {
// Ignore for TOC since it is handled differently
if (div_obj.id == "text-table-of-contents") return false;
if (div_obj.id == "table-of-contents") return false;
// No point in hiding top level
if (div_obj.classList.contains("outline-2")) return false;
if (div_obj.classList.contains("outline-text-2")) return false;
} catch (e) {
console.log(div_obj)
console.log(e)
}
return true
}
function scrollSmoothlyToObj(obj,id) {
// This line comes from: *** Anchor Slider by Cedric Dugas *** Http://www.position-absolute.com *** Thanks!
$("html:not(:animated),body:not(:animated)").animate({ scrollTop: obj.offset().top}, 1100, function() {
window.location.hash = id;
});
}
function focusSection(id_anchor){
// anchor: the id (text, without '#') of the h2/h3/h4/h5/h6/h7 which is to be made visible (together with its parents). The page will also scroll to focus that section
var anchor1='#'+id_anchor;
var anchor2='*[id=' + id_anchor + ']'; // this is equivalent to $("#id"), which strangely seems not to work
var obj_anchor=$(anchor2);
// Remove any other highlighted section which was the target of a previous link.
// It does nothing if it's the first click
$("div.orgjq-targeted").removeClass("orgjq-targeted");
// Now highlight the target section and its parents. You may Use .css("background","orange") to test
obj_anchor.parents("div.orgjq-contracted").addClass("orgjq-targeted");
// Expand its parents so that the target section is connected to the root of the tree
obj_anchor.parents("div.orgjq-contracted").each(
function() {
$(this).removeClass("orgjq-contracted").addClass("orgjq-expanded");
$(this).children("div").show();
}
);
// move the browser focus to that section
scrollSmoothlyToObj(obj_anchor,anchor1);
}
function hideForOrg_whenclicked(div_obj) {
if (!isHideable(div_obj[0])) return;
div_obj.parent().removeClass("orgjq-expanded").addClass("orgjq-contracted");
if(HOW_TO_HIDE=='hide'){
//div_obj.nextAll().hide("fast"); // "normal" es más lento
//div_obj.hide();
} else if(HOW_TO_HIDE=='shrink'){
//div_obj.css("zoom","0.25");
// div_obj.nextAll().css("zoom","0.25");
div_obj.css("font-size","50%");
div_obj.nextAll().css("font-size","50%");
} else if(HOW_TO_HIDE=='opacity'){
div_obj.css("opacity","0.5");
div_obj.nextAll().css("opacity","0.5");
} else if(HOW_TO_HIDE=='scrollbar'){
div_obj.parent().css({"height":"100px","overflow-y":"auto","opacity":"0.3"});
} else {
console.error("Not impl.");
}
}
function showForOrg_whenclicked(div_obj) {
div_obj.parent().removeClass("orgjq-contracted").addClass("orgjq-expanded");
if(HOW_TO_HIDE=='hide'){
div_obj.parents().show("normal");
div_obj.nextAll().show("normal");div_obj.show();
} else if(HOW_TO_HIDE=='shrink'){
//div_obj.css("zoom","1");
// div_obj.nextAll().css("zoom","1");
div_obj.css("font-size","100%");
div_obj.nextAll().css("font-size","100%");
} else if(HOW_TO_HIDE=='opacity'){
div_obj.css("opacity","1");
div_obj.nextAll().css("opacity","1");
} else if(HOW_TO_HIDE=='scrollbar'){
div_obj.parents().css({"height":"auto","min-height":"100px","overflow-y":"inherit","opacity":"1"});
} else {
console.error("Not impl.");
}
}
function toggleForOrg_whenclicked(div_obj) {
if(div_obj.parent().hasClass("orgjq-expanded"))
hideForOrg_whenclicked(div_obj);
else
showForOrg_whenclicked(div_obj);
}
// faster methods than calling the individual methods in a loop
function close_all_sections() {
//$('.orgjq-expanded').removeClass("orgjq-expanded").addClass("orgjq-contracted");
for(var i=2;i<=7;++i) {
let divs = $(".outline-text-"+i)
divs.each(idx => {
if (isHideable(divs[idx])) {
$("#" + divs[idx].id).parent().removeClass("orgjs-expanded").addClass("orgjq-contracted");
$("#" + divs[idx].id).hide()
}
})
}
// inside the h2 headers, all (now unseen) headers are also contracted
for(var i=2;i<=7;++i) {
$("h"+i).each(
function(){
if (isHideable($(this).parent()[0])) {
$(this).parent().removeClass("orgjq-expanded").addClass("orgjq-contracted");
$(this).next("div").nextAll().hide();$(this).next("div").hide();
}
});
}
}
function open_all_sections() {
$('div#content .orgjq-contracted').not("#table-of-contents").removeClass("orgjq-contracted").addClass("orgjq-expanded");
$('div#content').find(":hidden").not("#table-of-contents div").show();
}
function disable_global_outlining() {
// not really used anymore
// affect only the main (first level) sections
var org= $("div#table-of-contents, div#content>div[id^='outline-container-']");
//test: org.css({border: "2px solid red"});
// show everything (all sections, …)
org.find(":hidden").show();
// remove classes and thus colors
$(".orgjq-contracted").removeClass("orgjq-contracted");
$(".orgjq-expanded").removeClass("orgjq-expanded");
$(".orgjq-targeted").removeClass("orgjq-targeted");
// headers are not clickable
org.find("h1,h2,h3,h4,h5,h6,h7").css({cursor: "default"}).unbind("click");
// links to sections no longer highlight the target
$("a[href^='#']").unbind('click');
// hide expand link
$("div#outline-container-1 >h2 >a.expandAll").remove();
// information
alert("He cambiado al estilo tradicional: todo seguido. Si quieres volver a usar el esquemado con cabeceras clicables, recarga la página");
}
function enable_global_outlining() {
// Called once e.g. the first time the page is loaded
// handle the click event for each header
for(var i=2;i<=7;++i) {
$("h"+i).each(
function(){
$(this).css({cursor: "pointer"});
$(this).bind('click', function(){ toggleForOrg_whenclicked( $(this).parent().children("div").eq(0) ); });
});
}
/*
// add link to deactive outlining. I wanted 2 links, „expand all“ and „contract all“, but the second one isn't of much use (and reloading the page does the same)
// otros posibles nombres: "(expandir completamente)"
var expAll_link = $( document.createElement('a') ).text("(ver todo seguido, sin esquemado)").addClass("expandAll").click(disable_global_outlining);
$( $("div.outline-2")[0] ).find(">h2") .append(expAll_link);
*/
/*
// start with contracted TOC and headers ← m5.2017: disabled because it has a huge penalty towards Google (hidden content won't be indexed)
if(HOW_TO_HIDE=='hide'){
$("#text-table-of-contents").hide();
} else {
console.error("Not impl.");
}
for(var i=2;i<=7;++i) {
$(".outline-text-"+i).parent().addClass("orgjq-contracted");
if(HOW_TO_HIDE=='hide'){
///// $(".outline-text-"+i).hide();
$(".outline-text-"+i).hide();
} else if(HOW_TO_HIDE=='scrollbar'){
//$(".outline-text-"+i).css({"height":"100px","overflow-y":"auto","opacity":"0.3"});
// $(".outline-text-"+i).parent().css({"height":"100px","overflow-y":"auto","opacity":"0.3"});
// console.error("nada");
} else {
console.error("Not impl.");
}
}
// inside the h2 headers, all (now unseen) headers are also contracted
for(var i=2;i<=7;++i) {
$("h"+i).each(
function(){
$(this).parent().removeClass("orgjq-expanded").addClass("orgjq-contracted");
if(HOW_TO_HIDE=='hide'){
$(this).next("div").nextAll().hide();$(this).next("div").hide();
} else if(HOW_TO_HIDE=='scrollbar'){
// $(this).next("div").nextAll().css({"height":"100px","overflow-y":"auto","opacity":"0.3"});
$(this).next("div").nextAll().css({"height":"100px","overflow-y":"auto","opacity":"0.3"});
// console.error("nada2.");
} else {
console.error("Not impl.");
}
});
}
*/
// alternatively: mark everything as open
for(var i=2;i<=7;++i) {
$("h"+i).each(
function(){
$(this).parent().removeClass("orgjq-contracted").addClass("orgjq-expanded");
});
}
// except TOC
$("div#table-of-contents").removeClass("orgjq-expanded").addClass("orgjq-contracted");
// Hide default-hidden categories
$(".orgjq-contract-default").each(
function(){
hideForOrg_whenclicked($(this))
}
);
// If provided #fragment in URL, we must locate and open the corresponding header and its parents
var url = document.location.toString();
if (url.match('#')) { // the URL contains an anchor
var id_anchor = url.split('#')[1];
focusSection(id_anchor);
}
// internal links to anchors, e.g. <a href="#sec2">, should also expand the destination section before scrolling there
//Test: $("a[href^='#']").css("border","2px dotted red");
$("a[href^='#']").each(function(){
var caller=this;
$(caller).click(function (event) {
var href=$(caller).attr("href");
var id_href=href.substr(1);
focusSection(id_href);
return false;
});
});
$(".autocollapse").each(function(){
hideForOrg_whenclicked($(this).parent().parent());
console.log("DSFDFS")
})
// the page is now ready to be used
}
// Code starts here
$(document).ready(enable_global_outlining);

View File

@@ -1,11 +0,0 @@
.footnote-tooltip {
position: 'absolute';
z-index: 1000;
background-color: var(--background-tooltip);
border: 1px solid var(--accent1);
border-radius: = 4px;
padding: 8px 12px;
max-width: 300px;
font-size: calc(var(--font-size) * 0.9);
box-shadow: 1px 1px 1px var(--grey2);
}

View File

@@ -1,81 +0,0 @@
document.addEventListener('DOMContentLoaded', function() {
console.log("🦶🦶🦶🦶🦶 FOOTNOTES LOADED 🦶🦶🦶🦶🦶🦶")
const footnoteRefs = document.querySelectorAll('.footref')
footnoteRefs.forEach(ref => {
const footnoteId = ref.href.split('#')[1]
ref.setAttribute('data-footnote-id', footnoteId)
ref.href = 'javascript:void(0)';
ref.addEventListener('mouseenter', function() {
// Find footnote element
const footnoteId = this.getAttribute('data-footnote-id')
const footnoteElement = document.getElementById(footnoteId).parentElement.nextElementSibling.children[0]
if (footnoteElement) {
// Create tooltip container
const tooltip = document.createElement('div');
tooltip.className = 'footnote-tooltip'
tooltip.innerHTML = footnoteElement.innerHTML
// Position tooltip
const rect = this.getBoundingClientRect();
tooltip.style.position = 'absolute'
tooltip.style.top = (rect.bottom + window.scrollY + 5) + 'px'
tooltip.style.left = rect.left + 'px'
// Add to page
document.body.appendChild(tooltip)
// Store reference for cleanup
this._tooltip = tooltip
}
});
ref.addEventListener('mouseleave', function() {
// Remove tooltip
if (this._tooltip) {
this._tooltip.remove()
this._tooltip = null
}
});
});
// Hide footnotes section
document.querySelector("#footnotes").style.display='none'
});
function formatDayOfYear(dayOfYear, year) {
const date = new Date(year, 0, dayOfYear);
return date.toLocaleDateString('en-GB', {
day: 'numeric',
month: 'short',
year: 'numeric'
});
}
let selectedCell = null;
function showHabitPopup(cell) {
var bodyHtml = cell.getAttribute('data-body');
var doy = cell.getAttribute('data-doy');
var activity = cell.getAttribute('data-activity');
var status = cell.getAttribute('data-status');
activity = activity.replace(/^dailies-/, '').replace(/^./, c => c.toUpperCase())
if (!bodyHtml) bodyHtml = "<span class='center'><i>This section intentionally left blank.</i></span>"
bodyHtml = `<h3><span class="grid ${status}">${activity}</span> — ${formatDayOfYear(parseInt(doy), 2025)}</h3> ${bodyHtml}`
document.getElementById('habitPopupContent').innerHTML = bodyHtml;
if (selectedCell) {
selectedCell.classList.remove('habitgrid-selected');
}
cell.classList.add('habitgrid-selected');
selectedCell = cell;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 KiB

File diff suppressed because one or more lines are too long

View File

@@ -1,280 +0,0 @@
:root {
--green1: #123218;
--green2: #254f1b;
--green3: #356c22;
--green4: #5e8e40;
--green5: #85aa5f;
--blue1: #1b2459;
--blue2: #153a79;
--blue3: #2f5394;
--blue4: #417eaf;
--blue5: #69a8c6;
--purple1: #2e1e58;
--purple2: #493281;
--purple3: #6a45a6;
--purple4: #855aa3;
--purple5: #9b77b5;
--red1: #4b1313;
--red2: #682017;
--red3: #84301c;
--red4: #9c4830;
--red5: #c46849;
--grey1: #202124;
--grey2: #33333b;
--grey3: #605b66;
--grey4: #a79fa7;
--grey5: #c5bcbc;
--site-width: 1000px;
--vert-content-margin: 0.3rem;
--accent1: var(--purple4);
--link: var(--blue3);
--black: var(--grey1);
--grey: var(--grey3);
--background: var(--grey5);
--background-tooltip: var(--grey5);
--font-size: 1.2rem;
--line-height: 1.6rem;
--font-family: "Source Serif Pro";
--scale: 2;
}
/*
@media (min-height: 1081px) {
:root {
--scale: 2;
}
}
@media (min-height: 2161px) {
:root {
--scale: 3;
}
}
@media (min-height: 3241px) {
:root {
--scale: 4;
}
}
*/
body::before,
body::after {
content: '';
position: fixed;
top: 0;
height: 100vh;
width: 50%;
background-image: url('/static/images/background.png');
background-repeat: no-repeat;
z-index: -1;
image-rendering: pixelated; /* For Chrome/Safari */
image-rendering: -moz-crisp-edges; /* For Firefox */
image-rendering: crisp-edges; /* Fallback */
background-size: calc(960px * var(--scale)) calc(1080px * var(--scale));
}
body::before {
left: 0;
background-position: top right;
}
body::after {
right: 0;
background-position: top right;
/* Flip the right side horizontally */
transform: scaleX(-1);
}
body {
// text-align: justify;
font-family: var(--font-family);
font-size: var(--font-size);
line-height: var(--line-height);
color: var(--black);
background-color: var(--background);
color: var(--grey1);
word-spacing: 0.25ch;
font-weight: 400;
}
#content, #header, #footer {
min-width: 500px;
max-width: min(var(--site-width), 90vw);
margin: 0 auto;
padding: 5px 25px;
background-color: var(--background);
border: 2px double var(--grey1);
margin-bottom: 1.2rem;
}
#header {
display: flex;
}
#looking-for-work {
background-color: var(--red2);
color: var(--grey5);
padding: 5px 25px;
margin-left: auto;
margin-top: -0.32rem;
margin-bottom: -0.32rem;
margin-right: -1.55rem;
border: 2px double var(--purple5);
}
#looking-for-work a, #looking-for-work a:visited {
color: var(--blue5) !important;
}
#footer {
padding-top: 1rem;
padding-bottom: 1rem;
}
code {
font-size: calc(var(--font-size) * 0.9);
}
hr {
border: 0;
border-top: 2px dotted var(--black);
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
}
.navbar-link {
margin-right: 5px;
margin-left: 5px;
}
a, a:visited {
color: var(--link);
text-decoration: none;
}
#header a, #header a:visited{
color: var(--purple2);
}
#content h2, #content h3, #content h4, #content h5 {
margin-bottom: 0.2rem;
margin-top: 0.5rem;
}
#content h2 {
margin-top: 1rem;
}
#header hr {
margin-bottom: var(--vert-content-margin);
}
#footer hr {
margin-top: var(--vert-content-margin);
}
#publish-date, #modified-date {
font-style: italic;
}
.src, .example {
font-family: "monospace";
font-size: 1rem;
}
/* TOC */
#table-of-contents {
z-index: 1;
margin-top: 105px;
margin-right: 5%;
font-size: calc(var(--font-size) * 0.8);
position: fixed;
right: 0em;
top: 0em;
background: var(--background-toc);
text-align: right;
min-height: 3rem;
box-shadow: 0 0 0.5em var(--shadow-toc);
-webkit-box-shadow: 0 0 0.5em var(--shadow-toc);
-moz-box-shadow: 0 0 0.5em var(--shadow-toc);
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
/* ensure doesn't flow off the screen when expanded */
max-height: 80%;
overflow: auto;
}
#table-of-contents h2 {
font-size: 13pt;
max-width: 9em;
border: 0;
font-weight: normal;
margin-top: 0.75em;
margin-bottom: 0.75em;
padding-left: 0.5em;
padding-right: 0.5em;
padding-top: 0.05em;
padding-bottom: 0.05em; }
#table-of-contents #text-table-of-contents {
display: none;
text-align: left; }
#table-of-contents:hover #text-table-of-contents {
display: block;
padding: 0.5em;
margin-top: -1.5em;
padding-right: 20px;
}
pre {background-color:var(--grey1); color:var(--grey5);}
pre span.org-builtin {color:var(--blue4);font-weight:bold;}
pre span.org-string {color:var(--green4);}
pre span.org-keyword {color:var(--blue4);}
pre span.org-variable-name {color:var(--purple5);}
pre span.org-function-name {color:var(--blue5);}
pre span.org-type {color:var(--purple3);}
pre span.org-preprocessor {color:var(--grey5);font-weight:bold;}
pre span.org-constant {color:var(--red2);}
pre span.org-comment-delimiter {color:var(--grey5);}
pre span.org-comment {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-1 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-2 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-3 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-4 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-5 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-6 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-7 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-8 {color:var(--grey5);font-style:italic}
pre span.org-outshine-level-9 {color:var(--grey5);font-style:italic}
pre span.org-rainbow-delimiters-depth-1 {color:var(--grey4);}
pre span.org-rainbow-delimiters-depth-2 {color:var(--blue1);}
pre span.org-rainbow-delimiters-depth-3 {color:var(--green1);}
pre span.org-rainbow-delimiters-depth-4 {color:var(--red1);}
pre span.org-rainbow-delimiters-depth-5 {color:var(--purple1);}
pre span.org-rainbow-delimiters-depth-6 {color:var(--blue4);}
pre span.org-rainbow-delimiters-depth-7 {color:var(--green3);}
pre span.org-rainbow-delimiters-depth-8 {color:var(--red3);}
pre span.org-rainbow-delimiters-depth-9 {color:var(--purple3);}
pre span.org-sh-quoted-exec {color:var(--purple2);}
.TODO { color: var(--red3); }
.DONE { color: var(--green3); }