aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2023-01-26 11:36:44 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2023-01-26 11:36:44 +0100
commitd95fc5ca9e6a9c28894514b77e77b6b0eb58fbe9 (patch)
tree7a4280e072382c09ac76b9da4e7b82f4170699db
parentc67c1800f22e66b7f11c904ff8fdee6947f91c07 (diff)
downloadmitjafelicijan.com-d95fc5ca9e6a9c28894514b77e77b6b0eb58fbe9.tar.gz
A bunch of theme changes and removal of Cactus comments
-rwxr-xr-xconfig.toml2
-rwxr-xr-xcontent/posts/2015-11-10-software-development-pitfalls.md11
-rwxr-xr-xcontent/posts/2017-08-11-simple-iot-application.md11
-rwxr-xr-xcontent/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md18
-rwxr-xr-xcontent/posts/2020-09-06-esp-and-micropython.md12
-rwxr-xr-xcontent/posts/2021-01-25-goaccess.md8
-rwxr-xr-xcontent/posts/2021-08-01-linux-cheatsheet.md39
-rwxr-xr-xcontent/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md11
-rwxr-xr-xcontent/posts/2021-12-25-running-golang-application-as-pid1.md13
-rwxr-xr-xcontent/posts/2021-12-30-wap-mobile-web-before-the-web.md8
-rwxr-xr-xcontent/posts/2022-07-05-what-would-dna-sound-if-synthesized.md16
-rwxr-xr-xcontent/posts/2022-10-06-state-of-web-technologies-in-year-2022.md10
-rwxr-xr-xcontent/posts/2022-10-11-handling-massive-worlds-in-godot.md5
-rw-r--r--content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md2
-rw-r--r--static/general/index.css2
-rwxr-xr-xthemes/bare/openring/openring.html7
-rwxr-xr-xthemes/simple/layouts/_default/list.html5
-rwxr-xr-xthemes/simple/layouts/_default/single.html13
-rwxr-xr-xthemes/simple/layouts/partials/comments.html30
-rwxr-xr-xthemes/simple/layouts/partials/footer.html22
-rwxr-xr-xthemes/simple/layouts/partials/navigation.html12
-rw-r--r--themes/simple/layouts/partials/read-more.html2
-rw-r--r--themes/simple/layouts/partials/side-projects.html35
-rwxr-xr-xthemes/simple/openring/openring.html5
-rw-r--r--themes/simple/static/css/tailwind.css140
25 files changed, 103 insertions, 336 deletions
diff --git a/config.toml b/config.toml
index 74c851d..93fb8a0 100755
--- a/config.toml
+++ b/config.toml
@@ -30,7 +30,7 @@ enableRobotsTXT = true
30# Additional markup settings. 30# Additional markup settings.
31[markup] 31[markup]
32 [markup.tableOfContents] 32 [markup.tableOfContents]
33 endLevel = 3 33 endLevel = 5
34 ordered = false 34 ordered = false
35 startLevel = 2 35 startLevel = 2
36 36
diff --git a/content/posts/2015-11-10-software-development-pitfalls.md b/content/posts/2015-11-10-software-development-pitfalls.md
index c5d243a..ec7fcb8 100755
--- a/content/posts/2015-11-10-software-development-pitfalls.md
+++ b/content/posts/2015-11-10-software-development-pitfalls.md
@@ -5,17 +5,6 @@ date: 2015-11-10
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Ping emails](#ping-emails)
112. [Everybody is a project manager](#everybody-is-a-project-manager)
123. [We are never wrong](#we-are-never-wrong)
134. [Micromanaging](#micromanaging)
145. [Human contact — no need for it!](#human-contact--no-need-for-it)
156. [MVP is killing innovation](#mvp-is-killing-innovation)
167. [Pressure wasteland](#pressure-wasteland)
178. [Conclusion](#conclusion)
18
19Over the years I had the privilege to work on some very excited projects both in software development field and also in electronics field and every experience taught me some invaluable lessons about how NOT TO approach development. And through this post I will try to point out some absurd, outdated techniques I find the most annoying and damaging during a development cycle. There will be swearing because this topic really gets on my nerves and I never coherently tried to explain them in writing. So if I get heated up, please bear with me. 8Over the years I had the privilege to work on some very excited projects both in software development field and also in electronics field and every experience taught me some invaluable lessons about how NOT TO approach development. And through this post I will try to point out some absurd, outdated techniques I find the most annoying and damaging during a development cycle. There will be swearing because this topic really gets on my nerves and I never coherently tried to explain them in writing. So if I get heated up, please bear with me.
20 9
21As new methods of project management are emerging, underlying processes still stay old and outdated. This is mainly because we as people are unable to completely shift away from these approaches. 10As new methods of project management are emerging, underlying processes still stay old and outdated. This is mainly because we as people are unable to completely shift away from these approaches.
diff --git a/content/posts/2017-08-11-simple-iot-application.md b/content/posts/2017-08-11-simple-iot-application.md
index 1107228..b34fe6b 100755
--- a/content/posts/2017-08-11-simple-iot-application.md
+++ b/content/posts/2017-08-11-simple-iot-application.md
@@ -5,17 +5,6 @@ date: 2017-08-11
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Initial thoughts](#initial-thoughts)
112. [Simple Python API](#simple-python-api)
12 1. [Basic web application](#basic-web-application)
13 2. [Web application security](#web-application-security)
14 3. [Simple API for writing data-points](#simple-api-for-writing-data-points)
153. [Sending data to API with Arduino MKR1000](#sending-data-to-api-with-arduino-mkr1000)
164. [Data visualization](#data-visualization)
175. [Conclusion](#conclusion)
18
19## Initial thoughts 8## Initial thoughts
20 9
21I have been developing these kind of application for the better part of my last 5 years and people keep asking me how to approach developing such application and I will give a try explaining it here. 10I have been developing these kind of application for the better part of my last 5 years and people keep asking me how to approach developing such application and I will give a try explaining it here.
diff --git a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
index 8fcf5e7..577e241 100755
--- a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
+++ b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
@@ -5,24 +5,6 @@ date: 2019-01-03
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Initial thoughts](#initial-thoughts)
112. [Glossary](#glossary)
123. [Data encoding](#data-encoding)
134. [Quick history of DNA](#quick-history-of-dna)
145. [What is DNA?](#what-is-dna)
156. [Encode binary data into DNA sequence](#encode-binary-data-into-dna-sequence)
16 1. [Basic Encoding](#basic-encoding)
17 2. [FASTA file format](#fasta-file-format)
18 3. [PNG encoded DNA sequence](#png-encoded-dna-sequence)
197. [Encoding text file in practice](#encoding-text-file-in-practice)
208. [Toolkit for encoding data](#toolkit-for-encoding-data)
21 1. [dnae-encode](#dnae-encode)
22 2. [dnae-png](#dnae-png)
239. [Benchmarks](#benchmarks)
2410. [References](#references)
25
26## Initial thoughts 8## Initial thoughts
27 9
28Imagine a world where you could go outside and take a leaf from a tree and put it through your personal DNA sequencer and get data like music, videos or computer programs from it. Well, this is all possible now. It was not done on a large scale because it is quite expensive to create DNA strands but it's possible. 10Imagine a world where you could go outside and take a leaf from a tree and put it through your personal DNA sequencer and get data like music, videos or computer programs from it. Well, this is all possible now. It was not done on a large scale because it is quite expensive to create DNA strands but it's possible.
diff --git a/content/posts/2020-09-06-esp-and-micropython.md b/content/posts/2020-09-06-esp-and-micropython.md
index 75e8295..481be0a 100755
--- a/content/posts/2020-09-06-esp-and-micropython.md
+++ b/content/posts/2020-09-06-esp-and-micropython.md
@@ -5,18 +5,6 @@ date: 2020-09-06
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Introduction](#introduction)
112. [Flashing the SOC](#flashing-the-soc)
123. [Install better tooling](#install-better-tooling)
13 1. [ampy](#ampy)
14 2. [rshell](#rshell)
15 1. [Moving files to flash](#moving-files-to-flash)
16 2. [Executing scripts](#executing-scripts)
174. [Additional resources](#additional-resources)
18
19
20## Introduction 8## Introduction
21 9
22A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/esp8266) and [ESP32](https://www.espressif.com/en/products/socs/esp32) dev boards to play around with and I finally found a project to try it out. 10A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/esp8266) and [ESP32](https://www.espressif.com/en/products/socs/esp32) dev boards to play around with and I finally found a project to try it out.
diff --git a/content/posts/2021-01-25-goaccess.md b/content/posts/2021-01-25-goaccess.md
index 549f9da..e8fcee3 100755
--- a/content/posts/2021-01-25-goaccess.md
+++ b/content/posts/2021-01-25-goaccess.md
@@ -5,14 +5,6 @@ date: 2021-01-25
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Introduction](#introduction)
112. [Opting for log parsing](#opting-for-log-parsing)
123. [Getting Nginx ready](#getting-nginx-ready)
134. [Getting GoAccess ready](#getting-goaccess-ready)
145. [Securing with Basic authentication](#securing-with-basic-authentication)
15
16## Introduction 8## Introduction
17 9
18I know! You cannot simply replace Google Analytics with parsing access logs and displaying a couple of charts. But to be honest, I actually never used Google Analytics to the fullest extent and was usually interested in seeing page hits and which pages were visited most often. 10I know! You cannot simply replace Google Analytics with parsing access logs and displaying a couple of charts. But to be honest, I actually never used Google Analytics to the fullest extent and was usually interested in seeing page hits and which pages were visited most often.
diff --git a/content/posts/2021-08-01-linux-cheatsheet.md b/content/posts/2021-08-01-linux-cheatsheet.md
index 126e922..1645eaf 100755
--- a/content/posts/2021-08-01-linux-cheatsheet.md
+++ b/content/posts/2021-08-01-linux-cheatsheet.md
@@ -5,45 +5,6 @@ date: 2021-08-01
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Generate SSH key](#generate-ssh-key)
112. [Login to host via SSH](#login-to-host-via-ssh)
123. [Execute command on a server through SSH](#execute-command-on-a-server-through-ssh)
134. [Displays currently logged in users in the system](#displays-currently-logged-in-users-in-the-system)
145. [Displays Linux system information](#displays-linux-system-information)
156. [Displays kernel release information](#displays-kernel-release-information)
167. [Shows the system hostname](#shows-the-system-hostname)
178. [Shows system reboot history](#shows-system-reboot-history)
189. [Displays information about the user](#displays-information-about-the-user)
1910. [Displays IP addresses and all the network interfaces](#displays-ip-addresses-and-all-the-network-interfaces)
2011. [Downloads a file from an online source](#downloads-a-file-from-an-online-source)
2112. [Compress a file with gzip](#compress-a-file-with-gzip)
2213. [Interactive disk usage analyzer](#interactive-disk-usage-analyzer)
2314. [Install Node.js using the Node Version Manager](#install-nodejs-using-the-node-version-manager)
2415. [Too long; didn't read](#too-long-didnt-read)
2516. [Combine all Nginx access logs to one big log file](#combine-all-nginx-access-logs-to-one-big-log-file)
2617. [Set up Redis server](#set-up-redis-server)
2718. [Generate statistics of your webserver](#generate-statistics-of-your-webserver)
2819. [Search for a given pattern in files](#search-for-a-given-pattern-in-files)
2920. [Find proccess ID for a specific program](#find-proccess-id-for-a-specific-program)
3021. [Print name of current/working directory](#print-name-of-currentworking-directory)
3122. [Creates a blank new file](#creates-a-blank-new-file)
3223. [Displays first lines in a file](#displays-first-lines-in-a-file)
3324. [Displays last lines in a file](#displays-last-lines-in-a-file)
3425. [Count lines in a file](#count-lines-in-a-file)
3526. [Find all instances of the file](#find-all-instances-of-the-file)
3627. [Find file names that begin with ‘index’ in /home folder](#find-file-names-that-begin-with-index-in-home-folder)
3728. [Find files larger than 100MB in the home folder](#find-files-larger-than-100mb-in-the-home-folder)
3829. [Displays block devices related information](#displays-block-devices-related-information)
3930. [Displays free space on mounted systems](#displays-free-space-on-mounted-systems)
4031. [Displays free and used memory in the system](#displays-free-and-used-memory-in-the-system)
4132. [Displays all active listening ports](#displays-all-active-listening-ports)
4233. [Kill a process violently](#kill-a-process-violently)
4334. [List files opened by user](#list-files-opened-by-user)
4435. [Execute "df -h", showing periodic updates](#execute-df--h-showing-periodic-updates)
45
46
47##### Generate SSH key 8##### Generate SSH key
48 9
49```bash 10```bash
diff --git a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md
index 365f632..e0677cf 100755
--- a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md
+++ b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md
@@ -5,17 +5,6 @@ date: 2021-12-03
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Introduction](#introduction)
112. [How should I approach this?](#how-should-i-approach-this)
123. [Desktop environments](#desktop-environments)
134. [Batteries included](#batteries-included)
14 1. [Docker recipe](#docker-recipe)
15 2. [Making bash pretty](#making-bash-pretty)
165. [Conclusion](#conclusion)
17
18
19## Introduction 8## Introduction
20 9
21I have been using [Ubuntu](https://ubuntu.com/) for quite a longtime now. I have used [Debian](https://www.debian.org/) in the past and [Manjaro](https://manjaro.org/). Also had [Arch](https://archlinux.org/) for some time and even ran [Gentoo](https://www.gentoo.org/) way back. 10I have been using [Ubuntu](https://ubuntu.com/) for quite a longtime now. I have used [Debian](https://www.debian.org/) in the past and [Manjaro](https://manjaro.org/). Also had [Arch](https://archlinux.org/) for some time and even ran [Gentoo](https://www.gentoo.org/) way back.
diff --git a/content/posts/2021-12-25-running-golang-application-as-pid1.md b/content/posts/2021-12-25-running-golang-application-as-pid1.md
index 7a62d1c..3d1f266 100755
--- a/content/posts/2021-12-25-running-golang-application-as-pid1.md
+++ b/content/posts/2021-12-25-running-golang-application-as-pid1.md
@@ -5,19 +5,6 @@ date: 2021-12-25
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Unikernels, kernels, and alike](#unikernels-kernels-and-alike)
112. [What is PID 1?](#what-is-pid-1)
123. [So why even run application as PID 1 instead of just using a container?](#so-why-even-run-application-as-pid-1-instead-of-just-using-a-container)
134. [The master plan](#the-master-plan)
145. [Compiling Linux kernel](#compiling-linux-kernel)
156. [Preparing PID 1 application in Golang](#preparing-pid-1-application-in-golang)
167. [Running all of it with QEMU](#running-all-of-it-with-qemu)
178. [Size comparison](#size-comparison)
189. [Creating ISO image and running it with Gnome Boxes](#creating-iso-image-and-running-it-with-gnome-boxes)
1910. [Is running applications as PID 1 even worth it?](#is-running-applications-as-pid-1-even-worth-it)
20
21## Unikernels, kernels, and alike 8## Unikernels, kernels, and alike
22 9
23I have been reading a lot about [unikernernels](https://en.wikipedia.org/wiki/Unikernel) lately and found them very intriguing. When you push away all the marketing speak and look at the idea, it makes a lot of sense. 10I have been reading a lot about [unikernernels](https://en.wikipedia.org/wiki/Unikernel) lately and found them very intriguing. When you push away all the marketing speak and look at the idea, it makes a lot of sense.
diff --git a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md
index 5c24c98..6664639 100755
--- a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md
+++ b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md
@@ -5,14 +5,6 @@ date: 2021-12-30
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [A little stroll down the history lane](#a-little-stroll-down-the-history-lane)
112. [WAP - Wireless Application Protocol](#wap---wireless-application-protocol)
123. [WML - Wireless Markup Language](#wml---wireless-markup-language)
134. [Converting Digg to WML](#converting-digg-to-wml)
145. [Conclusion](#conclusion)
15
16## A little stroll down the history lane 8## A little stroll down the history lane
17 9
18About two weeks ago, I watched this outstanding documentary on YouTube [Springboard: the secret history of the first real smartphone](https://www.youtube.com/watch?v=b9_Vh9h3Ohw) about the history of smartphones and phones in general. It brought back so many memories. I never had an actual smartphone before the Android. The closest to smartphone was [Sony Ericsson P1](https://www.gsmarena.com/sony_ericsson_p1-1982.php). A fantastic phone and I broke it in Prague after a party and that was one of those rare occasions where I was actually mad at myself. But nevertheless, after that phone, the next one was an Android one. 10About two weeks ago, I watched this outstanding documentary on YouTube [Springboard: the secret history of the first real smartphone](https://www.youtube.com/watch?v=b9_Vh9h3Ohw) about the history of smartphones and phones in general. It brought back so many memories. I never had an actual smartphone before the Android. The closest to smartphone was [Sony Ericsson P1](https://www.gsmarena.com/sony_ericsson_p1-1982.php). A fantastic phone and I broke it in Prague after a party and that was one of those rare occasions where I was actually mad at myself. But nevertheless, after that phone, the next one was an Android one.
diff --git a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md
index ba5cc4b..002eb5d 100755
--- a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md
+++ b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md
@@ -5,22 +5,6 @@ date: 2022-07-05
5draft: false 5draft: false
6--- 6---
7 7
8**Table of contents**
9
101. [Introduction](#introduction)
112. [DNA encoding and primer example](#dna-encoding-and-primer-example)
123. [Parsing DNA data](#parsing-dna-data)
134. [Generating sine wave](#generating-sine-wave)
145. [Generating a WAV file from accumulated sine waves](#generating-a-wav-file-from-accumulated-sine-waves)
156. [Generating Spectograms](#generating-spectograms)
167. [Pre-generated sequences](#pre-generated-sequences)
17 1. [Niels Bohr quote](#niels-bohr-quote)
18 2. [Mouse](#mouse)
19 3. [Bison](#bison)
20 4. [Taurus](#taurus)
218. [Making a drummer out of a DNA sequence](#making-a-drummer-out-of-a-dna-sequence)
229. [Going even further](#going-even-further)
23
24## Introduction 8## Introduction
25 9
26Lately, I have been thinking a lot about the nature of life, what are the foundation blocks of life and things like that. It's remarkable how complex and on the other hand simple the creation is when you look at it. The miracle of life keeps us grounded when our imagination goes wild. If the DNA are the blocks of life, you could consider them to be an API nature provided us to better understand all of this chaos masquerading as order. 10Lately, I have been thinking a lot about the nature of life, what are the foundation blocks of life and things like that. It's remarkable how complex and on the other hand simple the creation is when you look at it. The miracle of life keeps us grounded when our imagination goes wild. If the DNA are the blocks of life, you could consider them to be an API nature provided us to better understand all of this chaos masquerading as order.
diff --git a/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
index b746b76..6e5f938 100755
--- a/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
+++ b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md
@@ -5,16 +5,6 @@ date: 2022-10-06
5draft: false 5draft: false
6--- 6---
7 7
8**Table of Contents**
91. [Initial thoughts](#initial-thoughts)
102. [Giving React JS a spin](#giving-react-js-a-spin)
113. [Bundlers and Transpilers](#bundlers-and-transpilers)
124. [Jam Stack, Mach Stack no snack](#jam-stack-mach-stack-no-snack)
135. [Tailwind CSS still rocks!](#tailwind-css-still-rocks)
146. [Code maintainability](#code-maintainability)
157. [Web development has a marketing issue](#web-development-has-a-marketing-issue)
168. [Conclusion](#conclusion)
17
18## Initial thoughts 8## Initial thoughts
19 9
20*This post is a critique on the current state of web development. It is an opinionated post! I will learn more about this in the future, and probably slightly change my mind about some of the things I criticize.* 10*This post is a critique on the current state of web development. It is an opinionated post! I will learn more about this in the future, and probably slightly change my mind about some of the things I criticize.*
diff --git a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
index ed917c2..0fa30e8 100755
--- a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
+++ b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
@@ -5,11 +5,6 @@ date: 2022-10-11
5draft: true 5draft: true
6--- 6---
7 7
8**Table of contents**
9
101. [Handling lazy loading in 2D world](#handling-lazy-loading-in-2d-world)
11 1. [Player movement](#player-movement)
12
13Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them** 8Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them**
14 9
15I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware. 10I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware.
diff --git a/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md
index fd25cdb..89caa0c 100644
--- a/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md
+++ b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md
@@ -1,5 +1,5 @@
1--- 1---
2title: Trying to build a New kind of terminal emulator 2title: Trying to build a New kind of terminal emulator for the modern age
3url: trying-to-build-a-new-kind-of-terminal-emulator.html 3url: trying-to-build-a-new-kind-of-terminal-emulator.html
4date: 2022-12-20 4date: 2022-12-20
5draft: true 5draft: true
diff --git a/static/general/index.css b/static/general/index.css
index c6ea4ae..8bd1baf 100644
--- a/static/general/index.css
+++ b/static/general/index.css
@@ -1 +1 @@
/*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.collapse{visibility:collapse}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-12{margin-bottom:3rem}.ml-6{margin-left:1.5rem}.mb-5{margin-bottom:1.25rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-12{padding-bottom:3rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:1rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single ul{padding-left:2.5rem}}article.single ol{list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single ol{padding-left:2.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.comments img{max-width:auto!important;max-width:unset!important;max-width:inherit!important}.cactus-container .cactus-editor-textarea{height:8rem}.cactus-container .cactus-editor-name input,.cactus-container .cactus-editor-textarea{margin-bottom:.5rem;width:100%;border-radius:.25rem;border-width:1px;padding:.5rem .75rem;outline:2px solid #0000;outline-offset:2px}.cactus-container .cactus-editor-name{margin-bottom:.25rem}.cactus-editor-buttons{display:flex;gap:.5rem}.cactus-container .cactus-button{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));padding:.5rem 1.5rem;font-size:1rem;line-height:1.5rem;font-weight:500}.cactus-container .cactus-button:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-editor{margin-bottom:2.5rem}.cactus-container .cactus-comments-list{display:flex;flex-direction:column;gap:2rem}.cactus-container .cactus-comment{display:flex;gap:1rem}.cactus-container .cactus-comment .cactus-comment-avatar img{height:2rem;width:2rem;border-radius:9999px}.cactus-container .cactus-comment .cactus-comment-avatar-placeholder{height:2rem;width:2rem;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-comment .cactus-comment-header{display:flex;align-items:center;gap:.5rem}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname{font-weight:600}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time{font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.cactus-container .cactus-comment .cactus-message-text code{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.cactus-container .cactus-comment .cactus-message-text ul{list-style-type:disc;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ul{padding-left:1.5rem}}.cactus-container .cactus-comment .cactus-message-text ol{list-style-type:decimal;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ol{padding-left:1.5rem}}.cactus-container .cactus-login-form-wrapper{position:relative;margin-bottom:1.5rem;border-radius:.25rem;border-width:1px;padding:.75rem}.cactus-container .cactus-login-form .cactus-login-close{position:absolute;right:.75rem;top:.75rem;height:1rem;width:1rem}.cactus-container .cactus-login-form .cactus-login-title{margin-bottom:1rem;margin-top:0;padding-top:0;font-weight:700}.cactus-container .cactus-login-form .cactus-login-client{margin-bottom:1.5rem}.cactus-container .cactus-login-form .cactus-login-client-title{margin-bottom:.5rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-credentials-title{margin-bottom:.25rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-field{margin-bottom:.5rem;display:flex;align-items:center;gap:1rem}.cactus-container .cactus-login-form .cactus-login-label{width:5rem}.cactus-container .cactus-login-form input{border-radius:.25rem;border-width:1px;padding:.25rem .5rem}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file /*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.collapse{visibility:collapse}.mx-auto{margin-left:auto;margin-right:auto}.my-12{margin-top:3rem;margin-bottom:3rem}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-12{margin-bottom:3rem}.ml-6{margin-left:1.5rem}.mb-5{margin-bottom:1.25rem}.mt-4{margin-top:1rem}.mb-8{margin-bottom:2rem}.block{display:block}.flex{display:flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-16{padding-bottom:4rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-semibold{font-weight:600}.font-medium{font-weight:500}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-wavy{text-decoration-style:wavy}.decoration-1{text-decoration-thickness:1px}.underline-offset-2{text-underline-offset:2px}.outline{outline-style:solid}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:2rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline;text-decoration-style:wavy;text-decoration-thickness:1px;text-underline-offset:2px}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single .content blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single .content blockquote p{margin-bottom:.5rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single .content ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single .content ul{padding-left:2.5rem}}article.single .content ol{margin-bottom:1.5rem;list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single .content ol{padding-left:2.5rem}}article.single #TableOfContents{margin-bottom:2.5rem;margin-left:1rem;line-height:1.625}article.single #TableOfContents ul{list-style-type:decimal;padding-left:1rem}@media (min-width:768px){article.single #TableOfContents ul{padding-left:1.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file
diff --git a/themes/bare/openring/openring.html b/themes/bare/openring/openring.html
index bd9ac55..3c870bb 100755
--- a/themes/bare/openring/openring.html
+++ b/themes/bare/openring/openring.html
@@ -1,5 +1,5 @@
1<section class="mb-10"> 1<section class="mb-10">
2 <h2 class="text-2xl font-bold mb-6">Articles from blogs I follow around the net</h2> 2 <h2 class="text-2xl font-semibold mb-6">Articles from blogs I follow around the net</h2>
3 3
4 <section> 4 <section>
5 {{ range .Articles }} 5 {{ range .Articles }}
@@ -7,7 +7,8 @@
7 <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> 7 <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a>
8 <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> 8 <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p>
9 <div class="text-gray-500 font-medium text-xs"> 9 <div class="text-gray-500 font-medium text-xs">
10 Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" }} 10 Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006"
11 }}
11 </div> 12 </div>
12 </article> 13 </article>
13 {{ end }} 14 {{ end }}
@@ -16,4 +17,4 @@
16 <p class="text-sm text-gray-500"> 17 <p class="text-sm text-gray-500">
17 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> 18 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a>
18 </p> 19 </p>
19</section> 20</section> \ No newline at end of file
diff --git a/themes/simple/layouts/_default/list.html b/themes/simple/layouts/_default/list.html
index 856abf4..8d72aed 100755
--- a/themes/simple/layouts/_default/list.html
+++ b/themes/simple/layouts/_default/list.html
@@ -9,7 +9,8 @@
9 {{ range (where .Site.RegularPages "Section" "posts") }} 9 {{ range (where .Site.RegularPages "Section" "posts") }}
10 <article class="mb-5" itemscope itemtype="http://schema.org/Article"> 10 <article class="mb-5" itemscope itemtype="http://schema.org/Article">
11 <time class="block text-gray-400 font-medium text-xs">{{ .Date.Format "Monday Jan 2, 2006" }}</time> 11 <time class="block text-gray-400 font-medium text-xs">{{ .Date.Format "Monday Jan 2, 2006" }}</time>
12 <a href="/{{ .Params.url }}" itemprop="url" class="hover:bg-yellow-100" rel="bookmark noopener" aria-label="Opens URL"> 12 <a href="/{{ .Params.url }}" itemprop="url" class="hover:bg-yellow-100" rel="bookmark noopener"
13 aria-label="Opens URL">
13 {{ if .Params.draft }} 14 {{ if .Params.draft }}
14 <span class="bg-orange-600 text-white px-1.5">Draft</span> 15 <span class="bg-orange-600 text-white px-1.5">Draft</span>
15 {{ end }} 16 {{ end }}
@@ -30,4 +31,4 @@
30 {{ partial "openring.html" . }} 31 {{ partial "openring.html" . }}
31 32
32</main> 33</main>
33{{ end }} 34{{ end }} \ No newline at end of file
diff --git a/themes/simple/layouts/_default/single.html b/themes/simple/layouts/_default/single.html
index 81a7d58..ffa776f 100755
--- a/themes/simple/layouts/_default/single.html
+++ b/themes/simple/layouts/_default/single.html
@@ -4,14 +4,21 @@
4 <!-- Single article --> 4 <!-- Single article -->
5 <article itemtype="http://schema.org/Article" class="single mb-12"> 5 <article itemtype="http://schema.org/Article" class="single mb-12">
6 <header class="mb-6"> 6 <header class="mb-6">
7 <h1 itemtype="headline" class="text-4xl font-extrabold mb-6 leading-1 md:leading-2">{{ .Title }}</h1> 7 <h1 itemtype="headline" class="text-4xl font-bold mb-4 leading-1 md:leading-2">{{ .Title }}</h1>
8 8
9 {{ if in .Type "posts" }} 9 {{ if in .Type "posts" }}
10 <time class="text-gray-400 font-medium text-sm">Published on {{ .Date.Format "Monday Jan 2, 2006" }}</time> 10 <time class="text-gray-400 font-medium text-sm">Published on {{ .Date.Format "Monday Jan 2, 2006" }}</time>
11 {{ end }} 11 {{ end }}
12 </header> 12 </header>
13 13
14 <div class="leading-relaxed"> 14 <div>
15 {{ if ge (len .TableOfContents) 100 }}
16 <p class="font-semibold">Table of contents</p>
17 <div>{{ .TableOfContents }}</div>
18 {{ end }}
19 </div>
20
21 <div class="leading-relaxed content">
15 {{.Content}} 22 {{.Content}}
16 </div> 23 </div>
17 </article> 24 </article>
@@ -46,4 +53,4 @@
46 {{ end }} 53 {{ end }}
47 54
48</main> 55</main>
49{{ end }} 56{{ end }} \ No newline at end of file
diff --git a/themes/simple/layouts/partials/comments.html b/themes/simple/layouts/partials/comments.html
index b905967..bd26145 100755
--- a/themes/simple/layouts/partials/comments.html
+++ b/themes/simple/layouts/partials/comments.html
@@ -1,21 +1,11 @@
1<section class="comments"> 1<section class="comments">
2 <h2 class="text-xl font-bold mb-2">Leave a comment</h2> 2 <h2 class="text-xl font-bold mb-2">Care to leave a comment?</h2>
3 <p class="mb-4">You can write me an email at <a href="mailto:m@mitjafelicijan.com" class="underline hover:bg-yellow-100">m@mitjafelicijan.com</a> or comment bellow.</p> 3 <p class="mb-4">You can write me an email at
4 <div id="comment-section"></div> 4 <a href="mailto:m@mitjafelicijan.com"
5 5 class="underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100">m@mitjafelicijan.com</a>
6 <script type="text/javascript" src="https://latest.cactus.chat/cactus.js"></script> 6 or catch up with me
7 7 <a href="https://telegram.me/mitjafelicijan" target="_blank"
8 <script> 8 class="underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100">on
9 window.addEventListener('load', () => { 9 Telegram</a>.
10 initComments({ 10 </p>
11 node: document.getElementById("comment-section"), 11</section> \ No newline at end of file
12 defaultHomeserverUrl: "https://matrix.cactus.chat:8448",
13 serverName: "cactus.chat",
14 siteName: "mitjafelicijan.com",
15 commentSectionId: "{{ .File }}",
16 pageSize: 50,
17 updateInterval: 10,
18 });
19 });
20 </script>
21</section>
diff --git a/themes/simple/layouts/partials/footer.html b/themes/simple/layouts/partials/footer.html
index 7383ae1..a0c745f 100755
--- a/themes/simple/layouts/partials/footer.html
+++ b/themes/simple/layouts/partials/footer.html
@@ -1,8 +1,12 @@
1<footer class="container-blog mx-auto px-6 md:p-0 text-gray-400 text-sm"> 1<footer class="container-blog mx-auto px-6 md:p-0 text-gray-400 text-sm">
2 <p class="pb-12"> 2 <hr class="border-2 border-gray-100 my-12">
3 <p class="pb-16">
3 This website does not track you. 4 This website does not track you.
4 Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noreferrer" class="underline hover:text-gray-800">CC BY 4.0 license</a> unless specified otherwise. 5 Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank"
5 Blog feed is available as <a href="/index.xml" target="_blank" class="underline hover:text-gray-800">RSS</a> feed. 6 rel="noreferrer" class="underline-offset-2 decoration-1 decoration-wavy underline hover:text-gray-800">CC BY 4.0
7 license</a> unless specified otherwise.
8 Blog feed is available as <a href="/index.xml" target="_blank"
9 class="underline-offset-2 decoration-1 decoration-wavy underline hover:text-gray-800">RSS feed</a>.
6 </p> 10 </p>
7</footer> 11</footer>
8 12
@@ -11,9 +15,13 @@
11 15
12{{ if ne .IsHome true }} 16{{ if ne .IsHome true }}
13<!-- KaTeX math library --> 17<!-- KaTeX math library -->
14<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css" integrity="sha384-RZU/ijkSsFbcmivfdRBQDtwuwVqK7GMOw6IMvKyeWL2K5UAlyp6WonmB8m7Jd0Hn" crossorigin="anonymous"> 18<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css"
15<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.js" integrity="sha384-pK1WpvzWVBQiP0/GjnvRxV4mOb0oxFuyRxJlk6vVw146n3egcN5C925NCP7a7BY8" crossorigin="anonymous"></script> 19 integrity="sha384-RZU/ijkSsFbcmivfdRBQDtwuwVqK7GMOw6IMvKyeWL2K5UAlyp6WonmB8m7Jd0Hn" crossorigin="anonymous">
16<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/contrib/auto-render.min.js" integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script> 20<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.js"
21 integrity="sha384-pK1WpvzWVBQiP0/GjnvRxV4mOb0oxFuyRxJlk6vVw146n3egcN5C925NCP7a7BY8" crossorigin="anonymous"></script>
22<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/contrib/auto-render.min.js"
23 integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous"
24 onload="renderMathInElement(document.body);"></script>
17{{ end }} 25{{ end }}
18 26
19{{ if ne .IsHome true }} 27{{ if ne .IsHome true }}
@@ -51,4 +59,4 @@
51 } 59 }
52 }); 60 });
53</script> 61</script>
54{{ end }} 62{{ end }} \ No newline at end of file
diff --git a/themes/simple/layouts/partials/navigation.html b/themes/simple/layouts/partials/navigation.html
index ba727c5..a463ade 100755
--- a/themes/simple/layouts/partials/navigation.html
+++ b/themes/simple/layouts/partials/navigation.html
@@ -1,16 +1,18 @@
1<div class="container-blog mx-auto px-6 md:p-0"> 1<div class="container-blog mx-auto px-6 md:p-0">
2 <header class="flex py-4 mt-4 mb-6 flex-col md:flex-row items-center "> 2 <header class="flex py-4 mt-4 mb-8 flex-col md:flex-row items-center ">
3 <div class="flex-grow mb-2 md:mb-0"> 3 <div class="flex-grow mb-2 md:mb-0">
4 <a href="/" itemprop="url" class="text-xl font-bold hover:bg-yellow-100">Mitja Felicijan</a> 4 <a href="/" itemprop="url" class="text-xl font-semibold hover:bg-yellow-100">Mitja Felicijan</a>
5 </div> 5 </div>
6 6
7 <nav itemscope itemtype="http://schema.org/SiteNavigationElement" class="flex items-center gap-1" role="toolbar"> 7 <nav itemscope itemtype="http://schema.org/SiteNavigationElement" class="flex items-center gap-1" role="toolbar">
8 <meta itemprop="name" content="Main Menu"> 8 <meta itemprop="name" content="Main Menu">
9 9
10 <a href="https://git.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" class="font-medium px-2 hover:bg-yellow-100">Git</a> 10 <a href="https://git.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url"
11 <a href="https://files.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" class="font-medium px-2 hover:bg-yellow-100">Files</a> 11 class="font-medium px-2 hover:bg-yellow-100">Git</a>
12 <a href="https://files.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url"
13 class="font-medium px-2 hover:bg-yellow-100">Files</a>
12 <a href="/curriculum-vitae.html" class="font-medium px-2 hover:bg-yellow-100">CV</a> 14 <a href="/curriculum-vitae.html" class="font-medium px-2 hover:bg-yellow-100">CV</a>
13 <a href="/index.xml" itemprop="url" class="font-medium px-2 hover:bg-yellow-100 hidden md:block">RSS</a> 15 <a href="/index.xml" itemprop="url" class="font-medium px-2 hover:bg-yellow-100 hidden md:block">RSS</a>
14 </nav> 16 </nav>
15 </header> 17 </header>
16</div> 18</div> \ No newline at end of file
diff --git a/themes/simple/layouts/partials/read-more.html b/themes/simple/layouts/partials/read-more.html
index d604bfc..a238017 100644
--- a/themes/simple/layouts/partials/read-more.html
+++ b/themes/simple/layouts/partials/read-more.html
@@ -13,4 +13,4 @@
13 {{ end }} 13 {{ end }}
14 </ul> 14 </ul>
15 </nav> 15 </nav>
16</section> 16</section> \ No newline at end of file
diff --git a/themes/simple/layouts/partials/side-projects.html b/themes/simple/layouts/partials/side-projects.html
index 5cca9b6..f675803 100644
--- a/themes/simple/layouts/partials/side-projects.html
+++ b/themes/simple/layouts/partials/side-projects.html
@@ -1,10 +1,33 @@
1<section class="mb-12"> 1<section class="mb-12">
2 <h2 class="text-2xl font-bold mb-6">Side projects I worked on</h2> 2 <h2 class="text-2xl font-bold mb-6">Side projects I worked on</h2>
3 <ul class="list-disc ml-6"> 3 <ul class="list-disc ml-6">
4 <li><a href="https://git.mitjafelicijan.com/journalctl-proxy.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">journalctl-proxy - Exposes your systemd logs to web via web interface</a></li> 4 <li>
5 <li><a href="https://git.mitjafelicijan.com/redis-marshal.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">redis-marshal - Lightweight Redis data exploration tool</a></li> 5 <a href="https://git.mitjafelicijan.com/cord.h.git/" target="_blank" rel="noopener nofollow"
6 <li><a href="https://git.mitjafelicijan.com/dna-encoding.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">dna-encoding - Tools for encoding files to DNA sequence</a></li> 6 class="hover:bg-yellow-100">cord.h - Small C library for handling strings</a>
7 <li><a href="https://git.mitjafelicijan.com/vertex.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">vertex - Create mock API's and add basic logic to simplify prototyping</a></li> 7 </li>
8 <li><a href="https://git.mitjafelicijan.com/scarecrow.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">scarecrow - Minimal configuration reverse proxy</a></li> 8 <li>
9 <a href="https://git.mitjafelicijan.com/mprogress.git/" target="_blank" rel="noopener nofollow"
10 class="hover:bg-yellow-100">mprogress - Tiny utility that displays progress bar in terminal</a>
11 </li>
12 <li>
13 <a href="https://git.mitjafelicijan.com/journalctl-proxy.git/" target="_blank" rel="noopener nofollow"
14 class="hover:bg-yellow-100">journalctl-proxy - Exposes your systemd logs to web via web interface</a>
15 </li>
16 <li>
17 <a href="https://git.mitjafelicijan.com/redis-marshal.git/" target="_blank" rel="noopener nofollow"
18 class="hover:bg-yellow-100">redis-marshal - Lightweight Redis data exploration tool</a>
19 </li>
20 <li>
21 <a href="https://git.mitjafelicijan.com/dna-encoding.git/" target="_blank" rel="noopener nofollow"
22 class="hover:bg-yellow-100">dna-encoding - Tools for encoding files to DNA sequence</a>
23 </li>
24 <li>
25 <a href="https://git.mitjafelicijan.com/vertex.git/" target="_blank" rel="noopener nofollow"
26 class="hover:bg-yellow-100">vertex - Create mock API's and add basic logic to simplify prototyping</a>
27 </li>
28 <li>
29 <a href="https://git.mitjafelicijan.com/scarecrow.git/" target="_blank" rel="noopener nofollow"
30 class="hover:bg-yellow-100">scarecrow - Minimal configuration reverse proxy</a>
31 </li>
9 </ul> 32 </ul>
10</section> 33</section> \ No newline at end of file
diff --git a/themes/simple/openring/openring.html b/themes/simple/openring/openring.html
index bd9ac55..8bc92f5 100755
--- a/themes/simple/openring/openring.html
+++ b/themes/simple/openring/openring.html
@@ -7,7 +7,8 @@
7 <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> 7 <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a>
8 <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> 8 <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p>
9 <div class="text-gray-500 font-medium text-xs"> 9 <div class="text-gray-500 font-medium text-xs">
10 Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" }} 10 Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a>
11 on {{ .Date | datef "January 2, 2006" }}
11 </div> 12 </div>
12 </article> 13 </article>
13 {{ end }} 14 {{ end }}
@@ -16,4 +17,4 @@
16 <p class="text-sm text-gray-500"> 17 <p class="text-sm text-gray-500">
17 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> 18 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a>
18 </p> 19 </p>
19</section> 20</section> \ No newline at end of file
diff --git a/themes/simple/static/css/tailwind.css b/themes/simple/static/css/tailwind.css
index edbb0ab..05b6492 100644
--- a/themes/simple/static/css/tailwind.css
+++ b/themes/simple/static/css/tailwind.css
@@ -20,7 +20,7 @@
20 20
21/* Headings */ 21/* Headings */
22article.single h2 { 22article.single h2 {
23 @apply text-2xl font-bold mb-4 mt-8; 23 @apply text-2xl font-bold mb-8 mt-8;
24} 24}
25 25
26article.single h3 { 26article.single h3 {
@@ -38,11 +38,11 @@ article.single p {
38 38
39/* Links */ 39/* Links */
40article.single a { 40article.single a {
41 @apply underline hover:bg-yellow-100; 41 @apply underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100;
42} 42}
43 43
44/* Blockquote */ 44/* Blockquote */
45article.single blockquote { 45article.single .content blockquote {
46 background-image: url('/general/alert-light.svg'); 46 background-image: url('/general/alert-light.svg');
47 background-size: 30px 30px; 47 background-size: 30px 30px;
48 background-repeat: no-repeat; 48 background-repeat: no-repeat;
@@ -50,6 +50,10 @@ article.single blockquote {
50 @apply pl-12 my-8; 50 @apply pl-12 my-8;
51} 51}
52 52
53article.single .content blockquote p {
54 @apply mb-2;
55}
56
53/* Media: Images, audio, video */ 57/* Media: Images, audio, video */
54article.single img { 58article.single img {
55 @apply rounded w-full !bg-gray-50 my-8; 59 @apply rounded w-full !bg-gray-50 my-8;
@@ -90,13 +94,21 @@ article.single table th {
90} 94}
91 95
92/* Unordered list */ 96/* Unordered list */
93article.single ul { 97article.single .content ul {
94 @apply list-disc pl-6 md:pl-10 mb-6; 98 @apply list-disc pl-6 md:pl-10 mb-6;
95} 99}
96 100
97/* Ordered list */ 101/* Ordered list */
98article.single ol { 102article.single .content ol {
99 @apply list-decimal pl-8 md:pl-10; 103 @apply list-decimal pl-8 md:pl-10 mb-6;
104}
105
106/* Table of contents */
107article.single #TableOfContents {
108 @apply mb-10 ml-4 leading-relaxed;
109}
110article.single #TableOfContents ul {
111 @apply list-decimal pl-4 md:pl-6;
100} 112}
101 113
102/* Katex */ 114/* Katex */
@@ -117,119 +129,3 @@ article.single .ll-iframe::before {
117article.single .ll-iframe.empty::before { 129article.single .ll-iframe.empty::before {
118 content: none; 130 content: none;
119} 131}
120
121/* Cactus Comments */
122.comments img {
123 max-width: auto !important;
124 max-width: unset !important;
125 max-width: inherit !important;
126}
127
128.cactus-container .cactus-editor-textarea {
129 @apply border w-full h-32 px-3 py-2 outline-none rounded mb-2;
130}
131
132.cactus-container .cactus-editor-name input {
133 @apply border w-full px-3 py-2 mb-2 outline-none rounded;
134}
135
136.cactus-container .cactus-editor-name {
137 @apply mb-1;
138}
139
140/* Cactus: Buttons */
141.cactus-editor-buttons {
142 @apply flex gap-2;
143}
144
145.cactus-container .cactus-button {
146 @apply text-base bg-gray-200 hover:bg-gray-300 font-medium px-6 py-2 rounded;
147}
148
149.cactus-container .cactus-editor {
150 @apply mb-10;
151}
152
153/* Cactus: Comment List */
154.cactus-container .cactus-comments-list {
155 @apply flex flex-col gap-8;
156}
157
158.cactus-container .cactus-comment {
159 @apply flex gap-4;
160}
161
162.cactus-container .cactus-comment .cactus-comment-avatar img {
163 @apply w-8 h-8 rounded-full;
164}
165
166.cactus-container .cactus-comment .cactus-comment-avatar-placeholder {
167 @apply w-8 h-8 rounded-full bg-gray-300;
168}
169
170.cactus-container .cactus-comment .cactus-comment-header {
171 @apply flex gap-2 items-center;
172}
173
174.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname {
175 @apply font-semibold;
176}
177
178.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time {
179 @apply text-gray-400 text-sm;
180}
181
182.cactus-container .cactus-comment .cactus-message-text code {
183 @apply bg-yellow-100 rounded px-2 py-1 text-xs font-medium;
184}
185
186/* Unordered list */
187.cactus-container .cactus-comment .cactus-message-text ul {
188 @apply list-disc pl-2 md:pl-6;
189}
190
191/* Ordered list */
192.cactus-container .cactus-comment .cactus-message-text ol {
193 @apply list-decimal pl-2 md:pl-6;
194}
195
196/* Cactus: Login */
197.cactus-container .cactus-login-form-wrapper {
198 @apply border mb-6 p-3 relative rounded;
199}
200
201.cactus-container .cactus-login-form .cactus-login-close {
202 @apply absolute right-3 top-3 w-4 h-4;
203}
204
205.cactus-container .cactus-login-form .cactus-login-title {
206 @apply font-bold mb-4 mt-0 pt-0;
207}
208
209/* Cactus: Login with a button */
210.cactus-container .cactus-login-form .cactus-login-client {
211 @apply mb-6;
212}
213
214.cactus-container .cactus-login-form .cactus-login-client-title {
215 @apply font-semibold mb-2;
216}
217
218/* Cactus: Login with credentials */
219.cactus-container .cactus-login-form .cactus-login-credentials {}
220
221.cactus-container .cactus-login-form .cactus-login-credentials-title {
222 @apply font-semibold mb-1;
223}
224
225.cactus-container .cactus-login-form .cactus-login-field {
226 @apply flex gap-4 mb-2 items-center;
227}
228
229.cactus-container .cactus-login-form .cactus-login-label {
230 @apply w-20;
231}
232
233.cactus-container .cactus-login-form input {
234 @apply border px-2 py-1 rounded;
235}