diff options
| author | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2026-02-13 19:11:16 -0500 |
|---|---|---|
| committer | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2026-02-13 19:12:30 -0500 |
| commit | 3ff45ef59e1a2898c90ddea8945cd694537a8a3a (patch) | |
| tree | 1faa80fdc3e0efe68cc6bcdf566907894655e16d | |
| parent | 8fa54d5ac98d95016f0c3eaa9fbc4f042294705d (diff) | |
Initial updates to theme function
| -rw-r--r-- | jakob/theme.scm | 154 | ||||
| -rw-r--r-- | static/css/style.css | 919 |
2 files changed, 585 insertions, 488 deletions
diff --git a/jakob/theme.scm b/jakob/theme.scm index e9dd303..a3e3019 100644 --- a/jakob/theme.scm +++ b/jakob/theme.scm @@ -16,6 +16,7 @@ (define-module (jakob theme) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-19) #:use-module (ice-9 match) #:use-module (jakob utils sxml) #:export (theme)) @@ -25,23 +26,23 @@ ;;; SHTML generation in the site's theme. ;;; -(define %stylesheets '("normalize.css" "fonts.css" "highlight.css" "style.css")) +(define (fugue-icon-path name) + (format #f "background-image: url('/static/image/icons-shadowless/~a.png')" name)) + +(define %title "jakob.space") +(define %stylesheets '("fonts.css" "highlight.css" "style.css")) (define %link-rel '(("alternate" "/feed.xml" "application/atom+xml") ("icon" "/static/image/favicon.ico" "image/vnd.microsoft.icon") ("me" "https://social.jakob.space/jakob") ("webmention" "https://webmention.io/jakob.space/webmention") ("pingback" "https://webmention.io/jakob.space/xmlrpc") ("pgpkey authn" "/static/gpg.txt"))) -(define %nav-bar-tabs '(("About" "/pages/about.html") - ("Tags" "/tag.html") - ("More βΌ" "#" - ("Blogroll" "/blogroll/") - ("Bookmarks" "/bookmark/") - ("Cookbook" "/cookbook/") - ("Changelog" "/pages/changelog.html")))) - -(define %title "Jakob's Personal Webpage") +(define %nav-bar-tabs '(("Articles" "/blog/") + ("Projects" "/projects/") + ("About Me" "/pages/about.html") + ("Changelog" "/pages/changelog.html"))) +;; Currently unused as the current nav bar does not do nesting. (define (format-nav-item item-content) (let* ((anchor-element (apply hyperlink (reverse (take item-content 2)))) (children (drop item-content 2))) @@ -54,32 +55,99 @@ (define %header `(header - ,(hyperlink "/" (image "trident.svg" "home")) - (nav (ul - ,@(map format-nav-item %nav-bar-tabs))))) + (@ (class "site-header")) + (a (@ (href "/") (class "header-logo")) "jakob.space") + (time (@ (datetime ,(date->string (current-date) "~Y-~m-~d"))) + (string-upcase ,(date->string (current-date) "~d~b~Y"))))) + +(define %default-sidebar-modules + `((section + (@ (class "module search-module") + (aria-labelledby "search-heading")) + (h3 (@ (id "search-heading") + (class "module-title module-title-has-icon") + (style ,(fugue-icon-path "magnifier"))) + "Search") + (form (@ (action "/search") + (method "GET") + (role "search") + (style "display: flex; gap: 5px;")) + (input (@ (type "text") (name "q") (placeholder "Keywords...") (aria-label "Search keywords"))) + (button (@ (type "submit")) + "Go"))) + + (section + (@ (class "module nav-module") + (aria-label "Main Navigation")) + (h3 (@ (class "module-title module-title-has-icon") + (style ,(fugue-icon-path "navigation"))) + "Navigation") + (ul (@ (class "nav-list")) + ,@(map (match-lambda + ((name target) `(li (a (@ (href ,target)) ,name)))) + %nav-bar-tabs))) + + (section + (@ (class "module network-module") + (aria-label "External Network")) + (h3 (@ (class "module-title module-title-has-icon") + (style ,(fugue-icon-path "external"))) + "Network") + (ul (@ (class "nav-list")) + (li (a (@ (href "https://social.jakob.space/users/jakob")) "Pleroma")) + (li (a (@ (href "https://lobste.rs/u/jakob")) "Lobste.rs")) + (li (a (@ (href "https://git.sr.ht/~jakob")) "Sr.ht")))) + + (section + (@ (class "module status-module") + (aria-label "External Network")) + (h3 (@ (class "module-title module-title-has-icon") + (style ,(fugue-icon-path "dashboard"))) + "Status") + (span (@ (style "font-size: 9px; color: #666; border-bottom: 1px dotted #999;")) + "Last updated: " (time (@ (datetime "2026-02-13"))) "13FEB2026") + (div (@ (style "font-size: 9px; color: #666; margin-top: 4px;")) + "Reading: ..." + (br) + "Playing: Earthbound" + (br) + "Hacking: ...")) + + (section + (@ (class "module comments-module") + (aria-labelledby "comments-heading")) + (h3 (@ (class "module-title module-title-has-icon") + (style ,(fugue-icon-path "megaphone"))) + "Recent Comments") + (div (@ (class "sidebar-comment-list")) + (article (@ (class "sidebar-comment-box")) + (span (@ (class "comment-context")) + "on: " + (a (@ (href "/blog/usb-pd-is-pretty-cool.html")) "USB-PD Is Pretty Cool")) + (strong "Bob") + (a (@ (href "/blog/usb-pd-is-pretty-cool.html#comment-reply")) + "I used PETG to make sure it didn't warp...")) + (article (@ (class "sidebar-comment-box")) + (span (@ (class "comment-context")) + "on: " + (a (@ (href "/blog/usb-pd-is-pretty-cool.html")) "USB-PD Is Pretty Cool")) + (strong "Alice") + (a (@ (href "/blog/usb-pd-is-pretty-cool.html#comment-reply")) + "This is a lifesaver for field work. Have you...")))))) + +(define* (sidebar #:optional modules) + ) (define %footer - `(footer - (div - (p "Β© 2015 - 2025 Jakob L. Kreuze") - ,(image "cc-by-sa-4.0.png" - "Creative Commons Attribution-ShareAlike 4.0 International (CC -BY-SA 4.0) Logo")) - (p "Unless otherwise specified, the text and images on this site are free -culture works available under the " - ,(hyperlink "https://creativecommons.org/licenses/by-sa/4.0/" - "Creative Commons Attribution Share-Alike 4.0 -International") - " license.") - (p "This website is built with " - ,(hyperlink "http://haunt.dthompson.us/" "Haunt") - ", a static site generator written in " - ,(hyperlink "https://gnu.org/software/guile" "Guile Scheme") - ". The source code is available " - ,(hyperlink "https://git.sr.ht/~jakob/blog" "here") - ".") - (p (a (@ (href "/pages/weblabels.html") (rel "jslicense")) - "JavaScript license information")))) + (define year (date-year (current-date))) + `(footer (@ (class "site-footer")) + (img (@ (src "/static/image/cc-by-sa-4.0.png") + (alt "Creative Commons BY-SA 4.0"))) + "Β©" + (time (@ (datetime "2015")) "2015") + " - " + (time (@ (datetime ,year)) ,year)/ + " Jakob L. Kreuze")) (define* (theme #:key (title '()) @@ -87,7 +155,8 @@ International") (keywords '()) (meta '()) (scripts '()) - (content '(div ""))) + (content '(div "")) + (sidebar '())) "Return an SHTML document using the website's theme." `((doctype "html") (html @@ -96,7 +165,7 @@ International") (head ,(if (null? title) `(title %title) - `(title ,(string-join (list title %title) " β "))) + `(title ,(string-join (list title %title) " :: "))) (meta (@ (charset "utf-8"))) (meta (@ (name "keywords") (content ,(string-join keywords ", ")))) @@ -124,7 +193,12 @@ International") %link-rel)) (body - ,%header - ,content - ,@scripts - ,%footer)))) + (div (@ (class "main-container")) + ,%header + (div (@ (class "content-wrapper")) + (aside (@ (class "sidebar")) + ,@(or sidebar %default-sidebar-modules)) + (main (@ (class "main-content")) + ,content) + ,@scripts) + ,%footer))))) diff --git a/static/css/style.css b/static/css/style.css index 9fd302b..9a0fbe8 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,644 +1,667 @@ -[hidden] { display: none !important; } - -html { - font-family: "Cantarell", sans-serif; -} - -@media (max-width: 54em) { - html { - font-size: 14px; - line-height: 160%; - } -} - -@media (max-width: 26em) { - html { - font-size: 12px; - line-height: 150%; - } +a,body { + color: #333 } body { - max-width: 54rem; - margin: .5rem auto; - position: relative; -} - -@media (max-width: 54em) { - body { - max-width: 100%; - padding: 0 1rem; - } + margin: 0; + padding: 20px; + background-color: #f0f0f0; + font-family: "Bitstream Vera Sans","DejaVu Sans",Verdana,Arial,sans-serif; + line-height: 1.4; + justify-content: center; + background-image: url(background.png) } -/* Top-level header. */ - -body > header { - display: flex; - align-items: center; +a { + text-decoration: none; + border-bottom: 1px dotted #999 } -@media screen and (max-width: 360px) { - body > header { - flex-direction: column; - flex-wrap: wrap; - justify-content: space-around; - } +a:hover { + color: #2e8b57; + background-color: #eee; + border-bottom: 1px solid #2e8b57 } -body > header > a > img { - max-width: 4rem; +.main-container { + width: 700px; + background-color: #fff; + border: 1px solid #666; + box-shadow: 2px 2px 0#ccc } -@media screen and (min-width: 480px) { - body > header > a { - padding-right: 1rem; - } +.site-header,body { + font-size: 10px; + display: flex } -body > header > nav ul { - list-style-type: none; +.site-header { + background-color: #333; + color: #fff; + padding: 5px 10px; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: 700; + border-bottom: 1px solid #000; + justify-content: space-between; + background: linear-gradient(to bottom,#333 0,#222 40%,#111 50%,#222 60%,#333 100%) } -@media screen and (min-width: 480px) { - body > header > nav ul { - padding-left: 0; - } - - body > header > nav > ul > li { - display: inline-block; - } - - body > header > nav > ul li { - padding: 1rem 2rem; - border-bottom: 2px solid #d2d6dd; - text-align: center; - } - - body > header > nav > ul li > a { - color: #000; - text-decoration: none; - } - - body > header > nav > ul .drop-menu { - display: none; - position: absolute; - z-index: 1; - } - - body > header > nav > ul .drop-menu > li { - background: #fff; - } - - body > header > nav > ul > li:hover .drop-menu { - display: block; - } +.header-logo { + color: inherit; + text-decoration: none; + border-bottom: none; + cursor: pointer } -@media screen and (max-width: 480px) { - body > header > nav ul { - padding-left: 2em; - } - - body > header > nav > ul .drop-menu { - list-style-type: circle; - padding-left: 1em; - } +.header-logo:hover { + color: inherit; + background-color: transparent; + border-bottom: none } -/* Horizontal lists. */ - -.horizontal-list { +.content-wrapper { display: flex; - flex-wrap: wrap; - justify-content: space-around; - - list-style-type: none; - text-align: center; - - margin: 0; - padding: 8px 0; + min-height: 400px } -/* Pagination. */ - -#pagination { +.sidebar { + width: 180px; + background-color: #f9f9f9; + border-right: 1px solid #ccc; + padding: 10px; display: flex; - justify-content: space-around; + flex-direction: column } -/* Tag clouds. */ - -#tag-cloud a { - color: #000; +.main-content { + flex: 1; + padding: 15px; + order: 2 } -#tag-cloud li { - display: inline-block; - margin: 10px 5px; - padding: 5px 10px; - vertical-align: top; - - text-align: center; - - border-radius: 4px; - border-style: solid; - border-width: thin; +.module { + margin-bottom: 20px } -/* Links. */ - -a:link, a:visited { color: #00E; text-decoration: none; } - -/* Figures */ - -figure > img { - display: block; - max-height: 600px; - max-width: 90%; - margin: auto; - - border-radius: 2px; +.nav-module { + order: 1 } -figure > .org-svg { - display: block; - max-width: 90%; - margin: auto; +.network-module { + order: 2 } -figure > figcaption { - padding-top: 1rem; +.status-module { + order: 3 } -/* Embeds. */ - -.mastodon > iframe, -.peertube > iframe { - display: block; - width: 90%; - min-height: 100%; - margin: auto; - border-radius: 4px; +.comments-module { + order: 4 } -/* Footnotes. */ - -.footdef { - margin-bottom: 1rem; +.module-title { + font-weight: 700; + background-color: #eee; + border: 1px solid #ccc; + padding: 5px 7px; + margin-bottom: 5px; + font-size: 9px; + text-transform: uppercase; + margin-top: 0; + display: block } -.footdef > sup, .footpara { - display: inline; +.module-title img { + margin-right: 4px } -/* Comments & Webmention. */ - -textarea { - width: 100%; - height: 4rem; +.module-title-has-icon { + background-repeat: no-repeat; + background-position: 3px 3px; + image-rendering: pixelated; + padding-left: 26px } -textarea, input[type=text], input[type=url] { - border: 1px solid #ccc; - box-shadow: inset 0 1px 1px rgba(0,0,0,.075); +.nav-list { + list-style-type: none; + padding: 0; + margin: 0 } -#webmention p .author-name { - margin: 4px; +.nav-list li { + margin-bottom: 4px } -#webmention { - border-top: 2px solid #d2d6dd; +.nav-list li::before { + content: "+ "; + color: #999 } -ul.webmention-container { - list-style-type: none; +.update-entry { + margin-bottom: 25px } -ul.webmention-container > li { - border: 2px solid #d2d6dd; - border-bottom: none; +.date-stamp,.update-entry h3 { + color: #999; + font-size: 9px; + margin-bottom: 2px; + border-bottom: 1px solid #eee; + display: block } -ul.webmention-container > li:last-child { - border-bottom: 2px solid #d2d6dd; +.title::before { + content: ":: " } -ul.webmention-container > li.comment { - padding: 0.5rem; +.update-entry h3 { + text-transform: uppercase; + font-weight: 700; + color: #000; + margin-bottom: 5px; + font-size: 12px; + margin-top: 5px; + padding-bottom: 3px } -ul.webmention-container > li.comment img.u-photo { - width: 4rem; - padding: 0 1rem 1rem 0; - float: left; - clear: both; - height: 100%; +.section-header { + text-transform: uppercase; + background: linear-gradient(to bottom,#333 0,#222 40%,#111 50%,#222 60%,#333 100%); + color: #fff; + padding: 4px 10px; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 15px; + border-left: 5px solid #2e8b57; + margin-top: 0 } -ul.webmention-container > li.interaction { - padding: 4px; +.site-footer { + border-top: 1px solid #ccc; + padding: 5px; + text-align: left; + font-size: 9px; + color: #999; + background-color: #f9f9f9 } -ul.webmention-container > li.interaction img.u-photo { - max-width: 16px; - margin-right: 8px; - float: left; - clear: both; +.site-footer img { + float: right } -ul.webmention-container ul.comment-reactions { - margin-top: 8px; -} +@media (max-width:740px) { + .main-container { + width: 100%; + box-shadow: none + } -ul.webmention-container ul.comment-reactions li { - border-radius: 4px; - border: 1px solid #d2d6dd; - display: inline; - list-style-type: none; - padding: 4px; -} + .content-wrapper { + flex-direction: column + } -/* Webmention (or comment) source indicator. */ + .sidebar { + display: contents + } -ul.webmention-container .comment { - position: relative; -} + .main-content { + order: 1; + padding: 15px + } -ul.webmention-container .comment .comment-source-identifier { - position: absolute; - top: 4px; - right: 4px; - max-width: 16px; -} + .search-module { + order: 2; + padding: 10px; + margin-bottom: 0; + background-color: #f9f9f9; + border-bottom: 1px solid #ccc + } -/* Widget for comment reactions. */ + .nav-module { + order: 3; + padding: 10px 10px 0; + margin-bottom: 0 + } -.emoji-picker { - width: 51%; - height: 2.75em; - border: solid 1px; - overflow: scroll; - margin-top: 16px; -} + .comments-module,.network-module,.status-module { + order: 4; + padding: 10px 10px 0; + margin-bottom: 0 + } -.emoji-picker > span { - margin: 2px; - font-size: 2em; -} + .comments-module,.status-module { + order: 2.5 + } + .status-module { + order: 5; + padding: 10px + } -/* Webmention form. */ + .sidebar-comment-list { + padding: 0 5px + } -form#webmention-form { - border-top: 2px solid #d2d6dd; - padding-top: 1rem; + .sidebar-comment-box { + max-width: 100%; + box-sizing: border-box + } } -#webmention-input-group { - margin-top: 1rem; - display: grid; - grid-template-columns: 9fr 1fr; +.search-module input:focus { + outline: 0; + border-color: #2e8b57 } -/* Comment form. */ - -.required:after { - content:" *"; - color: red; +.comment-form textarea,.form-row input,.search-module input { + flex: 1; + font-size: 9px; + border: 1px solid #ccc; + padding: 3px; + font-family: inherit } -fieldset#comment-content { - display: grid; - grid-template-columns: 1fr 2fr; - grid-gap:5px; +.comment-form button,.search-module button { + text-transform: uppercase; + font-size: 9px; + cursor: pointer } -#comment-form #captcha-trigger-block label { - display: block; - margin-bottom: 16px; +.search-module button { + background: #eee; + border: 1px solid #ccc } -#comment-form img { - max-width: 100%; +figure,pre { + margin: 0 } -/* Source code. */ +figure img { + max-width: 100% +} -pre { - color: #f0e9dc; - font-family: "Hack", monospace; - font-size: 90%; +hr { + border: 0; + border-bottom: 1px dashed #ccc; + margin: 20px 0 +} - background-color: #303539; - border-radius: 4px; - padding: 1rem; - overflow-x: auto; +.comments-section { + margin-top: 40px; + border-top: 2px solid #eee; + padding-top: 20px } -/* Footer. */ +.comment-block { + border-left: 1px solid #ccc; + margin-bottom: 20px; + background-color: #fcfcfc; + padding: 10px +} -body > footer { - margin-top: 1.2rem; - border-top: 2px solid #d2d6dd; +.comment-block.reply { + margin-left: 30px; + margin-top: 15px; + background-color: #fff; + border: 1px dotted #ccc } -body > footer > div { - margin-top: 1rem; +.comment-meta { display: flex; - align-items: center; + gap: 10px; + align-items: flex-start; + margin-bottom: 8px } -body > footer > div > p { - margin: 0; - padding-right: 1rem; +.comment-avatar { + width: 24px; + height: 24px; + image-rendering: pixelated; + background: #eee; + border: 1px solid #ccc; + padding: 2px } -/* About page. */ - -.overline { - border-top: 2px solid #d2d6dd; - margin-top: 0.5rem; - overflow: auto; /* Not specific to overline. */ +.comment-info .subject { + font-style: italic; + color: #555 } -div.about-current-focus table { - text-align: left; +.comment-body { + font-size: 10px; + margin-bottom: 8px } -table.about-elsewhere { - width: 0; +.comment-reactions { + display: flex; + gap: 5px; + margin-top: 10px } -table.about-elsewhere img { - max-height: 16px; - margin: 4px 0px; +.add-reaction,.reaction { + cursor: pointer; + font-size: 8px } -/* Tables. */ - -table { - text-align: center; - width: 100%; +.reaction { + background: #eee; + border: 1px solid #ccc; + padding: 2px 5px; + border-radius: 3px } -td { - padding: 0 1rem; +.reaction:hover { + background: #e0e0e0 } -tr:nth-child(even) { - background-color: #f2f2f2; +.add-reaction { + background: 0 0; + border: 1px dashed #999; + color: #999 } -/* Buttons. */ - -.lang button { - display: inline; - padding: .3em .6em .3em; - font-size: 75%; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; +.comment-form-module { + margin-top: 30px; + padding: 10px; + background: #f9f9f9; + border: 1px solid #ccc } -.label-info { - background-color: #5bc0de; +.comment-form { + flex-direction: column } -.label-good { - background-color: #5cb85c; - border-color: #4cae4c; +.comment-form,.form-row,.legacy-warning { + display: flex; + gap: 8px } -.label-okay { - background-color: #ec971f; - border-color: #d58512; +.comment-form textarea,.form-row input { + padding: 5px } -.label-bad { - background-color: #dc3545; +.comment-form button { + align-self: flex-start; + background: #333; + color: #fff; + border: 0; + padding: 5px 15px } -/* Spoilered text. */ - -.spoiler { - background-color: #2e3436; - color: #2e3436; +.comment-form button:hover { + background: #2e8b57 } -.spoiler:hover { - background-color: #f6f5f4; +.legacy-warning { + background: linear-gradient(to bottom,#fff3e0 0,#ffe0b2 100%); + border: 1px dotted #fb8c00; + padding: 10px; + margin-bottom: 20px; + font-size: 9px; + color: #6d4c41; + align-items: center } -/* Folded sections. */ -.fold-hidden { - height: 300px; - overflow: hidden; - mask-image: linear-gradient(to bottom, black 0%, black 80%, transparent 100%); +.legacy-warning strong { + color: #e65100; + text-transform: uppercase; + letter-spacing: 1px } -/* Styles specific to the "about" page. */ - -.portrait { - max-width: 30%; - padding-left: 1em; - float: right; +.legacy-warning::before { + content: "!"; + display: inline-block; + width: 14px; + height: 14px; + background: #fb8c00; + color: #fff; + text-align: center; + line-height: 14px; + font-weight: 700; + border-radius: 2px } -.portrait > img { - max-width: 100%; +.sidebar-comment-list { + display: flex; + flex-direction: column; + gap: 6px } -.project-section td:nth-child(1) { - width: 15%; +.sidebar-comment-box { + background-color: #fcfcfc; + border: 1px solid #ccc; + border-left: 3px solid #2e8b57; + padding: 5px; + font-size: 9px; + line-height: 1.2 } -.project-section td:nth-child(2) { - width: 10%; +.sidebar-comment-box strong { + display: block; + color: #333; + margin-bottom: 2px; + text-transform: uppercase; + font-size: 8px; + margin-top: 2px } -.project-section td:nth-child(3) { - width: 80px; +.sidebar-comment-box a { + border-bottom: none; + color: #555 } -.project-section td:nth-child(4) { - width: 15%; +.sidebar-comment-box a:hover { + background-color: transparent; + color: #2e8b57 } -.team-timeline-section img { - max-width: 32px; +.comment-context { + display: block; + font-size: 8px; + color: #999; + margin-bottom: 4px; + border-bottom: 1px solid #eee; + padding-bottom: 2px } -.team-timeline-section td:nth-child(1) { - width: 15%; +.comment-context a { + color: #777; + font-style: italic; + border-bottom: none } -.team-timeline-section td:nth-child(2) { - width: 40px; +.comment-context a:hover { + color: #2e8b57; + background: 0 0 } -/* .team-timeline-section td:nth-child(3) { */ -/* width: 20%; */ -/* } */ +a[href*="wikipedia.org"] { + position: relative +} -.team-timeline-section td:nth-child(4) { - width: 15%; +a[href*="wikipedia.org"]::after { + content: ""; + display: inline-block; + width: 10px; + height: 10px; + margin-left: 2px; + margin-top: -10px; + vertical-align: super; + background-size: contain; + background-repeat: no-repeat; + image-rendering: pixelated; + opacity: .8; + background-image: url(https://wikipedia.org/favicon.ico) } -.team-timeline-section td:nth-child(5) { - width: 15%; +.series-nav { + display: flex; + gap: 10px; + margin: 20px 0 } -.lang-c { - background-color: #555555; - color: #fff; +.series-box { + flex: 1; + background-color: #f9f9f9; + border: 1px solid #ccc; + padding: 10px; + text-align: center; + text-decoration: none; + border-bottom: 1px solid #ccc; + transition: background-color .1s } -.lang-cpp { - background-color: #f34b7d; - color: #fff; +.series-box:hover { + background-color: #2e8b57; + border-color: #000 } -.lang-python { - background-color: #3572a5; - color: #ffdb4e; +.series-box:hover .series-label,.series-box:hover .series-title { + color: #fff } -.lang-rust { - background-color: #dea584; - color: #fff; +.series-label { + display: block; + font-size: 8px; + text-transform: uppercase; + color: #999; + margin-bottom: 4px; + letter-spacing: 1px } -.lang-kotlin { - background-color: #f89917; - color: #fff; +.series-title { + display: block; + font-size: 11px; + font-weight: 700; + color: #333 } -.lang-fennel { - background-color: #2ca02c; - color: #fff; +.series-box.single-right { + margin-left: auto; + flex: 0 1 calc(50% - 5px) } -.lang-elisp { - background-color: #c065db; - color: #fff; +.series-box.single-left { + flex: 0 1 calc(50% - 5px) } -.lang-scheme { - background-color: #1e4aec; - color: #fff; +@media (max-width:740px) { + .series-nav { + flex-direction: column + } + + .series-box.single-left,.series-box.single-right { + margin-left: 0; + flex: 1 + } } -.lang-ebuild { - background-color: #4d4270; - color: #fff; +.toc-module { + background-color: #fcfcfc; + border: 1px solid #ccc; + padding: 10px; + margin-top: 12px; + margin-bottom: 12px } -.article-front-matter { - border: 1px solid; - border-radius: 3px; - padding: 0.25em 1em; +.toc-module .module-title { + background-color: #f0f0f0; + margin: -10px -10px 10px; + border-bottom: 1px solid #ccc; + border-top: none; + border-left: none; + border-right: none } -.article-warning { - background-image: url('/static/image/tango-emblem-important.png'); - background-repeat: no-repeat; - background-size: 4em 4em; - background-position: 1.5em 50%; - padding: 0.25em 1em 0.25em 7em; +.toc-module .nav-list li { + font-size: 9px; + line-height: 1.6 } -.article-future-interjection { - background-image: url('/static/image/clock.png'); - background-repeat: no-repeat; - background-size: 4em 4em; - background-position: 1.5em 50%; - padding: 0.25em 1em 0.25em 7em; +@media (max-width:740px) { + .toc-module { + max-width: 100% + } } -#loading { - border: 1px solid; - width: fit-content; - padding: 5px; - margin: auto; +.bar,.foo { + color: red } -fieldset { - padding: 12px; - margin: 15px; +.code-container { + margin: 20px 0; + border: 1px solid #ccc; + background-color: #1e1e1e; + color: #dcdcdc; + font-family: inconsolata; + font-size: 12px } -#rsvp-input input { - margin: 0px 16px; +.code-header { + background-color: #f0f0f0; + border-bottom: 1px solid #ccc; + padding: 4px 10px; + display: flex; + justify-content: space-between; + align-items: center } -.food-diary img { - width: 8em; +.code-filename { + font-size: 8px; + text-transform: uppercase; + letter-spacing: .5px } -.cookbook-image-gallery { - display: grid; - grid-template-columns: repeat(5, 1fr); - grid-gap: 15px; +.code-filename a { + color: #666; + text-decoration: none; + border-bottom: 1px dotted #999 } -.cookbook-image-gallery img { - width: 100%; - height: 100%; - object-fit: cover; +.code-filename a:hover { + color: #2e8b57; + border-bottom: 1px solid #2e8b57 } -.cookbook-entry { - display: grid; - grid-template-columns: 20% 80%; +.code-lang { + font-size: 8px; + color: #999; + font-weight: 700 } -.cookbook-entry-container .cookbook-entry { border: solid 1px; border-bottom: 0; padding: 8px; } -.cookbook-entry-container .cookbook-entry:last-child { border-bottom: solid 1px; } -.cookbook-entry div { - margin: 8px; +pre { + padding: 15px; + overflow-x: auto; + font-size: 10px; + line-height: 1.4 } -.cookbook-entry img { - max-width: 100%; +.project-grid { + display: grid; + grid-template-columns: repeat(3,1fr); + gap: 10px; + margin-top: 10px } -span.cookbook-tag { - border: 1px solid black; - border-radius: 4px; - padding: 1px 4px; - background-color: orange; - margin: 2px; - display: inline-block; +.project-thumb { + width: 100%; + height: 80px; + background-color: #ddd; + border: 1px solid #999; + display: flex; + align-items: center; + justify-content: center; + color: #666; + font-size: 9px } -span.cookbook-tag-difficulty-trivial { background-color: lightgreen; } -span.cookbook-tag-difficulty-trivial:before { content: "Difficulty: Trivial"; } -span.cookbook-tag-difficulty-easy { background-color: green; color: white; } -span.cookbook-tag-difficulty-easy:before { content: "Difficulty: Easy"; } -span.cookbook-tag-difficulty-medium { background-color: yellow; } -span.cookbook-tag-difficulty-medium:before { content: "Difficulty: Medium"; } -span.cookbook-tag-difficulty-hard { background-color: maroon; color: white; } -span.cookbook-tag-difficulty-hard:before { content: "Difficulty: Hard"; } -span.cookbook-tag-cuisine-american:before { content: "Cuisine: πΊπΈ American"; } -span.cookbook-tag-cuisine-texmex:before { content: "Cuisine: π€ Tex-Mex"; } -span.cookbook-tag-cuisine-ghanaian:before { content: "Cuisine: π¬π Ghanaian"; } -span.cookbook-tag-flavor-profile-savory:before { content: "Flavor Profile: π§ Savory"; } -span.cookbook-tag-flavor-profile-spicy:before { content: "Flavor Profile: πΆοΈ Spicy"; } -span.cookbook-tag-dish-type-sauce:before { content: "Type: π₯« Sauce"; } -span.cookbook-tag-dish-type-soup:before { content: "Type: π₯£ Soup"; } -span.cookbook-tag-dish-type-stew:before { content: "Type: π² Stew"; } -span.cookbook-tag-dish-type-starch:before { content: "Type: π Starch"; } -span.cookbook-tag-dish-type-protein:before { content: "Type: π Protein"; } -span.cookbook-tag-dish-type-main:before { content: "Type: π½οΈ Main Course"; } -span.cookbook-tag-dish-type-side:before { content: "Type: π΄ Side Dish"; } -span.cookbook-tag-dish-type-baked-good:before { content: "Type: π Baked Good"; } +.project-thumb:hover { + background-color: #2e8b57; + color: #fff; + border-color: #000 +} -div.figure img { - max-width: 80%; +@media (max-width:740px) { + .project-grid { + grid-template-columns: repeat(2,1fr) + } } |