diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e2e7327
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/out
diff --git a/build.py b/build.py
new file mode 100755
index 0000000..7ec1393
--- /dev/null
+++ b/build.py
@@ -0,0 +1,36 @@
+#! /usr/bin/env python3
+"""Build resume."""
+
+from os import sep
+from pathlib import Path
+
+from rwx import fs
+from rwx.ps import run
+
+if __name__ == "__main__":
+ root = Path(__file__).resolve().parent
+ input = root / "in"
+ output = root / "out"
+ web = output / "web"
+ fs.wipe(output)
+ fs.make_directory(web)
+ run(
+ "rsync",
+ "--archive",
+ "--partial",
+ "--progress",
+ "--verbose",
+ f"{input}{sep}",
+ f"{web}{sep}",
+ )
+ run(
+ "qrencode",
+ ("--background", "00000000"),
+ ("--foreground", "000000FF"),
+ ("--level", "L"),
+ ("--margin", "1"),
+ ("--read-from", str(input / "vcard.vcf")),
+ ("--size", "4"),
+ ("-t", "SVG"),
+ ("--output", str(web / "img" / "vcard.svg")),
+ )
diff --git a/img/aae.png b/in/img/aae.png
similarity index 100%
rename from img/aae.png
rename to in/img/aae.png
diff --git a/img/bluesky.svg b/in/img/bluesky.svg
similarity index 100%
rename from img/bluesky.svg
rename to in/img/bluesky.svg
diff --git a/img/cdad-bdx.png b/in/img/cdad-bdx.png
similarity index 100%
rename from img/cdad-bdx.png
rename to in/img/cdad-bdx.png
diff --git a/img/ceam.png b/in/img/ceam.png
similarity index 100%
rename from img/ceam.png
rename to in/img/ceam.png
diff --git a/img/cnam.png b/in/img/cnam.png
similarity index 100%
rename from img/cnam.png
rename to in/img/cnam.png
diff --git a/img/dirisi.png b/in/img/dirisi.png
similarity index 100%
rename from img/dirisi.png
rename to in/img/dirisi.png
diff --git a/img/en.png b/in/img/en.png
similarity index 100%
rename from img/en.png
rename to in/img/en.png
diff --git a/img/forgejo.svg b/in/img/forgejo.svg
similarity index 100%
rename from img/forgejo.svg
rename to in/img/forgejo.svg
diff --git a/img/fr.png b/in/img/fr.png
similarity index 100%
rename from img/fr.png
rename to in/img/fr.png
diff --git a/img/gaio.png b/in/img/gaio.png
similarity index 100%
rename from img/gaio.png
rename to in/img/gaio.png
diff --git a/img/keyoxide.svg b/in/img/keyoxide.svg
similarity index 100%
rename from img/keyoxide.svg
rename to in/img/keyoxide.svg
diff --git a/img/link.svg b/in/img/link.svg
similarity index 100%
rename from img/link.svg
rename to in/img/link.svg
diff --git a/img/linkedin.svg b/in/img/linkedin.svg
similarity index 100%
rename from img/linkedin.svg
rename to in/img/linkedin.svg
diff --git a/img/location.svg b/in/img/location.svg
similarity index 100%
rename from img/location.svg
rename to in/img/location.svg
diff --git a/img/mail.svg b/in/img/mail.svg
similarity index 100%
rename from img/mail.svg
rename to in/img/mail.svg
diff --git a/img/openpgp.svg b/in/img/openpgp.svg
similarity index 100%
rename from img/openpgp.svg
rename to in/img/openpgp.svg
diff --git a/img/photo.png b/in/img/photo.png
similarity index 100%
rename from img/photo.png
rename to in/img/photo.png
diff --git a/img/rwx.svg b/in/img/rwx.svg
similarity index 100%
rename from img/rwx.svg
rename to in/img/rwx.svg
diff --git a/img/tel.svg b/in/img/tel.svg
similarity index 100%
rename from img/tel.svg
rename to in/img/tel.svg
diff --git a/img/web.svg b/in/img/web.svg
similarity index 100%
rename from img/web.svg
rename to in/img/web.svg
diff --git a/img/youtube.svg b/in/img/youtube.svg
similarity index 100%
rename from img/youtube.svg
rename to in/img/youtube.svg
diff --git a/index.html b/in/index.html
similarity index 98%
rename from index.html
rename to in/index.html
index 3330ae3..c31d13d 100644
--- a/index.html
+++ b/in/index.html
@@ -161,32 +161,30 @@ France
@@ -195,13 +193,13 @@ France
-KeyOxide |
+KeyOxide |
 |
ASP,
OpenPGP |
-OpenPGP |
+OpenPGP |
 |
