diff options
| author | EuAndreh <eu@euandre.org> | 2026-09-03 09:19:35 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2026-09-07 04:46:50 -0300 |
| commit | 6ca718aca59eac9f250badd26f9b118e705d0c20 (patch) | |
| tree | cd74733352a79303d23dd6029cabfaca2fafbc33 /src/content | |
| parent | src/static.conf ($discussions_url_prefix): Fix typo in address (diff) | |
| download | euandre.org-6ca718aca59eac9f250badd26f9b118e705d0c20.tar.gz euandre.org-6ca718aca59eac9f250badd26f9b118e705d0c20.tar.xz | |
m
Diffstat (limited to 'src/content')
42 files changed, 1196 insertions, 758 deletions
diff --git a/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc b/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc index 76bd8e6..7c1e837 100644 --- a/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc +++ b/src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc @@ -115,7 +115,8 @@ https://lernajs.io/[Lerna]footnote:lerna-package-lock[ was harder than I expected. ]: -```bash +[source,sh] +---- cd /tmp/ git clone https://github.com/lerna/lerna.git cd lerna/ @@ -127,7 +128,7 @@ npm ci merkle-tree node_modules/ # outputs 11e218c4ac32fac8a9607a8da644fe870a25c99821167d21b607af45699afafa npm ci # test if it also works with an existing node_modules/ folder merkle-tree node_modules/ # outputs 11e218c4ac32fac8a9607a8da644fe870a25c99821167d21b607af45699afafa -``` +---- Good job `npm ci` :) diff --git a/src/content/en/blog/index.adoc b/src/content/en/blog/index.adoc index afd64d4..e24d614 100644 --- a/src/content/en/blog/index.adoc +++ b/src/content/en/blog/index.adoc @@ -1 +1,2 @@ = Blog +:type: collection diff --git a/src/content/en/index.adoc b/src/content/en/index.adoc index 275f7c4..5fde68a 100644 --- a/src/content/en/index.adoc +++ b/src/content/en/index.adoc @@ -1 +1,3 @@ -= index += Home + +The newest entry of each collection is listed below. diff --git a/src/content/en/pastebin/2021/06/22/curl-wget.adoc b/src/content/en/pastebin/2021/06/22/curl-wget.adoc index 97f55c7..02a9744 100644 --- a/src/content/en/pastebin/2021/06/22/curl-wget.adoc +++ b/src/content/en/pastebin/2021/06/22/curl-wget.adoc @@ -1,4 +1,4 @@ -= "cloc: curl and wget" += cloc: curl and wget `curl`: diff --git a/src/content/en/pastebin/index.adoc b/src/content/en/pastebin/index.adoc index 433a2c1..a5a8657 100644 --- a/src/content/en/pastebin/index.adoc +++ b/src/content/en/pastebin/index.adoc @@ -1 +1,2 @@ = Pastebins +:type: collection diff --git a/src/content/en/podcast/index.adoc b/src/content/en/podcast/index.adoc index 1f17da7..69f5cea 100644 --- a/src/content/en/podcast/index.adoc +++ b/src/content/en/podcast/index.adoc @@ -1 +1,2 @@ = Podcasts +:type: collection diff --git a/src/content/en/screencast/2021/02/07/autoqemu.adoc b/src/content/en/screencast/2021/02/07/autoqemu.adoc index b20b092..15bac9a 100644 --- a/src/content/en/screencast/2021/02/07/autoqemu.adoc +++ b/src/content/en/screencast/2021/02/07/autoqemu.adoc @@ -10,7 +10,6 @@ :script: https://www.man7.org/linux/man-pages/man1/script.1.html :klaatu: https://gnuworldorder.info/ -video: true After reading begriffs "{begriffs-tips}[Tips for stable and portable software]", the "Begriffs Buildfarm?" section caught my attention, as this is something I diff --git a/src/content/en/screencast/index.adoc b/src/content/en/screencast/index.adoc index 083adac..408b1d5 100644 --- a/src/content/en/screencast/index.adoc +++ b/src/content/en/screencast/index.adoc @@ -1 +1,2 @@ = Screencasts +:type: collection diff --git a/src/content/en/slide/2020/10/19/feature-flags.adoc b/src/content/en/slide/2020/10/19/feature-flags.adoc index 553cf4c..1035903 100644 --- a/src/content/en/slide/2020/10/19/feature-flags.adoc +++ b/src/content/en/slide/2020/10/19/feature-flags.adoc @@ -1,230 +1,10 @@ ---- -# Rollout, feature flag, experiment, operational toggle += Rollout, feature flag, experiment, operational toggle +:deck: feature-flags.pdf +:article: link:../../../../blog/2020/10/19/feature-flags.html -@Different use cases for backend, frontend and mobile +Different use cases for backend, frontend and mobile. ---- -. -. -. -# "Feature flags" tend to come up when talking about continuous deployment +link:{deck}[See the PDF]. ---- -. -. -. -. -@CI: continuous integration -. -@CD: continuous delivery -. -@CD: continuous deployment - ---- -## Types -. -. -. -1. rollout -2. feature flag -3. experiment -4. operational toggle - -% {favicon.svg} ---- -## Rollout - -# For *rolling out* a new version of software - -Short-lived using percentages - -% FIXME: links -- a new deployment of kubernetes -- new APK released to the Play Store - ---- -## Feature flag - -# For turning a feature *on* or *off* - -Medium-lived using allow list, A/B test, percentage, app version, etc. - -- :new-chargeback-flow -- :new-debit-card-activation-screen - ---- -## Experiment - -# For analysing behaviour - -Medium-lived using allow list and A/B test - -- :debit-withdrawal-test - ---- -## Operational toggle - -# For disabling features in #crash-like situations - -Long-lived using percentage - -- :bank-barcode-payment -- :savings-bank-barcode-query-provider - ---- -. -. -@We know know about the types -# But they have different relevance for backend, frontend and mobile - ---- -## backend -. -. -1. rollout: k8s blue/green, canary and ~common-rollout~ common-xp -2. feature flag: ~common-rollout~ common-xp and datasets -3. experiment: common-xp -4. operational toggle: ~common-rollout~ common-xp - ---- -## frontend -. -. -1. rollout: CDN and page refreshes -2. feature flag: percentages and maybe IPs (no :customer/id on the website) -3. experiment: via dynamic backend control -4. operational toggle: via dynamic backend control - ---- -## backend -. -. -1. rollout: app stores -2. feature flag: via dynamic backend control -3. experiment: via dynamic backend control -4. operational toggle: via dynamic backend control - ---- -. -. -@Key differentiator is -# how much *control* we have over the environment - ---- -## backend -# full control -% FIXME: emoji -% 🎉 - ---- -## frontend -# partial control -We choose when to make a new version available - ---- -## mobile -# very limited control -- app stores can restrict updates (worse for iOS) -- customers still have to download new versions - ---- -# Costs -- more complex code -- compatibility with old app versions -- nesting is exponential - ---- -# Benefits -- dynamicity - ---- -## weighting costs × benefits -# The less control we have, the more we value dynamicity - ---- -## weighting costs × benefits -. -. -. -- backend: sometimes worth the cost -- frontend: almost always worth the cost -- mobile: *always* worth the cost - ---- -. -. -. -# Best practices - ---- -# dynamic content > feature flag -Always true for mobile, almost always for frontend - ---- -# Use :include-list for named groups -Always true for backend, frontend and mobile - - {:rules - #{{:types :include-list - :content {:filename "debit-team-members.txt"}}}} - ---- -# Always use :app-version -Only for mobile - - {:rules - #{{:types :app-version - :content {:min-version #{{:platform :android - :code 1000000} - {:platform :ios - :code 2000000}}}}}} - ---- -# Extend ~common-rollout~ common-xp if required - -That's how :include-list, :app-version, etc. were born - ---- -# Beware of many nested feature flags -True for backend, frontend and mobile - ---- -# Don't delete app-facing feature flags -True for mobile - ---- -. -. -. -# Include a feature flag on the whiteboarding phase - ---- -. -. -. -# Include deleting/retiring the feature flag at the end - ---- -# Avoid renaming a feature flag -Use :app-version with :min-version instead - ---- -. -. -. -# And most importantly... - ---- -# *Always* rely on a feature flag on the app -Never do a hotfix, avoid expedited releases at all costs - ---- -## References -. -% FIXME: links -1. "Feature Toggles (aka Feature Flags)", by Pete Hodgson -2. "Continuous integration vs. delivery vs. deployment", by Sten Pittet -3. Accelerate, by N. Forsgren, J. Humble and G. Kim -4. these slides: euandre.org/slide/ -5. prose version of this presentation -6. view source +_The prose version of this presentation is the article +{article}[Feature flags: differences between backend, frontend and mobile]._ diff --git a/src/content/en/slide/2020/10/19/feature-flags.eslaides b/src/content/en/slide/2020/10/19/feature-flags.eslaides new file mode 100644 index 0000000..3392e3e --- /dev/null +++ b/src/content/en/slide/2020/10/19/feature-flags.eslaides @@ -0,0 +1,235 @@ += Rollout, feature flag, experiment, operational toggle + +Different use cases for backend, frontend and mobile + +<<< + +== "Feature flags" tend to come up when talking about continuous deployment + +<<< + +[.lead] +CI: continuous integration +[.lead] +CD: continuous delivery +[.lead] +CD: continuous deployment + +<<< + +== Types +. rollout +. feature flag +. experiment +. operational toggle + +// {favicon.svg} + +<<< + +== Rollout + +=== For *rolling out* a new version of software + +Short-lived using percentages + +// FIXME: links +* a new deployment of kubernetes +* new APK released to the Play Store + +<<< + +== Feature flag + +=== For turning a feature *on* or *off* + +Medium-lived using allow list, A/B test, percentage, app version, etc. + +* :new-chargeback-flow +* :new-debit-card-activation-screen + +<<< + +== Experiment + +=== For analysing behaviour + +Medium-lived using allow list and A/B test + +* :debit-withdrawal-test + +<<< + +== Operational toggle + +=== For disabling features in #crash-like situations + +Long-lived using percentage + +* :bank-barcode-payment +* :savings-bank-barcode-query-provider + +<<< + +[.lead] +We know know about the types +== But they have different relevance for backend, frontend and mobile + +<<< + +== backend +. rollout: k8s blue/green, canary and [.line-through]#common-rollout# common-xp +. feature flag: [.line-through]#common-rollout# common-xp and datasets +. experiment: common-xp +. operational toggle: [.line-through]#common-rollout# common-xp + +<<< + +== frontend +. rollout: CDN and page refreshes +. feature flag: percentages and maybe IPs (no :customer/id on the website) +. experiment: via dynamic backend control +. operational toggle: via dynamic backend control + +<<< + +== backend +. rollout: app stores +. feature flag: via dynamic backend control +. experiment: via dynamic backend control +. operational toggle: via dynamic backend control + +<<< + +[.lead] +Key differentiator is +== how much *control* we have over the environment + +<<< + +== backend +=== full control +// FIXME: emoji +// 🎉 + +<<< + +== frontend +=== partial control +We choose when to make a new version available + +<<< + +== mobile +=== very limited control +* app stores can restrict updates (worse for iOS) +* customers still have to download new versions + +<<< + +== Costs +* more complex code +* compatibility with old app versions +* nesting is exponential + +<<< + +== Benefits +* dynamicity + +<<< + +== weighting costs × benefits +=== The less control we have, the more we value dynamicity + +<<< + +== weighting costs × benefits +* backend: sometimes worth the cost +* frontend: almost always worth the cost +* mobile: *always* worth the cost + +<<< + +== Best practices + +<<< + +== dynamic content > feature flag +Always true for mobile, almost always for frontend + +<<< + +== Use :include-list for named groups +Always true for backend, frontend and mobile + +---- +{:rules + #{{:types :include-list + :content {:filename "debit-team-members.txt"}}}} + +---- + +<<< + +== Always use :app-version +Only for mobile + +---- +{:rules + #{{:types :app-version + :content {:min-version #{{:platform :android + :code 1000000} + {:platform :ios + :code 2000000}}}}}} + +---- + +<<< + +== Extend [.line-through]#common-rollout# common-xp if required + +That's how :include-list, :app-version, etc. were born + +<<< + +== Beware of many nested feature flags +True for backend, frontend and mobile + +<<< + +== Don't delete app-facing feature flags +True for mobile + +<<< + +== Include a feature flag on the whiteboarding phase + +<<< + +== Include deleting/retiring the feature flag at the end + +<<< + +== Avoid renaming a feature flag +Use :app-version with :min-version instead + +<<< + +== And most importantly... + +<<< + +== *Always* rely on a feature flag on the app +Never do a hotfix, avoid expedited releases at all costs + +<<< + +== References +// FIXME: links +. "Feature Toggles (aka Feature Flags)", by Pete Hodgson +. "Continuous integration vs. delivery vs. deployment", by Sten Pittet +. Accelerate, by N. Forsgren, J. Humble and G. Kim +. these slides: euandre.org/slide/ +. prose version of this presentation +. view source diff --git a/src/content/en/slide/2020/11/14/local-first-hype.adoc b/src/content/en/slide/2020/11/14/local-first-hype.adoc index fd83115..2aeaf3f 100644 --- a/src/content/en/slide/2020/11/14/local-first-hype.adoc +++ b/src/content/en/slide/2020/11/14/local-first-hype.adoc @@ -1,204 +1,10 @@ -# On "local-first" += On local-first +:deck: local-first-hype.pdf +:article: link:../../../../blog/2020/11/14/local-first-review.html -@Beyond the CRDT silver bullet +Beyond the CRDT silver bullet. ---- -## Part 1 -# Exposition +link:{deck}[See the PDF]. ---- -## Target -... -- documents -- files -- personal data repositories -.. -Not: banking services, e-commerce, social networking, ride-sharing, etc. - ---- -... -# 7 ideals for local-first software - ---- -... -# 1 - no spinners: your work at your fingertips - ---- -... -# 2 - your work is not trapped on one device - ---- -... -# 3 - the network is optional - ---- -... -# 4 - seamless collaboration with your colleagues - ---- -... -# 5 - the long now - ---- -... -# 6 - security and privacy by default - ---- -... -# 7 - you retain ultimate ownership and control - ---- -## Towards a better future -.... -@ CRDTs (Conflict-free Replicated Data Types) as a Foundational Technology - ---- -## Use case -. - # in node A and node B - s = "Hello, World" - - # in node A - s = "Hello, Alice" - - # in node B - s = "Hello, Bob" - -How to reconcile those? -- Hello, ABloibce -- Hello, AliceBob -- Hello, BobAlice -- Hello, Alice -\... - ---- -# Existing CRDTs differ -- performance -- storage -- compression -- metadata overhead - ---- -... -# Hint towards the "automerge" CRDT - ---- -...... -@@show comparison table, page 9 - ---- -## Part 2 -# Critique - ---- -## Software license -... -@@"In our opinion, maintaining control and ownership of data does not mean that the software must necessarily be open source." - ---- -## Example 1 - intentional restriction -. - #!/bin/sh - TODAY="$(date +%s)" - LICENSE_EXPIRATION="$(date -d 2020-10-27 +%s)" - if [ "$TODAY" -ge "$LICENSE_EXPIRATION" ]; then - echo 'License expired!' - exit 1 - fi - echo $((2 + 2)) -. - # today - $ ./useful-adder.sh - 4 - - # tomorrow - $ ./useful-adder.sh - License expired! ---- -## Example 2 - unintentional restriction -. - # today - $ useful-program - # ... useful output ... - - # tomorrow, with more data - $ useful-program - ERROR: Panic! Stack overflow! - ---- -.. -# local-first *requires* free software - -Otherwise "The Long Now" (ideal nº5) is lost - ---- -## Denial of existing solutions -.. -@@"In principle it is possible to collaborate without a repository service, e.g. by sending patch files by email, but the majority of Git users rely on GitHub." -. -Solution: either GitHub+CRDTs or git send-email - ---- -## Plain-text formats -. -@@"Git is highly optimized for code and similar line-based text file" -. -It even pulls software to the plain text directtion, e.g.: -- delivery-templates -- common-core.protocols.config -. -Why not exploit that more? - ---- -## Ditching of web applications -.. -@@"The architecture of web apps remains fundamentally server-centric -. -% FIXME: links -Disagree. Contrast PouchDB with Android Instant Apps - ---- -## Costs are underrated -. -- storage -- backups -- maintenance -. -Example: blog vs vlog - ---- -## Real-time collaboration a bit overrated -. -It is only possible on the presence of reliable, medium-quality network connection -.. -@@"X also works when inside an elevator, subway or plane!" - ---- -## On CRDTs and developer experience -. -@@"For an app developer, how does the use of a CRDT-based data layer compare to existing storage layers like a SQL database, a filesystem, or CoreData? Is a distributed system harder to write software for? -. -@YES. -. -% FIXME: link -See "A Note on Distributed Computing" - ---- -## Conclusion -. -Why this is a "paper I love": it took offline-first and ran with it. -. -But a pinch of CRDT won't make the world local-first. -. -The tricky part is the end of the sentence: "in spite of the Cloud". - ---- -## References -. -% FIXME: links -1. "Local-First Software: You Own Your Data, in spite of the Cloud", by M. Kleppmann, A. Wiggins, P. Van Hardenberg and M. F. McGranaghan -2. The Morning Paper article -3. "A Note on Distributed Compiting", by J. Waldo, G. Wyant, A. Wollrath and S. Kendall -4. these slides: euandre.org/slide/ -5. prose version of this presentation -6. view source +_The prose version of this presentation is the article +{article}[Local-First Software: article review]._ diff --git a/src/content/en/slide/2020/11/14/local-first-hype.eslaides b/src/content/en/slide/2020/11/14/local-first-hype.eslaides new file mode 100644 index 0000000..8f44ad2 --- /dev/null +++ b/src/content/en/slide/2020/11/14/local-first-hype.eslaides @@ -0,0 +1,232 @@ += On "local-first" + +Beyond the CRDT silver bullet + +<<< + +== Part 1 +=== Exposition + +<<< + +== Target +... +* documents +* files +* personal data repositories +.. +Not: banking services, e-commerce, social networking, ride-sharing, etc. + +<<< + +... +== 7 ideals for local-first software + +<<< + +... +== 1 - no spinners: your work at your fingertips + +<<< + +... +== 2 - your work is not trapped on one device + +<<< + +... +== 3 - the network is optional + +<<< + +... +== 4 - seamless collaboration with your colleagues + +<<< + +... +== 5 - the long now + +<<< + +... +== 6 - security and privacy by default + +<<< + +... +== 7 - you retain ultimate ownership and control + +<<< + +== Towards a better future +.... +[.lead] +CRDTs (Conflict-free Replicated Data Types) as a Foundational Technology + +<<< + +== Use case +---- +# in node A and node B +s = "Hello, World" + +# in node A +s = "Hello, Alice" + +# in node B +s = "Hello, Bob" + +---- +How to reconcile those? +* Hello, ABloibce +* Hello, AliceBob +* Hello, BobAlice +* Hello, Alice +\... + +<<< + +== Existing CRDTs differ +* performance +* storage +* compression +* metadata overhead + +<<< + +... +== Hint towards the "automerge" CRDT + +<<< + +...... +[.lead] +@show comparison table, page 9 + +<<< + +== Part 2 +=== Critique + +<<< + +== Software license +... +[.lead] +@"In our opinion, maintaining control and ownership of data does not mean that the software must necessarily be open source." + +<<< + +== Example 1 - intentional restriction +---- +#!/bin/sh +TODAY="$(date +%s)" +LICENSE_EXPIRATION="$(date -d 2020-10-27 +%s)" +if [ "$TODAY" -ge "$LICENSE_EXPIRATION" ]; then + echo 'License expired!' + exit 1 +fi +echo $((2 + 2)) +---- +---- +# today +$ ./useful-adder.sh +4 + +# tomorrow +$ ./useful-adder.sh +License expired! +---- + +<<< + +== Example 2 - unintentional restriction +---- +# today +$ useful-program +# ... useful output ... + +# tomorrow, with more data +$ useful-program +ERROR: Panic! Stack overflow! + +---- + +<<< + +.. +== local-first *requires* free software + +Otherwise "The Long Now" (ideal nº5) is lost + +<<< + +== Denial of existing solutions +.. +[.lead] +@"In principle it is possible to collaborate without a repository service, e.g. by sending patch files by email, but the majority of Git users rely on GitHub." +Solution: either GitHub+CRDTs or git send-email + +<<< + +== Plain-text formats +[.lead] +@"Git is highly optimized for code and similar line-based text file" +It even pulls software to the plain text directtion, e.g.: +* delivery-templates +* common-core.protocols.config +Why not exploit that more? + +<<< + +== Ditching of web applications +.. +[.lead] +@"The architecture of web apps remains fundamentally server-centric +// FIXME: links +Disagree. Contrast PouchDB with Android Instant Apps + +<<< + +== Costs are underrated +* storage +* backups +* maintenance +Example: blog vs vlog + +<<< + +== Real-time collaboration a bit overrated +It is only possible on the presence of reliable, medium-quality network connection +.. +[.lead] +@"X also works when inside an elevator, subway or plane!" + +<<< + +== On CRDTs and developer experience +[.lead] +@"For an app developer, how does the use of a CRDT-based data layer compare to existing storage layers like a SQL database, a filesystem, or CoreData? Is a distributed system harder to write software for? +[.lead] +YES. +// FIXME: link +See "A Note on Distributed Computing" + +<<< + +== Conclusion +Why this is a "paper I love": it took offline-first and ran with it. +But a pinch of CRDT won't make the world local-first. +The tricky part is the end of the sentence: "in spite of the Cloud". + +<<< + +== References +// FIXME: links +. "Local-First Software: You Own Your Data, in spite of the Cloud", by M. Kleppmann, A. Wiggins, P. Van Hardenberg and M. F. McGranaghan +. The Morning Paper article +. "A Note on Distributed Compiting", by J. Waldo, G. Wyant, A. Wollrath and S. Kendall +. these slides: euandre.org/slide/ +. prose version of this presentation +. view source diff --git a/src/content/en/slide/categories.adoc b/src/content/en/slide/categories.adoc new file mode 100644 index 0000000..feb64ff --- /dev/null +++ b/src/content/en/slide/categories.adoc @@ -0,0 +1,2 @@ += Articles by category +:type: categories diff --git a/src/content/en/slide/index.adoc b/src/content/en/slide/index.adoc new file mode 100644 index 0000000..193c98a --- /dev/null +++ b/src/content/en/slide/index.adoc @@ -0,0 +1,2 @@ += Slides +:type: collection diff --git a/src/content/en/til/2026/09/05/multiline-sh-comments.adoc b/src/content/en/til/2026/09/05/multiline-sh-comments.adoc new file mode 100644 index 0000000..13fef6d --- /dev/null +++ b/src/content/en/til/2026/09/05/multiline-sh-comments.adoc @@ -0,0 +1,66 @@ += Multiline comments in POSIX sh +:categories: sh + +:posixsh: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_07_04 + + +I realized one can use heredocs for multiline comments in sh: + +[source,sh] +---- +cat <<'COMMENT' > /dev/null +if wip; then + unfinished and broken syntax > +fii +COMMENT +---- + + +...instead of: + +[source,sh] +---- +# if wip; then +# unfinished and broken syntax > +# fii +---- + + +What is going on: the {posixsh}[language defines] `<<` as a redirect of the +"here-document" type. After `<<` you can put anything, and sh will use that as +a token to look for on the following lines: + +[source,sh] +---- +cat <<'bleh' +... +bleh +---- + +Make sure to include the `'quotes'` around the word, otherwise anything with a +`$` would get replaced just like a `"double-quoted"` string. + +"bleh" works fine, like any word would. + +But that example left as-is would print the string to stdout. To avoid that, we +shove the contents to `/dev/null`. So it isn't technically a comment, its more +like a constant string that gets emitted and discarded. + +Sure its hacky, but at this point what in sh isn't? It even supports nesting! + +[source,sh] +---- +cat <<'COMMENT1' > /dev/null + +cat <<'COMMENT' > /dev/null + +# ... code ... + +COMMENT + +COMMENT1 +---- + + +I've never committed any code with this, just used while debugging sh code. +Make sure to handle with care diff --git a/src/content/en/til/index.adoc b/src/content/en/til/index.adoc index 7e85335..2d100d0 100644 --- a/src/content/en/til/index.adoc +++ b/src/content/en/til/index.adoc @@ -1,4 +1,5 @@ = Today I Learned +:type: collection :anna-e-so: https://til.flourishing.stream/ diff --git a/src/content/favicon.ico b/src/content/favicon.ico Binary files differindex 8f2130a..b35a439 100644 --- a/src/content/favicon.ico +++ b/src/content/favicon.ico diff --git a/src/content/favicon.png b/src/content/favicon.png Binary files differindex 136d8cb..bab901f 100644 --- a/src/content/favicon.png +++ b/src/content/favicon.png diff --git a/src/content/img/envelope/dark.svg b/src/content/img/envelope.svg index f521a8f..aba3a80 100644 --- a/src/content/img/envelope/dark.svg +++ b/src/content/img/envelope.svg @@ -1,6 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <style> + svg { fill: black } + @media (prefers-color-scheme: dark) { + svg { fill: white } + } + </style> <path - fill="white" d="M1664 1504v-768q-32 36-69 66-268 206-426 338-51 43-83 67t-86.5 48.5-102.5 24.5h-2q-48 0-102.5-24.5t-86.5-48.5-83-67q-158-132-426-338-37-30-69-66v768q0 13 9.5 22.5t22.5 9.5h1472q13 0 22.5-9.5t9.5-22.5zm0-1051v-24.5l-.5-13-3-12.5-5.5-9-9-7.5-14-2.5h-1472q-13 0-22.5 9.5t-9.5 22.5q0 168 147 284 193 152 401 317 6 5 35 29.5t46 37.5 44.5 31.5 50.5 27.5 43 9h2q20 0 43-9t50.5-27.5 44.5-31.5 46-37.5 35-29.5q208-165 401-317 54-43 100.5-115.5t46.5-131.5zm128-37v1088q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-1088q0-66 47-113t113-47h1472q66 0 113 47t47 113z" /> </svg> diff --git a/src/content/img/envelope/light.svg b/src/content/img/envelope/light.svg deleted file mode 100644 index 12aba9f..0000000 --- a/src/content/img/envelope/light.svg +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> - <path - fill="black" - d="M1664 1504v-768q-32 36-69 66-268 206-426 338-51 43-83 67t-86.5 48.5-102.5 24.5h-2q-48 0-102.5-24.5t-86.5-48.5-83-67q-158-132-426-338-37-30-69-66v768q0 13 9.5 22.5t22.5 9.5h1472q13 0 22.5-9.5t9.5-22.5zm0-1051v-24.5l-.5-13-3-12.5-5.5-9-9-7.5-14-2.5h-1472q-13 0-22.5 9.5t-9.5 22.5q0 168 147 284 193 152 401 317 6 5 35 29.5t46 37.5 44.5 31.5 50.5 27.5 43 9h2q20 0 43-9t50.5-27.5 44.5-31.5 46-37.5 35-29.5q208-165 401-317 54-43 100.5-115.5t46.5-131.5zm128-37v1088q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-1088q0-66 47-113t113-47h1472q66 0 113 47t47 113z" /> -</svg> diff --git a/src/content/img/favicon.svg b/src/content/img/favicon.svg index ce566b2..1916d84 100644 --- a/src/content/img/favicon.svg +++ b/src/content/img/favicon.svg @@ -1,62 +1,92 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> + <style> + svg { + fill: #1f6f5b; + } + @media (prefers-color-scheme: dark) { + fill: 5cc2a2; + } + </style> + <path d="M 0 0 L 1 0 L 1 1 L 0 1 L 0 0 Z" /> + <path d="M 0 15 L 1 15 L 1 16 L 0 16 L 0 15 Z" /> + <path d="M 15 0 L 16 0 L 16 1 L 15 1 L 15 0 Z" /> + <path d="M 1 0 L 2 0 L 2 1 L 1 1 L 1 0 Z" /> + <path d="M 1 15 L 2 15 L 2 16 L 1 16 L 1 15 Z" /> + <path d="M 0 1 L 1 1 L 1 2 L 0 2 L 0 1 Z" /> + <path d="M 15 1 L 16 1 L 16 2 L 15 2 L 15 1 Z" /> + <path d="M 2 0 L 3 0 L 3 1 L 2 1 L 2 0 Z" /> + <path d="M 2 15 L 3 15 L 3 16 L 2 16 L 2 15 Z" /> + <path d="M 0 2 L 1 2 L 1 3 L 0 3 L 0 2 Z" /> + <path d="M 15 2 L 16 2 L 16 3 L 15 3 L 15 2 Z" /> + <path d="M 3 0 L 4 0 L 4 1 L 3 1 L 3 0 Z" /> + <path d="M 3 15 L 4 15 L 4 16 L 3 16 L 3 15 Z" /> + <path d="M 0 3 L 1 3 L 1 4 L 0 4 L 0 3 Z" /> + <path d="M 15 3 L 16 3 L 16 4 L 15 4 L 15 3 Z" /> + <path d="M 4 0 L 5 0 L 5 1 L 4 1 L 4 0 Z" /> + <path d="M 4 15 L 5 15 L 5 16 L 4 16 L 4 15 Z" /> + <path d="M 0 4 L 1 4 L 1 5 L 0 5 L 0 4 Z" /> + <path d="M 15 4 L 16 4 L 16 5 L 15 5 L 15 4 Z" /> + <path d="M 5 0 L 6 0 L 6 1 L 5 1 L 5 0 Z" /> + <path d="M 5 15 L 6 15 L 6 16 L 5 16 L 5 15 Z" /> + <path d="M 0 5 L 1 5 L 1 6 L 0 6 L 0 5 Z" /> + <path d="M 15 5 L 16 5 L 16 6 L 15 6 L 15 5 Z" /> + <path d="M 6 0 L 7 0 L 7 1 L 6 1 L 6 0 Z" /> + <path d="M 6 15 L 7 15 L 7 16 L 6 16 L 6 15 Z" /> + <path d="M 0 6 L 1 6 L 1 7 L 0 7 L 0 6 Z" /> + <path d="M 15 6 L 16 6 L 16 7 L 15 7 L 15 6 Z" /> + <path d="M 7 0 L 8 0 L 8 1 L 7 1 L 7 0 Z" /> + <path d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> + <path d="M 0 7 L 1 7 L 1 8 L 0 8 L 0 7 Z" /> + <path d="M 15 7 L 16 7 L 16 8 L 15 8 L 15 7 Z" /> + <path d="M 8 0 L 9 0 L 9 1 L 8 1 L 8 0 Z" /> + <path d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> <path d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" /> + <path d="M 15 8 L 16 8 L 16 9 L 15 9 L 15 8 Z" /> + <path d="M 9 0 L 10 0 L 10 1 L 9 1 L 9 0 Z" /> + <path d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> + <path d="M 0 9 L 1 9 L 1 10 L 0 10 L 0 9 Z" /> + <path d="M 15 9 L 16 9 L 16 10 L 15 10 L 15 9 Z" /> + <path d="M 10 0 L 11 0 L 11 1 L 10 1 L 10 0 Z" /> + <path d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> + <path d="M 0 10 L 1 10 L 1 11 L 0 11 L 0 10 Z" /> + <path d="M 15 10 L 16 10 L 16 11 L 15 11 L 15 10 Z" /> + <path d="M 11 0 L 12 0 L 12 1 L 11 1 L 11 0 Z" /> + <path d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> + <path d="M 0 11 L 1 11 L 1 12 L 0 12 L 0 11 Z" /> + <path d="M 15 11 L 16 11 L 16 12 L 15 12 L 15 11 Z" /> + <path d="M 12 0 L 13 0 L 13 1 L 12 1 L 12 0 Z" /> + <path d="M 12 15 L 13 15 L 13 16 L 12 16 L 12 15 Z" /> + <path d="M 0 12 L 1 12 L 1 13 L 0 13 L 0 12 Z" /> + <path d="M 15 12 L 16 12 L 16 13 L 15 13 L 15 12 Z" /> + <path d="M 13 0 L 14 0 L 14 1 L 13 1 L 13 0 Z" /> + <path d="M 13 15 L 14 15 L 14 16 L 13 16 L 13 15 Z" /> <path d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" /> - <path d="M 1 8 L 2 8 L 2 9 L 1 9 L 1 8 Z" /> - <path d="M 1 13 L 2 13 L 2 14 L 1 14 L 1 13 Z" /> - <path d="M 2 8 L 3 8 L 3 9 L 2 9 L 2 8 Z" /> - <path d="M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 Z" /> - <path d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> - <path d="M 3 13 L 4 13 L 4 14 L 3 14 L 3 13 Z" /> + <path d="M 15 13 L 16 13 L 16 14 L 15 14 L 15 13 Z" /> + <path d="M 14 0 L 15 0 L 15 1 L 14 1 L 14 0 Z" /> + <path d="M 14 15 L 15 15 L 15 16 L 14 16 L 14 15 Z" /> + <path d="M 0 14 L 1 14 L 1 15 L 0 15 L 0 14 Z" /> + <path d="M 15 14 L 16 14 L 16 15 L 15 15 L 15 14 Z" /> + <path d="M 15 15 L 16 15 L 16 16 L 15 16 L 15 15 Z" /> <path d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> - <path d="M 4 8 L 5 8 L 5 9 L 4 9 L 4 8 Z" /> - <path d="M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 Z" /> - <path d="M 5 6 L 6 6 L 6 7 L 5 7 L 5 6 Z" /> <path d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> - <path d="M 5 13 L 6 13 L 6 14 L 5 14 L 5 13 Z" /> - <path d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" /> - <path d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" /> - <path d="M 6 14 L 7 14 L 7 15 L 6 15 L 6 14 Z" /> - <path d="M 7 1 L 8 1 L 8 2 L 7 2 L 7 1 Z" /> - <path d="M 7 14 L 8 14 L 8 15 L 7 15 L 7 14 Z" /> - <path d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> - <path d="M 7 2 L 8 2 L 8 3 L 7 3 L 7 2 Z" /> - <path d="M 7 3 L 8 3 L 8 4 L 7 4 L 7 3 Z" /> - <path d="M 7 4 L 8 4 L 8 5 L 7 5 L 7 4 Z" /> - <path d="M 7 5 L 8 5 L 8 6 L 7 6 L 7 5 Z" /> - <path d="M 8 1 L 9 1 L 9 2 L 8 2 L 8 1 Z" /> - <path d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> - <path d="M 9 1 L 10 1 L 10 2 L 9 2 L 9 1 Z" /> - <path d="M 9 2 L 10 2 L 10 3 L 9 3 L 9 2 Z" /> - <path d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" /> - <path d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> - <path d="M 10 2 L 11 2 L 11 3 L 10 3 L 10 2 Z" /> - <path d="M 10 3 L 11 3 L 11 4 L 10 4 L 10 3 Z" /> - <path d="M 10 4 L 11 4 L 11 5 L 10 5 L 10 4 Z" /> - <path d="M 10 5 L 11 5 L 11 6 L 10 6 L 10 5 Z" /> - <path d="M 10 6 L 11 6 L 11 7 L 10 7 L 10 6 Z" /> - <path d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" /> + <path d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> + <path d="M 6 8 L 7 8 L 7 9 L 6 9 L 6 8 Z" /> + <path d="M 3 9 L 4 9 L 4 10 L 3 10 L 3 9 Z" /> + <path d="M 4 9 L 5 9 L 5 10 L 4 10 L 4 9 Z" /> + <path d="M 5 9 L 6 9 L 6 10 L 5 10 L 5 9 Z" /> + <path d="M 3 10 L 4 10 L 4 11 L 3 11 L 3 10 Z" /> + <path d="M 4 11 L 5 11 L 5 12 L 4 12 L 4 11 Z" /> + <path d="M 5 11 L 6 11 L 6 12 L 5 12 L 5 11 Z" /> + <path d="M 8 7 L 9 7 L 9 8 L 8 8 L 8 7 Z" /> + <path d="M 11 7 L 12 7 L 12 8 L 11 8 L 11 7 Z" /> + <path d="M 8 8 L 9 8 L 9 9 L 8 9 L 8 8 Z" /> <path d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> - <path d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> + <path d="M 8 9 L 9 9 L 9 10 L 8 10 L 8 9 Z" /> + <path d="M 11 9 L 12 9 L 12 10 L 11 10 L 11 9 Z" /> + <path d="M 8 10 L 9 10 L 9 11 L 8 11 L 8 10 Z" /> <path d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> - <path d="M 11 12 L 12 12 L 12 13 L 11 13 L 11 12 Z" /> - <path d="M 11 14 L 12 14 L 12 15 L 11 15 L 11 14 Z" /> - <path d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> - <path d="M 12 6 L 13 6 L 13 7 L 12 7 L 12 6 Z" /> - <path d="M 12 8 L 13 8 L 13 9 L 12 9 L 12 8 Z" /> - <path d="M 12 10 L 13 10 L 13 11 L 12 11 L 12 10 Z" /> - <path d="M 12 12 L 13 12 L 13 13 L 12 13 L 12 12 Z" /> - <path d="M 12 14 L 13 14 L 13 15 L 12 15 L 12 14 Z" /> - <path d="M 13 6 L 14 6 L 14 7 L 13 7 L 13 6 Z" /> - <path d="M 13 8 L 14 8 L 14 9 L 13 9 L 13 8 Z" /> - <path d="M 13 10 L 14 10 L 14 11 L 13 11 L 13 10 Z" /> - <path d="M 13 12 L 14 12 L 14 13 L 13 13 L 13 12 Z" /> - <path d="M 13 13 L 14 13 L 14 14 L 13 14 L 13 13 Z" /> - <path d="M 13 14 L 14 14 L 14 15 L 13 15 L 13 14 Z" /> - <path d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" /> - <path d="M 14 8 L 15 8 L 15 9 L 14 9 L 14 8 Z" /> - <path d="M 14 9 L 15 9 L 15 10 L 14 10 L 14 9 Z" /> - <path d="M 14 10 L 15 10 L 15 11 L 14 11 L 14 10 Z" /> - <path d="M 14 11 L 15 11 L 15 12 L 14 12 L 14 11 Z" /> - <path d="M 14 12 L 15 12 L 15 13 L 14 13 L 14 12 Z" /> + <path d="M 9 11 L 10 11 L 10 12 L 9 12 L 9 11 Z" /> + <path d="M 10 11 L 11 11 L 11 12 L 10 12 L 10 11 Z" /> + <path d="M 11 11 L 12 11 L 12 12 L 11 12 L 11 11 Z" /> </svg> diff --git a/src/content/img/link/dark.svg b/src/content/img/link.svg index fd6ca35..7a0aa14 100644 --- a/src/content/img/link/dark.svg +++ b/src/content/img/link.svg @@ -1,7 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <svg width="22" height="22" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <style> + svg { + fill: black; + } + @media (prefers-color-scheme: dark) { + svg { + fill: white; + } + } + </style> <path - fill="white" fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z" /> </svg> diff --git a/src/content/img/link/light.svg b/src/content/img/link/light.svg deleted file mode 100644 index fd9033f..0000000 --- a/src/content/img/link/light.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<svg width="22" height="22" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> - <path - fill="black" - fill-rule="evenodd" - d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z" /> -</svg> diff --git a/src/content/img/lock/dark.svg b/src/content/img/lock.svg index 98a36bc..faad538 100644 --- a/src/content/img/lock/dark.svg +++ b/src/content/img/lock.svg @@ -1,6 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <style> + svg { + fill: black; + } + @media (prefers-color-scheme: dark) { + svg { + fill: white; + } + } + </style> <path - fill="white" d="M640 768h512v-192q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-576q0-40 28-68t68-28h32v-192q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z" /> </svg> diff --git a/src/content/img/lock/light.svg b/src/content/img/lock/light.svg deleted file mode 100644 index d449467..0000000 --- a/src/content/img/lock/light.svg +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<svg width="22" height="22" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> - <path - fill="black" - d="M640 768h512v-192q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-576q0-40 28-68t68-28h32v-192q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z" /> -</svg> diff --git a/src/content/img/logo.svg b/src/content/img/logo.svg new file mode 100644 index 0000000..662e0d5 --- /dev/null +++ b/src/content/img/logo.svg @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> + <style> + svg { fill: black } + .a { fill: #1F6F5B } + @media (prefers-color-scheme: dark) { + svg { fill: white } + .a { fill: #5CC2A2 } + } + </style> + <path d="M 0 0 L 1 0 L 1 1 L 0 1 L 0 0 Z" /> + <path d="M 0 15 L 1 15 L 1 16 L 0 16 L 0 15 Z" /> + <path d="M 15 0 L 16 0 L 16 1 L 15 1 L 15 0 Z" /> + <path d="M 1 0 L 2 0 L 2 1 L 1 1 L 1 0 Z" /> + <path d="M 1 15 L 2 15 L 2 16 L 1 16 L 1 15 Z" /> + <path d="M 0 1 L 1 1 L 1 2 L 0 2 L 0 1 Z" /> + <path d="M 15 1 L 16 1 L 16 2 L 15 2 L 15 1 Z" /> + <path d="M 2 0 L 3 0 L 3 1 L 2 1 L 2 0 Z" /> + <path d="M 2 15 L 3 15 L 3 16 L 2 16 L 2 15 Z" /> + <path d="M 0 2 L 1 2 L 1 3 L 0 3 L 0 2 Z" /> + <path d="M 15 2 L 16 2 L 16 3 L 15 3 L 15 2 Z" /> + <path d="M 3 0 L 4 0 L 4 1 L 3 1 L 3 0 Z" /> + <path d="M 3 15 L 4 15 L 4 16 L 3 16 L 3 15 Z" /> + <path d="M 0 3 L 1 3 L 1 4 L 0 4 L 0 3 Z" /> + <path d="M 15 3 L 16 3 L 16 4 L 15 4 L 15 3 Z" /> + <path d="M 4 0 L 5 0 L 5 1 L 4 1 L 4 0 Z" /> + <path d="M 4 15 L 5 15 L 5 16 L 4 16 L 4 15 Z" /> + <path d="M 0 4 L 1 4 L 1 5 L 0 5 L 0 4 Z" /> + <path d="M 15 4 L 16 4 L 16 5 L 15 5 L 15 4 Z" /> + <path d="M 5 0 L 6 0 L 6 1 L 5 1 L 5 0 Z" /> + <path d="M 5 15 L 6 15 L 6 16 L 5 16 L 5 15 Z" /> + <path d="M 0 5 L 1 5 L 1 6 L 0 6 L 0 5 Z" /> + <path d="M 15 5 L 16 5 L 16 6 L 15 6 L 15 5 Z" /> + <path d="M 6 0 L 7 0 L 7 1 L 6 1 L 6 0 Z" /> + <path d="M 6 15 L 7 15 L 7 16 L 6 16 L 6 15 Z" /> + <path d="M 0 6 L 1 6 L 1 7 L 0 7 L 0 6 Z" /> + <path d="M 15 6 L 16 6 L 16 7 L 15 7 L 15 6 Z" /> + <path d="M 7 0 L 8 0 L 8 1 L 7 1 L 7 0 Z" /> + <path d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> + <path d="M 0 7 L 1 7 L 1 8 L 0 8 L 0 7 Z" /> + <path d="M 15 7 L 16 7 L 16 8 L 15 8 L 15 7 Z" /> + <path d="M 8 0 L 9 0 L 9 1 L 8 1 L 8 0 Z" /> + <path d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> + <path d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" /> + <path d="M 15 8 L 16 8 L 16 9 L 15 9 L 15 8 Z" /> + <path d="M 9 0 L 10 0 L 10 1 L 9 1 L 9 0 Z" /> + <path d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> + <path d="M 0 9 L 1 9 L 1 10 L 0 10 L 0 9 Z" /> + <path d="M 15 9 L 16 9 L 16 10 L 15 10 L 15 9 Z" /> + <path d="M 10 0 L 11 0 L 11 1 L 10 1 L 10 0 Z" /> + <path d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> + <path d="M 0 10 L 1 10 L 1 11 L 0 11 L 0 10 Z" /> + <path d="M 15 10 L 16 10 L 16 11 L 15 11 L 15 10 Z" /> + <path d="M 11 0 L 12 0 L 12 1 L 11 1 L 11 0 Z" /> + <path d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> + <path d="M 0 11 L 1 11 L 1 12 L 0 12 L 0 11 Z" /> + <path d="M 15 11 L 16 11 L 16 12 L 15 12 L 15 11 Z" /> + <path d="M 12 0 L 13 0 L 13 1 L 12 1 L 12 0 Z" /> + <path d="M 12 15 L 13 15 L 13 16 L 12 16 L 12 15 Z" /> + <path d="M 0 12 L 1 12 L 1 13 L 0 13 L 0 12 Z" /> + <path d="M 15 12 L 16 12 L 16 13 L 15 13 L 15 12 Z" /> + <path d="M 13 0 L 14 0 L 14 1 L 13 1 L 13 0 Z" /> + <path d="M 13 15 L 14 15 L 14 16 L 13 16 L 13 15 Z" /> + <path d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" /> + <path d="M 15 13 L 16 13 L 16 14 L 15 14 L 15 13 Z" /> + <path d="M 14 0 L 15 0 L 15 1 L 14 1 L 14 0 Z" /> + <path d="M 14 15 L 15 15 L 15 16 L 14 16 L 14 15 Z" /> + <path d="M 0 14 L 1 14 L 1 15 L 0 15 L 0 14 Z" /> + <path d="M 15 14 L 16 14 L 16 15 L 15 15 L 15 14 Z" /> + <path d="M 15 15 L 16 15 L 16 16 L 15 16 L 15 15 Z" /> + <path class="a" d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> + <path class="a" d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> + <path class="a" d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> + <path class="a" d="M 6 8 L 7 8 L 7 9 L 6 9 L 6 8 Z" /> + <path class="a" d="M 3 9 L 4 9 L 4 10 L 3 10 L 3 9 Z" /> + <path class="a" d="M 4 9 L 5 9 L 5 10 L 4 10 L 4 9 Z" /> + <path class="a" d="M 5 9 L 6 9 L 6 10 L 5 10 L 5 9 Z" /> + <path class="a" d="M 3 10 L 4 10 L 4 11 L 3 11 L 3 10 Z" /> + <path class="a" d="M 4 11 L 5 11 L 5 12 L 4 12 L 4 11 Z" /> + <path class="a" d="M 5 11 L 6 11 L 6 12 L 5 12 L 5 11 Z" /> + <path class="a" d="M 8 7 L 9 7 L 9 8 L 8 8 L 8 7 Z" /> + <path class="a" d="M 11 7 L 12 7 L 12 8 L 11 8 L 11 7 Z" /> + <path class="a" d="M 8 8 L 9 8 L 9 9 L 8 9 L 8 8 Z" /> + <path class="a" d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> + <path class="a" d="M 8 9 L 9 9 L 9 10 L 8 10 L 8 9 Z" /> + <path class="a" d="M 11 9 L 12 9 L 12 10 L 11 10 L 11 9 Z" /> + <path class="a" d="M 8 10 L 9 10 L 9 11 L 8 11 L 8 10 Z" /> + <path class="a" d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> + <path class="a" d="M 9 11 L 10 11 L 10 12 L 9 12 L 9 11 Z" /> + <path class="a" d="M 10 11 L 11 11 L 11 12 L 10 12 L 10 11 Z" /> + <path class="a" d="M 11 11 L 12 11 L 12 12 L 11 12 L 11 11 Z" /> +</svg> diff --git a/src/content/img/logo/dark.svg b/src/content/img/logo/dark.svg deleted file mode 100644 index 96e0f87..0000000 --- a/src/content/img/logo/dark.svg +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> - <path fill="white" d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" /> - <path fill="white" d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" /> - <path fill="white" d="M 1 8 L 2 8 L 2 9 L 1 9 L 1 8 Z" /> - <path fill="white" d="M 1 13 L 2 13 L 2 14 L 1 14 L 1 13 Z" /> - <path fill="white" d="M 2 8 L 3 8 L 3 9 L 2 9 L 2 8 Z" /> - <path fill="white" d="M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 Z" /> - <path fill="white" d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> - <path fill="white" d="M 3 13 L 4 13 L 4 14 L 3 14 L 3 13 Z" /> - <path fill="white" d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> - <path fill="white" d="M 4 8 L 5 8 L 5 9 L 4 9 L 4 8 Z" /> - <path fill="white" d="M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 Z" /> - <path fill="white" d="M 5 6 L 6 6 L 6 7 L 5 7 L 5 6 Z" /> - <path fill="white" d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> - <path fill="white" d="M 5 13 L 6 13 L 6 14 L 5 14 L 5 13 Z" /> - <path fill="white" d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" /> - <path fill="white" d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" /> - <path fill="white" d="M 6 14 L 7 14 L 7 15 L 6 15 L 6 14 Z" /> - <path fill="white" d="M 7 1 L 8 1 L 8 2 L 7 2 L 7 1 Z" /> - <path fill="white" d="M 7 14 L 8 14 L 8 15 L 7 15 L 7 14 Z" /> - <path fill="white" d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> - <path fill="white" d="M 7 2 L 8 2 L 8 3 L 7 3 L 7 2 Z" /> - <path fill="white" d="M 7 3 L 8 3 L 8 4 L 7 4 L 7 3 Z" /> - <path fill="white" d="M 7 4 L 8 4 L 8 5 L 7 5 L 7 4 Z" /> - <path fill="white" d="M 7 5 L 8 5 L 8 6 L 7 6 L 7 5 Z" /> - <path fill="white" d="M 8 1 L 9 1 L 9 2 L 8 2 L 8 1 Z" /> - <path fill="white" d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> - <path fill="white" d="M 9 1 L 10 1 L 10 2 L 9 2 L 9 1 Z" /> - <path fill="white" d="M 9 2 L 10 2 L 10 3 L 9 3 L 9 2 Z" /> - <path fill="white" d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" /> - <path fill="white" d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> - <path fill="white" d="M 10 2 L 11 2 L 11 3 L 10 3 L 10 2 Z" /> - <path fill="white" d="M 10 3 L 11 3 L 11 4 L 10 4 L 10 3 Z" /> - <path fill="white" d="M 10 4 L 11 4 L 11 5 L 10 5 L 10 4 Z" /> - <path fill="white" d="M 10 5 L 11 5 L 11 6 L 10 6 L 10 5 Z" /> - <path fill="white" d="M 10 6 L 11 6 L 11 7 L 10 7 L 10 6 Z" /> - <path fill="white" d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" /> - <path fill="white" d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> - <path fill="white" d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> - <path fill="white" d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> - <path fill="white" d="M 11 12 L 12 12 L 12 13 L 11 13 L 11 12 Z" /> - <path fill="white" d="M 11 14 L 12 14 L 12 15 L 11 15 L 11 14 Z" /> - <path fill="white" d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> - <path fill="white" d="M 12 6 L 13 6 L 13 7 L 12 7 L 12 6 Z" /> - <path fill="white" d="M 12 8 L 13 8 L 13 9 L 12 9 L 12 8 Z" /> - <path fill="white" d="M 12 10 L 13 10 L 13 11 L 12 11 L 12 10 Z" /> - <path fill="white" d="M 12 12 L 13 12 L 13 13 L 12 13 L 12 12 Z" /> - <path fill="white" d="M 12 14 L 13 14 L 13 15 L 12 15 L 12 14 Z" /> - <path fill="white" d="M 13 6 L 14 6 L 14 7 L 13 7 L 13 6 Z" /> - <path fill="white" d="M 13 8 L 14 8 L 14 9 L 13 9 L 13 8 Z" /> - <path fill="white" d="M 13 10 L 14 10 L 14 11 L 13 11 L 13 10 Z" /> - <path fill="white" d="M 13 12 L 14 12 L 14 13 L 13 13 L 13 12 Z" /> - <path fill="white" d="M 13 13 L 14 13 L 14 14 L 13 14 L 13 13 Z" /> - <path fill="white" d="M 13 14 L 14 14 L 14 15 L 13 15 L 13 14 Z" /> - <path fill="white" d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" /> - <path fill="white" d="M 14 8 L 15 8 L 15 9 L 14 9 L 14 8 Z" /> - <path fill="white" d="M 14 9 L 15 9 L 15 10 L 14 10 L 14 9 Z" /> - <path fill="white" d="M 14 10 L 15 10 L 15 11 L 14 11 L 14 10 Z" /> - <path fill="white" d="M 14 11 L 15 11 L 15 12 L 14 12 L 14 11 Z" /> - <path fill="white" d="M 14 12 L 15 12 L 15 13 L 14 13 L 14 12 Z" /> -</svg> diff --git a/src/content/img/logo/light.svg b/src/content/img/logo/light.svg deleted file mode 100644 index ab6000b..0000000 --- a/src/content/img/logo/light.svg +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> - <path fill="black" d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" /> - <path fill="black" d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" /> - <path fill="black" d="M 1 8 L 2 8 L 2 9 L 1 9 L 1 8 Z" /> - <path fill="black" d="M 1 13 L 2 13 L 2 14 L 1 14 L 1 13 Z" /> - <path fill="black" d="M 2 8 L 3 8 L 3 9 L 2 9 L 2 8 Z" /> - <path fill="black" d="M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 Z" /> - <path fill="black" d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> - <path fill="black" d="M 3 13 L 4 13 L 4 14 L 3 14 L 3 13 Z" /> - <path fill="black" d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> - <path fill="black" d="M 4 8 L 5 8 L 5 9 L 4 9 L 4 8 Z" /> - <path fill="black" d="M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 Z" /> - <path fill="black" d="M 5 6 L 6 6 L 6 7 L 5 7 L 5 6 Z" /> - <path fill="black" d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> - <path fill="black" d="M 5 13 L 6 13 L 6 14 L 5 14 L 5 13 Z" /> - <path fill="black" d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" /> - <path fill="black" d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" /> - <path fill="black" d="M 6 14 L 7 14 L 7 15 L 6 15 L 6 14 Z" /> - <path fill="black" d="M 7 1 L 8 1 L 8 2 L 7 2 L 7 1 Z" /> - <path fill="black" d="M 7 14 L 8 14 L 8 15 L 7 15 L 7 14 Z" /> - <path fill="black" d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> - <path fill="black" d="M 7 2 L 8 2 L 8 3 L 7 3 L 7 2 Z" /> - <path fill="black" d="M 7 3 L 8 3 L 8 4 L 7 4 L 7 3 Z" /> - <path fill="black" d="M 7 4 L 8 4 L 8 5 L 7 5 L 7 4 Z" /> - <path fill="black" d="M 7 5 L 8 5 L 8 6 L 7 6 L 7 5 Z" /> - <path fill="black" d="M 8 1 L 9 1 L 9 2 L 8 2 L 8 1 Z" /> - <path fill="black" d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> - <path fill="black" d="M 9 1 L 10 1 L 10 2 L 9 2 L 9 1 Z" /> - <path fill="black" d="M 9 2 L 10 2 L 10 3 L 9 3 L 9 2 Z" /> - <path fill="black" d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" /> - <path fill="black" d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> - <path fill="black" d="M 10 2 L 11 2 L 11 3 L 10 3 L 10 2 Z" /> - <path fill="black" d="M 10 3 L 11 3 L 11 4 L 10 4 L 10 3 Z" /> - <path fill="black" d="M 10 4 L 11 4 L 11 5 L 10 5 L 10 4 Z" /> - <path fill="black" d="M 10 5 L 11 5 L 11 6 L 10 6 L 10 5 Z" /> - <path fill="black" d="M 10 6 L 11 6 L 11 7 L 10 7 L 10 6 Z" /> - <path fill="black" d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" /> - <path fill="black" d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> - <path fill="black" d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> - <path fill="black" d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> - <path fill="black" d="M 11 12 L 12 12 L 12 13 L 11 13 L 11 12 Z" /> - <path fill="black" d="M 11 14 L 12 14 L 12 15 L 11 15 L 11 14 Z" /> - <path fill="black" d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> - <path fill="black" d="M 12 6 L 13 6 L 13 7 L 12 7 L 12 6 Z" /> - <path fill="black" d="M 12 8 L 13 8 L 13 9 L 12 9 L 12 8 Z" /> - <path fill="black" d="M 12 10 L 13 10 L 13 11 L 12 11 L 12 10 Z" /> - <path fill="black" d="M 12 12 L 13 12 L 13 13 L 12 13 L 12 12 Z" /> - <path fill="black" d="M 12 14 L 13 14 L 13 15 L 12 15 L 12 14 Z" /> - <path fill="black" d="M 13 6 L 14 6 L 14 7 L 13 7 L 13 6 Z" /> - <path fill="black" d="M 13 8 L 14 8 L 14 9 L 13 9 L 13 8 Z" /> - <path fill="black" d="M 13 10 L 14 10 L 14 11 L 13 11 L 13 10 Z" /> - <path fill="black" d="M 13 12 L 14 12 L 14 13 L 13 13 L 13 12 Z" /> - <path fill="black" d="M 13 13 L 14 13 L 14 14 L 13 14 L 13 13 Z" /> - <path fill="black" d="M 13 14 L 14 14 L 14 15 L 13 15 L 13 14 Z" /> - <path fill="black" d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" /> - <path fill="black" d="M 14 8 L 15 8 L 15 9 L 14 9 L 14 8 Z" /> - <path fill="black" d="M 14 9 L 15 9 L 15 10 L 14 10 L 14 9 Z" /> - <path fill="black" d="M 14 10 L 15 10 L 15 11 L 14 11 L 14 10 Z" /> - <path fill="black" d="M 14 11 L 15 11 L 15 12 L 14 12 L 14 11 Z" /> - <path fill="black" d="M 14 12 L 15 12 L 15 13 L 14 13 L 14 12 Z" /> -</svg> diff --git a/src/content/img/monogram-filled-512.png b/src/content/img/monogram-filled-512.png Binary files differnew file mode 100644 index 0000000..0b8e36f --- /dev/null +++ b/src/content/img/monogram-filled-512.png diff --git a/src/content/img/monogram-filled.svg b/src/content/img/monogram-filled.svg new file mode 100644 index 0000000..b7781b6 --- /dev/null +++ b/src/content/img/monogram-filled.svg @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> + <style> + svg { fill: #F3F5F3 } + </style> + <rect width="16" height="16" fill="#1F6F5B" /> + <path class="a" d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> + <path class="a" d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> + <path class="a" d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> + <path class="a" d="M 6 8 L 7 8 L 7 9 L 6 9 L 6 8 Z" /> + <path class="a" d="M 3 9 L 4 9 L 4 10 L 3 10 L 3 9 Z" /> + <path class="a" d="M 4 9 L 5 9 L 5 10 L 4 10 L 4 9 Z" /> + <path class="a" d="M 5 9 L 6 9 L 6 10 L 5 10 L 5 9 Z" /> + <path class="a" d="M 3 10 L 4 10 L 4 11 L 3 11 L 3 10 Z" /> + <path class="a" d="M 4 11 L 5 11 L 5 12 L 4 12 L 4 11 Z" /> + <path class="a" d="M 5 11 L 6 11 L 6 12 L 5 12 L 5 11 Z" /> + <path class="a" d="M 8 7 L 9 7 L 9 8 L 8 8 L 8 7 Z" /> + <path class="a" d="M 11 7 L 12 7 L 12 8 L 11 8 L 11 7 Z" /> + <path class="a" d="M 8 8 L 9 8 L 9 9 L 8 9 L 8 8 Z" /> + <path class="a" d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> + <path class="a" d="M 8 9 L 9 9 L 9 10 L 8 10 L 8 9 Z" /> + <path class="a" d="M 11 9 L 12 9 L 12 10 L 11 10 L 11 9 Z" /> + <path class="a" d="M 8 10 L 9 10 L 9 11 L 8 11 L 8 10 Z" /> + <path class="a" d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> + <path class="a" d="M 9 11 L 10 11 L 10 12 L 9 12 L 9 11 Z" /> + <path class="a" d="M 10 11 L 11 11 L 11 12 L 10 12 L 10 11 Z" /> + <path class="a" d="M 11 11 L 12 11 L 12 12 L 11 12 L 11 11 Z" /> +</svg> diff --git a/src/content/img/thumb.svg b/src/content/img/thumb.svg new file mode 100644 index 0000000..ed73c18 --- /dev/null +++ b/src/content/img/thumb.svg @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"> + <style> + svg { fill: #1F6F5B } + @media (prefers-color-scheme: dark) { + svg { fill: #5CC2A2 } + } + </style> + <path class="a" d="M 0 8 L 1 8 L 1 9 L 0 9 L 0 8 Z" /> + <path class="a" d="M 0 13 L 1 13 L 1 14 L 0 14 L 0 13 Z" /> + <path class="a" d="M 1 8 L 2 8 L 2 9 L 1 9 L 1 8 Z" /> + <path class="a" d="M 1 13 L 2 13 L 2 14 L 1 14 L 1 13 Z" /> + <path class="a" d="M 2 8 L 3 8 L 3 9 L 2 9 L 2 8 Z" /> + <path class="a" d="M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 Z" /> + <path class="a" d="M 3 8 L 4 8 L 4 9 L 3 9 L 3 8 Z" /> + <path class="a" d="M 3 13 L 4 13 L 4 14 L 3 14 L 3 13 Z" /> + <path class="a" d="M 4 7 L 5 7 L 5 8 L 4 8 L 4 7 Z" /> + <path class="a" d="M 4 8 L 5 8 L 5 9 L 4 9 L 4 8 Z" /> + <path class="a" d="M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 Z" /> + <path class="a" d="M 5 6 L 6 6 L 6 7 L 5 7 L 5 6 Z" /> + <path class="a" d="M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 Z" /> + <path class="a" d="M 5 13 L 6 13 L 6 14 L 5 14 L 5 13 Z" /> + <path class="a" d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" /> + <path class="a" d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" /> + <path class="a" d="M 6 14 L 7 14 L 7 15 L 6 15 L 6 14 Z" /> + <path class="a" d="M 7 1 L 8 1 L 8 2 L 7 2 L 7 1 Z" /> + <path class="a" d="M 7 14 L 8 14 L 8 15 L 7 15 L 7 14 Z" /> + <path class="a" d="M 7 15 L 8 15 L 8 16 L 7 16 L 7 15 Z" /> + <path class="a" d="M 7 2 L 8 2 L 8 3 L 7 3 L 7 2 Z" /> + <path class="a" d="M 7 3 L 8 3 L 8 4 L 7 4 L 7 3 Z" /> + <path class="a" d="M 7 4 L 8 4 L 8 5 L 7 5 L 7 4 Z" /> + <path class="a" d="M 7 5 L 8 5 L 8 6 L 7 6 L 7 5 Z" /> + <path class="a" d="M 8 1 L 9 1 L 9 2 L 8 2 L 8 1 Z" /> + <path class="a" d="M 8 15 L 9 15 L 9 16 L 8 16 L 8 15 Z" /> + <path class="a" d="M 9 1 L 10 1 L 10 2 L 9 2 L 9 1 Z" /> + <path class="a" d="M 9 2 L 10 2 L 10 3 L 9 3 L 9 2 Z" /> + <path class="a" d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" /> + <path class="a" d="M 9 15 L 10 15 L 10 16 L 9 16 L 9 15 Z" /> + <path class="a" d="M 10 2 L 11 2 L 11 3 L 10 3 L 10 2 Z" /> + <path class="a" d="M 10 3 L 11 3 L 11 4 L 10 4 L 10 3 Z" /> + <path class="a" d="M 10 4 L 11 4 L 11 5 L 10 5 L 10 4 Z" /> + <path class="a" d="M 10 5 L 11 5 L 11 6 L 10 6 L 10 5 Z" /> + <path class="a" d="M 10 6 L 11 6 L 11 7 L 10 7 L 10 6 Z" /> + <path class="a" d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" /> + <path class="a" d="M 11 8 L 12 8 L 12 9 L 11 9 L 11 8 Z" /> + <path class="a" d="M 10 15 L 11 15 L 11 16 L 10 16 L 10 15 Z" /> + <path class="a" d="M 11 10 L 12 10 L 12 11 L 11 11 L 11 10 Z" /> + <path class="a" d="M 11 12 L 12 12 L 12 13 L 11 13 L 11 12 Z" /> + <path class="a" d="M 11 14 L 12 14 L 12 15 L 11 15 L 11 14 Z" /> + <path class="a" d="M 11 15 L 12 15 L 12 16 L 11 16 L 11 15 Z" /> + <path class="a" d="M 12 6 L 13 6 L 13 7 L 12 7 L 12 6 Z" /> + <path class="a" d="M 12 8 L 13 8 L 13 9 L 12 9 L 12 8 Z" /> + <path class="a" d="M 12 10 L 13 10 L 13 11 L 12 11 L 12 10 Z" /> + <path class="a" d="M 12 12 L 13 12 L 13 13 L 12 13 L 12 12 Z" /> + <path class="a" d="M 12 14 L 13 14 L 13 15 L 12 15 L 12 14 Z" /> + <path class="a" d="M 13 6 L 14 6 L 14 7 L 13 7 L 13 6 Z" /> + <path class="a" d="M 13 8 L 14 8 L 14 9 L 13 9 L 13 8 Z" /> + <path class="a" d="M 13 10 L 14 10 L 14 11 L 13 11 L 13 10 Z" /> + <path class="a" d="M 13 12 L 14 12 L 14 13 L 13 13 L 13 12 Z" /> + <path class="a" d="M 13 13 L 14 13 L 14 14 L 13 14 L 13 13 Z" /> + <path class="a" d="M 13 14 L 14 14 L 14 15 L 13 15 L 13 14 Z" /> + <path class="a" d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" /> + <path class="a" d="M 14 8 L 15 8 L 15 9 L 14 9 L 14 8 Z" /> + <path class="a" d="M 14 9 L 15 9 L 15 10 L 14 10 L 14 9 Z" /> + <path class="a" d="M 14 10 L 15 10 L 15 11 L 14 11 L 14 10 Z" /> + <path class="a" d="M 14 11 L 15 11 L 15 12 L 14 12 L 14 11 Z" /> + <path class="a" d="M 14 12 L 15 12 L 15 13 L 14 13 L 14 12 Z" /> +</svg> diff --git a/src/content/img/wordmark-filled-1500x500.png b/src/content/img/wordmark-filled-1500x500.png Binary files differnew file mode 100644 index 0000000..5102180 --- /dev/null +++ b/src/content/img/wordmark-filled-1500x500.png diff --git a/src/content/img/wordmark-filled-1584x396.png b/src/content/img/wordmark-filled-1584x396.png Binary files differnew file mode 100644 index 0000000..e62ea6c --- /dev/null +++ b/src/content/img/wordmark-filled-1584x396.png diff --git a/src/content/img/wordmark-filled.svg b/src/content/img/wordmark-filled.svg new file mode 100644 index 0000000..6082ca4 --- /dev/null +++ b/src/content/img/wordmark-filled.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1500" height="500" viewBox="0 0 1500 500"><rect width="1500" height="500" fill="#1F6F5B"/><g transform="translate(382,178) scale(16)" shape-rendering="crispEdges"><path fill="#F3F5F3" d="M 2 3 L 3 3 L 3 4 L 2 4 L 2 3 Z"/><path fill="#F3F5F3" d="M 3 3 L 4 3 L 4 4 L 3 4 L 3 3 Z"/><path fill="#F3F5F3" d="M 1 4 L 2 4 L 2 5 L 1 5 L 1 4 Z"/><path fill="#F3F5F3" d="M 4 4 L 5 4 L 5 5 L 4 5 L 4 4 Z"/><path fill="#F3F5F3" d="M 1 5 L 2 5 L 2 6 L 1 6 L 1 5 Z"/><path fill="#F3F5F3" d="M 2 5 L 3 5 L 3 6 L 2 6 L 2 5 Z"/><path fill="#F3F5F3" d="M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 Z"/><path fill="#F3F5F3" d="M 1 6 L 2 6 L 2 7 L 1 7 L 1 6 Z"/><path fill="#F3F5F3" d="M 2 7 L 3 7 L 3 8 L 2 8 L 2 7 Z"/><path fill="#F3F5F3" d="M 3 7 L 4 7 L 4 8 L 3 8 L 3 7 Z"/><path fill="#F3F5F3" d="M 6 3 L 7 3 L 7 4 L 6 4 L 6 3 Z"/><path fill="#F3F5F3" d="M 9 3 L 10 3 L 10 4 L 9 4 L 9 3 Z"/><path fill="#F3F5F3" d="M 6 4 L 7 4 L 7 5 L 6 5 L 6 4 Z"/><path fill="#F3F5F3" d="M 9 4 L 10 4 L 10 5 L 9 5 L 9 4 Z"/><path fill="#F3F5F3" d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z"/><path fill="#F3F5F3" d="M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 Z"/><path fill="#F3F5F3" d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z"/><path fill="#F3F5F3" d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z"/><path fill="#F3F5F3" d="M 7 7 L 8 7 L 8 8 L 7 8 L 7 7 Z"/><path fill="#F3F5F3" d="M 8 7 L 9 7 L 9 8 L 8 8 L 8 7 Z"/><path fill="#F3F5F3" d="M 9 7 L 10 7 L 10 8 L 9 8 L 9 7 Z"/><path fill="#F3F5F3" d="M 12 3 L 13 3 L 13 4 L 12 4 L 12 3 Z"/><path fill="#F3F5F3" d="M 13 3 L 14 3 L 14 4 L 13 4 L 13 3 Z"/><path fill="#F3F5F3" d="M 14 4 L 15 4 L 15 5 L 14 5 L 14 4 Z"/><path fill="#F3F5F3" d="M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 Z"/><path fill="#F3F5F3" d="M 13 5 L 14 5 L 14 6 L 13 6 L 13 5 Z"/><path fill="#F3F5F3" d="M 14 5 L 15 5 L 15 6 L 14 6 L 14 5 Z"/><path fill="#F3F5F3" d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z"/><path fill="#F3F5F3" d="M 14 6 L 15 6 L 15 7 L 14 7 L 14 6 Z"/><path fill="#F3F5F3" d="M 12 7 L 13 7 L 13 8 L 12 8 L 12 7 Z"/><path fill="#F3F5F3" d="M 13 7 L 14 7 L 14 8 L 13 8 L 13 7 Z"/><path fill="#F3F5F3" d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z"/><path fill="#F3F5F3" d="M 16 3 L 17 3 L 17 4 L 16 4 L 16 3 Z"/><path fill="#F3F5F3" d="M 17 3 L 18 3 L 18 4 L 17 4 L 17 3 Z"/><path fill="#F3F5F3" d="M 18 3 L 19 3 L 19 4 L 18 4 L 18 3 Z"/><path fill="#F3F5F3" d="M 16 4 L 17 4 L 17 5 L 16 5 L 16 4 Z"/><path fill="#F3F5F3" d="M 19 4 L 20 4 L 20 5 L 19 5 L 19 4 Z"/><path fill="#F3F5F3" d="M 16 5 L 17 5 L 17 6 L 16 6 L 16 5 Z"/><path fill="#F3F5F3" d="M 19 5 L 20 5 L 20 6 L 19 6 L 19 5 Z"/><path fill="#F3F5F3" d="M 16 6 L 17 6 L 17 7 L 16 7 L 16 6 Z"/><path fill="#F3F5F3" d="M 19 6 L 20 6 L 20 7 L 19 7 L 19 6 Z"/><path fill="#F3F5F3" d="M 16 7 L 17 7 L 17 8 L 16 8 L 16 7 Z"/><path fill="#F3F5F3" d="M 19 7 L 20 7 L 20 8 L 19 8 L 19 7 Z"/><path fill="#F3F5F3" d="M 24 1 L 25 1 L 25 2 L 24 2 L 24 1 Z"/><path fill="#F3F5F3" d="M 24 2 L 25 2 L 25 3 L 24 3 L 24 2 Z"/><path fill="#F3F5F3" d="M 22 3 L 23 3 L 23 4 L 22 4 L 22 3 Z"/><path fill="#F3F5F3" d="M 23 3 L 24 3 L 24 4 L 23 4 L 23 3 Z"/><path fill="#F3F5F3" d="M 24 3 L 25 3 L 25 4 L 24 4 L 24 3 Z"/><path fill="#F3F5F3" d="M 21 4 L 22 4 L 22 5 L 21 5 L 21 4 Z"/><path fill="#F3F5F3" d="M 24 4 L 25 4 L 25 5 L 24 5 L 24 4 Z"/><path fill="#F3F5F3" d="M 21 5 L 22 5 L 22 6 L 21 6 L 21 5 Z"/><path fill="#F3F5F3" d="M 24 5 L 25 5 L 25 6 L 24 6 L 24 5 Z"/><path fill="#F3F5F3" d="M 21 6 L 22 6 L 22 7 L 21 7 L 21 6 Z"/><path fill="#F3F5F3" d="M 24 6 L 25 6 L 25 7 L 24 7 L 24 6 Z"/><path fill="#F3F5F3" d="M 22 7 L 23 7 L 23 8 L 22 8 L 22 7 Z"/><path fill="#F3F5F3" d="M 23 7 L 24 7 L 24 8 L 23 8 L 23 7 Z"/><path fill="#F3F5F3" d="M 24 7 L 25 7 L 25 8 L 24 8 L 24 7 Z"/><path fill="#F3F5F3" d="M 26 3 L 27 3 L 27 4 L 26 4 L 26 3 Z"/><path fill="#F3F5F3" d="M 28 3 L 29 3 L 29 4 L 28 4 L 28 3 Z"/><path fill="#F3F5F3" d="M 29 3 L 30 3 L 30 4 L 29 4 L 29 3 Z"/><path fill="#F3F5F3" d="M 26 4 L 27 4 L 27 5 L 26 5 L 26 4 Z"/><path fill="#F3F5F3" d="M 27 4 L 28 4 L 28 5 L 27 5 L 27 4 Z"/><path fill="#F3F5F3" d="M 26 5 L 27 5 L 27 6 L 26 6 L 26 5 Z"/><path fill="#F3F5F3" d="M 26 6 L 27 6 L 27 7 L 26 7 L 26 6 Z"/><path fill="#F3F5F3" d="M 26 7 L 27 7 L 27 8 L 26 8 L 26 7 Z"/><path fill="#F3F5F3" d="M 32 3 L 33 3 L 33 4 L 32 4 L 32 3 Z"/><path fill="#F3F5F3" d="M 33 3 L 34 3 L 34 4 L 33 4 L 33 3 Z"/><path fill="#F3F5F3" d="M 31 4 L 32 4 L 32 5 L 31 5 L 31 4 Z"/><path fill="#F3F5F3" d="M 34 4 L 35 4 L 35 5 L 34 5 L 34 4 Z"/><path fill="#F3F5F3" d="M 31 5 L 32 5 L 32 6 L 31 6 L 31 5 Z"/><path fill="#F3F5F3" d="M 32 5 L 33 5 L 33 6 L 32 6 L 32 5 Z"/><path fill="#F3F5F3" d="M 33 5 L 34 5 L 34 6 L 33 6 L 33 5 Z"/><path fill="#F3F5F3" d="M 31 6 L 32 6 L 32 7 L 31 7 L 31 6 Z"/><path fill="#F3F5F3" d="M 32 7 L 33 7 L 33 8 L 32 8 L 32 7 Z"/><path fill="#F3F5F3" d="M 33 7 L 34 7 L 34 8 L 33 8 L 33 7 Z"/><path fill="#F3F5F3" d="M 36 1 L 37 1 L 37 2 L 36 2 L 36 1 Z"/><path fill="#F3F5F3" d="M 36 2 L 37 2 L 37 3 L 36 3 L 36 2 Z"/><path fill="#F3F5F3" d="M 36 3 L 37 3 L 37 4 L 36 4 L 36 3 Z"/><path fill="#F3F5F3" d="M 37 3 L 38 3 L 38 4 L 37 4 L 37 3 Z"/><path fill="#F3F5F3" d="M 38 3 L 39 3 L 39 4 L 38 4 L 38 3 Z"/><path fill="#F3F5F3" d="M 36 4 L 37 4 L 37 5 L 36 5 L 36 4 Z"/><path fill="#F3F5F3" d="M 39 4 L 40 4 L 40 5 L 39 5 L 39 4 Z"/><path fill="#F3F5F3" d="M 36 5 L 37 5 L 37 6 L 36 6 L 36 5 Z"/><path fill="#F3F5F3" d="M 39 5 L 40 5 L 40 6 L 39 6 L 39 5 Z"/><path fill="#F3F5F3" d="M 36 6 L 37 6 L 37 7 L 36 7 L 36 6 Z"/><path fill="#F3F5F3" d="M 39 6 L 40 6 L 40 7 L 39 7 L 39 6 Z"/><path fill="#F3F5F3" d="M 36 7 L 37 7 L 37 8 L 36 8 L 36 7 Z"/><path fill="#F3F5F3" d="M 39 7 L 40 7 L 40 8 L 39 8 L 39 7 Z"/><path fill="#F3F5F3" d="M 42 7 L 43 7 L 43 8 L 42 8 L 42 7 Z"/><path fill="#F3F5F3" d="M 43 7 L 44 7 L 44 8 L 43 8 L 43 7 Z"/><path fill="#F3F5F3" d="M 44 7 L 45 7 L 45 8 L 44 8 L 44 7 Z"/></g></svg>
\ No newline at end of file diff --git a/src/content/img/wordmark.svg b/src/content/img/wordmark.svg new file mode 100644 index 0000000..2afbb4d --- /dev/null +++ b/src/content/img/wordmark.svg @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 46 9" width="46" height="9"> + <style> + svg { fill: black } + .a { fill: #1F6F5B } + @media (prefers-color-scheme: dark) { + svg { fill: white } + .a { fill: #5CC2A2 } + } + </style> + <path class="a" d="M 2 3 L 3 3 L 3 4 L 2 4 L 2 3 Z" /> + <path class="a" d="M 3 3 L 4 3 L 4 4 L 3 4 L 3 3 Z" /> + <path class="a" d="M 1 4 L 2 4 L 2 5 L 1 5 L 1 4 Z" /> + <path class="a" d="M 4 4 L 5 4 L 5 5 L 4 5 L 4 4 Z" /> + <path class="a" d="M 1 5 L 2 5 L 2 6 L 1 6 L 1 5 Z" /> + <path class="a" d="M 2 5 L 3 5 L 3 6 L 2 6 L 2 5 Z" /> + <path class="a" d="M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 Z" /> + <path class="a" d="M 1 6 L 2 6 L 2 7 L 1 7 L 1 6 Z" /> + <path class="a" d="M 2 7 L 3 7 L 3 8 L 2 8 L 2 7 Z" /> + <path class="a" d="M 3 7 L 4 7 L 4 8 L 3 8 L 3 7 Z" /> + <path class="a" d="M 6 3 L 7 3 L 7 4 L 6 4 L 6 3 Z" /> + <path class="a" d="M 9 3 L 10 3 L 10 4 L 9 4 L 9 3 Z" /> + <path class="a" d="M 6 4 L 7 4 L 7 5 L 6 5 L 6 4 Z" /> + <path class="a" d="M 9 4 L 10 4 L 10 5 L 9 5 L 9 4 Z" /> + <path class="a" d="M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 Z" /> + <path class="a" d="M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 Z" /> + <path class="a" d="M 6 6 L 7 6 L 7 7 L 6 7 L 6 6 Z" /> + <path class="a" d="M 9 6 L 10 6 L 10 7 L 9 7 L 9 6 Z" /> + <path class="a" d="M 7 7 L 8 7 L 8 8 L 7 8 L 7 7 Z" /> + <path class="a" d="M 8 7 L 9 7 L 9 8 L 8 8 L 8 7 Z" /> + <path class="a" d="M 9 7 L 10 7 L 10 8 L 9 8 L 9 7 Z" /> + <path d="M 12 3 L 13 3 L 13 4 L 12 4 L 12 3 Z" /> + <path d="M 13 3 L 14 3 L 14 4 L 13 4 L 13 3 Z" /> + <path d="M 14 4 L 15 4 L 15 5 L 14 5 L 14 4 Z" /> + <path d="M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 Z" /> + <path d="M 13 5 L 14 5 L 14 6 L 13 6 L 13 5 Z" /> + <path d="M 14 5 L 15 5 L 15 6 L 14 6 L 14 5 Z" /> + <path d="M 11 6 L 12 6 L 12 7 L 11 7 L 11 6 Z" /> + <path d="M 14 6 L 15 6 L 15 7 L 14 7 L 14 6 Z" /> + <path d="M 12 7 L 13 7 L 13 8 L 12 8 L 12 7 Z" /> + <path d="M 13 7 L 14 7 L 14 8 L 13 8 L 13 7 Z" /> + <path d="M 14 7 L 15 7 L 15 8 L 14 8 L 14 7 Z" /> + <path d="M 16 3 L 17 3 L 17 4 L 16 4 L 16 3 Z" /> + <path d="M 17 3 L 18 3 L 18 4 L 17 4 L 17 3 Z" /> + <path d="M 18 3 L 19 3 L 19 4 L 18 4 L 18 3 Z" /> + <path d="M 16 4 L 17 4 L 17 5 L 16 5 L 16 4 Z" /> + <path d="M 19 4 L 20 4 L 20 5 L 19 5 L 19 4 Z" /> + <path d="M 16 5 L 17 5 L 17 6 L 16 6 L 16 5 Z" /> + <path d="M 19 5 L 20 5 L 20 6 L 19 6 L 19 5 Z" /> + <path d="M 16 6 L 17 6 L 17 7 L 16 7 L 16 6 Z" /> + <path d="M 19 6 L 20 6 L 20 7 L 19 7 L 19 6 Z" /> + <path d="M 16 7 L 17 7 L 17 8 L 16 8 L 16 7 Z" /> + <path d="M 19 7 L 20 7 L 20 8 L 19 8 L 19 7 Z" /> + <path d="M 24 1 L 25 1 L 25 2 L 24 2 L 24 1 Z" /> + <path d="M 24 2 L 25 2 L 25 3 L 24 3 L 24 2 Z" /> + <path d="M 22 3 L 23 3 L 23 4 L 22 4 L 22 3 Z" /> + <path d="M 23 3 L 24 3 L 24 4 L 23 4 L 23 3 Z" /> + <path d="M 24 3 L 25 3 L 25 4 L 24 4 L 24 3 Z" /> + <path d="M 21 4 L 22 4 L 22 5 L 21 5 L 21 4 Z" /> + <path d="M 24 4 L 25 4 L 25 5 L 24 5 L 24 4 Z" /> + <path d="M 21 5 L 22 5 L 22 6 L 21 6 L 21 5 Z" /> + <path d="M 24 5 L 25 5 L 25 6 L 24 6 L 24 5 Z" /> + <path d="M 21 6 L 22 6 L 22 7 L 21 7 L 21 6 Z" /> + <path d="M 24 6 L 25 6 L 25 7 L 24 7 L 24 6 Z" /> + <path d="M 22 7 L 23 7 L 23 8 L 22 8 L 22 7 Z" /> + <path d="M 23 7 L 24 7 L 24 8 L 23 8 L 23 7 Z" /> + <path d="M 24 7 L 25 7 L 25 8 L 24 8 L 24 7 Z" /> + <path d="M 26 3 L 27 3 L 27 4 L 26 4 L 26 3 Z" /> + <path d="M 28 3 L 29 3 L 29 4 L 28 4 L 28 3 Z" /> + <path d="M 29 3 L 30 3 L 30 4 L 29 4 L 29 3 Z" /> + <path d="M 26 4 L 27 4 L 27 5 L 26 5 L 26 4 Z" /> + <path d="M 27 4 L 28 4 L 28 5 L 27 5 L 27 4 Z" /> + <path d="M 26 5 L 27 5 L 27 6 L 26 6 L 26 5 Z" /> + <path d="M 26 6 L 27 6 L 27 7 L 26 7 L 26 6 Z" /> + <path d="M 26 7 L 27 7 L 27 8 L 26 8 L 26 7 Z" /> + <path d="M 32 3 L 33 3 L 33 4 L 32 4 L 32 3 Z" /> + <path d="M 33 3 L 34 3 L 34 4 L 33 4 L 33 3 Z" /> + <path d="M 31 4 L 32 4 L 32 5 L 31 5 L 31 4 Z" /> + <path d="M 34 4 L 35 4 L 35 5 L 34 5 L 34 4 Z" /> + <path d="M 31 5 L 32 5 L 32 6 L 31 6 L 31 5 Z" /> + <path d="M 32 5 L 33 5 L 33 6 L 32 6 L 32 5 Z" /> + <path d="M 33 5 L 34 5 L 34 6 L 33 6 L 33 5 Z" /> + <path d="M 31 6 L 32 6 L 32 7 L 31 7 L 31 6 Z" /> + <path d="M 32 7 L 33 7 L 33 8 L 32 8 L 32 7 Z" /> + <path d="M 33 7 L 34 7 L 34 8 L 33 8 L 33 7 Z" /> + <path d="M 36 1 L 37 1 L 37 2 L 36 2 L 36 1 Z" /> + <path d="M 36 2 L 37 2 L 37 3 L 36 3 L 36 2 Z" /> + <path d="M 36 3 L 37 3 L 37 4 L 36 4 L 36 3 Z" /> + <path d="M 37 3 L 38 3 L 38 4 L 37 4 L 37 3 Z" /> + <path d="M 38 3 L 39 3 L 39 4 L 38 4 L 38 3 Z" /> + <path d="M 36 4 L 37 4 L 37 5 L 36 5 L 36 4 Z" /> + <path d="M 39 4 L 40 4 L 40 5 L 39 5 L 39 4 Z" /> + <path d="M 36 5 L 37 5 L 37 6 L 36 6 L 36 5 Z" /> + <path d="M 39 5 L 40 5 L 40 6 L 39 6 L 39 5 Z" /> + <path d="M 36 6 L 37 6 L 37 7 L 36 7 L 36 6 Z" /> + <path d="M 39 6 L 40 6 L 40 7 L 39 7 L 39 6 Z" /> + <path d="M 36 7 L 37 7 L 37 8 L 36 8 L 36 7 Z" /> + <path d="M 39 7 L 40 7 L 40 8 L 39 8 L 39 7 Z" /> + <path d="M 42 7 L 43 7 L 43 8 L 42 8 L 42 7 Z" /> + <path d="M 43 7 L 44 7 L 44 8 L 43 8 L 43 7 Z" /> + <path d="M 44 7 L 45 7 L 45 8 L 44 8 L 44 7 Z" /> +</svg> diff --git a/src/content/l/multiline-sh b/src/content/l/multiline-sh new file mode 120000 index 0000000..77800c7 --- /dev/null +++ b/src/content/l/multiline-sh @@ -0,0 +1 @@ +../en/til/2026/09/05/multiline-sh-comments.html
\ No newline at end of file diff --git a/src/content/pt/hea/2020/08/12/arquivo-datado.adoc b/src/content/pt/hea/2020/08/12/arquivo-datado.adoc deleted file mode 100644 index 42842ce..0000000 --- a/src/content/pt/hea/2020/08/12/arquivo-datado.adoc +++ /dev/null @@ -1,29 +0,0 @@ -= Nome de arquivo com dia e hora de forma simplificada -:updatedat: 2025-04-30 -:categories: shell - -Quando vou escrever um artigo no Jekyll ou criar um arquivo de log com a data no nome, eu normalmente engasgo para achar um jeito direto de fazer isso. Há uma solução simples: `date -I`. - -[source, sh] ----- -./meu-programa.sh > meu-programa.$(date -I).log -cp template-de-artigo.md _posts/$(date -I)-slug-do-artigo.md ----- - -Usar essa ferramenta padrão do GNU/Linux permite que você simplesmente escreva `touch $(date -I).md` para criar um arquivo `2020-08-12.md`. - -Eu sempre tinha que para para reler o `man date` ou buscar na internet de novo e de novo como fazer isso, e depois de sempre chegar no mesmo resultado ficou claro para mim que tanto `date -I` quanto `date -Is` (`s` de segundos) são as respostas que eu estou procurando 95% do tempo: - -[source, sh] ----- -# dentro do meu programa.sh -echo "Programa começou em $(date -Is)" -# saÃda é: -# Programa começou em 2020-08-12T09:15:16-03:00 ----- - -Ambos os formatos de data são hierárquicos, com intervalos de tempo maior à esquerda. Isso significa que você pode facilmente ordená-los (e até usar TAB para completar) sem esforço ou ferramenta extra. - - - -// Generated from po4a(1). diff --git a/src/content/pt/hea/categorias.adoc b/src/content/pt/hea/categorias.adoc deleted file mode 100644 index 19e7cb7..0000000 --- a/src/content/pt/hea/categorias.adoc +++ /dev/null @@ -1,6 +0,0 @@ -= Artigos por categoria -:type: categories - - - -// Generated from po4a(1). diff --git a/src/content/pt/hea/index.adoc b/src/content/pt/hea/index.adoc deleted file mode 100644 index 77a035c..0000000 --- a/src/content/pt/hea/index.adoc +++ /dev/null @@ -1,11 +0,0 @@ -= Hoje Eu Aprendi - -:anna-e-so: https://til.flourishing.stream/ - -**H**oje **E**u **A**prendi (do inglês, _**T**oday **I** **L**earned_): pequenas postagens de conhecimentos úteis. - -Cópia descarada da {anna-e-so}[Anna e só]. - - - -// Generated from po4a(1). diff --git a/src/content/pt/sobre.adoc b/src/content/pt/sobre.adoc deleted file mode 100644 index 2d7ad20..0000000 --- a/src/content/pt/sobre.adoc +++ /dev/null @@ -1,12 +0,0 @@ -= Sobre - -:mailto: mailto:~euandreh/public-inbox@lists.sr.ht -:archive: https://lists.sr.ht/~euandreh/public-inbox - -Oi, eu sou EuAndreh. Eu escrevo software e, ocasionalmente, música. Você encontra meu dados para entrar em contato no rodapé desta página, ou pode mandar também uma mensagem para minha {mailto}[caixa de entrada pública] ({archive}[arquivo]). - -Esse é o meu site pessoal onde eu escrevo artigos, publico software e outros trabalhos relacionados. - - - -// Generated from po4a(1). diff --git a/src/content/public.asc.txt b/src/content/public.asc.txt index d548547..2519d0f 100644 --- a/src/content/public.asc.txt +++ b/src/content/public.asc.txt @@ -11,45 +11,45 @@ rp1x5i/04198ocRZT3MzXx8H25tLMS/rHmE87YdgPhMTWheSUevyhoGNHfAOcDwX P2oGzELXbLqHxtjENMEw2E996KrSmpcz7WOqIl3PHS1J6eRZoYQesXE+SZTeIiYb wD0kkZGYhBZbtLC4VWIuU2T3AL/2hF6aUh1tj1B6vcV0i3HpIHNbvPAF/I0NUhhc Gxwwi+ggG/MBHBbxkq7LvG5DfDbav0ZoZaov5dyhtX0CBWjVYATvjRfeAwARAQAB -tBlFdUFuZHJlaCA8ZXVAZXVhbmRyZS5vcmc+iQI5BBMBCAAjBQJY1b4eAhsDBwsJ -CAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQgfkOw801YGCWzg//QtDpwgbDY9uC -Y9a/RgUsbqGAYzSInsbyDCXrAAhWGzkDMLPeFp03Sw9QyCDe0wWu8L2H4hV/FN58 -+4G6353ISwkqsf9R+P9lQs/5dwG7lp5/Gez8bZK3y7zFrdtVwcOCb4De+9fhPsgP -9pRU8dHpLNo8Ui9IzbiYla7aGxXQdkXU2cvOuEoiuFgvcWU1KWNOWrjImATcC8EF -8VaEaZYGRXz8lML8KgsAUxrjFkk6tqxrMlOLTjY0BuzcYZpt5XLZ2NuSIDYBoSib -uBQ1H7DLGa+r0hnNjVEBmMOvFA1hbWa33h1AyYjYhoeVlBYpoHuDosEFqkwZ+otz -zvImaRAOOFX1IehifTGEFie3imuOHdVuRjXb8SGu8Cgeby0T096A/vf+L1S35nc2 -mdRCUE/SIURW6hfH7uT6KqpokU86vozKmNzIcV3zhAXJ9UYwQqZgg2H3DOcTtZyE -jVBl2glspoclsfR20T+g+qPqNDAgoDbC71fEAbUTACQau162utpHiabog7e7vyhI -go5xdjxA8xb3Jtn39pYzbg75ArZqPbxHNZ38m00EBtC5EkD4DFh0cpQ2peuZIh1k -c5bragCt8o6cV9t4jaq+TtVv4PrFEPqEd+w1FqqwabBq3xSsIgKg2X5rXQkktymB -un+oN41wofuTZIoGNt8nnGb+skFBxgyJAlYEEwEKAEACGwMHCwkIBwMCAQYVCAIJ -CgsEFgIDAQIeAQIXgBYhBFva6biy9sa8uw1s5YH5DsPNNWBgBQJmm7wJBQkRiGTr -AAoJEIH5DsPNNWBgkxoQAJToyFUvioGD/91ztneUBOD2LOkQaIH4ZUTyIEjxpiep -ry7QIC33wc2OLJo8QKfPZNaZlvy0EcuzSNZz2Za0NUg5y/lzDOCyjrRw7/szHcPX -saUVHcjwYjQV/yiB1GJcuHefrEwXmgjQbkGmNZw8t7DuEm7qMrAdbAg3b+S4yX8X -wgAHXhCx33E7sLCwGDzWzXKhWyn3RNoDtTrsSyoXEUi2tUAJ6oEVIQd2MMH3gMxt -f31sg+cWTMdx7s2ZYatQ9hYOu86HR0O5fGD4T9Ae1TEhV8t3ZiUvozB/BfMUYwGx -UajxAN+QJZJrsuc98MlqTDk3vViqCyptFJaIjZHaLrB3rhtw9VISnEnXY1WsiL4R -+0R99xKt6D/yZXljXS1HR3w9VLpzE0NikYVkYBbsFFTZ8SrMwVCzY+wWjP0miQ2X -gAvX3+Lr1PeAmigKkCnt9gKuZz5b2hD0WWb7P9HXLR04XtOq2QOvA5kObl51C+Af -BcdEM9Q9FzQHqa5ofq0ZeS4WL72nkJFuAiGhi9kcpV70YHBMk0BuSIEuctGempuJ -4CeH6X2pKMHNJ5ijctZJiMPB8V2AzlWPber44IXD9f8B6HAQsNpZJ4+rWw2zCeKf -Jj/n0UIqwEU9vG1KMU3OaAqrlaP0ePd3+BgjgIemMSwzNtSamtVc8TbqodXWKQF/ -tCFwYXBvLmltIFN1cHBvcnQgPHN1cHBvcnRAcGFwby5pbT6JAlcEEwEIAEEWIQRb -2um4svbGvLsNbOWB+Q7DzTVgYAUCaBSRgAIbAwUJEYhk6wULCQgHAgIiAgYVCgkI -CwIEFgIDAQIeBwIXgAAKCRCB+Q7DzTVgYJ7dEACtW+VEVBIj2v390ph+6bB9hnvq -b78oC0EGryuKcKh797lld02jOW1WsIa2l7RzsS+XWDoY6c1DhCha75avLdr4uXgz -oLjScXinRNa5y9ECYdhiAScTVE3PbqURFbd9txPAY6rCP0Lo05tfXrX7zs/5UK8W -98FN4mSNge7YZEmOSSFFEQLaLRs/JH89GSlAXjfdke5cEiYqvabXXle/Zv/umm7B -J2ndd1bUgRbcL4SznMMo+JAhHzr1KpuvhFj/Dv4IUeMsWwv5x0KOXcCSUNpEnN0v -vw1aIFgI7JuQiYyMK0g3ubUfser5jOX7faz4Y5PJEcx6mzTrrdjC8vqCDaN+iA7O -pIS951yaYs6oI09ev1xQKCO+tJVFgPYMSh4lTMHMndZnMvTGUZy1Mt1tE+u8/Ps+ -Ps6UbApinrL1saeg1ODsels16mANGsQ62LXQfqTaQomKD/FfGHokOIogdj/hwhGC -XqhAoUtPoO5gQRqToenWybMNyu+fKo1gERU0WjXdqkledgY3Hi8JvjAaBgGyUmoi -DdRzGt8CAYZ72Tpwj4/yziVPw+myP6JmOvaRatZbL6SvFUEGnmip+ZWhA3yw0oyC -dSQ2TL6q2G/qjA/0cpxTGEyiObSLqlZgamV8i+bpqXn6yt3CoUk4xm0jsChHK9zF -w+7WzwhBSyDeeAIm8rkCDQRY1b4eARAA87doimtYEpLB7UxZD0OVC6lBdrBwwpa9 +tCFwYXBvLmltIFN1cHBvcnQgPHN1cHBvcnRAcGFwby5pbT6JAlcEEwEIAEECGwMF +CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVg +YAUCamFh6AUJFU4KygAKCRCB+Q7DzTVgYLrhEACKa/uQt+BCDJIFUHKQ36mKzJR5 +ubKym2HRtsbC2L+aVW8pWR7vk3VhqOWV9PLL4hOPJpKWMvxZEzpfYWvbFgjK3Uet +b2iBTOOU9YJ5eyO6kCcSKHWMUWegk23RGCCyxLfeTz9pf4QSGwCjkLiWquPOiT3o +RHCpOkWZg3aBlsxIozmdi/Dv0zNYNfpu6N7NRMfQDv8IYEq66VkpuPulQmSu+SAE +ja7/Z7ed4/mQxC6gN5EIULrmI42h5LnyCTENNVN8vSZMNvjTeXlU53AHEGChaA9l ++/YxMYKk3RS+CS+1hQWjT2vctZ4+7kVfaZf8rLwcSwHhhmEdgxKCH1stP4vCbtVo +xOvQNPwLi+5rSve3XlPEwXspteN9Oja8/xPG5qhtHz2dudg77mhL5+Yo5iemiA5A +6FLtpDKW//cS8vkW1B6RBsq1vwzXdbvF9ePzOf8IO/8vZTBEEv/Taf9SW4pSWE3J +gzYGjiJwWoZZnfpDus4BVw4No6bfbQ/XGFgXu6q66R5KQRxrhPMOQ1EU9OB6hm4z +g2V1MALnVFuBWG1iWp+PTH+mlWS/wnXdsKsImOVMDG2bW31mO9diR4qVu7IMZweQ +FUo6R6e6gcmLW8z/Lad+eyp8srCWed4N+TxVeDG1bECBIF++gjGnHH7F0QXuxIql +7OZGV01whHmiItNfc7QZRXVBbmRyZWggPGV1QGV1YW5kcmUub3JnPokCOQQTAQgA +IwUCWNW+HgIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEIH5DsPNNWBg +ls4P/0LQ6cIGw2PbgmPWv0YFLG6hgGM0iJ7G8gwl6wAIVhs5AzCz3hadN0sPUMgg +3tMFrvC9h+IVfxTefPuBut+dyEsJKrH/Ufj/ZULP+XcBu5aefxns/G2St8u8xa3b +VcHDgm+A3vvX4T7ID/aUVPHR6SzaPFIvSM24mJWu2hsV0HZF1NnLzrhKIrhYL3Fl +NSljTlq4yJgE3AvBBfFWhGmWBkV8/JTC/CoLAFMa4xZJOrasazJTi042NAbs3GGa +beVy2djbkiA2AaEom7gUNR+wyxmvq9IZzY1RAZjDrxQNYW1mt94dQMmI2IaHlZQW +KaB7g6LBBapMGfqLc87yJmkQDjhV9SHoYn0xhBYnt4prjh3VbkY12/EhrvAoHm8t +E9PegP73/i9Ut+Z3NpnUQlBP0iFEVuoXx+7k+iqqaJFPOr6MypjcyHFd84QFyfVG +MEKmYINh9wznE7WchI1QZdoJbKaHJbH0dtE/oPqj6jQwIKA2wu9XxAG1EwAkGrte +trraR4mm6IO3u78oSIKOcXY8QPMW9ybZ9/aWM24O+QK2aj28RzWd/JtNBAbQuRJA ++AxYdHKUNqXrmSIdZHOW62oArfKOnFfbeI2qvk7Vb+D6xRD6hHfsNRaqsGmwat8U +rCICoNl+a10JJLcpgbp/qDeNcKH7k2SKBjbfJ5xm/rJBQcYMiQJWBBMBCgBAAhsD +BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVg +YAUCamFh6AUJFU4KygAKCRCB+Q7DzTVgYJjSD/9rgUEuF/1x+veK/nclBVHt0fyd +ze+ESqZH+sZx2U564AqP6yehjoz+cervDwmER1ja2sFyCddXS3CUCwr7B0vVMc2R +MH5yaQ7vtnNV0xAGKs7rPiY/KWfZRoif+2dU9l6v/n4zZTqbC/JY8iuuF8oyC0MH +o8sKnsmPJiLg0he2PChThjbmVThHhCA6aM35q4zeq3NYLdRECzbySerqcZxONPFv +9jIYTN6eXdq4Bm/qf835/r9gTtvrodn3Fu7XRINpxxmGTJ2cCbZNBPQbvTd9FsSO +Sc1I1K6uO81x3xoPSmxH0QIhaJmIfvvatHGexbaqipOYDQA904wzFGrNdNm9/oXc +CAA61g/URdUtrgnFPe87LydFkhfym5OQSHwywO9OxlHCSKaprziUIq+UuQ1t5ka7 ++DrdHj6GA6F/aeOnP9J0wZJY0ESElzhU7HEcObUstDeabI27AhmrwidJmjwYj4i+ +Z+lNFiRM+3dBAxlg6d4V0x4M2yG2lrHdFoMxUT2aKYjgpViPjtvtxQ0q5MOxusg4 +vPHE3sT3UGggezUicf1A5fKhNxN9gE+ImyvxDqZBNN+z1ClVHqGBJt9slaCSRZwi +tVzf8bu36uZquQzkNrzJgNEwVubG6o2ec7bVxDnvCFPACWY4hbCC80E+1F/hs7I8 +8V9mqXIBAIGz/PyLLLkCDQRY1b4eARAA87doimtYEpLB7UxZD0OVC6lBdrBwwpa9 8pGy6vwMYEgjjefHjwPUikMtjvqg6aIxwDdVFCyYBxJ9+Gn8zJAc48XCVzEYGk1d jPtba48Mf1Zbg/Til8Jp4ZknbwiD+2dKnYVO/Jmi6tdFBtb1cHo95FZcbH+BLtmQ PjXiK+049AxEahA0KA0bTT1RMt4dcaGK7sv1YzQ4tQiN8hZDOh1tQoEQOdKyOxg7 @@ -95,5 +95,5 @@ T0PAbuproAk2TXn8NDzsFJP6ERM+3c1ARNiwZ8wCjiNChxX5cEh4ciNltkQ54ZF/ rN/8i+o7WAE9xdIdVHZg0H+WPWa/lOs5yfsSXES3Y7wxOR8chW038/y82TECk7LP +dZyFKJ26VSvqPHxMqmji/UJjOB+K5xaaCflnzsKzsaEf5fRCIrCp6ldIXh0/x0s pqsEJPXPOb40oBnNzLOSv9X++wKq+oXWEX8OSqhr -=bNun +=mG9H -----END PGP PUBLIC KEY BLOCK----- diff --git a/src/content/style.css b/src/content/style.css index dbd7967..6c69152 100644 --- a/src/content/style.css +++ b/src/content/style.css @@ -1,11 +1,20 @@ :root { - --color-fg: black; - --color-bg: white; - --color-2nd-fg: #555555; - --color-2nd-bg: #f5f5f5; - --color-pre-border: hsla(0, 100%, 0%, 30%); + --color-fg: #171D1A; + --color-bg: #F3F5F3; + --color-2nd-fg: #4A5651; + --color-2nd-bg: #E9EDEA; + --color-3rd-fg: #6F7B76; + --color-line: #CBD3CE; + --color-line-soft: #DDE3DF; + --color-accent: #1F6F5B; + --color-accent-soft: #D8E9E2; + --color-ochre: #9A6B1F; + --color-code-bg: #E6EBE8; + --color-pre-border: #CBD3CE; - --link-url: url(img/link/light.svg); + --font-body: sans-serif; + --font-display: serif; + --font-mono: monospace; color: var(--color-fg); background-color: var(--color-bg); @@ -13,29 +22,59 @@ @media (prefers-color-scheme: dark) { :root { - --color-fg: white; - --color-bg: black; - --color-2nd-fg: #aaaaaa; - --color-2nd-bg: #222222; - --color-pre-border: hsla(50, 100%, 70%, 10%); - - --link-url: url(img/link/dark.svg); + --color-fg: #E4EAE7; + --color-bg: #121716; + --color-2nd-fg: #A7B3AE; + --color-2nd-bg: #19201E; + --color-3rd-fg: #7E8A85; + --color-line: #2C3733; + --color-line-soft: #222B28; + --color-accent: #5CC2A2; + --color-accent-soft: #1B3A31; + --color-ochre: #D9A85A; + --color-code-bg: #1C2522; + --color-pre-border: #2C3733; } +} - a { - color: hsl(211, 100%, 60%); - &:visited { - color: hsl(242, 100%, 80%); - } - } +a { + color: var(--color-accent); +} + +a:visited { + color: var(--color-accent); } + /* General declarations */ body { margin: 0px auto; padding: 1%; - max-width: 750px; + max-width: 68ch; + font-family: var(--font-body); + font-size: 17px; + line-height: 1.6; +} + +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-display); + font-weight: 500; + line-height: 1.2; + text-wrap: balance; +} + +h1 { font-size: 39px; } +h2 { font-size: 31px; } +h3 { font-size: 25px; } +h4, h5, h6 { font-size: 20px; } + +code, pre, .mono { + font-family: var(--font-mono); +} + +code { + background-color: var(--color-code-bg); } .icon { @@ -52,28 +91,74 @@ header { padding: 12px 0px 12px 0px; } -nav .nav-row { +nav, nav ol { display: flex; flex-direction: row; - justify-content: space-between; flex-wrap: wrap; + align-items: center; +} + +nav ol { + list-style: none; + margin: 0px; + padding: 0px; } + nav a { font-size: 18px; margin: 12px; text-decoration: none; } -nav ul, nav li { - display: inline; +nav a img { + width: 32px; + height: 32px; +} + +nav ol.languages { + margin-left: auto; } -nav ul li a { +nav ol.languages a, nav ol.languages li { + font-family: var(--font-mono); font-size: 14px; margin: 6px; } +nav ol.languages li { + color: var(--color-fg); +} + +nav ol.languages a, +nav ol.languages a:visited { + color: var(--color-2nd-fg); +} + +nav ol.languages a:hover { + color: var(--color-fg); +} + +#tagline { + margin: 0px 12px 6px 12px; + font-size: 14px; + color: var(--color-2nd-fg); +} + + +/* A published recording */ + +#media video, #media audio { + width: 100%; + max-width: 100%; +} + +#media-links { + font-family: var(--font-mono); + font-size: 14px; + color: var(--color-2nd-fg); +} + /* Article bodies */ @@ -121,6 +206,28 @@ body > footer li a { +table.tableblock { + border-collapse: collapse; + margin: 16px 0px; +} + +table.tableblock td, table.tableblock th { + text-align: left; + vertical-align: top; + padding: 6px 24px 6px 0px; + border-bottom: 1px solid var(--color-line-soft); +} + +table.tableblock th { + color: var(--color-2nd-fg); + font-size: 14px; +} + +table.tableblock p { + margin: 0px; +} + + /* Code blocks */ /* The "lineno" class is the default generated by Rouge for table-row in code blocks, see: @@ -138,7 +245,7 @@ pre.lineno { border: 1px solid; border-color: var(--color-pre-border); border-radius: 10px; - background-color: var(--color-2nd-bg); + background-color: var(--color-code-bg); } pre { @@ -192,11 +299,11 @@ div.header-anchor:hover img { .plaintext { margin: auto auto 0 auto; text-align: right; - font-family: monospace; + font-family: var(--font-mono); } a.anchor { - background: transparent var(--link-url) center right no-repeat; + background: transparent url(img/link.svg) center right no-repeat; padding-right: 22px; margin-left: 10px; visibility: hidden; @@ -212,3 +319,60 @@ h2:hover a.anchor { .line-through { text-decoration: line-through; } + + +#comments .message { + background-color: var(--color-2nd-bg); + border: 1px solid; + border-color: var(--color-pre-border); + border-radius: 10px; + padding: 0.5rem 1rem; + margin-bottom: 1rem; + margin-left: 9rem; +} + +#comments .message[data-depth="0"] { margin-left: 0; } +#comments .message[data-depth="1"] { margin-left: 1rem; } +#comments .message[data-depth="2"] { margin-left: 2rem; } +#comments .message[data-depth="3"] { margin-left: 3rem; } +#comments .message[data-depth="4"] { margin-left: 4rem; } +#comments .message[data-depth="5"] { margin-left: 5rem; } +#comments .message[data-depth="6"] { margin-left: 6rem; } +#comments .message[data-depth="7"] { margin-left: 7rem; } +#comments .message[data-depth="8"] { margin-left: 8rem; } + +#comments .message-header { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 0 1rem; + font-size: 0.9em; +} + +#comments .from { + font-weight: bold; +} + +#comments .date, #comments .reply, #comments .handle { + color: var(--color-2nd-fg); +} + +#comments .handle { + font-weight: normal; +} + +#comments .message-body { + background-color: transparent; + border: none; + overflow-wrap: anywhere; + font-size: 0.9em; +} + +#comments pre.message-body { white-space: pre-wrap; } +#comments div.message-body p { margin: 0.5em 0; } +#comments div.message-body p:first-child { margin-top: 0; } +#comments div.message-body p:last-child { margin-bottom: 0; } + +@media (max-width: 40rem) { + #comments .message[data-depth] { margin-left: 0; } +} |
