diff --git a/src/components/header.lisp b/src/components/header.lisp index 88beb70..6f4573c 100644 --- a/src/components/header.lisp +++ b/src/components/header.lisp @@ -11,18 +11,67 @@ ("/work" "work") ("/blog" "blog"))) -(defcomp ~header () +(defcomp ~pc-header () (hsx - (header :class "flex justify-between py-2 md:py-4 border-b-1 sticky top-0 bg-white" - (h1 :class "text-2xl md:text-3xl font-bold" - (a :href "/" - "skyizwhite")) - (nav :class "flex items-end" - (ul :preload "mouseover" :class "flex gap-4 text-xl" + (nav :class "hidden md:flex items-end" + (ul :preload "mouseover" :class "flex gap-4 text-xl font-medium" + (loop + :for (href label) :in *nav-menu* :collect + (if (search href (request-uri jingle:*request*)) + (hsx (li :class "text-pink-500" + label)) + (hsx (li (a :href href :class "hover:text-pink-500" + label))))))))) + +(defcomp ~sp-header () + (hsx + (div :class "block md:hidden" :x-data "{ open: false }" + (button + :class "z-20 size-8 flex flex-col justify-center cursor-pointer relative" + :type "button" + :@click "open = !open" + (div :class "grid justify-items-center gap-1.5" + (span + :class "h-1 w-8 rounded-full bg-black transition" + :|:class| "open && 'rotate-45 translate-y-2.5'") + (span + :class "h-1 w-8 rounded-full bg-black transition" + :|:class| "open && 'scale-x-0'") + (span + :class "h-1 w-8 rounded-full bg-black" + :|:class| "open && '-rotate-45 -translate-y-2.5'"))) + (nav + :class (<> + "fixed flex flex-col items-center justify-center " + "z-10 top-0 right-0 w-full h-full gap-16 bg-gray-200") + :x-show "open" + :|x-transition:enter| "transition ease-out duration-400" + :|x-transition:enter-start| "translate-x-full" + :|x-transition:enter-end| "translate-x-0" + :|x-transition:leave| "transition ease-in duration-400" + :|x-transition:leave-start| "translate-x-0" + :|x-transition:leave-end| "translate-x-full" + (h2 :class "text-5xl font-bold" + "Menu") + (ul + :preload "mousedown" + :class "flex flex-col h-fit gap-8 text-3xl font-medium" (loop :for (href label) :in *nav-menu* :collect (if (search href (request-uri jingle:*request*)) (hsx (li :class "text-pink-500" label)) - (hsx (li (a :href href :class "hover:text-pink-500" + (hsx (li (a + :href href + :class "hover:text-pink-500" + :@click "open = false" label)))))))))) + +(defcomp ~header () + (hsx + (header :class "flex justify-between py-2 md:py-4 border-b-1 top-0 bg-white" + (h1 :class "z-20 text-2xl md:text-3xl font-bold" + (a :href "/" + "skyizwhite")) + (~pc-header) + (~sp-header)))) diff --git a/src/components/layout.lisp b/src/components/layout.lisp index 08f8f1f..ae75116 100644 --- a/src/components/layout.lisp +++ b/src/components/layout.lisp @@ -26,7 +26,7 @@ (link :rel "manifest" :href "/img/site.webmanifest") (link :rel "stylesheet" :href (bust-cache "/style/dist.css")) (link :rel "preconnect" :href "https://fonts.googleapis.com") - (link :rel "stylesheet" :href "https://fonts.googleapis.com/css2?family=Zen+Maru+Gothic&display=swap") + (link :rel "stylesheet" :href "https://fonts.googleapis.com/css2?family=Zen+Maru+Gothic:wght@400;500;700&display=swap") (script :src "https://cdn.jsdelivr.net/npm/htmx.org@2.0.4/dist/htmx.min.js") (script :src "https://cdn.jsdelivr.net/npm/htmx-ext-preload@2.1.1/dist/preload.min.js") (script :src "https://cdn.jsdelivr.net/npm/htmx-ext-head-support@2.0.4/dist/head-support.min.js") @@ -39,7 +39,8 @@ "flex flex-col h-[100svh] w-full max-w-[700px] " "px-2 mx-auto") (~header) - (main :class "flex-1 px-2 py-6 md:px-4 md:py-8" - children) - (footer :class "flex p-2 justify-center text-sm border-t-1" - (p "© 2025 Akira Tempaku")))))) + (div :class "flex flex-col flex-1 overflow-y-scroll" + (main :class "flex-1 px-2 py-6 md:px-4 md:py-8" + children) + (footer :class "flex p-2 justify-center text-sm border-t-1" + (p "© 2025 Akira Tempaku"))))))) diff --git a/src/routes/index.lisp b/src/routes/index.lisp index 9492f04..6966243 100644 --- a/src/routes/index.lisp +++ b/src/routes/index.lisp @@ -6,11 +6,21 @@ (in-package #:website/routes/index) (defparameter *links* - '(("Keyoxide" "https://keyoxide.org/f39d5b2c951d16732a5cd3528f0c1a22f26d7e62") - ("GitHub" "https://github.com/skyizwhite") - ("Forgejo" "https://code.skyizwhite.dev/paku") - ("Fediverse" "https://himagine.club/@skyizwhite") - ("Service Status" "https://status.skyizwhite.dev"))) + '(("Keyoxide" + "https://keyoxide.org/f39d5b2c951d16732a5cd3528f0c1a22f26d7e62" + "/img/icon/key.svg") + ("GitHub" + "https://github.com/skyizwhite" + "/img/icon/github.svg") + ("Forgejo" + "https://code.skyizwhite.dev/paku" + "/img/icon/forgejo.svg") + ("Fediverse" + "https://himagine.club/@skyizwhite" + "/img/icon/discussion.svg") + ("Service Status" + "https://status.skyizwhite.dev" + "/img/icon/server.svg"))) (defcomp ~page () (hsx @@ -21,11 +31,15 @@ "Akira Tempaku") (p :class "text-xl" "Web developer")) - (div :class "flex flex-col items-center" + (div :class "flex flex-col gap-2 items-left" (loop - :for (name url) :in *links* - :collect (hsx (a :href url :target "_blank" :class "text-lg hover:text-pink-500" - name))))))) + :for (name url icon) :in *links* + :collect (hsx (a + :href url + :target "_blank" + :class "flex items-center gap-2 text-lg hover:text-pink-500" + (img :src icon :alt name :class "size-4 mt-1") + (span name)))))))) (defun handle-get (params) (declare (ignore params)) diff --git a/static/img/bg.webp b/static/img/bg.webp deleted file mode 100644 index 21c6b0e..0000000 Binary files a/static/img/bg.webp and /dev/null differ diff --git a/static/img/icon/discussion.svg b/static/img/icon/discussion.svg new file mode 100644 index 0000000..5cd7f62 --- /dev/null +++ b/static/img/icon/discussion.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1M1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.75.75 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25m13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275a.75.75 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"/></svg> \ No newline at end of file diff --git a/static/img/icon/forgejo.svg b/static/img/icon/forgejo.svg new file mode 100644 index 0000000..e4703a1 --- /dev/null +++ b/static/img/icon/forgejo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.08 7.08 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422a2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24A2.9 2.9 0 0 1 5.8 18.57V8.589a7.11 7.11 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0M7.223 19.905a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389m9.554-10.464a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.39m0-7.735a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389"/></svg> \ No newline at end of file diff --git a/static/img/icon/github.svg b/static/img/icon/github.svg new file mode 100644 index 0000000..c3c6961 --- /dev/null +++ b/static/img/icon/github.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M8 0c4.42 0 8 3.58 8 8a8.01 8.01 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38c0-.27.01-1.13.01-2.2c0-.75-.25-1.23-.54-1.48c1.78-.2 3.65-.88 3.65-3.95c0-.88-.31-1.59-.82-2.15c.08-.2.36-1.02-.08-2.12c0 0-.67-.22-2.2.82c-.64-.18-1.32-.27-2-.27s-1.36.09-2 .27c-1.53-1.03-2.2-.82-2.2-.82c-.44 1.1-.16 1.92-.08 2.12c-.51.56-.82 1.28-.82 2.15c0 3.06 1.86 3.75 3.64 3.95c-.23.2-.44.55-.51 1.07c-.46.21-1.61.55-2.33-.66c-.15-.24-.6-.83-1.23-.82c-.67.01-.27.38.01.53c.34.19.73.9.82 1.13c.16.45.68 1.31 2.69.94c0 .67.01 1.3.01 1.49c0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8"/></svg> \ No newline at end of file diff --git a/static/img/icon/key.svg b/static/img/icon/key.svg new file mode 100644 index 0000000..0a258b2 --- /dev/null +++ b/static/img/icon/key.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M10.5 0a5.499 5.499 0 1 1-1.288 10.848l-.932.932a.75.75 0 0 1-.53.22H7v.75a.75.75 0 0 1-.22.53l-.5.5a.75.75 0 0 1-.53.22H5v.75a.75.75 0 0 1-.22.53l-.5.5a.75.75 0 0 1-.53.22h-2A1.75 1.75 0 0 1 0 14.25v-2c0-.199.079-.389.22-.53l4.932-4.932A5.5 5.5 0 0 1 10.5 0m-4 5.5c-.001.431.069.86.205 1.269a.75.75 0 0 1-.181.768L1.5 12.56v1.69c0 .138.112.25.25.25h1.69l.06-.06v-1.19a.75.75 0 0 1 .75-.75h1.19l.06-.06v-1.19a.75.75 0 0 1 .75-.75h1.19l1.023-1.025a.75.75 0 0 1 .768-.18A4 4 0 1 0 6.5 5.5M11 6a1 1 0 1 1 0-2a1 1 0 0 1 0 2"/></svg> \ No newline at end of file diff --git a/static/img/icon/server.svg b/static/img/icon/server.svg new file mode 100644 index 0000000..9b119c7 --- /dev/null +++ b/static/img/icon/server.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1c.198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.74 1.74 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1M1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25m.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75M7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5M3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75M3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5"/></svg> \ No newline at end of file diff --git a/static/style/global.css b/static/style/global.css index ee63e75..b2b52c5 100644 --- a/static/style/global.css +++ b/static/style/global.css @@ -10,3 +10,16 @@ font-family: "Zen Maru Gothic", sans-serif; } } + +@supports (font-variation-settings: medium) { + :root { + font-family: "Zen Maru Gothic", sans-serif; + } +} + + +@supports (font-variation-settings: bold) { + :root { + font-family: "Zen Maru Gothic", sans-serif; + } +}