keys.openpgp.org |
diff --git a/script/main.js b/in/script/main.js
similarity index 100%
rename from script/main.js
rename to in/script/main.js
diff --git a/style/debug.css b/in/style/debug.css
similarity index 100%
rename from style/debug.css
rename to in/style/debug.css
diff --git a/style/main.css b/in/style/main.css
similarity index 65%
rename from style/main.css
rename to in/style/main.css
index fc57317..f0d7925 100644
--- a/style/main.css
+++ b/in/style/main.css
@@ -1,52 +1,58 @@
+/* variables */
+
:root {
- color-scheme: light dark;
+ --alpha: rgba(0, 0, 0, 0);
+ /* border */
+ --border-off: var(--border-width) none var(--alpha);
+ --border-on: var(--border-width) solid var(--border-color);
+ --border-width: .1rem;
+ /* margin */
--margin: .4rem;
-}
-:root {
---anchor-background: #bbb;
---anchor-text: #f00;
---banner-background: #ccf;
---body-background: #fff;
---body-text: #000;
---border-color: #888;
---button-background: #bbb;
---header-background: #ccc;
---item-even: #ddd;
---item-odd: #eee;
---org-background: #afa;
---qrcode-background: ;
---ruler-border: #888;
+ /* theme */
+ color-scheme: light dark;
+ /* theme / gradients */
+ --anchor-gradient: linear-gradient(to top, var(--alpha), var(--anchor-background));
+ --banner-gradient: linear-gradient(to top, var(--alpha), var(--banner-background));
+ --body-gradient: linear-gradient(to top, var(--alpha), var(--body-background));
+ --header-gradient: linear-gradient(to top, var(--alpha), var(--header-background));
+ --item-even-gradient: linear-gradient(to top, var(--alpha), var(--item-even));
+ --item-odd-gradient: linear-gradient(to top, var(--alpha), var(--item-odd));
+ --org-gradient: linear-gradient(to top, var(--alpha), var(--org-background));
+ /* theme / light */
+ --anchor-background: #bbb;
+ --anchor-text: #f00;
+ --banner-background: #ccf;
+ --body-background: #fff;
+ --body-text: #000;
+ --border-color: #888;
+ --button-background: #bbb;
+ --header-background: #ccc;
+ --item-even: #ddd;
+ --item-odd: #eee;
+ --org-background: #afa;
+ --qrcode-background: ;
+ --ruler-border: #888;
}
@media screen {
[data-theme="dark"] {
---anchor-background: #222;
---anchor-text: #f88;
---banner-background: #558;
---body-background: #000;
---body-text: #aaa;
---border-color: #888;
---button-background: #444;
---header-background: #444;
---item-even: #222;
---item-odd: #111;
---org-background: #030;
---qrcode-background: #aaa;
---ruler-border: #444;
+ /* theme / dark */
+ --anchor-background: #222;
+ --anchor-text: #f88;
+ --banner-background: #558;
+ --body-background: #000;
+ --body-text: #aaa;
+ --border-color: #888;
+ --button-background: #444;
+ --header-background: #444;
+ --item-even: #222;
+ --item-odd: #111;
+ --org-background: #030;
+ --qrcode-background: #aaa;
+ --ruler-border: #444;
}
}
-:root {
---alpha: rgba(0, 0, 0, 0);
---border-width: .1rem;
---border-off: var(--border-width) none var(--alpha);
---border-on: var(--border-width) solid var(--border-color);
---anchor-gradient: linear-gradient(to top, var(--alpha), var(--anchor-background));
---banner-gradient: linear-gradient(to top, var(--alpha), var(--banner-background));
---body-gradient: linear-gradient(to top, var(--alpha), var(--body-background));
---header-gradient: linear-gradient(to top, var(--alpha), var(--header-background));
---item-even-gradient: linear-gradient(to top, var(--alpha), var(--item-even));
---item-odd-gradient: linear-gradient(to top, var(--alpha), var(--item-odd));
---org-gradient: linear-gradient(to top, var(--alpha), var(--org-background));
-}
+
+/* main */
#theme {
background-color: var(--button-background);
diff --git a/style/reset.css b/in/style/reset.css
similarity index 100%
rename from style/reset.css
rename to in/style/reset.css
diff --git a/vcard.vcf b/in/vcard.vcf
similarity index 100%
rename from vcard.vcf
rename to in/vcard.vcf
diff --git a/vcard.sh b/vcard.sh
deleted file mode 100755
index 0c3dd04..0000000
--- a/vcard.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /usr/bin/env sh
-
-cat "vcard.vcf" |
- qrencode \
- --background "00000000" \
- --foreground "000000FF" \
- --level "L" \
- --margin "1" \
- --size "4" \
- -t "SVG" \
- --output "img/vcard.svg"