From ee93e145bbd2107f6121c989a627ad54bf2261b0 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 13 Aug 2026 09:30:43 -0600 Subject: [PATCH 01/11] Add three responsive light and dark blog themes Introduce Horizon, Alpenglow, and Dispatch as modern Roller themes with responsive layouts and automatic color-scheme support. Add theme discovery coverage for all three. --- .../main/webapp/themes/alpenglow/archives.vm | 1 + .../main/webapp/themes/alpenglow/custom.css | 1 + app/src/main/webapp/themes/alpenglow/day.vm | 1 + app/src/main/webapp/themes/alpenglow/entry.vm | 1 + .../main/webapp/themes/alpenglow/footer.vm | 1 + app/src/main/webapp/themes/alpenglow/head.vm | 1 + .../main/webapp/themes/alpenglow/header.vm | 1 + .../main/webapp/themes/alpenglow/preview.svg | 1 + .../main/webapp/themes/alpenglow/search.vm | 1 + .../main/webapp/themes/alpenglow/sidebar.vm | 1 + app/src/main/webapp/themes/alpenglow/tags.vm | 1 + .../main/webapp/themes/alpenglow/theme.css | 1 + .../main/webapp/themes/alpenglow/theme.xml | 17 ++++++++++++++++ .../main/webapp/themes/alpenglow/weblog.vm | 1 + .../main/webapp/themes/dispatch/archives.vm | 1 + .../main/webapp/themes/dispatch/custom.css | 1 + app/src/main/webapp/themes/dispatch/day.vm | 1 + app/src/main/webapp/themes/dispatch/entry.vm | 1 + app/src/main/webapp/themes/dispatch/footer.vm | 1 + app/src/main/webapp/themes/dispatch/head.vm | 1 + app/src/main/webapp/themes/dispatch/header.vm | 1 + .../main/webapp/themes/dispatch/preview.svg | 1 + app/src/main/webapp/themes/dispatch/search.vm | 1 + .../main/webapp/themes/dispatch/sidebar.vm | 1 + app/src/main/webapp/themes/dispatch/tags.vm | 1 + app/src/main/webapp/themes/dispatch/theme.css | 1 + app/src/main/webapp/themes/dispatch/theme.xml | 17 ++++++++++++++++ app/src/main/webapp/themes/dispatch/weblog.vm | 1 + .../main/webapp/themes/horizon/archives.vm | 1 + app/src/main/webapp/themes/horizon/custom.css | 1 + app/src/main/webapp/themes/horizon/day.vm | 1 + app/src/main/webapp/themes/horizon/entry.vm | 1 + app/src/main/webapp/themes/horizon/footer.vm | 1 + app/src/main/webapp/themes/horizon/head.vm | 8 ++++++++ app/src/main/webapp/themes/horizon/header.vm | 8 ++++++++ .../main/webapp/themes/horizon/preview.svg | 1 + app/src/main/webapp/themes/horizon/search.vm | 1 + app/src/main/webapp/themes/horizon/sidebar.vm | 1 + app/src/main/webapp/themes/horizon/tags.vm | 1 + app/src/main/webapp/themes/horizon/theme.css | 1 + app/src/main/webapp/themes/horizon/theme.xml | 20 +++++++++++++++++++ app/src/main/webapp/themes/horizon/weblog.vm | 6 ++++++ .../weblogger/business/ThemeManagerTest.java | 7 ++++++- 43 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 app/src/main/webapp/themes/alpenglow/archives.vm create mode 100644 app/src/main/webapp/themes/alpenglow/custom.css create mode 100644 app/src/main/webapp/themes/alpenglow/day.vm create mode 100644 app/src/main/webapp/themes/alpenglow/entry.vm create mode 100644 app/src/main/webapp/themes/alpenglow/footer.vm create mode 100644 app/src/main/webapp/themes/alpenglow/head.vm create mode 100644 app/src/main/webapp/themes/alpenglow/header.vm create mode 100644 app/src/main/webapp/themes/alpenglow/preview.svg create mode 100644 app/src/main/webapp/themes/alpenglow/search.vm create mode 100644 app/src/main/webapp/themes/alpenglow/sidebar.vm create mode 100644 app/src/main/webapp/themes/alpenglow/tags.vm create mode 100644 app/src/main/webapp/themes/alpenglow/theme.css create mode 100644 app/src/main/webapp/themes/alpenglow/theme.xml create mode 100644 app/src/main/webapp/themes/alpenglow/weblog.vm create mode 100644 app/src/main/webapp/themes/dispatch/archives.vm create mode 100644 app/src/main/webapp/themes/dispatch/custom.css create mode 100644 app/src/main/webapp/themes/dispatch/day.vm create mode 100644 app/src/main/webapp/themes/dispatch/entry.vm create mode 100644 app/src/main/webapp/themes/dispatch/footer.vm create mode 100644 app/src/main/webapp/themes/dispatch/head.vm create mode 100644 app/src/main/webapp/themes/dispatch/header.vm create mode 100644 app/src/main/webapp/themes/dispatch/preview.svg create mode 100644 app/src/main/webapp/themes/dispatch/search.vm create mode 100644 app/src/main/webapp/themes/dispatch/sidebar.vm create mode 100644 app/src/main/webapp/themes/dispatch/tags.vm create mode 100644 app/src/main/webapp/themes/dispatch/theme.css create mode 100644 app/src/main/webapp/themes/dispatch/theme.xml create mode 100644 app/src/main/webapp/themes/dispatch/weblog.vm create mode 100644 app/src/main/webapp/themes/horizon/archives.vm create mode 100644 app/src/main/webapp/themes/horizon/custom.css create mode 100644 app/src/main/webapp/themes/horizon/day.vm create mode 100644 app/src/main/webapp/themes/horizon/entry.vm create mode 100644 app/src/main/webapp/themes/horizon/footer.vm create mode 100644 app/src/main/webapp/themes/horizon/head.vm create mode 100644 app/src/main/webapp/themes/horizon/header.vm create mode 100644 app/src/main/webapp/themes/horizon/preview.svg create mode 100644 app/src/main/webapp/themes/horizon/search.vm create mode 100644 app/src/main/webapp/themes/horizon/sidebar.vm create mode 100644 app/src/main/webapp/themes/horizon/tags.vm create mode 100644 app/src/main/webapp/themes/horizon/theme.css create mode 100644 app/src/main/webapp/themes/horizon/theme.xml create mode 100644 app/src/main/webapp/themes/horizon/weblog.vm diff --git a/app/src/main/webapp/themes/alpenglow/archives.vm b/app/src/main/webapp/themes/alpenglow/archives.vm new file mode 100644 index 0000000000..7a5234594e --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/archives.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Archives — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Base camp

Archives

#showWeblogEntryCalendarBig($model.weblog "nil")

Thirty recent stories

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/alpenglow/custom.css b/app/src/main/webapp/themes/alpenglow/custom.css new file mode 100644 index 0000000000..69ce9f2188 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/custom.css @@ -0,0 +1 @@ +/* Add weblog-specific Alpenglow overrides here. */ diff --git a/app/src/main/webapp/themes/alpenglow/day.vm b/app/src/main/webapp/themes/alpenglow/day.vm new file mode 100644 index 0000000000..709b27b7ee --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/day.vm @@ -0,0 +1 @@ +#foreach($entry in $entries)
$entry.category.name
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags)#foreach($tag in $entry.tags)#$tag.name#end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)$commentCount comments#end
#end diff --git a/app/src/main/webapp/themes/alpenglow/entry.vm b/app/src/main/webapp/themes/alpenglow/entry.vm new file mode 100644 index 0000000000..f62fc85274 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/entry.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title — $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/alpenglow/footer.vm b/app/src/main/webapp/themes/alpenglow/footer.vm new file mode 100644 index 0000000000..64c52421b2 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/footer.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/alpenglow/head.vm b/app/src/main/webapp/themes/alpenglow/head.vm new file mode 100644 index 0000000000..ddc5f6043d --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/head.vm @@ -0,0 +1 @@ +#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/alpenglow/header.vm b/app/src/main/webapp/themes/alpenglow/header.vm new file mode 100644 index 0000000000..c935fdf0bb --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/header.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/alpenglow/preview.svg b/app/src/main/webapp/themes/alpenglow/preview.svg new file mode 100644 index 0000000000..a679765d51 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/preview.svg @@ -0,0 +1 @@ +▲ ALPENGLOWFROM COLORADO TO EVERYWHERELife is betterwith a littlealtitude. diff --git a/app/src/main/webapp/themes/alpenglow/search.vm b/app/src/main/webapp/themes/alpenglow/search.vm new file mode 100644 index 0000000000..2dabd354f5 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/search.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Search — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Search the trail

“$model.term”

$model.hits results

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

No stories found. Try another trail.

#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/alpenglow/sidebar.vm b/app/src/main/webapp/themes/alpenglow/sidebar.vm new file mode 100644 index 0000000000..7fc3a75ac0 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/sidebar.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/alpenglow/tags.vm b/app/src/main/webapp/themes/alpenglow/tags.vm new file mode 100644 index 0000000000..46687e7edf --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/tags.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.tags — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Stories filed under

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/alpenglow/theme.css b/app/src/main/webapp/themes/alpenglow/theme.css new file mode 100644 index 0000000000..d6126b0084 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/theme.css @@ -0,0 +1 @@ +:root{color-scheme:light dark;--night:#102d32;--bg:#eef0e9;--paper:#f9faf5;--ink:#15373b;--muted:#627376;--line:#cbd2ca;--sun:#ffb258;--rose:#e46b55;--sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;--display:ui-rounded,"Arial Rounded MT Bold",var(--sans);--serif:ui-serif,Georgia,serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.65 var(--sans)}a{color:inherit;text-underline-offset:.2em}a:hover{color:var(--rose)}img,iframe,video{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--paper);padding:.6rem;z-index:10}.site-header{max-width:1320px;margin:auto;padding:1.3rem clamp(1.2rem,4vw,3rem);display:flex;gap:2rem;align-items:center}.brand{display:flex;gap:.7rem;align-items:center;text-decoration:none;font-weight:850}.brand-mark{color:var(--rose)}.site-header nav{margin-left:auto}.site-header nav ul{display:flex;list-style:none;gap:1.3rem;margin:0;padding:0}.site-header nav a,.feed-link{text-decoration:none;font-size:.85rem;font-weight:700}.feed-link{border:1px solid var(--ink);border-radius:2rem;padding:.4rem .85rem}.hero{max-width:1320px;min-height:590px;margin:0 auto;padding:clamp(2rem,7vw,6rem) clamp(1.2rem,4vw,3rem);display:grid;grid-template-columns:1fr 1.15fr;align-items:center;overflow:hidden}.hero-copy{z-index:2}.kicker{text-transform:uppercase;letter-spacing:.17em;font-weight:850;font-size:.7rem;color:var(--rose)}.hero h1{font:900 clamp(3.6rem,8vw,7.5rem)/.82 var(--display);letter-spacing:-.07em;margin:.3em 0}.hero h1 em{font-family:var(--serif);font-weight:400;color:var(--rose)}.hero-copy>p:last-child{max-width:34rem;color:var(--muted)}.hero-art{min-height:460px;position:relative}.sun{position:absolute;width:clamp(180px,30vw,390px);aspect-ratio:1;border-radius:50%;background:var(--sun);right:4%;top:3%;box-shadow:0 0 0 35px color-mix(in srgb,var(--sun) 14%,transparent)}.ridge{position:absolute;inset:auto -10% 0 0;height:65%;clip-path:polygon(0 100%,18% 54%,30% 72%,53% 20%,65% 48%,77% 32%,100% 100%)}.ridge-back{background:#8db1a4;transform:translateY(-15%)}.ridge-front{background:var(--night)}.content-shell{max-width:1320px;margin:auto;padding:5rem clamp(1.2rem,4vw,3rem);display:grid;grid-template-columns:260px 1fr;gap:clamp(3rem,7vw,7rem)}.explore{position:sticky;top:2rem;align-self:start}.explore>div,.explore form{margin-bottom:2.2rem}.explore label{font-weight:800;display:block;margin-bottom:.45rem}.explore form div,.big-search{display:flex}.explore input,.big-search input{min-width:0;width:100%;border:1px solid var(--line);background:var(--paper);color:var(--ink);padding:.75rem}.explore button,.big-search button{border:0;background:var(--night);color:#fff;padding:.75rem 1rem}.topics{display:flex;flex-wrap:wrap;gap:.45rem}.topics a{font-size:.78rem;text-decoration:none;border-bottom:1px solid var(--line)}.story{display:grid;grid-template-columns:3.5rem 1fr;gap:1rem;background:var(--paper);border-radius:1.2rem;padding:clamp(1.4rem,4vw,3.5rem);margin-bottom:2rem;box-shadow:0 14px 45px color-mix(in srgb,var(--night) 9%,transparent)}.story-index{font:700 1rem var(--serif);color:var(--rose)}.story .meta,.story footer{display:flex;gap:1rem;flex-wrap:wrap;color:var(--muted);font-size:.78rem}.story .meta a{text-transform:uppercase;letter-spacing:.12em;font-weight:850;text-decoration:none}.story h1,.story h2{font:850 clamp(2rem,4vw,3.5rem)/1 var(--display);letter-spacing:-.045em;margin:.5em 0}.story h2 a{text-decoration:none}.entry-content{font:1.1rem/1.72 var(--serif)}.entry-content blockquote{border-left:.35rem solid var(--sun);margin:2rem 0;padding:.8rem 1.5rem;color:var(--muted)}pre{overflow:auto;background:var(--night);color:#eef8f4;padding:1.2rem;border-radius:.75rem}.story footer{margin-top:2rem}.story footer a{text-decoration:none}.reading-shell{max-width:850px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.3rem}.page-title h1{font:900 clamp(3rem,9vw,7rem)/.9 var(--display);letter-spacing:-.06em;margin:.2em 0}.pager{margin:3rem 0}.pager ul{display:flex;justify-content:space-between;list-style:none;padding:0}.calendar{overflow:auto}.calendar table{width:100%;border-collapse:collapse;background:var(--paper)}.calendar td,.calendar th{border:1px solid var(--line);padding:.7rem}.recent li{padding:.5rem}.site-footer{background:var(--night);color:#eaf2ee;padding:3rem max(1.2rem,calc((100vw - 1260px)/2));display:flex;justify-content:space-between;gap:2rem}.site-footer nav{display:flex;gap:1rem}.comments input,.comments textarea{max-width:100%}@media(max-width:760px){.site-header nav{order:3;width:100%;overflow:auto}.site-header{flex-wrap:wrap}.hero{grid-template-columns:1fr;min-height:auto}.hero-art{min-height:300px;margin-top:-2rem;opacity:.92}.content-shell{grid-template-columns:1fr}.explore{position:static}.story{grid-template-columns:1fr}.story-index{font-size:.8rem}.site-footer{flex-direction:column}}@media(prefers-color-scheme:dark){:root{--bg:#0c2226;--paper:#143238;--ink:#edf4ef;--muted:#a6b9b8;--line:#315158;--sun:#f5a953;--rose:#ff8a72}.ridge-front{background:#061719}.feed-link{border-color:var(--ink)}} diff --git a/app/src/main/webapp/themes/alpenglow/theme.xml b/app/src/main/webapp/themes/alpenglow/theme.xml new file mode 100644 index 0000000000..bed9f26398 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/theme.xml @@ -0,0 +1,17 @@ + + + + alpenglowAlpenglowAn image-forward mountain journal with immersive cards and an alpine palette.Apache Roller + custom.cssAlpenglow custom stylescustom.csstext/csscustom.cssvelocity + + + + + + + + + + + + diff --git a/app/src/main/webapp/themes/alpenglow/weblog.vm b/app/src/main/webapp/themes/alpenglow/weblog.vm new file mode 100644 index 0000000000..b795bcca33 --- /dev/null +++ b/app/src/main/webapp/themes/alpenglow/weblog.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end#includeTemplate($model.weblog "standard_header")

From Colorado to everywhere

Life is better
with a little
altitude.

#if($model.weblog.tagline)

$model.weblog.tagline

#end
#includeTemplate($model.weblog "sidebar")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/dispatch/archives.vm b/app/src/main/webapp/themes/dispatch/archives.vm new file mode 100644 index 0000000000..828abf51d0 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/archives.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Archives / $model.weblog.name#includeTemplate($model.weblog "standard_header")

DATABASE / ALL ENTRIES

Archive

#showWeblogEntryCalendarBig($model.weblog "nil")

LATEST_30

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/dispatch/custom.css b/app/src/main/webapp/themes/dispatch/custom.css new file mode 100644 index 0000000000..0e9a07b1d8 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/custom.css @@ -0,0 +1 @@ +/* Add weblog-specific Dispatch overrides here. */ diff --git a/app/src/main/webapp/themes/dispatch/day.vm b/app/src/main/webapp/themes/dispatch/day.vm new file mode 100644 index 0000000000..3c391ae88a --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/day.vm @@ -0,0 +1 @@ +#foreach($entry in $entries)
#if($velocityCount<10)0#end$velocityCount
/$entry.category.name
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags)#foreach($tag in $entry.tags)[$tag.name]#end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)COMMENTS($commentCount)#end#if($utils.isUserAuthorizedToAuthor($entry.website))EDIT#end
#end diff --git a/app/src/main/webapp/themes/dispatch/entry.vm b/app/src/main/webapp/themes/dispatch/entry.vm new file mode 100644 index 0000000000..5d0da49617 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/entry.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title / $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/dispatch/footer.vm b/app/src/main/webapp/themes/dispatch/footer.vm new file mode 100644 index 0000000000..f727d2d7e8 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/footer.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/dispatch/head.vm b/app/src/main/webapp/themes/dispatch/head.vm new file mode 100644 index 0000000000..ddc5f6043d --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/head.vm @@ -0,0 +1 @@ +#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/dispatch/header.vm b/app/src/main/webapp/themes/dispatch/header.vm new file mode 100644 index 0000000000..fa3572c594 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/header.vm @@ -0,0 +1 @@ +
$model.weblog.name_
diff --git a/app/src/main/webapp/themes/dispatch/preview.svg b/app/src/main/webapp/themes/dispatch/preview.svg new file mode 100644 index 0000000000..04b556a55d --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/preview.svg @@ -0,0 +1 @@ +RAIBLE DESIGNS_INDEPENDENT WEBLOG / EST. 2002IDEAS,ADVENTURES,& SOURCE CODE.012026.07.23 / GENERALCRUISING THE DANUBE diff --git a/app/src/main/webapp/themes/dispatch/search.vm b/app/src/main/webapp/themes/dispatch/search.vm new file mode 100644 index 0000000000..0e877c684a --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/search.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Search / $model.weblog.name#includeTemplate($model.weblog "standard_header")

QUERY / $model.hits MATCHES

$model.term

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

NO_MATCHES_FOUND

#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/dispatch/sidebar.vm b/app/src/main/webapp/themes/dispatch/sidebar.vm new file mode 100644 index 0000000000..b2a24838c6 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/sidebar.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/dispatch/tags.vm b/app/src/main/webapp/themes/dispatch/tags.vm new file mode 100644 index 0000000000..f1722d0b3f --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/tags.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.tags / $model.weblog.name#includeTemplate($model.weblog "standard_header")

FILTER / TAG

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/dispatch/theme.css b/app/src/main/webapp/themes/dispatch/theme.css new file mode 100644 index 0000000000..adf4f74b58 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/theme.css @@ -0,0 +1 @@ +:root{color-scheme:light dark;--bg:#f1f1ed;--paper:#fafaf7;--ink:#11120f;--muted:#676961;--grid:#cfd0c8;--acid:#d9ff43;--orange:#ff5b35;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.6 var(--sans)}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.28;background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:48px 48px;z-index:-1}a{color:inherit;text-underline-offset:.22em}a:hover{background:var(--acid);color:#111}img,video,iframe{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--acid);padding:.6rem;z-index:10}.masthead{border-bottom:2px solid var(--ink);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:2rem;padding:1rem clamp(1rem,4vw,3rem);background:var(--bg)}.wordmark{font:800 1.1rem var(--mono);text-decoration:none;text-transform:uppercase}.cursor{color:var(--orange)}.masthead nav ul{display:flex;gap:1.4rem;list-style:none;padding:0;margin:0}.masthead nav a{font:700 .72rem var(--mono);text-decoration:none;text-transform:uppercase}.masthead form{justify-self:end;display:flex;align-items:center;gap:.5rem}.masthead label{font:700 .65rem var(--mono)}.masthead input{width:6rem;border:1px solid var(--ink);background:var(--paper);color:var(--ink);padding:.4rem}.issue-header{max-width:1400px;margin:auto;padding:clamp(3rem,9vw,8rem) clamp(1rem,4vw,3rem);display:grid;grid-template-columns:2fr 1fr;align-items:end;border-bottom:2px solid var(--ink)}.label,.panel-label{font:800 .68rem var(--mono);letter-spacing:.1em}.issue-header h1{font:950 clamp(3.4rem,10vw,9rem)/.78 var(--sans);letter-spacing:-.075em;text-transform:uppercase;margin:.25em 0 0}.issue-header h1 span{color:var(--orange)}.issue-note{border-left:2px solid var(--ink);padding-left:2rem;margin-bottom:.5rem}.issue-note p{font-size:1.15rem}.issue-note a{font:800 .72rem var(--mono)}.publication-grid{max-width:1400px;margin:auto;display:grid;grid-template-columns:290px 1fr}.index-panel{border-right:2px solid var(--ink);padding:3rem 2rem}.index-panel ol{list-style:none;padding:0;margin:1rem 0 3rem}.index-panel li{border-top:1px solid var(--grid)}.index-panel li:last-child{border-bottom:1px solid var(--grid)}.index-panel li a{display:flex;justify-content:space-between;padding:.48rem 0;text-decoration:none;font:700 .76rem var(--mono);text-transform:uppercase}.panel-about{font-size:.88rem}.entries{padding:3rem clamp(1rem,5vw,5rem)}.dispatch{display:grid;grid-template-columns:3rem 1fr;gap:1.2rem;padding:0 0 4rem;margin-bottom:4rem;border-bottom:2px solid var(--ink)}.dispatch-number{font:800 .75rem var(--mono);background:var(--acid);color:#111;width:2.2rem;height:2.2rem;display:grid;place-items:center}.meta,.dispatch footer{display:flex;flex-wrap:wrap;gap:1rem;font:700 .69rem var(--mono);text-transform:uppercase;color:var(--muted)}.meta a,.dispatch footer a{text-decoration:none}.dispatch h1,.dispatch h2{font:900 clamp(2.1rem,5.2vw,5rem)/.91 var(--sans);letter-spacing:-.055em;margin:.35em 0;text-transform:uppercase}.dispatch h2 a{text-decoration:none}.entry-content{max-width:820px;font:1.08rem/1.75 var(--sans)}.entry-content h2,.entry-content h3{line-height:1.05;text-transform:uppercase}.entry-content blockquote{font-size:1.25rem;border:2px solid var(--ink);box-shadow:8px 8px 0 var(--acid);padding:1.2rem;margin:2rem 8px 2rem 0}pre{overflow:auto;background:#141712;color:#e9efdd;border-left:6px solid var(--acid);padding:1.3rem;font:14px/1.65 var(--mono)}code{font-family:var(--mono)}.dispatch footer{margin-top:2rem}.reading-shell{max-width:950px;margin:auto;padding:clamp(3rem,8vw,7rem) 1rem}.page-title{border-bottom:2px solid var(--ink);margin-bottom:4rem}.page-title h1{font:950 clamp(3rem,10vw,8rem)/.85 var(--sans);letter-spacing:-.07em;text-transform:uppercase;overflow-wrap:anywhere;margin:.25em 0}.query{margin:2rem 0 4rem}.query label{font:800 .7rem var(--mono)}.query div{display:flex;margin-top:.5rem}.query input{flex:1;min-width:0;border:2px solid var(--ink);background:var(--paper);color:var(--ink);padding:.9rem}.query button{border:2px solid var(--ink);background:var(--acid);color:#111;padding:.9rem 1.5rem;font:800 .75rem var(--mono)}.pager{margin:3rem 0}.pager ul{display:flex;justify-content:space-between;list-style:none;padding:0}.pager a{font:800 .72rem var(--mono)}.calendar{overflow:auto}.calendar table{border-collapse:collapse;width:100%;background:var(--paper)}.calendar td,.calendar th{border:1px solid var(--ink);padding:.6rem}.archive-list h2{font:800 1rem var(--mono)}.archive-list li{border-top:1px solid var(--grid);padding:.6rem}.site-footer{border-top:2px solid var(--ink);display:flex;justify-content:space-between;gap:2rem;padding:2rem clamp(1rem,4vw,3rem);font:700 .7rem var(--mono);text-transform:uppercase}.status i{display:inline-block;width:.65rem;height:.65rem;border-radius:50%;background:#39b86a;margin-right:.4rem}.comments input,.comments textarea{max-width:100%}@media(max-width:760px){.masthead{grid-template-columns:1fr auto;flex-wrap:wrap}.masthead nav{grid-column:1/-1;grid-row:2;overflow:auto}.masthead nav ul{width:max-content}.masthead form label{display:none}.issue-header{grid-template-columns:1fr}.issue-note{margin-top:2rem}.publication-grid{grid-template-columns:1fr}.index-panel{border-right:0;border-bottom:2px solid var(--ink)}.site-footer{flex-direction:column}.dispatch{grid-template-columns:2.3rem 1fr}}@media(prefers-color-scheme:dark){:root{--bg:#11120f;--paper:#1b1d19;--ink:#f1f1e9;--muted:#a5a79e;--grid:#343730;--acid:#cfff3d;--orange:#ff7756}.dispatch-number,.issue-note a:hover,.wordmark:hover{color:#111}.masthead input{border-color:var(--ink)}} diff --git a/app/src/main/webapp/themes/dispatch/theme.xml b/app/src/main/webapp/themes/dispatch/theme.xml new file mode 100644 index 0000000000..e363c1c3df --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/theme.xml @@ -0,0 +1,17 @@ + + + + dispatchDispatchA precise, high-contrast publication theme built for code, essays, and deep archives.Apache Roller + custom.cssDispatch custom stylescustom.csstext/csscustom.cssvelocity + + + + + + + + + + + + diff --git a/app/src/main/webapp/themes/dispatch/weblog.vm b/app/src/main/webapp/themes/dispatch/weblog.vm new file mode 100644 index 0000000000..91c5469f23 --- /dev/null +++ b/app/src/main/webapp/themes/dispatch/weblog.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) / $model.weblog.tagline#end#includeTemplate($model.weblog "standard_header")

INDEPENDENT WEBLOG / EST. 2002

Ideas,
adventures,
& source code.

#if($model.weblog.tagline)

$model.weblog.tagline

#endSUBSCRIBE TO THE SIGNAL →
#includeTemplate($model.weblog "sidebar")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/horizon/archives.vm b/app/src/main/webapp/themes/horizon/archives.vm new file mode 100644 index 0000000000..084f4f6c31 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/archives.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Archives — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Since the beginning

Archives

Browse the complete history of $model.weblog.name.

#showWeblogEntryCalendarBig($model.weblog "nil")

Recent posts

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/horizon/custom.css b/app/src/main/webapp/themes/horizon/custom.css new file mode 100644 index 0000000000..1a9e307368 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/custom.css @@ -0,0 +1 @@ +/* Add weblog-specific Horizon overrides here. */ diff --git a/app/src/main/webapp/themes/horizon/day.vm b/app/src/main/webapp/themes/horizon/day.vm new file mode 100644 index 0000000000..a4bd00fa83 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/day.vm @@ -0,0 +1 @@ +#foreach($entry in $entries)
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags && $entry.tags.size()>0)#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)$commentCount comments#end#if($utils.isUserAuthorizedToAuthor($entry.website))Edit#end
#showTrackbackAutodiscovery($entry)
#end diff --git a/app/src/main/webapp/themes/horizon/entry.vm b/app/src/main/webapp/themes/horizon/entry.vm new file mode 100644 index 0000000000..00a0fcd7ae --- /dev/null +++ b/app/src/main/webapp/themes/horizon/entry.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title — $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/horizon/footer.vm b/app/src/main/webapp/themes/horizon/footer.vm new file mode 100644 index 0000000000..35fba99ce3 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/footer.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/horizon/head.vm b/app/src/main/webapp/themes/horizon/head.vm new file mode 100644 index 0000000000..b5783fccd4 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/head.vm @@ -0,0 +1,8 @@ + + + + + +#showAutodiscoveryLinks($model.weblog) +#showMetaDescription() +#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/horizon/header.vm b/app/src/main/webapp/themes/horizon/header.vm new file mode 100644 index 0000000000..ae1f363549 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/header.vm @@ -0,0 +1,8 @@ + + diff --git a/app/src/main/webapp/themes/horizon/preview.svg b/app/src/main/webapp/themes/horizon/preview.svg new file mode 100644 index 0000000000..0125f30ce7 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/preview.svg @@ -0,0 +1 @@ +HorizonNOTES FROM THE JOURNEYStories worthkeeping.JUL 23, 2026 · GENERALCruising the Danube diff --git a/app/src/main/webapp/themes/horizon/search.vm b/app/src/main/webapp/themes/horizon/search.vm new file mode 100644 index 0000000000..5423b7a19b --- /dev/null +++ b/app/src/main/webapp/themes/horizon/search.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")Search — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Search

Results for “$model.term”

$model.hits matches

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

No entries matched. Try a broader phrase.

#end
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/horizon/sidebar.vm b/app/src/main/webapp/themes/horizon/sidebar.vm new file mode 100644 index 0000000000..6825fcbe1b --- /dev/null +++ b/app/src/main/webapp/themes/horizon/sidebar.vm @@ -0,0 +1 @@ + diff --git a/app/src/main/webapp/themes/horizon/tags.vm b/app/src/main/webapp/themes/horizon/tags.vm new file mode 100644 index 0000000000..3debe6546c --- /dev/null +++ b/app/src/main/webapp/themes/horizon/tags.vm @@ -0,0 +1 @@ +#includeTemplate($model.weblog "standard_head")$model.tags — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Topic

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/horizon/theme.css b/app/src/main/webapp/themes/horizon/theme.css new file mode 100644 index 0000000000..fe3ee7757d --- /dev/null +++ b/app/src/main/webapp/themes/horizon/theme.css @@ -0,0 +1 @@ +:root{color-scheme:light dark;--bg:#f7f3eb;--surface:#fffdf8;--ink:#28241f;--muted:#726b62;--line:#d9d0c2;--accent:#c94f32;--accent2:#1e6b64;--serif:ui-serif,Georgia,Cambria,"Times New Roman",serif;--sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.7 var(--sans);text-rendering:optimizeLegibility}a{color:inherit;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent);text-underline-offset:.2em}a:hover{color:var(--accent)}img,video,iframe{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--surface);padding:.6rem 1rem;z-index:9}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.site-header{border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 88%,transparent);position:sticky;top:0;z-index:4;backdrop-filter:blur(12px)}.nav-shell{max-width:1180px;margin:auto;padding:1rem 1.5rem;display:flex;align-items:center;gap:2rem}.brand{font:700 1.2rem var(--serif);text-decoration:none}.site-nav{margin-left:auto}.site-nav ul{display:flex;gap:1.2rem;list-style:none;margin:0;padding:0}.site-nav a{text-decoration:none;font-size:.88rem}.quick-search input{width:8rem;border:1px solid var(--line);border-radius:2rem;background:var(--surface);color:var(--ink);padding:.55rem .9rem}.page-shell{max-width:1180px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.5rem}.intro{max-width:800px;margin-bottom:clamp(3rem,7vw,6rem)}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-size:.72rem;font-weight:800;color:var(--accent)}.intro h1,.page-heading h1{font:600 clamp(3.4rem,10vw,7.8rem)/.92 var(--serif);letter-spacing:-.055em;margin:.2em 0}.lede{font:400 clamp(1.2rem,2.4vw,1.75rem)/1.45 var(--serif);color:var(--muted);max-width:42rem}.layout{display:grid;grid-template-columns:minmax(0,760px) minmax(220px,1fr);gap:clamp(3rem,8vw,8rem)}.post-card{padding:0 0 4rem;margin:0 0 4rem;border-bottom:1px solid var(--line)}.post-meta,.post-footer{display:flex;flex-wrap:wrap;gap:.55rem 1rem;color:var(--muted);font-size:.82rem}.post-meta a,.post-footer a{text-decoration:none}.post-title{font:600 clamp(2rem,5vw,3.7rem)/1.05 var(--serif);letter-spacing:-.035em;margin:.35em 0 .55em}.post-title a{text-decoration:none}.post-content{font-family:var(--serif);font-size:clamp(1.08rem,1.4vw,1.22rem)}.post-content :is(h2,h3,h4){line-height:1.2;margin-top:2em}.post-content blockquote{margin:2rem 0;padding:1rem 0 1rem 1.5rem;border-left:4px solid var(--accent);font-size:1.2em;color:var(--muted)}pre{overflow:auto;padding:1.2rem;border-radius:.6rem;background:#1e2423;color:#eff7f4;font:14px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.post-footer{justify-content:space-between;margin-top:2rem}.post-tags{display:flex;gap:.7rem;flex-wrap:wrap}.sidebar{font-size:.92rem}.sidebar section{margin-bottom:3rem}.sidebar h2,.recent h2{font:600 1.25rem var(--serif)}.tag-cloud{display:flex;gap:.5rem;flex-wrap:wrap}.tag-cloud a{border:1px solid var(--line);border-radius:2rem;padding:.22rem .7rem;text-decoration:none}.subscribe{display:flex;justify-content:space-between;background:var(--accent);color:white!important;padding:1rem 1.2rem;text-decoration:none;border-radius:.3rem}.article-shell{max-width:760px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.5rem}.page-heading{margin-bottom:4rem}.page-heading h1{font-size:clamp(3rem,9vw,6rem)}.pager{display:flex;justify-content:space-between;gap:1rem;margin:2rem 0}.pager ul{display:contents}.pager li{list-style:none}.search-panel{margin:2rem 0 4rem}.search-panel label{display:block;font-weight:700;margin-bottom:.5rem}.search-panel div{display:flex}.search-panel input{flex:1;min-width:0;padding:.8rem;border:1px solid var(--line);background:var(--surface);color:var(--ink)}button{border:0;background:var(--accent);color:white;padding:.8rem 1.2rem;font-weight:700}.archive-calendar{overflow-x:auto}.archive-calendar table{width:100%;border-collapse:collapse}.archive-calendar td,.archive-calendar th{padding:.6rem;border:1px solid var(--line)}.recent ol{padding-left:1.2rem}.site-footer{max-width:1180px;margin:2rem auto 0;padding:3rem 1.5rem;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr auto;gap:1rem}.site-footer p{color:var(--muted);margin:.25rem 0}.site-footer small{grid-column:1/-1;color:var(--muted)}.footer-links{display:flex;gap:1rem}.comments-area input,.comments-area textarea{max-width:100%}@media(max-width:760px){.nav-shell{flex-wrap:wrap;gap:1rem}.site-nav{order:3;width:100%;overflow:auto}.site-nav ul{width:max-content}.quick-search{margin-left:auto}.layout{grid-template-columns:1fr}.sidebar{border-top:1px solid var(--line);padding-top:2rem}.site-footer{grid-template-columns:1fr}.intro h1{overflow-wrap:anywhere}}@media(prefers-color-scheme:dark){:root{--bg:#181916;--surface:#22231f;--ink:#f3eee5;--muted:#aaa398;--line:#3d3d36;--accent:#f27b5d;--accent2:#75c4b8}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}} diff --git a/app/src/main/webapp/themes/horizon/theme.xml b/app/src/main/webapp/themes/horizon/theme.xml new file mode 100644 index 0000000000..5bd3b791cb --- /dev/null +++ b/app/src/main/webapp/themes/horizon/theme.xml @@ -0,0 +1,20 @@ + + + + horizonHorizon + A warm, typography-first editorial theme for stories, travel, and technical writing. + Apache Roller + + custom.cssHorizon custom stylescustom.csstext/csscustom.cssvelocity + + + + + + + + + + + + diff --git a/app/src/main/webapp/themes/horizon/weblog.vm b/app/src/main/webapp/themes/horizon/weblog.vm new file mode 100644 index 0000000000..72445678d4 --- /dev/null +++ b/app/src/main/webapp/themes/horizon/weblog.vm @@ -0,0 +1,6 @@ +#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end +#includeTemplate($model.weblog "standard_header") +
+

Notes from the journey

$model.weblog.name

#if($model.weblog.tagline)

$model.weblog.tagline

#end
+
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "sidebar")
+
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java index b4584c44d7..4269203eed 100644 --- a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java @@ -51,10 +51,15 @@ public void testThemeAssumptions() throws Exception { assertNotNull( themeManager.getTheme("basic") ); assertNotNull( themeManager.getTheme("basic").getStylesheet() ); assertNull( themeManager.getTheme("frontpage").getStylesheet() ); + assertNotNull( themeManager.getTheme("horizon") ); + assertNotNull( themeManager.getTheme("horizon").getStylesheet() ); + assertNotNull( themeManager.getTheme("alpenglow") ); + assertNotNull( themeManager.getTheme("alpenglow").getStylesheet() ); + assertNotNull( themeManager.getTheme("dispatch") ); + assertNotNull( themeManager.getTheme("dispatch").getStylesheet() ); } } - From 421183331967de40c723d018fcaefa2e350de0ca Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 13 Aug 2026 09:44:33 -0600 Subject: [PATCH 02/11] Format the new Velocity templates Expand the compact theme templates into readable, consistently indented HTML and Velocity control flow. --- .../main/webapp/themes/alpenglow/archives.vm | 28 ++++++++++++- app/src/main/webapp/themes/alpenglow/day.vm | 29 ++++++++++++- app/src/main/webapp/themes/alpenglow/entry.vm | 19 ++++++++- .../main/webapp/themes/alpenglow/footer.vm | 11 ++++- app/src/main/webapp/themes/alpenglow/head.vm | 7 +++- .../main/webapp/themes/alpenglow/header.vm | 10 ++++- .../main/webapp/themes/alpenglow/search.vm | 28 ++++++++++++- .../main/webapp/themes/alpenglow/sidebar.vm | 24 ++++++++++- app/src/main/webapp/themes/alpenglow/tags.vm | 20 ++++++++- .../main/webapp/themes/alpenglow/weblog.vm | 41 ++++++++++++++++++- .../main/webapp/themes/dispatch/archives.vm | 28 ++++++++++++- app/src/main/webapp/themes/dispatch/day.vm | 31 +++++++++++++- app/src/main/webapp/themes/dispatch/entry.vm | 19 ++++++++- app/src/main/webapp/themes/dispatch/footer.vm | 9 +++- app/src/main/webapp/themes/dispatch/head.vm | 7 +++- app/src/main/webapp/themes/dispatch/header.vm | 13 +++++- app/src/main/webapp/themes/dispatch/search.vm | 30 +++++++++++++- .../main/webapp/themes/dispatch/sidebar.vm | 21 +++++++++- app/src/main/webapp/themes/dispatch/tags.vm | 20 ++++++++- app/src/main/webapp/themes/dispatch/weblog.vm | 39 +++++++++++++++++- .../main/webapp/themes/horizon/archives.vm | 29 ++++++++++++- app/src/main/webapp/themes/horizon/day.vm | 35 +++++++++++++++- app/src/main/webapp/themes/horizon/entry.vm | 19 ++++++++- app/src/main/webapp/themes/horizon/footer.vm | 12 +++++- app/src/main/webapp/themes/horizon/head.vm | 14 +++---- app/src/main/webapp/themes/horizon/header.vm | 5 ++- app/src/main/webapp/themes/horizon/search.vm | 31 +++++++++++++- app/src/main/webapp/themes/horizon/sidebar.vm | 24 ++++++++++- app/src/main/webapp/themes/horizon/tags.vm | 20 ++++++++- app/src/main/webapp/themes/horizon/weblog.vm | 33 ++++++++++++--- 30 files changed, 614 insertions(+), 42 deletions(-) diff --git a/app/src/main/webapp/themes/alpenglow/archives.vm b/app/src/main/webapp/themes/alpenglow/archives.vm index 7a5234594e..1d22bf4921 100644 --- a/app/src/main/webapp/themes/alpenglow/archives.vm +++ b/app/src/main/webapp/themes/alpenglow/archives.vm @@ -1 +1,27 @@ -#includeTemplate($model.weblog "standard_head")Archives — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Base camp

Archives

#showWeblogEntryCalendarBig($model.weblog "nil")

Thirty recent stories

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Archives — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Base camp

+

Archives

+
+
#showWeblogEntryCalendarBig($model.weblog "nil")
+
+

Thirty recent stories

+ #set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30)) +
    + #foreach($recentEntry in $recentEntries) +
  1. $recentEntry.title
  2. + #end +
+
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/alpenglow/day.vm b/app/src/main/webapp/themes/alpenglow/day.vm index 709b27b7ee..dc4bf4d9d7 100644 --- a/app/src/main/webapp/themes/alpenglow/day.vm +++ b/app/src/main/webapp/themes/alpenglow/day.vm @@ -1 +1,28 @@ -#foreach($entry in $entries)
$entry.category.name
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags)#foreach($tag in $entry.tags)#$tag.name#end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)$commentCount comments#end
#end +#foreach($entry in $entries) +
+ +
+
+ $entry.category.name + +
+ #if($model.permalink) +

$entry.title

+ #else +

$entry.title

+ #end +
+ #if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end +
+
+ #if($entry.tags)#foreach($tag in $entry.tags) + #$tag.name + #end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0) + $commentCount comments + #end +
+
+
+#end diff --git a/app/src/main/webapp/themes/alpenglow/entry.vm b/app/src/main/webapp/themes/alpenglow/entry.vm index f62fc85274..ab33e91238 100644 --- a/app/src/main/webapp/themes/alpenglow/entry.vm +++ b/app/src/main/webapp/themes/alpenglow/entry.vm @@ -1 +1,18 @@ -#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title — $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblogEntry.title — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #foreach($entry in $entries) +
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/alpenglow/footer.vm b/app/src/main/webapp/themes/alpenglow/footer.vm index 64c52421b2..c6f20cc2a1 100644 --- a/app/src/main/webapp/themes/alpenglow/footer.vm +++ b/app/src/main/webapp/themes/alpenglow/footer.vm @@ -1 +1,10 @@ -

$model.weblog.name — #if($model.weblog.tagline)$model.weblog.tagline#elseField notes from a life in motion.#end

+
+

+ $model.weblog.name + — #if($model.weblog.tagline)$model.weblog.tagline#elseField notes from a life in motion.#end +

+ +
diff --git a/app/src/main/webapp/themes/alpenglow/head.vm b/app/src/main/webapp/themes/alpenglow/head.vm index ddc5f6043d..ecd7f763e2 100644 --- a/app/src/main/webapp/themes/alpenglow/head.vm +++ b/app/src/main/webapp/themes/alpenglow/head.vm @@ -1 +1,6 @@ -#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) + + + + + +#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/alpenglow/header.vm b/app/src/main/webapp/themes/alpenglow/header.vm index c935fdf0bb..4550c87502 100644 --- a/app/src/main/webapp/themes/alpenglow/header.vm +++ b/app/src/main/webapp/themes/alpenglow/header.vm @@ -1 +1,9 @@ - + + diff --git a/app/src/main/webapp/themes/alpenglow/search.vm b/app/src/main/webapp/themes/alpenglow/search.vm index 2dabd354f5..b1cac61056 100644 --- a/app/src/main/webapp/themes/alpenglow/search.vm +++ b/app/src/main/webapp/themes/alpenglow/search.vm @@ -1 +1,27 @@ -#includeTemplate($model.weblog "standard_head")Search — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Search the trail

“$model.term”

$model.hits results

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

No stories found. Try another trail.

#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Search — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Search the trail

+

“$model.term”

+

$model.hits results

+
+ + #if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #else +

No stories found. Try another trail.

+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/alpenglow/sidebar.vm b/app/src/main/webapp/themes/alpenglow/sidebar.vm index 7fc3a75ac0..62afe55039 100644 --- a/app/src/main/webapp/themes/alpenglow/sidebar.vm +++ b/app/src/main/webapp/themes/alpenglow/sidebar.vm @@ -1 +1,23 @@ - + diff --git a/app/src/main/webapp/themes/alpenglow/tags.vm b/app/src/main/webapp/themes/alpenglow/tags.vm index 46687e7edf..5f857fa9c0 100644 --- a/app/src/main/webapp/themes/alpenglow/tags.vm +++ b/app/src/main/webapp/themes/alpenglow/tags.vm @@ -1 +1,19 @@ -#includeTemplate($model.weblog "standard_head")$model.tags — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Stories filed under

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.tags — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Stories filed under

+

$model.tags

+
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/alpenglow/weblog.vm b/app/src/main/webapp/themes/alpenglow/weblog.vm index b795bcca33..d9adcdb7f8 100644 --- a/app/src/main/webapp/themes/alpenglow/weblog.vm +++ b/app/src/main/webapp/themes/alpenglow/weblog.vm @@ -1 +1,40 @@ -#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end#includeTemplate($model.weblog "standard_header")

From Colorado to everywhere

Life is better
with a little
altitude.

#if($model.weblog.tagline)

$model.weblog.tagline

#end
#includeTemplate($model.weblog "sidebar")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end + + + #includeTemplate($model.weblog "standard_header") +
+
+
+

From Colorado to everywhere

+

+ Life is better +
+ with a little +
+ altitude. +

+ #if($model.weblog.tagline) +

$model.weblog.tagline

+ #end +
+ +
+
+ #includeTemplate($model.weblog "sidebar") +
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/dispatch/archives.vm b/app/src/main/webapp/themes/dispatch/archives.vm index 828abf51d0..a09c6b2d02 100644 --- a/app/src/main/webapp/themes/dispatch/archives.vm +++ b/app/src/main/webapp/themes/dispatch/archives.vm @@ -1 +1,27 @@ -#includeTemplate($model.weblog "standard_head")Archives / $model.weblog.name#includeTemplate($model.weblog "standard_header")

DATABASE / ALL ENTRIES

Archive

#showWeblogEntryCalendarBig($model.weblog "nil")

LATEST_30

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Archives / $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

DATABASE / ALL ENTRIES

+

Archive

+
+
#showWeblogEntryCalendarBig($model.weblog "nil")
+
+

LATEST_30

+ #set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30)) +
    + #foreach($recentEntry in $recentEntries) +
  1. $recentEntry.title
  2. + #end +
+
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/dispatch/day.vm b/app/src/main/webapp/themes/dispatch/day.vm index 3c391ae88a..7e36e259a7 100644 --- a/app/src/main/webapp/themes/dispatch/day.vm +++ b/app/src/main/webapp/themes/dispatch/day.vm @@ -1 +1,30 @@ -#foreach($entry in $entries)
#if($velocityCount<10)0#end$velocityCount
/$entry.category.name
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags)#foreach($tag in $entry.tags)[$tag.name]#end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)COMMENTS($commentCount)#end#if($utils.isUserAuthorizedToAuthor($entry.website))EDIT#end
#end +#foreach($entry in $entries) +
+
#if($velocityCount<10)0#end$velocityCount
+
+
+ + /$entry.category.name +
+ #if($model.permalink) +

$entry.title

+ #else +

$entry.title

+ #end +
+ #if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end +
+
+ #if($entry.tags)#foreach($tag in $entry.tags) + [$tag.name] + #end#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0) + COMMENTS($commentCount) + #end#if($utils.isUserAuthorizedToAuthor($entry.website)) + EDIT + #end +
+
+
+#end diff --git a/app/src/main/webapp/themes/dispatch/entry.vm b/app/src/main/webapp/themes/dispatch/entry.vm index 5d0da49617..80e6df89b2 100644 --- a/app/src/main/webapp/themes/dispatch/entry.vm +++ b/app/src/main/webapp/themes/dispatch/entry.vm @@ -1 +1,18 @@ -#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title / $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblogEntry.title / $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #foreach($entry in $entries) +
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/dispatch/footer.vm b/app/src/main/webapp/themes/dispatch/footer.vm index f727d2d7e8..a12a04d529 100644 --- a/app/src/main/webapp/themes/dispatch/footer.vm +++ b/app/src/main/webapp/themes/dispatch/footer.vm @@ -1 +1,8 @@ -
Publishing since the early web$model.weblog.nameATOM.XML
+
+ + + Publishing since the early web + + $model.weblog.name + ATOM.XML +
diff --git a/app/src/main/webapp/themes/dispatch/head.vm b/app/src/main/webapp/themes/dispatch/head.vm index ddc5f6043d..ecd7f763e2 100644 --- a/app/src/main/webapp/themes/dispatch/head.vm +++ b/app/src/main/webapp/themes/dispatch/head.vm @@ -1 +1,6 @@ -#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) + + + + + +#showAutodiscoveryLinks($model.weblog)#showMetaDescription()#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/dispatch/header.vm b/app/src/main/webapp/themes/dispatch/header.vm index fa3572c594..473d396379 100644 --- a/app/src/main/webapp/themes/dispatch/header.vm +++ b/app/src/main/webapp/themes/dispatch/header.vm @@ -1 +1,12 @@ -
$model.weblog.name_
+ +
+ + $model.weblog.name + _ + + +
+ + +
+
diff --git a/app/src/main/webapp/themes/dispatch/search.vm b/app/src/main/webapp/themes/dispatch/search.vm index 0e877c684a..090a93a3d3 100644 --- a/app/src/main/webapp/themes/dispatch/search.vm +++ b/app/src/main/webapp/themes/dispatch/search.vm @@ -1 +1,29 @@ -#includeTemplate($model.weblog "standard_head")Search / $model.weblog.name#includeTemplate($model.weblog "standard_header")

QUERY / $model.hits MATCHES

$model.term

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

NO_MATCHES_FOUND

#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Search / $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

QUERY / $model.hits MATCHES

+

$model.term

+
+
+ +
+ + +
+
+ #if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #else +

NO_MATCHES_FOUND

+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/dispatch/sidebar.vm b/app/src/main/webapp/themes/dispatch/sidebar.vm index b2a24838c6..5a33dd2a7a 100644 --- a/app/src/main/webapp/themes/dispatch/sidebar.vm +++ b/app/src/main/webapp/themes/dispatch/sidebar.vm @@ -1 +1,20 @@ - + diff --git a/app/src/main/webapp/themes/dispatch/tags.vm b/app/src/main/webapp/themes/dispatch/tags.vm index f1722d0b3f..db0f2090dd 100644 --- a/app/src/main/webapp/themes/dispatch/tags.vm +++ b/app/src/main/webapp/themes/dispatch/tags.vm @@ -1 +1,19 @@ -#includeTemplate($model.weblog "standard_head")$model.tags / $model.weblog.name#includeTemplate($model.weblog "standard_header")

FILTER / TAG

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.tags / $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

FILTER / TAG

+

$model.tags

+
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/dispatch/weblog.vm b/app/src/main/webapp/themes/dispatch/weblog.vm index 91c5469f23..c65baf0241 100644 --- a/app/src/main/webapp/themes/dispatch/weblog.vm +++ b/app/src/main/webapp/themes/dispatch/weblog.vm @@ -1 +1,38 @@ -#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) / $model.weblog.tagline#end#includeTemplate($model.weblog "standard_header")

INDEPENDENT WEBLOG / EST. 2002

Ideas,
adventures,
& source code.

#if($model.weblog.tagline)

$model.weblog.tagline

#endSUBSCRIBE TO THE SIGNAL →
#includeTemplate($model.weblog "sidebar")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblog.name#if($model.weblog.tagline) / $model.weblog.tagline#end + + + #includeTemplate($model.weblog "standard_header") +
+
+
+

INDEPENDENT WEBLOG / EST. 2002

+

+ Ideas, +
+ adventures, +
+ & source code. +

+
+
+ #if($model.weblog.tagline) +

$model.weblog.tagline

+ #end + SUBSCRIBE TO THE SIGNAL → +
+
+
+ #includeTemplate($model.weblog "sidebar") +
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/archives.vm b/app/src/main/webapp/themes/horizon/archives.vm index 084f4f6c31..dc37dea4cc 100644 --- a/app/src/main/webapp/themes/horizon/archives.vm +++ b/app/src/main/webapp/themes/horizon/archives.vm @@ -1 +1,28 @@ -#includeTemplate($model.weblog "standard_head")Archives — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Since the beginning

Archives

Browse the complete history of $model.weblog.name.

#showWeblogEntryCalendarBig($model.weblog "nil")

Recent posts

#set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30))
    #foreach($recentEntry in $recentEntries)
  1. $recentEntry.title
  2. #end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Archives — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Since the beginning

+

Archives

+

Browse the complete history of $model.weblog.name.

+
+
#showWeblogEntryCalendarBig($model.weblog "nil")
+
+

Recent posts

+ #set($recentEntries=$model.weblog.getRecentWeblogEntries("nil",30)) +
    + #foreach($recentEntry in $recentEntries) +
  1. $recentEntry.title
  2. + #end +
+
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/day.vm b/app/src/main/webapp/themes/horizon/day.vm index a4bd00fa83..70795e11cc 100644 --- a/app/src/main/webapp/themes/horizon/day.vm +++ b/app/src/main/webapp/themes/horizon/day.vm @@ -1 +1,34 @@ -#foreach($entry in $entries)
#if($model.permalink)

$entry.title

#else

$entry.title

#end
#if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end
#if($entry.tags && $entry.tags.size()>0)#end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0)$commentCount comments#end#if($utils.isUserAuthorizedToAuthor($entry.website))Edit#end
#showTrackbackAutodiscovery($entry)
#end +#foreach($entry in $entries) +
+ + + #if($model.permalink) +

$entry.title

+ #else +

$entry.title

+ #end +
+ #if($model.permalink)$entry.displayContent#else$entry.displayContent($url.entry($entry.anchor))#end +
+
+ #if($entry.tags && $entry.tags.size()>0) + + #end#set($commentCount=$entry.commentCount)#if($entry.commentsStillAllowed || $commentCount>0) + $commentCount comments + #end#if($utils.isUserAuthorizedToAuthor($entry.website)) + Edit + #end +
+ #showTrackbackAutodiscovery($entry) +
+#end diff --git a/app/src/main/webapp/themes/horizon/entry.vm b/app/src/main/webapp/themes/horizon/entry.vm index 00a0fcd7ae..a975d1c7fd 100644 --- a/app/src/main/webapp/themes/horizon/entry.vm +++ b/app/src/main/webapp/themes/horizon/entry.vm @@ -1 +1,18 @@ -#includeTemplate($model.weblog "standard_head")$model.weblogEntry.title — $model.weblog.name#includeTemplate($model.weblog "standard_header")
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#foreach($entry in $entries)
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblogEntry.title — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #foreach($entry in $entries) +
#showWeblogEntryComments($entry)#showWeblogEntryCommentForm($entry)
+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/footer.vm b/app/src/main/webapp/themes/horizon/footer.vm index 35fba99ce3..ad0d7bfc12 100644 --- a/app/src/main/webapp/themes/horizon/footer.vm +++ b/app/src/main/webapp/themes/horizon/footer.vm @@ -1 +1,11 @@ -
$model.weblog.name

#if($model.weblog.tagline)$model.weblog.tagline#else Stories worth keeping.#end

© $utils.formatDate($utils.now, "yyyy") $model.weblog.creator.fullName
+
+
+ $model.weblog.name +

#if($model.weblog.tagline)$model.weblog.tagline#else Stories worth keeping.#end

+
+ + © $utils.formatDate($utils.now, "yyyy") $model.weblog.creator.fullName +
diff --git a/app/src/main/webapp/themes/horizon/head.vm b/app/src/main/webapp/themes/horizon/head.vm index b5783fccd4..af51ecc8d5 100644 --- a/app/src/main/webapp/themes/horizon/head.vm +++ b/app/src/main/webapp/themes/horizon/head.vm @@ -1,8 +1,6 @@ - - - - - -#showAutodiscoveryLinks($model.weblog) -#showMetaDescription() -#showAnalyticsTrackingCode($model.weblog) + + + + + +#showAutodiscoveryLinks($model.weblog) #showMetaDescription() #showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/horizon/header.vm b/app/src/main/webapp/themes/horizon/header.vm index ae1f363549..8f1c8702e8 100644 --- a/app/src/main/webapp/themes/horizon/header.vm +++ b/app/src/main/webapp/themes/horizon/header.vm @@ -3,6 +3,9 @@ diff --git a/app/src/main/webapp/themes/horizon/search.vm b/app/src/main/webapp/themes/horizon/search.vm index 5423b7a19b..a0afd66cd7 100644 --- a/app/src/main/webapp/themes/horizon/search.vm +++ b/app/src/main/webapp/themes/horizon/search.vm @@ -1 +1,30 @@ -#includeTemplate($model.weblog "standard_head")Search — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Search

Results for “$model.term”

$model.hits matches

#if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)#else

No entries matched. Try a broader phrase.

#end
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + Search — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Search

+

Results for “$model.term”

+

$model.hits matches

+
+
+ +
+ + +
+
+ #if($model.hits>0)#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + + #else +

No entries matched. Try a broader phrase.

+ #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/sidebar.vm b/app/src/main/webapp/themes/horizon/sidebar.vm index 6825fcbe1b..598b1cc373 100644 --- a/app/src/main/webapp/themes/horizon/sidebar.vm +++ b/app/src/main/webapp/themes/horizon/sidebar.vm @@ -1 +1,23 @@ - + diff --git a/app/src/main/webapp/themes/horizon/tags.vm b/app/src/main/webapp/themes/horizon/tags.vm index 3debe6546c..f63ff842d8 100644 --- a/app/src/main/webapp/themes/horizon/tags.vm +++ b/app/src/main/webapp/themes/horizon/tags.vm @@ -1 +1,19 @@ -#includeTemplate($model.weblog "standard_head")$model.tags — $model.weblog.name#includeTemplate($model.weblog "standard_header")

Topic

$model.tags

#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.tags — $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+
+

Topic

+

$model.tags

+
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/weblog.vm b/app/src/main/webapp/themes/horizon/weblog.vm index 72445678d4..8e1b98d5da 100644 --- a/app/src/main/webapp/themes/horizon/weblog.vm +++ b/app/src/main/webapp/themes/horizon/weblog.vm @@ -1,6 +1,27 @@ -#includeTemplate($model.weblog "standard_head")$model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end -#includeTemplate($model.weblog "standard_header") -
-

Notes from the journey

$model.weblog.name

#if($model.weblog.tagline)

$model.weblog.tagline

#end
-
#set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager)
#includeTemplate($model.weblog "sidebar")
-
#includeTemplate($model.weblog "standard_footer") + + + + #includeTemplate($model.weblog "standard_head") + $model.weblog.name#if($model.weblog.tagline) — $model.weblog.tagline#end + + + #includeTemplate($model.weblog "standard_header") +
+
+

Notes from the journey

+

$model.weblog.name

+ #if($model.weblog.tagline) +

$model.weblog.tagline

+ #end +
+
+
+ #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) + +
+ #includeTemplate($model.weblog "sidebar") +
+
+ #includeTemplate($model.weblog "standard_footer") + + From 8f8972925f50604d7cbd5a02fdd6b9ecaa190aac Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 13 Aug 2026 09:52:47 -0600 Subject: [PATCH 03/11] Format theme CSS and normalize preview content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Expand the three theme stylesheets for review and use the same neutral test-blog fixtures as Roller’s existing theme previews. --- .../main/webapp/themes/alpenglow/preview.svg | 2 +- .../main/webapp/themes/alpenglow/theme.css | 361 +++++++++++++++- .../main/webapp/themes/dispatch/preview.svg | 2 +- app/src/main/webapp/themes/dispatch/theme.css | 391 +++++++++++++++++- .../main/webapp/themes/horizon/preview.svg | 2 +- app/src/main/webapp/themes/horizon/theme.css | 361 +++++++++++++++- 6 files changed, 1113 insertions(+), 6 deletions(-) diff --git a/app/src/main/webapp/themes/alpenglow/preview.svg b/app/src/main/webapp/themes/alpenglow/preview.svg index a679765d51..b3dde1dc8d 100644 --- a/app/src/main/webapp/themes/alpenglow/preview.svg +++ b/app/src/main/webapp/themes/alpenglow/preview.svg @@ -1 +1 @@ -▲ ALPENGLOWFROM COLORADO TO EVERYWHERELife is betterwith a littlealtitude. +▲ DAVE'S TEST BLOGTEST WEBLOG / TECHNOLOGYThere are manyblogs but thisone is mine. diff --git a/app/src/main/webapp/themes/alpenglow/theme.css b/app/src/main/webapp/themes/alpenglow/theme.css index d6126b0084..e08ea6b4bb 100644 --- a/app/src/main/webapp/themes/alpenglow/theme.css +++ b/app/src/main/webapp/themes/alpenglow/theme.css @@ -1 +1,360 @@ -:root{color-scheme:light dark;--night:#102d32;--bg:#eef0e9;--paper:#f9faf5;--ink:#15373b;--muted:#627376;--line:#cbd2ca;--sun:#ffb258;--rose:#e46b55;--sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;--display:ui-rounded,"Arial Rounded MT Bold",var(--sans);--serif:ui-serif,Georgia,serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.65 var(--sans)}a{color:inherit;text-underline-offset:.2em}a:hover{color:var(--rose)}img,iframe,video{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--paper);padding:.6rem;z-index:10}.site-header{max-width:1320px;margin:auto;padding:1.3rem clamp(1.2rem,4vw,3rem);display:flex;gap:2rem;align-items:center}.brand{display:flex;gap:.7rem;align-items:center;text-decoration:none;font-weight:850}.brand-mark{color:var(--rose)}.site-header nav{margin-left:auto}.site-header nav ul{display:flex;list-style:none;gap:1.3rem;margin:0;padding:0}.site-header nav a,.feed-link{text-decoration:none;font-size:.85rem;font-weight:700}.feed-link{border:1px solid var(--ink);border-radius:2rem;padding:.4rem .85rem}.hero{max-width:1320px;min-height:590px;margin:0 auto;padding:clamp(2rem,7vw,6rem) clamp(1.2rem,4vw,3rem);display:grid;grid-template-columns:1fr 1.15fr;align-items:center;overflow:hidden}.hero-copy{z-index:2}.kicker{text-transform:uppercase;letter-spacing:.17em;font-weight:850;font-size:.7rem;color:var(--rose)}.hero h1{font:900 clamp(3.6rem,8vw,7.5rem)/.82 var(--display);letter-spacing:-.07em;margin:.3em 0}.hero h1 em{font-family:var(--serif);font-weight:400;color:var(--rose)}.hero-copy>p:last-child{max-width:34rem;color:var(--muted)}.hero-art{min-height:460px;position:relative}.sun{position:absolute;width:clamp(180px,30vw,390px);aspect-ratio:1;border-radius:50%;background:var(--sun);right:4%;top:3%;box-shadow:0 0 0 35px color-mix(in srgb,var(--sun) 14%,transparent)}.ridge{position:absolute;inset:auto -10% 0 0;height:65%;clip-path:polygon(0 100%,18% 54%,30% 72%,53% 20%,65% 48%,77% 32%,100% 100%)}.ridge-back{background:#8db1a4;transform:translateY(-15%)}.ridge-front{background:var(--night)}.content-shell{max-width:1320px;margin:auto;padding:5rem clamp(1.2rem,4vw,3rem);display:grid;grid-template-columns:260px 1fr;gap:clamp(3rem,7vw,7rem)}.explore{position:sticky;top:2rem;align-self:start}.explore>div,.explore form{margin-bottom:2.2rem}.explore label{font-weight:800;display:block;margin-bottom:.45rem}.explore form div,.big-search{display:flex}.explore input,.big-search input{min-width:0;width:100%;border:1px solid var(--line);background:var(--paper);color:var(--ink);padding:.75rem}.explore button,.big-search button{border:0;background:var(--night);color:#fff;padding:.75rem 1rem}.topics{display:flex;flex-wrap:wrap;gap:.45rem}.topics a{font-size:.78rem;text-decoration:none;border-bottom:1px solid var(--line)}.story{display:grid;grid-template-columns:3.5rem 1fr;gap:1rem;background:var(--paper);border-radius:1.2rem;padding:clamp(1.4rem,4vw,3.5rem);margin-bottom:2rem;box-shadow:0 14px 45px color-mix(in srgb,var(--night) 9%,transparent)}.story-index{font:700 1rem var(--serif);color:var(--rose)}.story .meta,.story footer{display:flex;gap:1rem;flex-wrap:wrap;color:var(--muted);font-size:.78rem}.story .meta a{text-transform:uppercase;letter-spacing:.12em;font-weight:850;text-decoration:none}.story h1,.story h2{font:850 clamp(2rem,4vw,3.5rem)/1 var(--display);letter-spacing:-.045em;margin:.5em 0}.story h2 a{text-decoration:none}.entry-content{font:1.1rem/1.72 var(--serif)}.entry-content blockquote{border-left:.35rem solid var(--sun);margin:2rem 0;padding:.8rem 1.5rem;color:var(--muted)}pre{overflow:auto;background:var(--night);color:#eef8f4;padding:1.2rem;border-radius:.75rem}.story footer{margin-top:2rem}.story footer a{text-decoration:none}.reading-shell{max-width:850px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.3rem}.page-title h1{font:900 clamp(3rem,9vw,7rem)/.9 var(--display);letter-spacing:-.06em;margin:.2em 0}.pager{margin:3rem 0}.pager ul{display:flex;justify-content:space-between;list-style:none;padding:0}.calendar{overflow:auto}.calendar table{width:100%;border-collapse:collapse;background:var(--paper)}.calendar td,.calendar th{border:1px solid var(--line);padding:.7rem}.recent li{padding:.5rem}.site-footer{background:var(--night);color:#eaf2ee;padding:3rem max(1.2rem,calc((100vw - 1260px)/2));display:flex;justify-content:space-between;gap:2rem}.site-footer nav{display:flex;gap:1rem}.comments input,.comments textarea{max-width:100%}@media(max-width:760px){.site-header nav{order:3;width:100%;overflow:auto}.site-header{flex-wrap:wrap}.hero{grid-template-columns:1fr;min-height:auto}.hero-art{min-height:300px;margin-top:-2rem;opacity:.92}.content-shell{grid-template-columns:1fr}.explore{position:static}.story{grid-template-columns:1fr}.story-index{font-size:.8rem}.site-footer{flex-direction:column}}@media(prefers-color-scheme:dark){:root{--bg:#0c2226;--paper:#143238;--ink:#edf4ef;--muted:#a6b9b8;--line:#315158;--sun:#f5a953;--rose:#ff8a72}.ridge-front{background:#061719}.feed-link{border-color:var(--ink)}} +:root { + color-scheme: light dark; + --night: #102d32; + --bg: #eef0e9; + --paper: #f9faf5; + --ink: #15373b; + --muted: #627376; + --line: #cbd2ca; + --sun: #ffb258; + --rose: #e46b55; + --sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; + --display: ui-rounded, "Arial Rounded MT Bold", var(--sans); + --serif: ui-serif, Georgia, serif; +} +* { + box-sizing: border-box; +} +body { + margin: 0; + background: var(--bg); + color: var(--ink); + font: 1rem/1.65 var(--sans); +} +a { + color: inherit; + text-underline-offset: 0.2em; +} +a:hover { + color: var(--rose); +} +img, +iframe, +video { + max-width: 100%; + height: auto; +} +.skip-link { + position: absolute; + left: -999px; +} +.skip-link:focus { + left: 1rem; + top: 1rem; + background: var(--paper); + padding: 0.6rem; + z-index: 10; +} +.site-header { + max-width: 1320px; + margin: auto; + padding: 1.3rem clamp(1.2rem, 4vw, 3rem); + display: flex; + gap: 2rem; + align-items: center; +} +.brand { + display: flex; + gap: 0.7rem; + align-items: center; + text-decoration: none; + font-weight: 850; +} +.brand-mark { + color: var(--rose); +} +.site-header nav { + margin-left: auto; +} +.site-header nav ul { + display: flex; + list-style: none; + gap: 1.3rem; + margin: 0; + padding: 0; +} +.site-header nav a, +.feed-link { + text-decoration: none; + font-size: 0.85rem; + font-weight: 700; +} +.feed-link { + border: 1px solid var(--ink); + border-radius: 2rem; + padding: 0.4rem 0.85rem; +} +.hero { + max-width: 1320px; + min-height: 590px; + margin: 0 auto; + padding: clamp(2rem, 7vw, 6rem) clamp(1.2rem, 4vw, 3rem); + display: grid; + grid-template-columns: 1fr 1.15fr; + align-items: center; + overflow: hidden; +} +.hero-copy { + z-index: 2; +} +.kicker { + text-transform: uppercase; + letter-spacing: 0.17em; + font-weight: 850; + font-size: 0.7rem; + color: var(--rose); +} +.hero h1 { + font: 900 clamp(3.6rem, 8vw, 7.5rem)/0.82 var(--display); + letter-spacing: -0.07em; + margin: 0.3em 0; +} +.hero h1 em { + font-family: var(--serif); + font-weight: 400; + color: var(--rose); +} +.hero-copy > p:last-child { + max-width: 34rem; + color: var(--muted); +} +.hero-art { + min-height: 460px; + position: relative; +} +.sun { + position: absolute; + width: clamp(180px, 30vw, 390px); + aspect-ratio: 1; + border-radius: 50%; + background: var(--sun); + right: 4%; + top: 3%; + box-shadow: 0 0 0 35px color-mix(in srgb, var(--sun) 14%, transparent); +} +.ridge { + position: absolute; + inset: auto -10% 0 0; + height: 65%; + clip-path: polygon(0 100%, 18% 54%, 30% 72%, 53% 20%, 65% 48%, 77% 32%, 100% 100%); +} +.ridge-back { + background: #8db1a4; + transform: translateY(-15%); +} +.ridge-front { + background: var(--night); +} +.content-shell { + max-width: 1320px; + margin: auto; + padding: 5rem clamp(1.2rem, 4vw, 3rem); + display: grid; + grid-template-columns: 260px 1fr; + gap: clamp(3rem, 7vw, 7rem); +} +.explore { + position: sticky; + top: 2rem; + align-self: start; +} +.explore > div, +.explore form { + margin-bottom: 2.2rem; +} +.explore label { + font-weight: 800; + display: block; + margin-bottom: 0.45rem; +} +.explore form div, +.big-search { + display: flex; +} +.explore input, +.big-search input { + min-width: 0; + width: 100%; + border: 1px solid var(--line); + background: var(--paper); + color: var(--ink); + padding: 0.75rem; +} +.explore button, +.big-search button { + border: 0; + background: var(--night); + color: #fff; + padding: 0.75rem 1rem; +} +.topics { + display: flex; + flex-wrap: wrap; + gap: 0.45rem; +} +.topics a { + font-size: 0.78rem; + text-decoration: none; + border-bottom: 1px solid var(--line); +} +.story { + display: grid; + grid-template-columns: 3.5rem 1fr; + gap: 1rem; + background: var(--paper); + border-radius: 1.2rem; + padding: clamp(1.4rem, 4vw, 3.5rem); + margin-bottom: 2rem; + box-shadow: 0 14px 45px color-mix(in srgb, var(--night) 9%, transparent); +} +.story-index { + font: 700 1rem var(--serif); + color: var(--rose); +} +.story .meta, +.story footer { + display: flex; + gap: 1rem; + flex-wrap: wrap; + color: var(--muted); + font-size: 0.78rem; +} +.story .meta a { + text-transform: uppercase; + letter-spacing: 0.12em; + font-weight: 850; + text-decoration: none; +} +.story h1, +.story h2 { + font: 850 clamp(2rem, 4vw, 3.5rem)/1 var(--display); + letter-spacing: -0.045em; + margin: 0.5em 0; +} +.story h2 a { + text-decoration: none; +} +.entry-content { + font: 1.1rem/1.72 var(--serif); +} +.entry-content blockquote { + border-left: 0.35rem solid var(--sun); + margin: 2rem 0; + padding: 0.8rem 1.5rem; + color: var(--muted); +} +pre { + overflow: auto; + background: var(--night); + color: #eef8f4; + padding: 1.2rem; + border-radius: 0.75rem; +} +.story footer { + margin-top: 2rem; +} +.story footer a { + text-decoration: none; +} +.reading-shell { + max-width: 850px; + margin: auto; + padding: clamp(3rem, 8vw, 7rem) 1.3rem; +} +.page-title h1 { + font: 900 clamp(3rem, 9vw, 7rem)/0.9 var(--display); + letter-spacing: -0.06em; + margin: 0.2em 0; +} +.pager { + margin: 3rem 0; +} +.pager ul { + display: flex; + justify-content: space-between; + list-style: none; + padding: 0; +} +.calendar { + overflow: auto; +} +.calendar table { + width: 100%; + border-collapse: collapse; + background: var(--paper); +} +.calendar td, +.calendar th { + border: 1px solid var(--line); + padding: 0.7rem; +} +.recent li { + padding: 0.5rem; +} +.site-footer { + background: var(--night); + color: #eaf2ee; + padding: 3rem max(1.2rem, calc((100vw - 1260px) / 2)); + display: flex; + justify-content: space-between; + gap: 2rem; +} +.site-footer nav { + display: flex; + gap: 1rem; +} +.comments input, +.comments textarea { + max-width: 100%; +} +@media (max-width: 760px) { + .site-header nav { + order: 3; + width: 100%; + overflow: auto; + } + .site-header { + flex-wrap: wrap; + } + .hero { + grid-template-columns: 1fr; + min-height: auto; + } + .hero-art { + min-height: 300px; + margin-top: -2rem; + opacity: 0.92; + } + .content-shell { + grid-template-columns: 1fr; + } + .explore { + position: static; + } + .story { + grid-template-columns: 1fr; + } + .story-index { + font-size: 0.8rem; + } + .site-footer { + flex-direction: column; + } +} +@media (prefers-color-scheme: dark) { + :root { + --bg: #0c2226; + --paper: #143238; + --ink: #edf4ef; + --muted: #a6b9b8; + --line: #315158; + --sun: #f5a953; + --rose: #ff8a72; + } + .ridge-front { + background: #061719; + } + .feed-link { + border-color: var(--ink); + } +} diff --git a/app/src/main/webapp/themes/dispatch/preview.svg b/app/src/main/webapp/themes/dispatch/preview.svg index 04b556a55d..c8acd558f3 100644 --- a/app/src/main/webapp/themes/dispatch/preview.svg +++ b/app/src/main/webapp/themes/dispatch/preview.svg @@ -1 +1 @@ -RAIBLE DESIGNS_INDEPENDENT WEBLOG / EST. 2002IDEAS,ADVENTURES,& SOURCE CODE.012026.07.23 / GENERALCRUISING THE DANUBE +DAVE'S TEST BLOG_TEST WEBLOG / SAMPLE CONTENTDONEC ACSAPIEN,LOREM IPSUM.012019.01.20 / TECHNOLOGYPROIN NULLA LECTUS diff --git a/app/src/main/webapp/themes/dispatch/theme.css b/app/src/main/webapp/themes/dispatch/theme.css index adf4f74b58..fb4a30561e 100644 --- a/app/src/main/webapp/themes/dispatch/theme.css +++ b/app/src/main/webapp/themes/dispatch/theme.css @@ -1 +1,390 @@ -:root{color-scheme:light dark;--bg:#f1f1ed;--paper:#fafaf7;--ink:#11120f;--muted:#676961;--grid:#cfd0c8;--acid:#d9ff43;--orange:#ff5b35;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.6 var(--sans)}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.28;background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:48px 48px;z-index:-1}a{color:inherit;text-underline-offset:.22em}a:hover{background:var(--acid);color:#111}img,video,iframe{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--acid);padding:.6rem;z-index:10}.masthead{border-bottom:2px solid var(--ink);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:2rem;padding:1rem clamp(1rem,4vw,3rem);background:var(--bg)}.wordmark{font:800 1.1rem var(--mono);text-decoration:none;text-transform:uppercase}.cursor{color:var(--orange)}.masthead nav ul{display:flex;gap:1.4rem;list-style:none;padding:0;margin:0}.masthead nav a{font:700 .72rem var(--mono);text-decoration:none;text-transform:uppercase}.masthead form{justify-self:end;display:flex;align-items:center;gap:.5rem}.masthead label{font:700 .65rem var(--mono)}.masthead input{width:6rem;border:1px solid var(--ink);background:var(--paper);color:var(--ink);padding:.4rem}.issue-header{max-width:1400px;margin:auto;padding:clamp(3rem,9vw,8rem) clamp(1rem,4vw,3rem);display:grid;grid-template-columns:2fr 1fr;align-items:end;border-bottom:2px solid var(--ink)}.label,.panel-label{font:800 .68rem var(--mono);letter-spacing:.1em}.issue-header h1{font:950 clamp(3.4rem,10vw,9rem)/.78 var(--sans);letter-spacing:-.075em;text-transform:uppercase;margin:.25em 0 0}.issue-header h1 span{color:var(--orange)}.issue-note{border-left:2px solid var(--ink);padding-left:2rem;margin-bottom:.5rem}.issue-note p{font-size:1.15rem}.issue-note a{font:800 .72rem var(--mono)}.publication-grid{max-width:1400px;margin:auto;display:grid;grid-template-columns:290px 1fr}.index-panel{border-right:2px solid var(--ink);padding:3rem 2rem}.index-panel ol{list-style:none;padding:0;margin:1rem 0 3rem}.index-panel li{border-top:1px solid var(--grid)}.index-panel li:last-child{border-bottom:1px solid var(--grid)}.index-panel li a{display:flex;justify-content:space-between;padding:.48rem 0;text-decoration:none;font:700 .76rem var(--mono);text-transform:uppercase}.panel-about{font-size:.88rem}.entries{padding:3rem clamp(1rem,5vw,5rem)}.dispatch{display:grid;grid-template-columns:3rem 1fr;gap:1.2rem;padding:0 0 4rem;margin-bottom:4rem;border-bottom:2px solid var(--ink)}.dispatch-number{font:800 .75rem var(--mono);background:var(--acid);color:#111;width:2.2rem;height:2.2rem;display:grid;place-items:center}.meta,.dispatch footer{display:flex;flex-wrap:wrap;gap:1rem;font:700 .69rem var(--mono);text-transform:uppercase;color:var(--muted)}.meta a,.dispatch footer a{text-decoration:none}.dispatch h1,.dispatch h2{font:900 clamp(2.1rem,5.2vw,5rem)/.91 var(--sans);letter-spacing:-.055em;margin:.35em 0;text-transform:uppercase}.dispatch h2 a{text-decoration:none}.entry-content{max-width:820px;font:1.08rem/1.75 var(--sans)}.entry-content h2,.entry-content h3{line-height:1.05;text-transform:uppercase}.entry-content blockquote{font-size:1.25rem;border:2px solid var(--ink);box-shadow:8px 8px 0 var(--acid);padding:1.2rem;margin:2rem 8px 2rem 0}pre{overflow:auto;background:#141712;color:#e9efdd;border-left:6px solid var(--acid);padding:1.3rem;font:14px/1.65 var(--mono)}code{font-family:var(--mono)}.dispatch footer{margin-top:2rem}.reading-shell{max-width:950px;margin:auto;padding:clamp(3rem,8vw,7rem) 1rem}.page-title{border-bottom:2px solid var(--ink);margin-bottom:4rem}.page-title h1{font:950 clamp(3rem,10vw,8rem)/.85 var(--sans);letter-spacing:-.07em;text-transform:uppercase;overflow-wrap:anywhere;margin:.25em 0}.query{margin:2rem 0 4rem}.query label{font:800 .7rem var(--mono)}.query div{display:flex;margin-top:.5rem}.query input{flex:1;min-width:0;border:2px solid var(--ink);background:var(--paper);color:var(--ink);padding:.9rem}.query button{border:2px solid var(--ink);background:var(--acid);color:#111;padding:.9rem 1.5rem;font:800 .75rem var(--mono)}.pager{margin:3rem 0}.pager ul{display:flex;justify-content:space-between;list-style:none;padding:0}.pager a{font:800 .72rem var(--mono)}.calendar{overflow:auto}.calendar table{border-collapse:collapse;width:100%;background:var(--paper)}.calendar td,.calendar th{border:1px solid var(--ink);padding:.6rem}.archive-list h2{font:800 1rem var(--mono)}.archive-list li{border-top:1px solid var(--grid);padding:.6rem}.site-footer{border-top:2px solid var(--ink);display:flex;justify-content:space-between;gap:2rem;padding:2rem clamp(1rem,4vw,3rem);font:700 .7rem var(--mono);text-transform:uppercase}.status i{display:inline-block;width:.65rem;height:.65rem;border-radius:50%;background:#39b86a;margin-right:.4rem}.comments input,.comments textarea{max-width:100%}@media(max-width:760px){.masthead{grid-template-columns:1fr auto;flex-wrap:wrap}.masthead nav{grid-column:1/-1;grid-row:2;overflow:auto}.masthead nav ul{width:max-content}.masthead form label{display:none}.issue-header{grid-template-columns:1fr}.issue-note{margin-top:2rem}.publication-grid{grid-template-columns:1fr}.index-panel{border-right:0;border-bottom:2px solid var(--ink)}.site-footer{flex-direction:column}.dispatch{grid-template-columns:2.3rem 1fr}}@media(prefers-color-scheme:dark){:root{--bg:#11120f;--paper:#1b1d19;--ink:#f1f1e9;--muted:#a5a79e;--grid:#343730;--acid:#cfff3d;--orange:#ff7756}.dispatch-number,.issue-note a:hover,.wordmark:hover{color:#111}.masthead input{border-color:var(--ink)}} +:root { + color-scheme: light dark; + --bg: #f1f1ed; + --paper: #fafaf7; + --ink: #11120f; + --muted: #676961; + --grid: #cfd0c8; + --acid: #d9ff43; + --orange: #ff5b35; + --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + --sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; +} +* { + box-sizing: border-box; +} +body { + margin: 0; + background: var(--bg); + color: var(--ink); + font: 1rem/1.6 var(--sans); +} +body:before { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + opacity: 0.28; + background-image: + linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px); + background-size: 48px 48px; + z-index: -1; +} +a { + color: inherit; + text-underline-offset: 0.22em; +} +a:hover { + background: var(--acid); + color: #111; +} +img, +video, +iframe { + max-width: 100%; + height: auto; +} +.skip-link { + position: absolute; + left: -999px; +} +.skip-link:focus { + left: 1rem; + top: 1rem; + background: var(--acid); + padding: 0.6rem; + z-index: 10; +} +.masthead { + border-bottom: 2px solid var(--ink); + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + gap: 2rem; + padding: 1rem clamp(1rem, 4vw, 3rem); + background: var(--bg); +} +.wordmark { + font: 800 1.1rem var(--mono); + text-decoration: none; + text-transform: uppercase; +} +.cursor { + color: var(--orange); +} +.masthead nav ul { + display: flex; + gap: 1.4rem; + list-style: none; + padding: 0; + margin: 0; +} +.masthead nav a { + font: 700 0.72rem var(--mono); + text-decoration: none; + text-transform: uppercase; +} +.masthead form { + justify-self: end; + display: flex; + align-items: center; + gap: 0.5rem; +} +.masthead label { + font: 700 0.65rem var(--mono); +} +.masthead input { + width: 6rem; + border: 1px solid var(--ink); + background: var(--paper); + color: var(--ink); + padding: 0.4rem; +} +.issue-header { + max-width: 1400px; + margin: auto; + padding: clamp(3rem, 9vw, 8rem) clamp(1rem, 4vw, 3rem); + display: grid; + grid-template-columns: 2fr 1fr; + align-items: end; + border-bottom: 2px solid var(--ink); +} +.label, +.panel-label { + font: 800 0.68rem var(--mono); + letter-spacing: 0.1em; +} +.issue-header h1 { + font: 950 clamp(3.4rem, 10vw, 9rem)/0.78 var(--sans); + letter-spacing: -0.075em; + text-transform: uppercase; + margin: 0.25em 0 0; +} +.issue-header h1 span { + color: var(--orange); +} +.issue-note { + border-left: 2px solid var(--ink); + padding-left: 2rem; + margin-bottom: 0.5rem; +} +.issue-note p { + font-size: 1.15rem; +} +.issue-note a { + font: 800 0.72rem var(--mono); +} +.publication-grid { + max-width: 1400px; + margin: auto; + display: grid; + grid-template-columns: 290px 1fr; +} +.index-panel { + border-right: 2px solid var(--ink); + padding: 3rem 2rem; +} +.index-panel ol { + list-style: none; + padding: 0; + margin: 1rem 0 3rem; +} +.index-panel li { + border-top: 1px solid var(--grid); +} +.index-panel li:last-child { + border-bottom: 1px solid var(--grid); +} +.index-panel li a { + display: flex; + justify-content: space-between; + padding: 0.48rem 0; + text-decoration: none; + font: 700 0.76rem var(--mono); + text-transform: uppercase; +} +.panel-about { + font-size: 0.88rem; +} +.entries { + padding: 3rem clamp(1rem, 5vw, 5rem); +} +.dispatch { + display: grid; + grid-template-columns: 3rem 1fr; + gap: 1.2rem; + padding: 0 0 4rem; + margin-bottom: 4rem; + border-bottom: 2px solid var(--ink); +} +.dispatch-number { + font: 800 0.75rem var(--mono); + background: var(--acid); + color: #111; + width: 2.2rem; + height: 2.2rem; + display: grid; + place-items: center; +} +.meta, +.dispatch footer { + display: flex; + flex-wrap: wrap; + gap: 1rem; + font: 700 0.69rem var(--mono); + text-transform: uppercase; + color: var(--muted); +} +.meta a, +.dispatch footer a { + text-decoration: none; +} +.dispatch h1, +.dispatch h2 { + font: 900 clamp(2.1rem, 5.2vw, 5rem)/0.91 var(--sans); + letter-spacing: -0.055em; + margin: 0.35em 0; + text-transform: uppercase; +} +.dispatch h2 a { + text-decoration: none; +} +.entry-content { + max-width: 820px; + font: 1.08rem/1.75 var(--sans); +} +.entry-content h2, +.entry-content h3 { + line-height: 1.05; + text-transform: uppercase; +} +.entry-content blockquote { + font-size: 1.25rem; + border: 2px solid var(--ink); + box-shadow: 8px 8px 0 var(--acid); + padding: 1.2rem; + margin: 2rem 8px 2rem 0; +} +pre { + overflow: auto; + background: #141712; + color: #e9efdd; + border-left: 6px solid var(--acid); + padding: 1.3rem; + font: 14px/1.65 var(--mono); +} +code { + font-family: var(--mono); +} +.dispatch footer { + margin-top: 2rem; +} +.reading-shell { + max-width: 950px; + margin: auto; + padding: clamp(3rem, 8vw, 7rem) 1rem; +} +.page-title { + border-bottom: 2px solid var(--ink); + margin-bottom: 4rem; +} +.page-title h1 { + font: 950 clamp(3rem, 10vw, 8rem)/0.85 var(--sans); + letter-spacing: -0.07em; + text-transform: uppercase; + overflow-wrap: anywhere; + margin: 0.25em 0; +} +.query { + margin: 2rem 0 4rem; +} +.query label { + font: 800 0.7rem var(--mono); +} +.query div { + display: flex; + margin-top: 0.5rem; +} +.query input { + flex: 1; + min-width: 0; + border: 2px solid var(--ink); + background: var(--paper); + color: var(--ink); + padding: 0.9rem; +} +.query button { + border: 2px solid var(--ink); + background: var(--acid); + color: #111; + padding: 0.9rem 1.5rem; + font: 800 0.75rem var(--mono); +} +.pager { + margin: 3rem 0; +} +.pager ul { + display: flex; + justify-content: space-between; + list-style: none; + padding: 0; +} +.pager a { + font: 800 0.72rem var(--mono); +} +.calendar { + overflow: auto; +} +.calendar table { + border-collapse: collapse; + width: 100%; + background: var(--paper); +} +.calendar td, +.calendar th { + border: 1px solid var(--ink); + padding: 0.6rem; +} +.archive-list h2 { + font: 800 1rem var(--mono); +} +.archive-list li { + border-top: 1px solid var(--grid); + padding: 0.6rem; +} +.site-footer { + border-top: 2px solid var(--ink); + display: flex; + justify-content: space-between; + gap: 2rem; + padding: 2rem clamp(1rem, 4vw, 3rem); + font: 700 0.7rem var(--mono); + text-transform: uppercase; +} +.status i { + display: inline-block; + width: 0.65rem; + height: 0.65rem; + border-radius: 50%; + background: #39b86a; + margin-right: 0.4rem; +} +.comments input, +.comments textarea { + max-width: 100%; +} +@media (max-width: 760px) { + .masthead { + grid-template-columns: 1fr auto; + flex-wrap: wrap; + } + .masthead nav { + grid-column: 1/-1; + grid-row: 2; + overflow: auto; + } + .masthead nav ul { + width: max-content; + } + .masthead form label { + display: none; + } + .issue-header { + grid-template-columns: 1fr; + } + .issue-note { + margin-top: 2rem; + } + .publication-grid { + grid-template-columns: 1fr; + } + .index-panel { + border-right: 0; + border-bottom: 2px solid var(--ink); + } + .site-footer { + flex-direction: column; + } + .dispatch { + grid-template-columns: 2.3rem 1fr; + } +} +@media (prefers-color-scheme: dark) { + :root { + --bg: #11120f; + --paper: #1b1d19; + --ink: #f1f1e9; + --muted: #a5a79e; + --grid: #343730; + --acid: #cfff3d; + --orange: #ff7756; + } + .dispatch-number, + .issue-note a:hover, + .wordmark:hover { + color: #111; + } + .masthead input { + border-color: var(--ink); + } +} diff --git a/app/src/main/webapp/themes/horizon/preview.svg b/app/src/main/webapp/themes/horizon/preview.svg index 0125f30ce7..6271aa0c45 100644 --- a/app/src/main/webapp/themes/horizon/preview.svg +++ b/app/src/main/webapp/themes/horizon/preview.svg @@ -1 +1 @@ -HorizonNOTES FROM THE JOURNEYStories worthkeeping.JUL 23, 2026 · GENERALCruising the Danube +Dave's Test BlogTEST WEBLOGThere are many blogsbut this one is mine.SUNDAY JANUARY 20, 2019 · TECHNOLOGYDonec ac sapien diff --git a/app/src/main/webapp/themes/horizon/theme.css b/app/src/main/webapp/themes/horizon/theme.css index fe3ee7757d..f66d8cad03 100644 --- a/app/src/main/webapp/themes/horizon/theme.css +++ b/app/src/main/webapp/themes/horizon/theme.css @@ -1 +1,360 @@ -:root{color-scheme:light dark;--bg:#f7f3eb;--surface:#fffdf8;--ink:#28241f;--muted:#726b62;--line:#d9d0c2;--accent:#c94f32;--accent2:#1e6b64;--serif:ui-serif,Georgia,Cambria,"Times New Roman",serif;--sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.7 var(--sans);text-rendering:optimizeLegibility}a{color:inherit;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent);text-underline-offset:.2em}a:hover{color:var(--accent)}img,video,iframe{max-width:100%;height:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:var(--surface);padding:.6rem 1rem;z-index:9}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.site-header{border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 88%,transparent);position:sticky;top:0;z-index:4;backdrop-filter:blur(12px)}.nav-shell{max-width:1180px;margin:auto;padding:1rem 1.5rem;display:flex;align-items:center;gap:2rem}.brand{font:700 1.2rem var(--serif);text-decoration:none}.site-nav{margin-left:auto}.site-nav ul{display:flex;gap:1.2rem;list-style:none;margin:0;padding:0}.site-nav a{text-decoration:none;font-size:.88rem}.quick-search input{width:8rem;border:1px solid var(--line);border-radius:2rem;background:var(--surface);color:var(--ink);padding:.55rem .9rem}.page-shell{max-width:1180px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.5rem}.intro{max-width:800px;margin-bottom:clamp(3rem,7vw,6rem)}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-size:.72rem;font-weight:800;color:var(--accent)}.intro h1,.page-heading h1{font:600 clamp(3.4rem,10vw,7.8rem)/.92 var(--serif);letter-spacing:-.055em;margin:.2em 0}.lede{font:400 clamp(1.2rem,2.4vw,1.75rem)/1.45 var(--serif);color:var(--muted);max-width:42rem}.layout{display:grid;grid-template-columns:minmax(0,760px) minmax(220px,1fr);gap:clamp(3rem,8vw,8rem)}.post-card{padding:0 0 4rem;margin:0 0 4rem;border-bottom:1px solid var(--line)}.post-meta,.post-footer{display:flex;flex-wrap:wrap;gap:.55rem 1rem;color:var(--muted);font-size:.82rem}.post-meta a,.post-footer a{text-decoration:none}.post-title{font:600 clamp(2rem,5vw,3.7rem)/1.05 var(--serif);letter-spacing:-.035em;margin:.35em 0 .55em}.post-title a{text-decoration:none}.post-content{font-family:var(--serif);font-size:clamp(1.08rem,1.4vw,1.22rem)}.post-content :is(h2,h3,h4){line-height:1.2;margin-top:2em}.post-content blockquote{margin:2rem 0;padding:1rem 0 1rem 1.5rem;border-left:4px solid var(--accent);font-size:1.2em;color:var(--muted)}pre{overflow:auto;padding:1.2rem;border-radius:.6rem;background:#1e2423;color:#eff7f4;font:14px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.post-footer{justify-content:space-between;margin-top:2rem}.post-tags{display:flex;gap:.7rem;flex-wrap:wrap}.sidebar{font-size:.92rem}.sidebar section{margin-bottom:3rem}.sidebar h2,.recent h2{font:600 1.25rem var(--serif)}.tag-cloud{display:flex;gap:.5rem;flex-wrap:wrap}.tag-cloud a{border:1px solid var(--line);border-radius:2rem;padding:.22rem .7rem;text-decoration:none}.subscribe{display:flex;justify-content:space-between;background:var(--accent);color:white!important;padding:1rem 1.2rem;text-decoration:none;border-radius:.3rem}.article-shell{max-width:760px;margin:auto;padding:clamp(3rem,8vw,7rem) 1.5rem}.page-heading{margin-bottom:4rem}.page-heading h1{font-size:clamp(3rem,9vw,6rem)}.pager{display:flex;justify-content:space-between;gap:1rem;margin:2rem 0}.pager ul{display:contents}.pager li{list-style:none}.search-panel{margin:2rem 0 4rem}.search-panel label{display:block;font-weight:700;margin-bottom:.5rem}.search-panel div{display:flex}.search-panel input{flex:1;min-width:0;padding:.8rem;border:1px solid var(--line);background:var(--surface);color:var(--ink)}button{border:0;background:var(--accent);color:white;padding:.8rem 1.2rem;font-weight:700}.archive-calendar{overflow-x:auto}.archive-calendar table{width:100%;border-collapse:collapse}.archive-calendar td,.archive-calendar th{padding:.6rem;border:1px solid var(--line)}.recent ol{padding-left:1.2rem}.site-footer{max-width:1180px;margin:2rem auto 0;padding:3rem 1.5rem;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr auto;gap:1rem}.site-footer p{color:var(--muted);margin:.25rem 0}.site-footer small{grid-column:1/-1;color:var(--muted)}.footer-links{display:flex;gap:1rem}.comments-area input,.comments-area textarea{max-width:100%}@media(max-width:760px){.nav-shell{flex-wrap:wrap;gap:1rem}.site-nav{order:3;width:100%;overflow:auto}.site-nav ul{width:max-content}.quick-search{margin-left:auto}.layout{grid-template-columns:1fr}.sidebar{border-top:1px solid var(--line);padding-top:2rem}.site-footer{grid-template-columns:1fr}.intro h1{overflow-wrap:anywhere}}@media(prefers-color-scheme:dark){:root{--bg:#181916;--surface:#22231f;--ink:#f3eee5;--muted:#aaa398;--line:#3d3d36;--accent:#f27b5d;--accent2:#75c4b8}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}} +:root { + color-scheme: light dark; + --bg: #f7f3eb; + --surface: #fffdf8; + --ink: #28241f; + --muted: #726b62; + --line: #d9d0c2; + --accent: #c94f32; + --accent2: #1e6b64; + --serif: ui-serif, Georgia, Cambria, "Times New Roman", serif; + --sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} +* { + box-sizing: border-box; +} +html { + scroll-behavior: smooth; +} +body { + margin: 0; + background: var(--bg); + color: var(--ink); + font: 1rem/1.7 var(--sans); + text-rendering: optimizeLegibility; +} +a { + color: inherit; + text-decoration-color: color-mix(in srgb, var(--accent) 55%, transparent); + text-underline-offset: 0.2em; +} +a:hover { + color: var(--accent); +} +img, +video, +iframe { + max-width: 100%; + height: auto; +} +.skip-link { + position: absolute; + left: -999px; +} +.skip-link:focus { + left: 1rem; + top: 1rem; + background: var(--surface); + padding: 0.6rem 1rem; + z-index: 9; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); +} +.site-header { + border-bottom: 1px solid var(--line); + background: color-mix(in srgb, var(--bg) 88%, transparent); + position: sticky; + top: 0; + z-index: 4; + backdrop-filter: blur(12px); +} +.nav-shell { + max-width: 1180px; + margin: auto; + padding: 1rem 1.5rem; + display: flex; + align-items: center; + gap: 2rem; +} +.brand { + font: 700 1.2rem var(--serif); + text-decoration: none; +} +.site-nav { + margin-left: auto; +} +.site-nav ul { + display: flex; + gap: 1.2rem; + list-style: none; + margin: 0; + padding: 0; +} +.site-nav a { + text-decoration: none; + font-size: 0.88rem; +} +.quick-search input { + width: 8rem; + border: 1px solid var(--line); + border-radius: 2rem; + background: var(--surface); + color: var(--ink); + padding: 0.55rem 0.9rem; +} +.page-shell { + max-width: 1180px; + margin: auto; + padding: clamp(3rem, 8vw, 7rem) 1.5rem; +} +.intro { + max-width: 800px; + margin-bottom: clamp(3rem, 7vw, 6rem); +} +.eyebrow { + text-transform: uppercase; + letter-spacing: 0.16em; + font-size: 0.72rem; + font-weight: 800; + color: var(--accent); +} +.intro h1, +.page-heading h1 { + font: 600 clamp(3.4rem, 10vw, 7.8rem)/0.92 var(--serif); + letter-spacing: -0.055em; + margin: 0.2em 0; +} +.lede { + font: 400 clamp(1.2rem, 2.4vw, 1.75rem)/1.45 var(--serif); + color: var(--muted); + max-width: 42rem; +} +.layout { + display: grid; + grid-template-columns: minmax(0, 760px) minmax(220px, 1fr); + gap: clamp(3rem, 8vw, 8rem); +} +.post-card { + padding: 0 0 4rem; + margin: 0 0 4rem; + border-bottom: 1px solid var(--line); +} +.post-meta, +.post-footer { + display: flex; + flex-wrap: wrap; + gap: 0.55rem 1rem; + color: var(--muted); + font-size: 0.82rem; +} +.post-meta a, +.post-footer a { + text-decoration: none; +} +.post-title { + font: 600 clamp(2rem, 5vw, 3.7rem)/1.05 var(--serif); + letter-spacing: -0.035em; + margin: 0.35em 0 0.55em; +} +.post-title a { + text-decoration: none; +} +.post-content { + font-family: var(--serif); + font-size: clamp(1.08rem, 1.4vw, 1.22rem); +} +.post-content :is(h2, h3, h4) { + line-height: 1.2; + margin-top: 2em; +} +.post-content blockquote { + margin: 2rem 0; + padding: 1rem 0 1rem 1.5rem; + border-left: 4px solid var(--accent); + font-size: 1.2em; + color: var(--muted); +} +pre { + overflow: auto; + padding: 1.2rem; + border-radius: 0.6rem; + background: #1e2423; + color: #eff7f4; + font: + 14px/1.6 ui-monospace, + SFMono-Regular, + Consolas, + monospace; +} +code { + font-family: ui-monospace, SFMono-Regular, Consolas, monospace; +} +.post-footer { + justify-content: space-between; + margin-top: 2rem; +} +.post-tags { + display: flex; + gap: 0.7rem; + flex-wrap: wrap; +} +.sidebar { + font-size: 0.92rem; +} +.sidebar section { + margin-bottom: 3rem; +} +.sidebar h2, +.recent h2 { + font: 600 1.25rem var(--serif); +} +.tag-cloud { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; +} +.tag-cloud a { + border: 1px solid var(--line); + border-radius: 2rem; + padding: 0.22rem 0.7rem; + text-decoration: none; +} +.subscribe { + display: flex; + justify-content: space-between; + background: var(--accent); + color: white !important; + padding: 1rem 1.2rem; + text-decoration: none; + border-radius: 0.3rem; +} +.article-shell { + max-width: 760px; + margin: auto; + padding: clamp(3rem, 8vw, 7rem) 1.5rem; +} +.page-heading { + margin-bottom: 4rem; +} +.page-heading h1 { + font-size: clamp(3rem, 9vw, 6rem); +} +.pager { + display: flex; + justify-content: space-between; + gap: 1rem; + margin: 2rem 0; +} +.pager ul { + display: contents; +} +.pager li { + list-style: none; +} +.search-panel { + margin: 2rem 0 4rem; +} +.search-panel label { + display: block; + font-weight: 700; + margin-bottom: 0.5rem; +} +.search-panel div { + display: flex; +} +.search-panel input { + flex: 1; + min-width: 0; + padding: 0.8rem; + border: 1px solid var(--line); + background: var(--surface); + color: var(--ink); +} +button { + border: 0; + background: var(--accent); + color: white; + padding: 0.8rem 1.2rem; + font-weight: 700; +} +.archive-calendar { + overflow-x: auto; +} +.archive-calendar table { + width: 100%; + border-collapse: collapse; +} +.archive-calendar td, +.archive-calendar th { + padding: 0.6rem; + border: 1px solid var(--line); +} +.recent ol { + padding-left: 1.2rem; +} +.site-footer { + max-width: 1180px; + margin: 2rem auto 0; + padding: 3rem 1.5rem; + border-top: 1px solid var(--line); + display: grid; + grid-template-columns: 1fr auto; + gap: 1rem; +} +.site-footer p { + color: var(--muted); + margin: 0.25rem 0; +} +.site-footer small { + grid-column: 1/-1; + color: var(--muted); +} +.footer-links { + display: flex; + gap: 1rem; +} +.comments-area input, +.comments-area textarea { + max-width: 100%; +} +@media (max-width: 760px) { + .nav-shell { + flex-wrap: wrap; + gap: 1rem; + } + .site-nav { + order: 3; + width: 100%; + overflow: auto; + } + .site-nav ul { + width: max-content; + } + .quick-search { + margin-left: auto; + } + .layout { + grid-template-columns: 1fr; + } + .sidebar { + border-top: 1px solid var(--line); + padding-top: 2rem; + } + .site-footer { + grid-template-columns: 1fr; + } + .intro h1 { + overflow-wrap: anywhere; + } +} +@media (prefers-color-scheme: dark) { + :root { + --bg: #181916; + --surface: #22231f; + --ink: #f3eee5; + --muted: #aaa398; + --line: #3d3d36; + --accent: #f27b5d; + --accent2: #75c4b8; + } +} +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } +} From 834a1ffb566f8bd8b49f123c67355af6dde66b1b Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 13 Aug 2026 10:10:51 -0600 Subject: [PATCH 04/11] Preserve Basic as the default weblog theme Set the create-weblog form's default theme explicitly so adding an alphabetically earlier shared theme does not change existing setup behavior. --- .../apache/roller/weblogger/ui/struts2/core/CreateWeblog.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java index f2ffe2b3be..d819be54e5 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java @@ -48,6 +48,7 @@ public class CreateWeblog extends UIAction { private static final Log log = LogFactory.getLog(CreateWeblog.class); private static final String DISABLED_RETURN_CODE = "disabled"; + private static final String DEFAULT_THEME = "basic"; private CreateWeblogBean bean = new CreateWeblogBean(); @@ -97,6 +98,7 @@ public String execute() { getBean().setLocale(user.getLocale()); getBean().setTimeZone(user.getTimeZone()); getBean().setEmailAddress(user.getEmailAddress()); + getBean().setTheme(DEFAULT_THEME); return INPUT; } From 5e3bbf3cd4d5f3918222b1a16a58eebb80417a47 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Sat, 10 Oct 2026 18:26:04 -0600 Subject: [PATCH 05/11] Fix entry numbering, the Alpenglow footer, and tag headings in the new themes Velocity 2 removed $velocityCount, so Alpenglow and Dispatch printed the literal text on every entry; they now use $foreach.count. Alpenglow's footer used #elseField, which Velocity reads as an unknown directive, so it now shows the tagline only when one is set. The tag pages joined $model.tags as a Java list, which rendered as [java, roller] in the heading and title; they now list the tags separated by commas. --- app/src/main/webapp/themes/alpenglow/day.vm | 2 +- app/src/main/webapp/themes/alpenglow/footer.vm | 2 +- app/src/main/webapp/themes/alpenglow/tags.vm | 4 ++-- app/src/main/webapp/themes/dispatch/day.vm | 2 +- app/src/main/webapp/themes/dispatch/tags.vm | 4 ++-- app/src/main/webapp/themes/horizon/tags.vm | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/webapp/themes/alpenglow/day.vm b/app/src/main/webapp/themes/alpenglow/day.vm index dc4bf4d9d7..4243ac8109 100644 --- a/app/src/main/webapp/themes/alpenglow/day.vm +++ b/app/src/main/webapp/themes/alpenglow/day.vm @@ -1,6 +1,6 @@ #foreach($entry in $entries)
- +
$entry.category.name diff --git a/app/src/main/webapp/themes/alpenglow/footer.vm b/app/src/main/webapp/themes/alpenglow/footer.vm index c6f20cc2a1..7181665b6a 100644 --- a/app/src/main/webapp/themes/alpenglow/footer.vm +++ b/app/src/main/webapp/themes/alpenglow/footer.vm @@ -1,7 +1,7 @@
+ #end +
+

+ $y +  $yearCounts.get($y) +

+ #set($currentYear = $y) + #end + #if($m != $currentMonth) + #set($monthName = $utils.formatDate($entry.pubTime, "MMMM")) +
+

+ $monthName +  $monthCounts.get($m) +

+
+ #set($currentMonth = $m) + #end +
+

$entry.title

+
#includeTemplate($model.weblog "_post_meta")
+ +
+ #end + #if($currentMonth != "") +
+
+
+ #end + + #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/papermod/custom.css b/app/src/main/webapp/themes/papermod/custom.css new file mode 100644 index 0000000000..26192db364 --- /dev/null +++ b/app/src/main/webapp/themes/papermod/custom.css @@ -0,0 +1 @@ +/* Add your PaperMod overrides here. */ diff --git a/app/src/main/webapp/themes/papermod/entry.vm b/app/src/main/webapp/themes/papermod/entry.vm new file mode 100644 index 0000000000..15b54ab1fa --- /dev/null +++ b/app/src/main/webapp/themes/papermod/entry.vm @@ -0,0 +1,80 @@ + + + + #includeTemplate($model.weblog "standard_head") + $model.weblogEntry.title | $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ #set($entry = $model.weblogEntry) +
+
+

$entry.title

+ +
+
+ $entry.displayContent +
+
+ #if($entry.tags && $entry.tags.size() > 0) + + #end + ## PaperMod's "« Prev" is the newer entry and "Next »" the older one. + #set($pager = $model.getWeblogEntriesPager()) + #if($pager.nextLink || $pager.prevLink) + #set($newerEntry = false) + #set($olderEntry = false) + #set($recentEntries = $model.weblog.getRecentWeblogEntries("nil", 100)) + #foreach($recentEntry in $recentEntries) + #if($recentEntry.anchor == $entry.anchor) + #if($foreach.index > 0) + #set($newerEntry = $recentEntries.get($foreach.index - 1)) + #end + #if($foreach.hasNext) + #set($olderEntry = $recentEntries.get($foreach.index + 1)) + #end + #end + #end + + #end +
+ #set($hasComments = $entry.commentCount > 0 || $model.commentForm.preview) + #if($hasComments || $entry.commentsStillAllowed) +
+ #if($hasComments) + #showWeblogEntryComments($entry) + #end + #if($entry.commentsStillAllowed) + #showWeblogEntryCommentForm($entry) + #end +
+ #end +
+
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/papermod/footer.vm b/app/src/main/webapp/themes/papermod/footer.vm new file mode 100644 index 0000000000..11782d5d9d --- /dev/null +++ b/app/src/main/webapp/themes/papermod/footer.vm @@ -0,0 +1,26 @@ + + diff --git a/app/src/main/webapp/themes/papermod/head.vm b/app/src/main/webapp/themes/papermod/head.vm new file mode 100644 index 0000000000..2a96408e09 --- /dev/null +++ b/app/src/main/webapp/themes/papermod/head.vm @@ -0,0 +1,10 @@ + + + + + + + +#showAutodiscoveryLinks($model.weblog) +#showMetaDescription() +#showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/papermod/header.vm b/app/src/main/webapp/themes/papermod/header.vm new file mode 100644 index 0000000000..a05727f28f --- /dev/null +++ b/app/src/main/webapp/themes/papermod/header.vm @@ -0,0 +1,54 @@ +
+ +
diff --git a/app/src/main/webapp/themes/papermod/post-list.vm b/app/src/main/webapp/themes/papermod/post-list.vm new file mode 100644 index 0000000000..50edd16665 --- /dev/null +++ b/app/src/main/webapp/themes/papermod/post-list.vm @@ -0,0 +1,45 @@ +## Entry cards for $pager, like PaperMod's list.html. +## Set $firstEntry = true before including to give the first card the larger +## "first-entry" treatment used on page 1 of the home page. +#foreach($day in $pager.entries.keySet()) +#foreach($entry in $pager.entries.get($day)) +#if($firstEntry) +#set($entryClass = "first-entry") +#set($firstEntry = false) +#elseif($model.tags) +#set($entryClass = "post-entry tag-entry") +#else +#set($entryClass = "post-entry") +#end +#if($utils.isNotEmpty($entry.summary)) +#set($entrySummary = $utils.removeHTML($entry.summary)) +#else +#set($entrySummary = $utils.removeHTML("$!entry.text")) +#end +#set($entrySummary = $utils.truncateNicely($entrySummary.trim(), 240, 300, "...")) +
+
+

$entry.title

+
+ #if($utils.isNotEmpty($entrySummary)) +
+

$entrySummary

+
+ #end +
#includeTemplate($model.weblog "_post_meta")
+ +
+#end +#end +#if($pager.prevLink || $pager.nextLink) + +#end diff --git a/app/src/main/webapp/themes/papermod/post-meta.vm b/app/src/main/webapp/themes/papermod/post-meta.vm new file mode 100644 index 0000000000..e7e517e13e --- /dev/null +++ b/app/src/main/webapp/themes/papermod/post-meta.vm @@ -0,0 +1,17 @@ +## Date, reading time, and author for $entry, like PaperMod's post_meta.html. +## Set $metaShowCategory = true to append the category link. +## Reading time follows Hugo: words / 213, rounded up. +#if($utils.isNotEmpty($entry.text)) +#set($metaText = $utils.removeHTML($entry.text)) +#else +#set($metaText = $utils.removeHTML("$!entry.summary")) +#end +#set($metaWords = $metaText.trim().split('\s+').size()) +#set($metaMinutes = ($metaWords + 212) / 213) +#if($metaMinutes < 1)#set($metaMinutes = 1)#end +#if($utils.isNotEmpty($entry.creator.fullName)) +#set($metaAuthor = $entry.creator.fullName) +#else +#set($metaAuthor = $entry.creator.screenName) +#end +$utils.formatDate($entry.pubTime, "MMMM d, yyyy") · $metaMinutes min · $metaAuthor#if($metaShowCategory) · $entry.category.name#end diff --git a/app/src/main/webapp/themes/papermod/preview.png b/app/src/main/webapp/themes/papermod/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d80284f5baf60c6a7849c468ec0249c8df72c0 GIT binary patch literal 91141 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 + + + #includeTemplate($model.weblog "standard_head") + Search | $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ + + #if($utils.isNotEmpty($model.term)) + #if($model.hits > 0) + #set($min = $model.offset + 1) + #set($max = $model.offset + $model.limit) + #if($max > $model.hits)#set($max = $model.hits)#end + + #set($pager = $model.getWeblogEntriesPager()) +
    + #foreach($day in $pager.entries.keySet()) + #foreach($entry in $pager.entries.get($day)) +
  • $entry.title + + +
  • + #end + #end +
+ #if($pager.prevLink || $pager.nextLink) + + #end + #else +

No entries matched “$model.term”.

+ #end + #end +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/horizon/tags.vm b/app/src/main/webapp/themes/papermod/tags.vm similarity index 53% rename from app/src/main/webapp/themes/horizon/tags.vm rename to app/src/main/webapp/themes/papermod/tags.vm index ae798752d1..c5c7ac3472 100644 --- a/app/src/main/webapp/themes/horizon/tags.vm +++ b/app/src/main/webapp/themes/papermod/tags.vm @@ -1,18 +1,18 @@ - + #includeTemplate($model.weblog "standard_head") - #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end — $model.weblog.name + #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end | $model.weblog.name - + #includeTemplate($model.weblog "standard_header") -
-
-

Topic

+
+ - #set($pager=$model.getWeblogEntriesPager())#showWeblogEntriesPager($pager) - + #set($pager = $model.getWeblogEntriesPager()) + #set($firstEntry = false) + #includeTemplate($model.weblog "_post_list")
#includeTemplate($model.weblog "standard_footer") diff --git a/app/src/main/webapp/themes/papermod/terms.vm b/app/src/main/webapp/themes/papermod/terms.vm new file mode 100644 index 0000000000..7941cfa70c --- /dev/null +++ b/app/src/main/webapp/themes/papermod/terms.vm @@ -0,0 +1,23 @@ + + + + #includeTemplate($model.weblog "standard_head") + Tags | $model.weblog.name + + + #includeTemplate($model.weblog "standard_header") +
+ + +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/main/webapp/themes/papermod/theme.css b/app/src/main/webapp/themes/papermod/theme.css new file mode 100644 index 0000000000..64c124e5ff --- /dev/null +++ b/app/src/main/webapp/themes/papermod/theme.css @@ -0,0 +1,1179 @@ +/* + PaperMod v8+ + License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE + Copyright (c) 2020 nanxiaobei and adityatelange + Copyright (c) 2021-2026 adityatelange + + Ported to Apache Roller. The rules below follow upstream's + assets/css/core and assets/css/common files in Hugo's bundle order; + Hugo-only features (TOC, breadcrumbs, share buttons, cover images, + language menu, profile mode) are omitted. Roller-specific rules for + comments and forms are at the end, before the media queries. +*/ + + +/* theme-vars.css */ + +:root { + --gap: 24px; + --content-gap: 20px; + --nav-width: 1024px; + --main-width: 720px; + --header-height: 60px; + --footer-height: 60px; + --radius: 8px; + --theme: rgb(255, 255, 255); + --entry: rgb(255, 255, 255); + --primary: rgb(30, 30, 30); + --secondary: rgb(108, 108, 108); + --tertiary: rgb(214, 214, 214); + --content: rgb(31, 31, 31); + --code-block-bg: rgb(28, 29, 33); + --code-bg: rgb(245, 245, 245); + --border: rgb(238, 238, 238); + color-scheme: light; +} + +:root[data-theme="dark"] { + --theme: rgb(29, 30, 32); + --entry: rgb(46, 46, 51); + --primary: rgb(218, 218, 219); + --secondary: rgb(155, 156, 157); + --tertiary: rgb(65, 66, 68); + --content: rgb(196, 196, 197); + --code-block-bg: rgb(46, 46, 51); + --code-bg: rgb(55, 56, 62); + --border: rgb(51, 51, 51); + color-scheme: dark; +} + +.list { + background: var(--code-bg); +} + +[data-theme="dark"] .list { + background: var(--theme); +} + +/* "auto" before the theme script runs (or without JavaScript): follow the OS */ +@media (prefers-color-scheme: dark) { + :root[data-theme="auto"] { + --theme: rgb(29, 30, 32); + --entry: rgb(46, 46, 51); + --primary: rgb(218, 218, 219); + --secondary: rgb(155, 156, 157); + --tertiary: rgb(65, 66, 68); + --content: rgb(196, 196, 197); + --code-block-bg: rgb(46, 46, 51); + --code-bg: rgb(55, 56, 62); + --border: rgb(51, 51, 51); + color-scheme: dark; + } + + [data-theme="auto"] .list { + background: var(--theme); + } +} + +[data-theme="auto"] #theme-toggle, +[data-theme="auto"] .top-link { + display: none; +} + + +/* reset.css */ + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + -webkit-tap-highlight-color: transparent; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; +} + +a, +button, +body, +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--primary); +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-size: 18px; + line-height: 1.6; + word-break: break-word; + background: var(--theme); +} + +article, +aside, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +table { + display: block; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p { + margin-top: 0; + margin-bottom: 0; +} + +ul { + padding: 0; +} + +a { + text-decoration: none; +} + +body, +figure, +ul { + margin: 0; +} + +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow-x: auto; + word-break: keep-all; +} + +button, +input, +textarea { + padding: 0; + font: inherit; + background: 0 0; + border: 0; +} + +input, +textarea { + outline: 0; +} + +button, +input[type=button], +input[type=submit] { + cursor: pointer; +} + +input:-webkit-autofill, +textarea:-webkit-autofill { + box-shadow: 0 0 0 50px var(--theme) inset; +} + +img { + display: block; + max-width: 100%; +} + + +/* archive.css */ + +.archive-posts { + width: 100%; + font-size: 16px; +} + +.archive-year { + margin-top: 40px; +} + +.archive-year:not(:last-of-type) { + border-bottom: 2px solid var(--border); +} + +.archive-month { + display: flex; + align-items: flex-start; + padding: 10px 0; +} + +.archive-month-header { + margin: 25px 0; + width: 200px; +} + +.archive-month:not(:last-of-type) { + border-bottom: 1px solid var(--border); +} + +.archive-entry { + position: relative; + padding: 5px; + margin: 10px 0; +} + +.archive-entry-title { + margin: 5px 0; + font-weight: 400; +} + +.archive-count, +.archive-meta { + color: var(--secondary); + font-size: 14px; +} + + +/* footer.css */ + +.footer, +.top-link { + font-size: 12px; + color: var(--secondary); +} + +.footer { + max-width: calc(var(--main-width) + var(--gap) * 2); + margin: auto; + padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap); + text-align: center; + line-height: 24px; +} + +.footer span { + margin-inline-start: 1px; + margin-inline-end: 1px; +} + +.footer span:last-child { + white-space: nowrap; +} + +.footer a { + color: inherit; + text-underline-offset: 0.25rem; + text-decoration: underline; +} + +.top-link { + position: fixed; + bottom: 4rem; + right: 2rem; + z-index: 99; + background: var(--tertiary); + width: 2.5rem; + height: 2.5rem; + padding: 10px; + border-radius: 64px; + transition: visibility .3s, opacity .3s cubic-bezier(0.4, 0, 1, 1); +} + +.hidden { + visibility: hidden; + opacity: 0; +} + +.top-link, +.top-link svg { + filter: drop-shadow(0px 0px 0px var(--theme)); +} + +.footer a:hover, +.top-link:hover { + color: var(--primary); +} + + +/* header.css */ + +.header-nav { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + max-width: calc(var(--nav-width) + var(--gap) * 2); + margin: auto; + line-height: var(--header-height); + padding: 0 var(--gap); + column-gap: var(--gap); +} + +.header-nav a { + display: block; +} + +.logo, +.menu { + display: flex; +} + +.logo { + align-items: center; + column-gap: 0.55rem; + flex-wrap: wrap; +} + +.logo a { + font-size: 24px; + font-weight: 700; + display: flex; + align-items: center; + column-gap: 0.55rem; +} + +.theme-toggle { + padding: 0 0.4rem; +} + +[data-theme="dark"] .moon { + display: none; +} + +[data-theme="light"] .sun { + display: none; +} + +.logo-switches { + display: inline-flex; + gap: 0.4rem; + align-items: inherit; + min-height: stretch; + flex-wrap: inherit; +} + +.logo-switches>* { + min-height: inherit; + align-items: center; + display: inline-flex; +} + +.menu { + list-style: none; + word-break: keep-all; + overflow-x: auto; + white-space: nowrap; + column-gap: var(--gap); +} + +.menu a { + font-size: 16px; +} + +.menu .active { + font-weight: 500; + text-decoration: underline; + text-underline-offset: 0.3rem; + text-decoration-thickness: 2px; +} + + +/* main.css */ + +.main { + position: relative; + min-height: calc(100vh - var(--header-height) - var(--footer-height)); + max-width: calc(var(--main-width) + var(--gap) * 2); + margin: auto; + padding: var(--gap); +} + +.page-header h1 { + font-size: 40px; +} + +.pagination { + display: flex; +} + +.pagination a { + color: var(--theme); + font-size: 13px; + line-height: 36px; + background: var(--primary); + border-radius: calc(36px / 2); + padding: 0 16px; +} + +.pagination .next { + margin-inline-start: auto; +} + + +code { + direction: ltr; +} + +div.highlight, +pre { + position: relative; +} + +/* md-content.css */ + +.md-content h3, +.md-content h4, +.md-content h5, +.md-content h6 { + margin: 24px 0 16px; +} + +.md-content h1 { + margin: 40px auto 32px; + font-size: 40px; +} + +.md-content h2 { + margin: 32px auto 24px; + font-size: 32px; +} + +.md-content h3 { + font-size: 24px; +} + +.md-content h4 { + font-size: 16px; +} + +.md-content h5 { + font-size: 14px; +} + +.md-content h6 { + font-size: 12px; +} + +.md-content a:not(.anchor) { + text-underline-offset: 0.3rem; + text-decoration: underline; +} + +.md-content del { + text-decoration: line-through; +} + +.md-content dl:not(:last-child), +.md-content ol:not(:last-child), +.md-content p:not(:last-child), +.md-content figure:not(:last-child), +.md-content ul:not(:last-child) { + margin-bottom: var(--content-gap); +} + +.md-content ol, +.md-content ul { + padding-inline-start: 1.25rem; +} + +.md-content li { + margin-top: 0.3rem; +} + +.md-content li p { + margin-bottom: 0; +} + +.md-content dl { + display: flex; + flex-wrap: wrap; + margin: 0; +} + +.md-content dt { + width: 25%; + font-weight: 700; +} + +.md-content dd { + width: 75%; + margin-inline-start: 0; + padding-inline-start: 10px; +} + +.md-content dd~dd, +.md-content dt~dt { + margin-top: 10px; +} + +.md-content table { + margin-bottom: var(--content-gap); +} + +.md-content table th, +.md-content table:not(.highlight table, .gist .highlight) td { + min-width: 80px; + padding: 6px 13px; + line-height: 1.5; + border: 1px solid var(--border); +} + +.md-content table th { + text-align: start; +} + +.md-content table td code:only-child { + margin: auto 0; +} + +.md-content .highlight table { + border-radius: var(--radius); +} + +.md-content .highlight:not(table) { + margin-bottom: var(--content-gap); + background: var(--code-block-bg) !important; + border-radius: var(--radius); + direction: ltr; +} + +.md-content .highlight pre { + margin: 0; +} + +.post-content code { + padding: 0.2rem 0.3rem; + font-size: 0.78em; + line-height: 1.5; + background: var(--code-bg); + border-radius: 0.2rem; +} + +.md-content pre code { + display: grid; + margin: auto 0; + padding: 10px; + color: rgb(213, 213, 214); + background: var(--code-block-bg) !important; + border-radius: var(--radius); + overflow-x: auto; + word-break: break-all; +} + +.md-content blockquote { + margin: 1rem 0; + padding-inline-start: 1rem; + border-inline-start: 0.3rem solid var(--content); +} + +.md-content hr { + margin: 30px 0; + height: 2px; + background: var(--tertiary); + border: 0; +} + +.md-content iframe { + max-width: 100%; +} + +.md-content img { + border-radius: var(--radius); + margin: 1rem 0; +} + +.md-content img[src*="#center"] { + margin: 1rem auto; +} + +.md-content figure.align-center { + text-align: center; +} + +.md-content figure>figcaption { + color: var(--primary); + font-size: 16px; + font-weight: bold; + margin: 8px 0 16px; +} + +.md-content figure>figcaption>p { + color: var(--secondary); + font-size: 14px; + font-weight: normal; +} + +.md-content h1:hover .anchor, +.md-content h2:hover .anchor, +.md-content h3:hover .anchor, +.md-content h4:hover .anchor, +.md-content h5:hover .anchor, +.md-content h6:hover .anchor { + display: inline-flex; + color: var(--secondary); + margin-inline-start: 0.5em; + font-weight: 500; + user-select: none; +} + +.anchor:hover { + color: var(--content) !important; +} + +.md-content img.in-text { + display: inline; + margin: auto; +} + +mark { + border-radius: 2px; + padding: 0 2px; +} + +audio { + display: block; + width: 100%; + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; + height: 2.5rem; + margin-bottom: var(--content-gap); +} + +audio::-webkit-media-controls-enclosure { + border-radius: 0; +} + +video { + border: 1px solid var(--code-bg); + border-radius: var(--radius); + max-width: 100%; +} + + +/* post-entry.css */ + +.first-entry { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + min-height: 320px; + margin: var(--gap) 0 calc(var(--gap) * 2) 0; +} + +.first-entry .entry-header { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; +} + +.first-entry .entry-header h1 { + font-size: 34px; + line-height: 1.3; +} + +.first-entry .entry-header h2 { + font-size: 40px; +} + +.first-entry .entry-content { + margin: 14px 0; + font-size: 16px; + -webkit-line-clamp: 3; +} + +.first-entry .entry-footer { + font-size: 14px; +} + +.home-info .entry-content { + --content-gap: 0.5rem; + -webkit-line-clamp: unset; + margin: 0; +} + +.post-entry { + position: relative; + margin-bottom: var(--gap); + padding: var(--gap); + background: var(--entry); + border-radius: var(--radius); + transition: transform 0.25s ease; + border: 1px solid var(--border); +} + +.post-entry:hover, +.post-entry:focus-within { + transform: translateY(-2px); + border-color: var(--tertiary); +} + +.entry-header h2 { + font-size: 24px; + line-height: 1.3; +} + +.entry-content { + margin: 8px 0; + color: var(--secondary); + font-size: 14px; + line-height: 1.6; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.home-info .entry-content p { + margin-block-start: 1em; + margin-block-end: 1em; +} + +.entry-footer { + color: var(--secondary); + font-size: 13px; +} + +.entry-link { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + border-radius: var(--radius); +} + +.entry-hint { + color: var(--secondary); +} + +.entry-hint-parent { + display: flex; + justify-content: space-between; +} + +/* post-single.css */ + +.page-header, +.post-header { + margin: 24px auto var(--content-gap) auto; +} + +.post-title { + font-size: 40px; +} + +.post-description { + margin-top: 10px; +} + +.post-meta { + margin-top: 5px; +} + +.post-meta { + color: var(--secondary); + font-size: 14px; +} + +.post-meta a { + text-underline-offset: 0.3rem; + text-decoration: underline; +} + +.post-meta a { + color: var(--secondary); + text-decoration-style: dotted; +} + +.post-content { + color: var(--content); + margin: 30px 0; +} + +.post-footer { + margin-top: var(--content-gap); +} + +.post-footer>* { + margin-bottom: 10px; +} + +.post-tags { + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.post-tags li { + display: inline-block; +} + +.post-tags a, +.paginav { + border-radius: var(--radius); + background: var(--code-bg); + border: 1px solid var(--border); +} + +.post-tags a { + display: block; + padding: 0 14px; + color: var(--secondary); + font-size: 14px; + line-height: 34px; + background: var(--code-bg); +} + +.post-tags a:hover, +.paginav a:hover { + background: var(--border); +} + +.paginav { + display: flex; + line-height: 1.2; +} + +.paginav .title { + letter-spacing: 1px; + text-transform: uppercase; + font-size: 0.8rem; + color: var(--secondary); +} + +.paginav a { + width: 50%; + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 0.8rem; + border-radius: var(--radius); +} + +.paginav span:hover:not(.title) { + text-underline-offset: 0.2rem; + text-decoration: underline; +} + +.paginav .next { + margin-inline-start: auto; + text-align: right; +} + +[dir="rtl"] .paginav .next { + text-align: left; +} + +h1>a>svg { + display: inline; +} + + +/* search.css */ + +.searchbox input { + padding: 4px 10px; + width: 100%; + color: var(--primary); + font-weight: bold; + border: 2px solid var(--tertiary); + border-radius: var(--radius); +} + +.searchResults li { + list-style: none; + border-radius: var(--radius); + padding: 10px 15px; + position: relative; + font-weight: 500; + display: flex; + align-items: center; + justify-content: space-between; + background: var(--entry); + transition: transform .25s ease; + border: 1px solid var(--border); +} + +.searchResults { + margin: var(--content-gap) 0; + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; +} + +.searchResults li:hover, +.searchResults li:focus-within { + transform: translateY(-2px); + border-color: var(--tertiary); +} + +.searchResults li .entry-link:focus { + outline: 2px solid var(--secondary); + outline-offset: -2px; +} + + +/* terms.css */ + +.terms-tags { + display: flex; + flex-wrap: wrap; + gap: 1em; + margin-top: var(--content-gap); +} + +.terms-tags li { + display: inline-block; + font-weight: 500; +} + +.terms-tags a { + display: block; + padding: 4px 10px; + background: var(--tertiary); + border-radius: var(--radius); + transition: transform 0.1s; +} + + +/* roller.css: Apache Roller markup styled in PaperMod's visual language */ + +.page-footer { + margin-top: var(--gap); +} + +.post-meta .entry-edit::before { + content: "|"; + margin: 0 0.4em; +} + +.searchbox { + margin-top: var(--content-gap); +} + +.search-summary { + margin: var(--content-gap) 0 0; +} + +.empty-state { + margin: var(--content-gap) 0; + color: var(--secondary); +} + +.searchResults .entry-link { + border-radius: var(--radius); +} + +.searchResults svg { + flex-shrink: 0; +} + +.post-comments { + margin-top: calc(var(--gap) * 2); + padding-top: var(--gap); + border-top: 1px solid var(--border); +} + +.comments-head { + margin-bottom: var(--content-gap); + color: var(--primary); + font-size: 24px; + font-weight: 700; + line-height: 1.3; +} + +.comments>br { + display: none; +} + +.comments { + margin-bottom: calc(var(--gap) * 2); +} + +.comment { + margin-bottom: var(--gap); + padding: var(--gap); + color: var(--content); + font-size: 16px; + background: var(--entry); + border: 1px solid var(--border); + border-radius: var(--radius); +} + +.comment p:not(:last-child) { + margin-bottom: 10px; +} + +.comment-details { + margin-top: 10px; + color: var(--secondary); + font-size: 13px; +} + +.comment-details a, +.comment-details b { + color: var(--secondary); + font-weight: 500; +} + +.comment-details a.entrypermalink { + margin-inline-start: 0.3em; +} + +.comments-form ul { + display: flex; + flex-direction: column; + gap: 14px; + list-style: none; +} + +.comments-form label.desc { + display: block; + margin-bottom: 4px; + color: var(--secondary); + font-size: 14px; +} + +.comments-form label.choice { + margin-inline-start: 0.3em; + color: var(--secondary); + font-size: 14px; +} + +.comments-form input.checkbox { + accent-color: var(--primary); +} + +.comments-form input.text, +.comments-form textarea, +#commentAuthenticator input { + padding: 4px 10px; + width: 100%; + color: var(--primary); + background: var(--theme); + border: 2px solid var(--tertiary); + border-radius: var(--radius); +} + +.comments-form input.text:focus, +.comments-form textarea:focus, +#commentAuthenticator input:focus { + border-color: var(--secondary); +} + +.comments-form textarea { + min-height: 160px; + resize: vertical; +} + +#commentAuthenticator input { + width: auto; +} + +.comments-form .info, +#commentAuthenticator { + color: var(--secondary); + font-size: 13px; +} + +.comments-form input.button { + color: var(--theme); + font-size: 13px; + line-height: 36px; + background: var(--primary); + border-radius: calc(36px / 2); + padding: 0 16px; + margin-inline-end: 8px; +} + +.comments-form .status, +.comments-form .error { + display: block; + margin-bottom: var(--content-gap); + padding: 10px 15px; + color: var(--content); + font-size: 14px; + background: var(--code-bg); + border: 1px solid var(--border); + border-radius: var(--radius); +} + +.comments-form .error { + border-color: var(--secondary); +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; +} + + +/* zmedia.css */ + +@media screen and (max-width: 768px) { + /* theme-vars */ + :root { + --gap: 14px; + } + + /* post-entry */ + .first-entry { + min-height: 260px; + } + + /* archive */ + .archive-month { + flex-direction: column; + } + + .archive-year { + margin-top: 20px; + } + + /* footer */ + .footer { + padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap); + } +} + +/* footer */ +@media screen and (max-width: 900px) { + .list .top-link { + transform: translateY(-5rem); + } +} + +@media (prefers-reduced-motion) { + /* terms; post-entry; search */ + .terms-tags a:active, + .post-entry:active, + .top-link, + .searchResults .focus, + .searchResults li:active { + transform: none; + } +} + diff --git a/app/src/main/webapp/themes/papermod/theme.js b/app/src/main/webapp/themes/papermod/theme.js new file mode 100644 index 0000000000..8f6ea23a4a --- /dev/null +++ b/app/src/main/webapp/themes/papermod/theme.js @@ -0,0 +1,83 @@ +/* + PaperMod v8+ + License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE + Copyright (c) 2020 nanxiaobei and adityatelange + Copyright (c) 2021-2026 adityatelange + + Ported to Apache Roller from layouts/_partials/head.html and footer.html. + Loaded synchronously in so the theme is applied before first paint. +*/ +(function () { + var html = document.documentElement; + var darkQuery = window.matchMedia('(prefers-color-scheme: dark)'); + + function storedTheme() { + try { + return localStorage.getItem('pref-theme'); + } catch (e) { + return null; + } + } + + function applyTheme() { + var pref = storedTheme(); + if (pref === 'dark' || pref === 'light') { + html.dataset.theme = pref; + } else { + html.dataset.theme = darkQuery.matches ? 'dark' : 'light'; + } + } + + applyTheme(); + + // "auto": keep following the OS setting until the reader picks a theme + darkQuery.addEventListener('change', function () { + if (!storedTheme()) { + applyTheme(); + } + }); + + document.addEventListener('DOMContentLoaded', function () { + var toggle = document.getElementById('theme-toggle'); + if (toggle) { + toggle.addEventListener('click', function () { + var next = html.dataset.theme === 'dark' ? 'light' : 'dark'; + html.dataset.theme = next; + try { + localStorage.setItem('pref-theme', next); + } catch (e) { + // storage unavailable; the choice lasts for this page only + } + }); + } + + var menu = document.getElementById('menu'); + if (menu) { + var scrollPosition = localStorage.getItem('menu-scroll-position'); + if (scrollPosition) { + menu.scrollLeft = parseInt(scrollPosition, 10); + } + menu.addEventListener('scroll', function () { + localStorage.setItem('menu-scroll-position', menu.scrollLeft); + }); + } + + var topLink = document.getElementById('top-link'); + if (topLink) { + window.addEventListener('scroll', function () { + var scrollThreshold = window.innerHeight; + if (document.body.scrollTop > scrollThreshold || document.documentElement.scrollTop > scrollThreshold) { + topLink.classList.remove('hidden'); + } else { + topLink.classList.add('hidden'); + } + }); + topLink.addEventListener('click', function (e) { + e.preventDefault(); + var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + window.scrollTo({ top: 0, behavior: reduce ? 'auto' : 'smooth' }); + history.replaceState(null, '', ' '); + }); + } + }); +})(); diff --git a/app/src/main/webapp/themes/papermod/theme.xml b/app/src/main/webapp/themes/papermod/theme.xml new file mode 100644 index 0000000000..a7703ca95f --- /dev/null +++ b/app/src/main/webapp/themes/papermod/theme.xml @@ -0,0 +1,21 @@ + + + + papermodPaperMod + A port of the PaperMod theme for Hugo: a fast, clean, card-based layout with reading times and automatic light and dark modes. + Aditya Telange (ported for Apache Roller) + + custom.cssPaperMod custom stylescustom.csstext/csscustom.cssvelocity + + + + + + + + + + + + + diff --git a/app/src/main/webapp/themes/papermod/weblog.vm b/app/src/main/webapp/themes/papermod/weblog.vm new file mode 100644 index 0000000000..e884812681 --- /dev/null +++ b/app/src/main/webapp/themes/papermod/weblog.vm @@ -0,0 +1,44 @@ + + + + #includeTemplate($model.weblog "standard_head") + #if($model.weblogCategory) + $model.weblogCategory.name | $model.weblog.name + #else + $model.weblog.name#if($utils.isNotEmpty($model.weblog.tagline)) | $model.weblog.tagline#end + #end + + + #includeTemplate($model.weblog "standard_header") +
+ #set($pager = $model.getWeblogEntriesPager()) + ## Page 1 of the latest-entries view is the home page; category and date + ## archives (which have next/previous collection links) are not. + #set($pageParam = $model.getRequestParameter("page")) + #set($isHome = !$model.weblogCategory && !$pager.prevLink && !$pager.prevCollectionLink && !$pager.nextCollectionLink && (!$pageParam || $pageParam == "0")) + #set($firstEntry = false) + #if($model.weblogCategory) + + #elseif($isHome && $utils.isNotEmpty($model.weblog.about)) +
+
+

$model.weblog.name

+
+
+ #set($about = $model.weblog.about.trim()) + #if($about.startsWith("<"))$about#{else}

$about

#end +
+
+ #elseif($isHome) + #set($firstEntry = true) + #end + #includeTemplate($model.weblog "_post_list") +
+ #includeTemplate($model.weblog "standard_footer") + + diff --git a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java index 4269203eed..2888d733ec 100644 --- a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java @@ -51,12 +51,12 @@ public void testThemeAssumptions() throws Exception { assertNotNull( themeManager.getTheme("basic") ); assertNotNull( themeManager.getTheme("basic").getStylesheet() ); assertNull( themeManager.getTheme("frontpage").getStylesheet() ); - assertNotNull( themeManager.getTheme("horizon") ); - assertNotNull( themeManager.getTheme("horizon").getStylesheet() ); - assertNotNull( themeManager.getTheme("alpenglow") ); - assertNotNull( themeManager.getTheme("alpenglow").getStylesheet() ); - assertNotNull( themeManager.getTheme("dispatch") ); - assertNotNull( themeManager.getTheme("dispatch").getStylesheet() ); + assertNotNull( themeManager.getTheme("casper") ); + assertNotNull( themeManager.getTheme("casper").getStylesheet() ); + assertNotNull( themeManager.getTheme("minima") ); + assertNotNull( themeManager.getTheme("minima").getStylesheet() ); + assertNotNull( themeManager.getTheme("papermod") ); + assertNotNull( themeManager.getTheme("papermod").getStylesheet() ); } } From e827f40c9561be38d8b8b8f5b89640046c7bb709 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Sun, 25 Oct 2026 17:45:51 -0500 Subject: [PATCH 09/11] Replace Minima and Casper with ports of Terminal and Hyde Casper, Minima, and PaperMod are all minimal, text-first designs, so they looked like one family side by side. PaperMod stays as the most popular; Minima and Casper are replaced with MIT-licensed themes that look clearly different: - Terminal (Hugo, panr): a retro console look with monospace type, a dark background, and amber accents, plus a light variant for readers whose system prefers light. - Hyde (Jekyll, Mark Otto): a bold colored sidebar with the blog's title and navigation beside the content. The sidebar color is a single CSS variable, so custom.css can switch to any of Hyde's Base16 colors. Both follow the same rules as PaperMod: Velocity templates for every page type, the upstream CSS with its MIT notice in theme.css, a LICENSE.txt entry, automatic light and dark modes, and no external requests (the upstream web fonts are not bundled, so the font stacks fall back to local faces). Terminal's mobile menu uses
instead of its menu.js. --- LICENSE.txt | 93 +- app/src/main/webapp/themes/casper/archives.vm | 40 - app/src/main/webapp/themes/casper/article.vm | 94 - app/src/main/webapp/themes/casper/card.vm | 32 - app/src/main/webapp/themes/casper/custom.css | 1 - app/src/main/webapp/themes/casper/entry.vm | 19 - app/src/main/webapp/themes/casper/feed.vm | 38 - app/src/main/webapp/themes/casper/footer.vm | 18 - app/src/main/webapp/themes/casper/header.vm | 28 - app/src/main/webapp/themes/casper/preview.png | Bin 67551 -> 0 bytes .../main/webapp/themes/casper/reading-time.vm | 10 - app/src/main/webapp/themes/casper/search.vm | 69 - .../main/webapp/themes/casper/tag-header.vm | 19 - app/src/main/webapp/themes/casper/tags.vm | 37 - app/src/main/webapp/themes/casper/theme.css | 2545 ----------------- app/src/main/webapp/themes/casper/theme.js | 40 - app/src/main/webapp/themes/casper/theme.xml | 24 - app/src/main/webapp/themes/casper/weblog.vm | 50 - app/src/main/webapp/themes/hyde/archives.vm | 62 + app/src/main/webapp/themes/hyde/custom.css | 7 + app/src/main/webapp/themes/hyde/entry.vm | 91 + .../webapp/themes/{minima => hyde}/head.vm | 0 app/src/main/webapp/themes/hyde/post-list.vm | 45 + app/src/main/webapp/themes/hyde/preview.png | Bin 0 -> 168381 bytes app/src/main/webapp/themes/hyde/search.vm | 35 + app/src/main/webapp/themes/hyde/sidebar.vm | 29 + app/src/main/webapp/themes/hyde/tags.vm | 16 + app/src/main/webapp/themes/hyde/theme.css | 1026 +++++++ app/src/main/webapp/themes/hyde/theme.xml | 19 + app/src/main/webapp/themes/hyde/weblog.vm | 33 + app/src/main/webapp/themes/minima/archives.vm | 64 - app/src/main/webapp/themes/minima/custom.css | 1 - app/src/main/webapp/themes/minima/entry.vm | 75 - app/src/main/webapp/themes/minima/footer.vm | 38 - app/src/main/webapp/themes/minima/header.vm | 31 - .../main/webapp/themes/minima/post-list.vm | 54 - app/src/main/webapp/themes/minima/preview.png | Bin 87713 -> 0 bytes app/src/main/webapp/themes/minima/search.vm | 36 - app/src/main/webapp/themes/minima/tags.vm | 22 - app/src/main/webapp/themes/minima/theme.css | 1377 --------- app/src/main/webapp/themes/minima/weblog.vm | 45 - .../main/webapp/themes/terminal/archives.vm | 60 + .../main/webapp/themes/terminal/custom.css | 3 + app/src/main/webapp/themes/terminal/entry.vm | 73 + app/src/main/webapp/themes/terminal/footer.vm | 13 + .../themes/{casper => terminal}/head.vm | 11 +- app/src/main/webapp/themes/terminal/header.vm | 36 + .../main/webapp/themes/terminal/post-list.vm | 60 + .../main/webapp/themes/terminal/preview.png | Bin 0 -> 103956 bytes app/src/main/webapp/themes/terminal/search.vm | 34 + app/src/main/webapp/themes/terminal/tags.vm | 18 + app/src/main/webapp/themes/terminal/theme.css | 1462 ++++++++++ .../themes/{minima => terminal}/theme.xml | 14 +- app/src/main/webapp/themes/terminal/weblog.vm | 33 + .../weblogger/business/ThemeManagerTest.java | 8 +- 55 files changed, 3216 insertions(+), 4872 deletions(-) delete mode 100644 app/src/main/webapp/themes/casper/archives.vm delete mode 100644 app/src/main/webapp/themes/casper/article.vm delete mode 100644 app/src/main/webapp/themes/casper/card.vm delete mode 100644 app/src/main/webapp/themes/casper/custom.css delete mode 100644 app/src/main/webapp/themes/casper/entry.vm delete mode 100644 app/src/main/webapp/themes/casper/feed.vm delete mode 100644 app/src/main/webapp/themes/casper/footer.vm delete mode 100644 app/src/main/webapp/themes/casper/header.vm delete mode 100644 app/src/main/webapp/themes/casper/preview.png delete mode 100644 app/src/main/webapp/themes/casper/reading-time.vm delete mode 100644 app/src/main/webapp/themes/casper/search.vm delete mode 100644 app/src/main/webapp/themes/casper/tag-header.vm delete mode 100644 app/src/main/webapp/themes/casper/tags.vm delete mode 100644 app/src/main/webapp/themes/casper/theme.css delete mode 100644 app/src/main/webapp/themes/casper/theme.js delete mode 100644 app/src/main/webapp/themes/casper/theme.xml delete mode 100644 app/src/main/webapp/themes/casper/weblog.vm create mode 100644 app/src/main/webapp/themes/hyde/archives.vm create mode 100644 app/src/main/webapp/themes/hyde/custom.css create mode 100644 app/src/main/webapp/themes/hyde/entry.vm rename app/src/main/webapp/themes/{minima => hyde}/head.vm (100%) create mode 100644 app/src/main/webapp/themes/hyde/post-list.vm create mode 100644 app/src/main/webapp/themes/hyde/preview.png create mode 100644 app/src/main/webapp/themes/hyde/search.vm create mode 100644 app/src/main/webapp/themes/hyde/sidebar.vm create mode 100644 app/src/main/webapp/themes/hyde/tags.vm create mode 100644 app/src/main/webapp/themes/hyde/theme.css create mode 100644 app/src/main/webapp/themes/hyde/theme.xml create mode 100644 app/src/main/webapp/themes/hyde/weblog.vm delete mode 100644 app/src/main/webapp/themes/minima/archives.vm delete mode 100644 app/src/main/webapp/themes/minima/custom.css delete mode 100644 app/src/main/webapp/themes/minima/entry.vm delete mode 100644 app/src/main/webapp/themes/minima/footer.vm delete mode 100644 app/src/main/webapp/themes/minima/header.vm delete mode 100644 app/src/main/webapp/themes/minima/post-list.vm delete mode 100644 app/src/main/webapp/themes/minima/preview.png delete mode 100644 app/src/main/webapp/themes/minima/search.vm delete mode 100644 app/src/main/webapp/themes/minima/tags.vm delete mode 100644 app/src/main/webapp/themes/minima/theme.css delete mode 100644 app/src/main/webapp/themes/minima/weblog.vm create mode 100644 app/src/main/webapp/themes/terminal/archives.vm create mode 100644 app/src/main/webapp/themes/terminal/custom.css create mode 100644 app/src/main/webapp/themes/terminal/entry.vm create mode 100644 app/src/main/webapp/themes/terminal/footer.vm rename app/src/main/webapp/themes/{casper => terminal}/head.vm (62%) create mode 100644 app/src/main/webapp/themes/terminal/header.vm create mode 100644 app/src/main/webapp/themes/terminal/post-list.vm create mode 100644 app/src/main/webapp/themes/terminal/preview.png create mode 100644 app/src/main/webapp/themes/terminal/search.vm create mode 100644 app/src/main/webapp/themes/terminal/tags.vm create mode 100644 app/src/main/webapp/themes/terminal/theme.css rename app/src/main/webapp/themes/{minima => terminal}/theme.xml (74%) create mode 100644 app/src/main/webapp/themes/terminal/weblog.vm diff --git a/LICENSE.txt b/LICENSE.txt index 5391f2d1b0..4522be6511 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -368,61 +368,29 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -This product bundles the Casper theme, a port of Ghost's default theme, +This product bundles the Hyde theme, a port of the Hyde theme for Jekyll, which is available under a "MIT" license. For details, see -themes/casper/theme.css -https://github.com/TryGhost/Casper/blob/main/LICENSE - -Copyright (c) 2013-2026 Ghost Foundation - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +themes/hyde/theme.css +https://github.com/poole/hyde/blob/master/LICENSE.md -------------------------------------------------------------------------------- -This product bundles the Minima theme, a port of Jekyll's default theme, -which is available under a "MIT" license. For details, see -themes/minima/theme.css -https://github.com/jekyll/minima/blob/master/LICENSE.txt +Copyright (c) 2013 Mark Otto. -The MIT License (MIT) +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -Copyright (c) 2016-present Parker Moore and the minima contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- This product bundles the PaperMod theme, a port of the PaperMod theme for @@ -454,3 +422,30 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- +This product bundles the Terminal theme, a port of the Terminal theme for +Hugo, which is available under a "MIT" license. For details, see +themes/terminal/theme.css +https://github.com/panr/hugo-theme-terminal/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2024 panr + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------------- diff --git a/app/src/main/webapp/themes/casper/archives.vm b/app/src/main/webapp/themes/casper/archives.vm deleted file mode 100644 index 7586c2d98d..0000000000 --- a/app/src/main/webapp/themes/casper/archives.vm +++ /dev/null @@ -1,40 +0,0 @@ -## Every post as a Casper card feed, under a tag.hbs-style header card. -#set($archiveEntries = $model.weblog.getRecentWeblogEntries("nil", 100)) -#set($headerTitle = "Archives") -#set($headerCount = $model.weblog.entryCount) -#set($headerDescription = "") - - - - #includeTemplate($model.weblog "standard_head") - Archives — $model.weblog.name - - -
- #includeTemplate($model.weblog "standard_header") - -
-
-
-
- #includeTemplate($model.weblog "_tag_header") - #set($cardClass = "") - #foreach($entry in $archiveEntries) - #includeTemplate($model.weblog "_card") - #end -
- - #if($utils.isNotEmpty($model.weblog.about)) -
-

About $model.weblog.name

-

$model.weblog.about

-
- #end -
-
-
- - #includeTemplate($model.weblog "standard_footer") -
- - diff --git a/app/src/main/webapp/themes/casper/article.vm b/app/src/main/webapp/themes/casper/article.vm deleted file mode 100644 index dc9d2ccf7d..0000000000 --- a/app/src/main/webapp/themes/casper/article.vm +++ /dev/null @@ -1,94 +0,0 @@ -## Casper's post.hbs article. Expects $entry. -#includeTemplate($model.weblog "_reading_time") -#set($authorName = $entry.creator.fullName) -#if($utils.isEmpty($authorName)) - #set($authorName = $entry.creator.screenName) -#end -
-
- -
- - - -

$entry.title

- - #if($utils.isNotEmpty($entry.summary)) -

$utils.removeHTML($entry.summary)

- #end - - - -
- -
- $entry.displayContent -
- - #if($entry.tags && $entry.tags.size() > 0) - - #end - - #if($entry.commentCount > 0 || $entry.commentsStillAllowed) -
- #if($entry.commentCount > 0 || $model.commentForm.preview) - #showWeblogEntryComments($entry) - #end - #if($entry.commentsStillAllowed) - #showWeblogEntryCommentForm($entry) - #end -
- #end - -
-
- -## Read more: the latest three other posts, like post.hbs with show_recent_posts_footer. -#set($currentAnchor = $entry.anchor) -#set($moreEntries = []) -#foreach($recentEntry in $model.weblog.getRecentWeblogEntries("nil", 4)) - #if($recentEntry.anchor != $currentAnchor && $moreEntries.size() < 3) - #set($ignored = $moreEntries.add($recentEntry)) - #end -#end -#if($moreEntries.size() > 0) - -#end diff --git a/app/src/main/webapp/themes/casper/card.vm b/app/src/main/webapp/themes/casper/card.vm deleted file mode 100644 index 3791f07147..0000000000 --- a/app/src/main/webapp/themes/casper/card.vm +++ /dev/null @@ -1,32 +0,0 @@ -## Casper's partials/post-card.hbs. Expects $entry and $cardClass. -#includeTemplate($model.weblog "_reading_time") -#if($utils.isNotEmpty($entry.summary)) - #set($excerptSource = $entry.summary) -#{else} - #set($excerptSource = $entry.text) -#end -#set($excerpt = $utils.truncateNicely($utils.removeHTML($excerptSource), 180, 240, "…")) - diff --git a/app/src/main/webapp/themes/casper/custom.css b/app/src/main/webapp/themes/casper/custom.css deleted file mode 100644 index ed0473c378..0000000000 --- a/app/src/main/webapp/themes/casper/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* Add your own Casper overrides here. */ diff --git a/app/src/main/webapp/themes/casper/entry.vm b/app/src/main/webapp/themes/casper/entry.vm deleted file mode 100644 index 2327abe437..0000000000 --- a/app/src/main/webapp/themes/casper/entry.vm +++ /dev/null @@ -1,19 +0,0 @@ -#set($entry = $model.weblogEntry) - - - - #includeTemplate($model.weblog "standard_head") - $entry.title — $model.weblog.name - - -
- #includeTemplate($model.weblog "standard_header") - -
- #includeTemplate($model.weblog "_article") -
- - #includeTemplate($model.weblog "standard_footer") -
- - diff --git a/app/src/main/webapp/themes/casper/feed.vm b/app/src/main/webapp/themes/casper/feed.vm deleted file mode 100644 index af0bb78ea3..0000000000 --- a/app/src/main/webapp/themes/casper/feed.vm +++ /dev/null @@ -1,38 +0,0 @@ -## Casper's post feed. Expects $pager, $classicHome (first card large, next two wide) and $feedHeader. -
-
-
- #if($feedHeader) - #includeTemplate($model.weblog "_tag_header") - #end - #set($cardIndex = 0) - #foreach($day in $pager.entries.keySet()) - #foreach($entry in $pager.entries.get($day)) - #set($cardClass = "") - #if($classicHome && $cardIndex == 0) - #set($cardClass = " post-card-large") - #elseif($classicHome && $cardIndex < 3) - #set($cardClass = " dynamic") - #end - #includeTemplate($model.weblog "_card") - #set($cardIndex = $cardIndex + 1) - #end - #end -
- - #if($pager.prevLink || $pager.nextLink || $pager.prevCollectionLink || $pager.nextCollectionLink) - - #end -
-
diff --git a/app/src/main/webapp/themes/casper/footer.vm b/app/src/main/webapp/themes/casper/footer.vm deleted file mode 100644 index e915a0a1be..0000000000 --- a/app/src/main/webapp/themes/casper/footer.vm +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/app/src/main/webapp/themes/casper/header.vm b/app/src/main/webapp/themes/casper/header.vm deleted file mode 100644 index f7d0227ce9..0000000000 --- a/app/src/main/webapp/themes/casper/header.vm +++ /dev/null @@ -1,28 +0,0 @@ -
-
- - - - -
- - - -
-
-
diff --git a/app/src/main/webapp/themes/casper/preview.png b/app/src/main/webapp/themes/casper/preview.png deleted file mode 100644 index d63eea2b3fc4f497ec0948b6370908432593781e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67551 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 0) - #set($readingWords = $readingText.trim().split("\s+").size()) -#end -#set($readingTime = ($readingWords + 137) / 275) -#if($readingTime < 1) - #set($readingTime = 1) -#end diff --git a/app/src/main/webapp/themes/casper/search.vm b/app/src/main/webapp/themes/casper/search.vm deleted file mode 100644 index ba3fad4c67..0000000000 --- a/app/src/main/webapp/themes/casper/search.vm +++ /dev/null @@ -1,69 +0,0 @@ -#set($pager = $model.getWeblogEntriesPager()) -#set($classicHome = false) -#set($feedHeader = false) - - - - #includeTemplate($model.weblog "standard_head") - #if($utils.isNotEmpty($model.term))$model.term — #{end}Search — $model.weblog.name - - -
- #includeTemplate($model.weblog "standard_header") - -
-
-
-
-
-
-
-
-

#if($utils.isNotEmpty($model.term))“$model.term”#{else}Search#end

-
-
- #if($utils.isEmpty($model.term)) - Search every post on $model.weblog.name. - #elseif($model.hits == 1) - 1 post found - #else - $model.hits posts found - #end -
- -
-
-
- - #if($model.hits > 0) - #set($cardClass = "") - #foreach($day in $pager.entries.keySet()) - #foreach($entry in $pager.entries.get($day)) - #includeTemplate($model.weblog "_card") - #end - #end - #end -
- - #if($model.hits > 0 && ($pager.prevLink || $pager.nextLink)) - - #end -
-
-
- - #includeTemplate($model.weblog "standard_footer") -
- - diff --git a/app/src/main/webapp/themes/casper/tag-header.vm b/app/src/main/webapp/themes/casper/tag-header.vm deleted file mode 100644 index 90df73890e..0000000000 --- a/app/src/main/webapp/themes/casper/tag-header.vm +++ /dev/null @@ -1,19 +0,0 @@ -## Casper's tag.hbs header card. Expects $headerTitle, $headerDescription (may be empty) and $headerCount. -
-
-
-
-

$headerTitle

-
-
- #if($utils.isNotEmpty($headerDescription)) - $headerDescription - #elseif($headerCount == 1) - A collection of 1 post - #else - A collection of $headerCount posts - #end -
-
-
-
diff --git a/app/src/main/webapp/themes/casper/tags.vm b/app/src/main/webapp/themes/casper/tags.vm deleted file mode 100644 index 480297d718..0000000000 --- a/app/src/main/webapp/themes/casper/tags.vm +++ /dev/null @@ -1,37 +0,0 @@ -#set($pager = $model.getWeblogEntriesPager()) -#set($classicHome = false) -#set($feedHeader = true) -#set($headerTitle = "") -#foreach($tagName in $model.tags) - #set($headerTitle = "$headerTitle$tagName") - #if($foreach.hasNext) - #set($headerTitle = "$headerTitle + ") - #end -#end -#set($headerDescription = "") -#if($model.tags.size() == 1) - #set($headerCount = $model.weblog.getRecentWeblogEntriesByTag($model.tags.get(0), 100).size()) -#{else} - #set($headerCount = 0) - #foreach($day in $pager.entries.keySet()) - #set($headerCount = $headerCount + $pager.entries.get($day).size()) - #end -#end - - - - #includeTemplate($model.weblog "standard_head") - $headerTitle — $model.weblog.name - - -
- #includeTemplate($model.weblog "standard_header") - -
- #includeTemplate($model.weblog "_feed") -
- - #includeTemplate($model.weblog "standard_footer") -
- - diff --git a/app/src/main/webapp/themes/casper/theme.css b/app/src/main/webapp/themes/casper/theme.css deleted file mode 100644 index 35c578033e..0000000000 --- a/app/src/main/webapp/themes/casper/theme.css +++ /dev/null @@ -1,2545 +0,0 @@ -/* -Casper for Apache Roller - -Ported from Casper, the default theme for Ghost -(https://github.com/TryGhost/Casper, commit cbdb5c6). - -Copyright (c) 2013-2026 Ghost Foundation - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -*/ - -/* Table of Contents -/* ------------------------------------------------------------ - -1. Global Styles -2. Layout -3. Site Header -4. Site Navigation -5. Post Feed -6. Single Post - 6.1. Post Byline - 6.3. Read More - 6.4. Comments -8. Tag Template -10. Site Footer -11. Dark Mode -12. Roller Additions - -Section numbers follow upstream screen.css. Ghost-only sections -(Subscribe, Author and Error templates, Lightbox) are not ported, -and postcss color-mod() calls are replaced with the values from -upstream's built stylesheet. - -*/ - -/* 1. Global - Set up the things -/* ---------------------------------------------------------- */ - -/* Reset -/* ---------------------------------------------------------- */ - -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - font-size: 100%; - vertical-align: baseline; -} -body { - line-height: 1; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ""; - content: none; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -img { - display: block; - max-width: 100%; - height: auto; -} -html { - box-sizing: border-box; - font-family: sans-serif; - - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -*, -*:before, -*:after { - box-sizing: inherit; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -b, -strong { - font-weight: bold; -} -i, -em, -dfn { - font-style: italic; -} -h1 { - margin: 0.67em 0; - font-size: 2em; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -mark { - background-color: #fdffb6; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -kbd { - padding: 3px 5px; - font-family: var(--font-mono); - font-size: 1.5rem; - background: #f6f8fa; - border: 1px solid rgba(124, 139, 154, 0.25); - border-radius: 6px; - box-shadow: inset 0 -1px 0 rgba(124, 139, 154, 0.25); -} -@media (max-width: 600px) { - kbd { - font-size: 1.3rem; - } -} -button, -input, -optgroup, -select, -textarea { - margin: 0; /* 3 */ - color: inherit; /* 1 */ - font: inherit; /* 2 */ -} -button { - overflow: visible; - border: none; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -/* 1 */ -input[type="reset"], -input[type="submit"] { - cursor: pointer; /* 3 */ - - -webkit-appearance: button; /* 2 */ -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input:focus { - outline: none; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - box-sizing: content-box; /* 2 */ - - -webkit-appearance: textfield; /* 1 */ -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -legend { - padding: 0; /* 2 */ - border: 0; /* 1 */ -} -textarea { - overflow: auto; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -td, -th { - padding: 0; -} - -/* ========================================================================== - Base styles: opinionated defaults - ========================================================================== */ - -html { - font-size: 62.5%; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - color: var(--color-darkgrey); - font-family: var(--gh-font-body, var(--font-sans)); - font-size: 1.6rem; - line-height: 1.6em; - font-weight: 400; - font-style: normal; - letter-spacing: 0; - text-rendering: optimizeLegibility; - background: #fff; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -moz-font-feature-settings: "liga" on; -} - -::selection { - text-shadow: none; - background: #daf2fd; -} - -hr { - position: relative; - display: block; - width: 100%; - margin: 2.5em 0 3.5em; - padding: 0; - height: 1px; - border: 0; - border-top: 1px solid #f0f0f0; -} - -audio, -canvas, -iframe, -img, -svg, -video { - vertical-align: middle; -} - -fieldset { - margin: 0; - padding: 0; - border: 0; -} - -textarea { - resize: vertical; -} - -::not(.gh-content) p, -::not(.gh-content) ul, -::not(.gh-content) ol, -::not(.gh-content) dl, -::not(.gh-content) blockquote { - margin: 0 0 1.5em 0; -} - -ol, -ul { - padding-left: 1.3em; - padding-right: 1.5em; -} - -ol ol, -ul ul, -ul ol, -ol ul { - margin: 0.5em 0; -} - -ul, -ol { - max-width: 100%; -} - -li { - padding-left: 0.3em; - line-height: 1.6em; -} - -li + li { - margin-top: 0.5em; -} - -dt { - float: left; - margin: 0 20px 0 0; - width: 120px; - color: #daf2fd; - font-weight: 500; - text-align: right; -} - -dd { - margin: 0 0 5px 0; - text-align: left; -} - -sub, sup { - line-height: 1; -} - -blockquote { - margin: 1.5em 0; - padding: 0 1.6em 0 1.6em; - border-left: #daf2fd; -} - -blockquote small { - display: inline-block; - margin: 0.8em 0 0.8em 1.5em; - font-size: 0.9em; - opacity: 0.8; -} -/* Quotation marks */ -blockquote small:before { - content: "\2014 \00A0"; -} - -blockquote cite { - font-weight: bold; -} -blockquote cite a { - font-weight: normal; -} - -a { - color: #15171A; - text-decoration: none; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - line-height: 1.15; - font-family: var(--gh-font-heading, var(--font-sans)); - font-weight: 600; - text-rendering: optimizeLegibility; - letter-spacing: -0.01em; -} - -h1 { - margin: 0 0 0.5em 0; - font-size: 4.8rem; - font-weight: 700; - letter-spacing: -0.015em; -} -@media (max-width: 600px) { - h1 { - font-size: 2.8rem; - } -} - -h2 { - margin: 1.5em 0 0.5em 0; - font-size: 2.8rem; - font-weight: 700; -} -@media (max-width: 600px) { - h2 { - font-size: 2.3rem; - } -} - -h3 { - margin: 1.5em 0 0.5em 0; - font-size: 2.4rem; - font-weight: 600; -} -@media (max-width: 600px) { - h3 { - font-size: 1.7rem; - } -} - -h4 { - margin: 1.5em 0 0.5em 0; - font-size: 2rem; -} -@media (max-width: 600px) { - h4 { - font-size: 1.7rem; - } -} - -h5 { - margin: 1.5em 0 0.5em 0; - font-size: 2rem; -} - -h6 { - margin: 1.5em 0 0.5em 0; - font-size: 1.8rem; -} - -:root { - /* Ghost sets this from Settings > Brand; this is Ghost's default accent color */ - --ghost-accent-color: #ff1a75; - - /* Colours */ - --color-green: #a4d037; - --color-yellow: #fecd35; - --color-red: #f05230; - --color-darkgrey: #15171A; - --color-midgrey: #738a94; - --color-lightgrey: #f1f1f1; - --color-secondary-text: #979797; - --color-border: #e1e1e1; - --color-wash: #e5eff5; - --color-darkmode: #151719; - - /* - An accent color is also set by Ghost itself in - Ghost Admin > Settings > Brand - - --ghost-accent-color: {value}; - - You can use this variable throughout your styles - */ - - /* Fonts */ - --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; - --font-serif: Georgia, Times, serif; - --font-mono: Menlo, Courier, monospace; - -} - - -/* 2. Layout - Page building blocks -/* ---------------------------------------------------------- */ - -.viewport { - position: relative; - display: flex; - flex-direction: column; - min-height: 100vh; -} - -.site-content { - flex-grow: 1; -} - -/* Full width page blocks */ -.outer { - position: relative; - padding: 0 max(4vmin, 20px); -} - -/* Centered content container blocks */ -.inner { - margin: 0 auto; - max-width: 1200px; - width: 100%; -} - - -/* 3. Site Header -/* ---------------------------------------------------------- */ - -.site-header { - position: relative; - color: #fff; - background: var(--ghost-accent-color); -} - -.site-header-content { - position: relative; - z-index: 100; - display: flex; - align-items: center; - padding-top: calc(19vmin + 44px); - padding-bottom: 19vmin; - text-align: center; - color: var(--color-darkgrey); -} - -.site-header-inner { - position: relative; -} - -.site-title { - z-index: 10; - margin: 0; - padding: 0; - font-size: 5rem; - font-weight: 800; -} - -.site-description { - display: inline-block; - z-index: 10; - max-width: 960px; - font-size: 6rem; - font-weight: 700; - line-height: 1.1; -} - -.site-description:first-child { - font-family: var(--gh-font-heading, var(--font-sans)); -} - -.site-title + .site-description { - max-width: 640px; - margin-top: 16px; - font-size: 2.4rem; - font-weight: 400; - line-height: 1.4; -} - -.site-title + .site-description { - color: var(--color-secondary-text); -} - -@media (max-width: 991px) { - .site-header-content { - padding-top: calc(19vmin + 32px); - } -} - -@media (max-width: 767px) { - .site-header-inner { - gap: 16px; - } - - .site-title { - font-size: 3.4rem !important; - } - .site-description { - font-size: 2.2rem !important; - } - - .site-title + .site-description { - margin-top: 12px !important; - } -} - - -/* 4. Site Navigation -/* ---------------------------------------------------------- */ - -.gh-head { - height: 88px; - font-size: 1.6rem; - line-height: 1.3em; - background-color: #fff; - z-index: 150; -} - -.gh-head a { - text-decoration: none; -} - -.gh-head-inner { - display: grid; - column-gap: 40px; - grid-template-columns: auto 1fr auto; - grid-auto-flow: row dense; - align-items: center; - height: 100%; -} - -/* Header styles -/* ---------------------------------------------------------- */ - -.is-head-left-logo .gh-head-inner { - grid-template-columns: auto 1fr auto; -} - -.is-head-left-logo.home-template .gh-head:not(.is-header-hidden) .gh-head-logo { - display: none; -} - -.is-head-left-logo.home-template .gh-head:not(.is-header-hidden) .gh-head-menu { - margin-left: -40px; -} - -@media (min-width: 992px) { - .is-head-left-logo .gh-head-menu { - margin-right: 64px; - margin-left: 16px; - } -} - -/* Brand -/* ---------------------------------------------------------- */ - -.gh-head-brand { - display: flex; - align-items: center; - height: 40px; - word-break: break-all; -} - -.gh-head-logo { - display: block; - font-family: var(--gh-font-heading, var(--font-sans)); - font-weight: 800; - font-size: 2.6rem; - letter-spacing: -0.02em; - color: inherit; - white-space: nowrap; -} - -.gh-head-logo.no-image { - margin-top: -5px; -} - -.gh-head-logo img { - max-height: 40px; -} - - -/* Primary Navigation -/* ---------------------------------------------------------- */ - -.gh-head-menu { - display: flex; - align-items: center; - margin-top: 1px; - font-weight: 500; -} - -.gh-head-menu .nav { - display: inline-flex; - align-items: center; - flex-wrap: wrap; - gap: 32px; - list-style: none; - margin: 0; - padding: 0; -} - -.nav a { - display: inline-flex; - align-items: center; - gap: 0.35em; - vertical-align: middle; -} - -.gh-head-menu .nav li { - margin: 0; - padding: 0; -} - -.gh-head-menu .nav a { - line-height: 1.7; - color: inherit; -} - -.gh-head-menu .nav a:hover { - opacity: 0.9; -} - - -/* Secondary Navigation -/* ---------------------------------------------------------- */ - -.gh-head-actions { - display: flex; - justify-content: flex-end; - align-items: center; - gap: 24px; - list-style: none; - text-align: right; -} - - -/* Search -/* ---------------------------------------------------------- */ - -.gh-search { - display: inline-flex; - align-items: center; - justify-content: center; - width: 32px; - height: 32px; - padding: 0; - cursor: pointer; - background-color: transparent; - border: 0; - outline: none; -} - -.gh-search:hover { - opacity: 0.9; -} - -.gh-head-brand .gh-search { - margin-right: 8px; -} - -.gh-head-actions .gh-search { - margin-right: -4px; -} - -@media (max-width: 767px) { - .gh-head-actions .gh-search { - display: none; - } -} - -@media (min-width: 768px) { - .gh-head-brand .gh-search { - display: none; - } -} - - -/* Mobile Menu Trigger -/* ---------------------------------------------------------- */ - -html.gh-navigation-open { - overflow: hidden; -} - -.gh-navigation-open body { - position: fixed; - top: var(--gh-navigation-scroll-top); - left: 0; - width: 100%; - overflow: hidden; -} - -.gh-burger { - position: relative; - display: none; - width: 30px; - height: 30px; - padding: 0; - margin-right: -3px; - cursor: pointer; - background-color: transparent; - border: 0; - appearance: none; -} - -.gh-burger::before, -.gh-burger::after { - position: absolute; - left: 3px; - width: 24px; - height: 1px; - content: ""; - background-color: var(--color-darkgrey); - transition: all 0.2s cubic-bezier(0.04, 0.04, 0.12, 0.96) 0.1008s; -} - -.gh-burger::before { - top: 11px; -} - -.gh-burger::after { - bottom: 11px; -} - -.gh-head-open .gh-burger::before { - top: 15px; - transform: rotate(45deg); -} - -.gh-head-open .gh-burger::after { - bottom: 14px; - transform: rotate(-45deg); -} - - -/* Mobile Menu -/* ---------------------------------------------------------- */ -/* IDs needed to ensure sufficient specificity */ - -@media (max-width: 767px) { - #gh-head { - height: 64px; - } - - #gh-head .gh-head-inner { - grid-template-rows: auto 1fr auto; - grid-template-columns: 1fr; - gap: 48px; - } - - #gh-head .gh-head-brand { - display: grid; - grid-template-columns: 1fr auto auto; - grid-column-start: 1; - align-items: center; - height: 64px; - } - - #gh-head .gh-head-logo { - font-size: 2.2rem; - } - - #gh-head .gh-head-brand .gh-search { - margin-left: -6px; - } - - #gh-head .gh-burger { - display: block; - } - - #gh-head .gh-head-menu, - #gh-head .gh-head-actions { - position: fixed; - justify-content: center; - visibility: hidden; - opacity: 0; - } - - #gh-head .gh-head-menu { - margin: 0; - transition: none; - transform: translateY(0); - } - - #gh-head .nav { - gap: 16px; - align-items: center; - line-height: 1.4; - } - - #gh-head .nav a { - font-size: 2.6rem; - font-weight: 600; - text-transform: none; - } - - #gh-head .nav li { - opacity: 0; - transform: translateY(-4px); - } - - .gh-head-open #gh-head { - position: fixed; - inset: 0; - z-index: 3999999; - height: 100%; - overflow-y: auto; - overscroll-behavior-y: contain; - -webkit-overflow-scrolling: touch; - } - - .gh-head-open #gh-head .gh-head-menu, - .gh-head-open #gh-head .gh-head-actions { - position: static; - visibility: visible; - opacity: 1; - } - - .gh-head-open #gh-head .nav { - display: flex; - flex-direction: column; - } - - .gh-head-open #gh-head .nav li { - opacity: 1; - transition: transform 0.2s, opacity 0.2s; - transform: translateY(0); - } - - .gh-head-open #gh-head .gh-head-actions { - position: sticky; - right: 0; - bottom: 0; - left: 0; - display: inline-flex; - flex-direction: column; - gap: 12px; - align-items: center; - padding: max(4vmin, 20px) 0 max(4vmin, 28px); - background-color: #fff; - } -} - - -/* 5. Post Feed -/* ---------------------------------------------------------- */ - -.post-feed { - position: relative; - display: grid; - gap: 4.8vmin 4vmin; - grid-template-columns: repeat(6, 1fr); - padding: max(4.8vmin, 36px) 0 0; -} - -.tag-template .post-feed { - margin-top: 4vmin; -} - -@media (max-width: 991px) { - .post-feed { - grid-template-columns: 1fr 1fr; - } -} - -@media (max-width: 767px) { - .post-feed { - grid-template-columns: 1fr; - grid-gap: 40px; - } -} - -.post-card { - position: relative; - grid-column: span 2; - display: flex; - flex-direction: column; - background-size: cover; - word-break: break-word; -} - -.post-card-image-link { - position: relative; - overflow: hidden; - display: block; - margin-bottom: 32px; -} - -.post-card-image-link::after { - content: ""; - display: block; - padding-bottom: 55%; -} - -.post-card-image { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - background: var(--color-lightgrey) no-repeat center center; - object-fit: cover; -} - -.post-card-content-link { - position: relative; - display: block; - color: var(--color-darkgrey); -} - -.post-card-content-link:hover { - text-decoration: none; -} - -.post-feed .no-image .post-card-content-link { - padding: 0; -} - -.no-image .post-card-header { - margin-top: 0; -} - -.post-card-tags { - display: flex; - align-items: center; - gap: 12px; - margin: 0 0 10px; - color: var(--color-secondary-text); - font-size: 1.4rem; - font-weight: 600; - letter-spacing: -0.005em; - line-height: 1; -} - -.post-card-featured { - position: relative; - display: flex; - align-items: center; - gap: 3px; - padding-left: 18px; - color: var(--ghost-accent-color); -} - -.post-card-featured svg { - position: absolute; - left: 0; -} - -.post-card-title { - margin: 0; - font-size: 2.6rem; - font-weight: 800; - line-height: 1.2; - letter-spacing: -0.01em; -} - -.post-card-content-link:hover .post-card-title { - opacity: 0.9; -} - -.no-image .post-card-title { - margin-top: 0; -} - -.post-card-title svg { - margin-top: -3px; - margin-left: -1px; -} - -.post-card-content { - flex-grow: 1; - display: flex; - flex-direction: column; -} - -.post-card-excerpt { - display: -webkit-box; - overflow-y: hidden; - margin-top: 12px; - max-width: 720px; - font-size: 1.6rem; - line-height: 1.5; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - word-break: break-word; -} - -.tag-template .post-card-excerpt { - margin-top: 6px; -} - -.tag-template .post-card-large .post-card-excerpt { - display: block; - overflow-y: auto; -} - -.post-card-meta { - display: flex; - align-items: center; - gap: 6px; - margin-top: 12px; - padding: 0; - font-size: 1.3rem; - color: var(--color-secondary-text); -} - -.post-card-meta > * { - display: flex; - align-items: center; - gap: 6px; -} - -.post-card-meta > * + *:not(script)::before { - width: 2px; - height: 2px; - content: ""; - background-color: var(--color-secondary-text); - border-radius: 50%; -} - -.post-card-meta .sep { - margin: 0 4px; -} - -.author-profile-image { - display: block; - width: 100%; - height: 100%; - background: #1a1a1a; - border-radius: 100%; - - object-fit: cover; -} - -.author-list { - display: flex; - margin: 0 0 0 4px; - padding: 0; - list-style: none; -} - -.author-list-item { - position: relative; - flex-shrink: 0; - margin: 0; - padding: 0; -} - - -/* Special Styling for home page grid (below): - -The first post in the list is styled to be bigger than the others and take over -the full width of the grid to give it more emphasis. Wrapped in a media query to -make sure this only happens on large viewports / desktop-ish devices. - -*/ - -@media (min-width: 1001px) { - .post-card-large { - grid-column: span 6; - display: grid; - grid-gap: 4vmin; - grid-template-columns: repeat(3, 1fr); - border-top: 0; - } - - .post-card-large:not(.no-image) .post-card-header { - margin-top: 0; - } - - .post-card-large .post-card-image-link { - position: relative; - grid-column: span 2; - margin-bottom: 0; - } - - .post-card-large .post-card-content { - grid-column: span 1; - } - - .post-card-large.no-image .post-card-content { - grid-column: span 2; - } - - .post-card-large .post-card-image { - position: absolute; - width: 100%; - height: 100%; - } - - .post-card-large .post-card-tags { - margin-bottom: 12px; - } - - .post-card-large .post-card-title { - margin-top: 0; - font-size: 4.4rem; - line-height: 1.05; - } - - .post-card-large .post-card-excerpt { - margin-top: 16px; - } - - .post-card-large + .post-card-large:nth-child(even) { - margin: 32px 0; - } - - .post-card-large + .post-card-large:nth-child(even) .post-card-content { - order: -1; - } - - .post-card.dynamic { - grid-column: span 3; - } - - .post-card.dynamic .post-card-title { - font-size: 3rem; - } -} - -/* Pagination -/* ---------------------------------------------------------- */ - -.pagination { - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: center; - margin-top: 8vmin; -} - -.pagination a { - font-size: 1.7rem; - font-weight: 600; -} - -.pagination .page-number { - grid-column-start: 2; - color: var(--color-secondary-text); -} - -.pagination .older-posts { - grid-column-start: 3; - text-align: right; -} - -@media (max-width: 767px) { - .pagination .page-number { - display: none; - } -} - - -/* 6. Single Post -/* ---------------------------------------------------------- */ - -.article { - word-break: break-word; -} - -.post-template .article { - padding: max(8vmin, 40px) 0 max(8vmin, 64px); -} - -.post-template .article-header { - padding: 0 0 max(6.4vmin, 40px); -} - -.article-tag { - margin-bottom: 16px; - font-size: 1.6rem; -} - -.article-tag a { - color: var(--color-secondary-text); -} - -.article-title { - margin-bottom: 0; - font-size: clamp(3.2rem, 5vw, 5.2rem); - font-weight: 800; - line-height: 1.05; - color: var(--color-darkgrey); -} - -.article-excerpt { - margin-top: 20px; - max-width: 720px; - font-size: 2rem; - line-height: 1.45; - color: var(--color-darkgrey); -} - -@media (max-width: 767px) { - .article-excerpt { - margin-top: 14px; - font-size: 1.7rem; - } -} - -/* -------- */ - -/* Content grid -/* ---------------------------------------------------------- */ - -/* Canvas creates a multi-column, centered grid which the post -is laid out on top of. Canvas just defines the grid, we don't -use it for applying any other styles. */ - -.gh-canvas { - --gap: max(4vmin, 20px); - --main: min(var(--content-width, 720px), 100% - var(--gap) * 2); - --wide: minmax(0, calc((var(--container-width, 1200px) - var(--content-width, 720px)) / 2)); - --full: minmax(var(--gap), 1fr); - - display: grid; - grid-template-columns: - [full-start] var(--full) - [wide-start] var(--wide) - [main-start] var(--main) [main-end] - var(--wide) [wide-end] - var(--full) [full-end]; -} - -.gh-canvas > * { - grid-column: main-start / main-end; -} - - -/* Content -/* ---------------------------------------------------------- */ - -/* Content refers to styling all page and post content that is -created within the Ghost editor. The main content handles -headings, text, images and lists. We deal with cards lower down. */ - -/* Default vertical spacing */ -.gh-content > * + * { - margin-top: max(3.2vmin, 24px); - margin-bottom: 0; -} - -/* Remove space between full-width cards */ - - -/* [id] represents all headings h1-h6, reset all margins */ -.gh-content > [id] { - margin: 0; - color: var(--color-darkgrey); -} - - -/* Add back a top margin to all headings, unless a heading -is the very first element in the post content */ -.gh-content > [id]:not(:first-child) { - margin: 2em 0 0; -} - -/* Add a small margin between a heading and anything after it */ -.gh-content > [id] + * { - margin-top: 1.5rem !important; -} - -/* A larger margin before/after HRs and blockquotes */ -.gh-content > hr, -.gh-content > blockquote { - position: relative; - margin-top: max(4.8vmin, 32px); -} -.gh-content > hr + *, -.gh-content > blockquote + * { - margin-top: max(4.8vmin, 32px) !important; -} - -/* Now the content typography styles */ -.gh-content a { - color: var(--ghost-accent-color); - text-decoration: underline; - word-break: break-word; -} - -.gh-content > blockquote:not([class]), -.gh-content > ol, -.gh-content > ul, -.gh-content > dl, -.gh-content > p { - font-family: var(--gh-font-body, var(--font-serif)); - font-weight: 400; - font-size: 2rem; - line-height: 1.6em; -} - -.gh-content > p img { - margin: 0 auto; -} - -.gh-content > ul, -.gh-content > ol, -.gh-content > dl { - padding-left: 1.9em; -} - -.gh-content > blockquote:not([class]) { - position: relative; - font-style: italic; - padding: 0; -} - -.gh-content > blockquote:not([class])::before { - content: ""; - position: absolute; - left: -1.5em; - top: 0; - bottom: 0; - width: 0.3rem; - background: var(--ghost-accent-color); -} - -.gh-content :not(pre) > code { - vertical-align: middle; - padding: 0.15em 0.4em 0.15em; - border: #e1eaef 1px solid; - font-weight: 400 !important; - font-size: 0.9em; - line-height: 1em; - color: #15171A; - background: #f0f6f9; - border-radius: 0.25em; -} - -.gh-content pre { - overflow: auto; - padding: 16px 20px; - color: var(--color-wash); - font-size: 1.4rem; - line-height: 1.5em; - background: var(--color-darkgrey); - border-radius: 5px; - box-shadow: 0 2px 6px -2px rgba(0,0,0,.1), 0 0 1px rgba(0,0,0,.4); -} - -.gh-content ol ol li { - list-style-type: lower-alpha; -} - -.gh-content ol ol ol li { - list-style-type: lower-roman; -} - -@media (max-width: 650px) { - .gh-content > blockquote:not([class]), -.gh-content > ol, -.gh-content > ul, -.gh-content > dl, -.gh-content > p { - font-size: 1.8rem; - } - - .gh-content blockquote:not([class])::before { - left: min(-4vmin, -20px); - } -} - - -/* Cards -/* ---------------------------------------------------------- */ - -/* Cards are dynamic blocks of content which appear within Ghost -posts, for example: embedded videos, tweets, galleries, or -specially styled bookmark links. We add extra styling here to -make sure they look good, and are given a bit of extra spacing. */ - -/* Add extra margin before/after any cards, -except for when immediately preceeded by a heading */ - - -/* This keeps small embeds centered */ - - -/* Responsive video embeds - no JavaScript needed */ - -.gh-content iframe[src*="youtube.com"], -.gh-content iframe[src*="youtube-nocookie.com"], -.gh-content iframe[src*="player.vimeo.com"], -.gh-content iframe[src*="kickstarter.com"] { - aspect-ratio: 16 / 9; - width: 100%; - height: auto; -} - -/* This keeps small iamges centered */ - - -/* Captions */ -figcaption { - padding: 1.5rem 1.5rem 0; - text-align: center; - color: rgba(0,0,0,0.5); - font-size: 1.3rem; - line-height: 1.4em; -} -figcaption strong { - color: rgba(0,0,0,0.8); -} -figcaption a { - text-decoration: underline; -} - - -/* Highly specific styles for traditional Instagram embeds */ - - -/* Card captions -/* ---------------------------------------------------------- */ - -.article-comments { - margin: 6vmin 0 0 0; -} - -/* -----old------ */ - -.footnotes-sep { - margin-bottom: 30px; -} - -.footnotes { - font-size: 1.5rem; -} - -.footnotes p { - margin: 0; -} - -.footnote-backref { - font-size: 1.2rem; - font-weight: bold; - text-decoration: none !important; - box-shadow: none !important; -} - -/* Tables */ -.gh-content table:not(.gist table) { - display: inline-block; - overflow-x: auto; - max-width: 100%; - width: auto; - border-spacing: 0; - border-collapse: collapse; - font-family: var(--font-sans); - font-size: 1.6rem; - white-space: nowrap; - vertical-align: top; - -webkit-overflow-scrolling: touch; - background: radial-gradient(ellipse at left, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0) 75%) 0 center, radial-gradient(ellipse at right, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0) 75%) 100% center; - background-attachment: scroll, scroll; - background-size: 10px 100%, 10px 100%; - background-repeat: no-repeat; -} - -.gh-content table:not(.gist table) td:first-child { - background-image: linear-gradient(to right, rgba(255,255,255, 1) 50%, rgba(255,255,255, 0) 100%); - background-size: 20px 100%; - background-repeat: no-repeat; -} - -.gh-content table:not(.gist table) td:last-child { - background-image: linear-gradient(to left, rgba(255,255,255, 1) 50%, rgba(255,255,255, 0) 100%); - background-position: 100% 0; - background-size: 20px 100%; - background-repeat: no-repeat; -} - -.gh-content table:not(.gist table) th { - color: var(--color-darkgrey); - font-size: 1.2rem; - font-weight: 700; - letter-spacing: 0.2px; - text-align: left; - text-transform: uppercase; - background-color: #f4f8fb; -} - -.gh-content table:not(.gist table) th, -.gh-content table:not(.gist table) td { - padding: 6px 12px; - border: #e3edf3 1px solid; -} - - -/* 6.1. Post Byline -/* ---------------------------------------------------------- */ - -.article-byline { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - margin: min(24px, 5.6vmin) 0 0; -} - -.gh-button-share { - display: inline-flex; - align-items: center; - flex-shrink: 0; - padding: 0.5em 1.2em; - font-size: 1.4rem; - font-weight: 600; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 999px; - color: rgba(0, 0, 0, 0.85); - background: transparent; - cursor: pointer; - transition: all 0.4s ease; - white-space: nowrap; - text-decoration: none; -} - -.gh-button-share:hover { - border-color: rgba(0, 0, 0, 0.5); -} - -html.dark-mode .gh-button-share { - color: rgba(255, 255, 255, 0.85); - border-color: rgba(255, 255, 255, 0.15); -} - -html.dark-mode .gh-button-share:hover { - border-color: rgba(255, 255, 255, 0.5); -} - -.article-byline-content { - flex-grow: 1; - display: flex; - align-items: center; -} - -.article-byline-content .author-list { - justify-content: flex-start; - padding: 0 14px 0 0; -} - -.article-byline-meta { - color: var(--color-secondary-text); - font-size: 1.4rem; - line-height: 1.2em; -} - -.article-byline-meta .author-name { - margin: 0 0 6px; - font-size: 1.7rem; - font-weight: 700; - letter-spacing: 0; -} - -.article-byline-meta .bull { - display: inline-block; - margin: 0 2px; -} - -.author-avatar { - display: block; - overflow: hidden; - margin: 0 -4px; - width: min(56px, 13.6vmin); - height: min(56px, 13.6vmin); - border: #fff 2px solid; - border-radius: 50%; - background-color: var(--color-border); -} - -@media (max-width: 767px) { - .article-byline-content { - flex-direction: column; - align-items: flex-start; - gap: 16px; - } - - .article-byline-content .author-list { - padding-right: 12px; - } - .article-byline-meta .author-name { - margin-bottom: 4px; - } -} - - -/* 6.3. Read more -/* ---------------------------------------------------------- */ - -.read-more-wrap { - margin-top: 2.4vmin; -} - -.read-more { - display: grid; - grid-template-columns: repeat(6, 1fr); - grid-gap: 4vmin; -} - -.read-more .post-card-tags { - display: none; -} - -@media (max-width: 1000px) { - .read-more { - grid-template-columns: repeat(4, 1fr); - } - .read-more .post-card:nth-child(3) { - display: none; - } -} - -@media (max-width: 700px) { - .read-more { - grid-template-columns: repeat(2, 1fr); - } - .read-more .post-card:nth-child(2) { - display: none; - } -} - -/* 6.4. Comments -/* ---------------------------------------------------------- */ -.comments { - display: flex; - flex-direction: column; - align-items: center; - margin: 60px 0 44px; -} - - -/* 8. Tag Template -/* ---------------------------------------------------------- */ - -.tag-template .post-card-large .post-card-image-link { - grid-column: 2 / span 2; - order: 2; -} - -.tag-template .post-card-large .post-card-content { - order: 1; -} - -@media (min-width: 1001px) { - .tag-template .post-card-large .post-card-content:only-child { - grid-column: span 2; - max-width: 640px; - } -} - -/* 10. Site Footer -/* ---------------------------------------------------------- */ - -.site-footer { - position: relative; - margin: max(12vmin, 64px) 0 0 0; - padding-top: 48px; - padding-bottom: 140px; - color: #fff; - background: #000; -} - -.site-footer .inner { - display: grid; - grid-gap: 40px; - grid-template-columns: auto 1fr auto; - align-items: center; - color: rgba(255,255,255,0.7); - font-size: 1.3rem; -} - -.site-footer-center { - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; -} - -.site-footer-social-links { - display: flex; - gap: 20px; -} - -.site-footer-social-links a { - display: inline-flex; -} - -.site-footer-social-links svg { - width: 16px; - height: 16px; -} - -.site-footer .copyright a { - color: #fff; - letter-spacing: -0.015em; - font-weight: 500; -} - -.site-footer a { - color: rgba(255,255,255,0.7); -} - -.site-footer a:hover { - color: rgba(255,255,255,1); - text-decoration: none; -} - -.site-footer-nav ul { - display: flex; - justify-content: center; - flex-wrap: wrap; - margin: 0; - padding: 0; - list-style: none; -} - -.site-footer-nav li { - display: inline-flex; - align-items: center; - padding: 0; - margin: 0; - line-height: 2em; -} - -.site-footer-nav a { - position: relative; - display: inline-flex; - align-items: center; - margin-left: 10px; -} - -.site-footer-nav li:not(:first-child) a:before { - content: ""; - display: block; - width: 2px; - height: 2px; - margin: 0 10px 0 0; - background: #fff; - border-radius: 100%; -} - -@media (max-width: 767px) { - .site-footer .inner { - max-width: 500px; - grid-template-columns: 1fr; - grid-gap: 0; - text-align: center; - } - .site-footer .copyright, - .site-footer .copyright a { - color: #fff; - font-size: 1.5rem; - } - .site-footer .copyright { - margin-bottom: 16px; - } - .site-footer-center { - margin-bottom: 16px; - } -} - - -/* 11. Dark Mode -/* ---------------------------------------------------------- */ - -html.dark-mode body { - color: rgba(255, 255, 255, 0.75); - background: var(--color-darkmode); -} - -html.dark-mode img { - opacity: 0.9; -} - -html.dark-mode kbd { - background: #0c0d0e; - border-color: rgba(255, 255, 255, 0.15); - box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.15); -} - -html.dark-mode mark { - background-color: rgba(253, 255, 182, 0.2); - color: rgba(255, 255, 255, 0.9); -} - -html.dark-mode figcaption a { - color: #fff; -} - -html.dark-mode .gh-head { - background: var(--color-darkmode); - color: #fff; -} - -html.dark-mode .gh-burger::before, -html.dark-mode .gh-burger::after { - background-color: #fff; -} - -html.dark-mode .site-header-content { - color: #fff; -} - -html.dark-mode .post-card-image { - background: var(--color-darkmode); -} - -html.dark-mode :is(.post-card-tags, .post-card-meta, .article-tag a, .byline-meta-content, .pagination .page-number) { - color: var(--color-secondary-text); -} - -html.dark-mode .post-card-featured { - color: #fff; -} - -html.dark-mode .post-card-title { - color: #fff; -} - -html.dark-mode .post-card-excerpt { - color: var(--color-secondary-text); -} - -html.dark-mode .pagination a { - color: #fff; -} - -html.dark-mode .article-title { - color: #fff; -} - -html.dark-mode .article-excerpt { - color: var(--color-secondary-text); -} - -html.dark-mode .author-avatar { - border-color: var(--color-darkmode); - background-color: #131416; -} - -html.dark-mode .author-profile-image { - opacity: 1; -} - -html.dark-mode .author-profile-image path { - fill: var(--color-darkmode); -} - -html.dark-mode .article-byline-meta .author-name a { - color: #fff; -} - -html.dark-mode .gh-content > [id] { - color: rgba(255, 255, 255, 0.9); -} - -html.dark-mode .gh-content pre { - background: #000; -} - -html.dark-mode .gh-content :not(pre) > code { - background: #0e0f11; - border-color: #131416; - color: var(--color-wash); -} - -:where(html.dark-mode) .gh-content a { - color: #fff; -} - -html.dark-mode .gh-content code { - color: #fff; - background: #000; -} - -html.dark-mode hr { - border-top-color: #424242; -} - -html.dark-mode .gh-content hr:after { - background: #131416; - box-shadow: var(--color-darkmode) 0 0 0 5px; -} - -html.dark-mode figcaption { - color: rgba(255, 255, 255, 0.6); -} - -html.dark-mode figcaption strong { - color: rgba(255, 255, 255, 0.9); -} - -html.dark-mode .gh-content table:not(.gist table) td:first-child { - background-image: linear-gradient(to right, var(--color-darkmode) 50%, rgba(21, 23, 25, 0) 100%); -} - -html.dark-mode .gh-content table:not(.gist table) td:last-child { - background-image: linear-gradient(to left, var(--color-darkmode) 50%, rgba(21, 23, 25, 0) 100%); -} - -html.dark-mode .gh-content table:not(.gist table) th { - color: rgba(255, 255, 255, 0.85); - background-color: #282b2f; -} - -html.dark-mode .gh-content table:not(.gist table) th, -html.dark-mode .gh-content table:not(.gist table) td { - border: #282b2f 1px solid; -} - -html.dark-mode .gh-content :is(input, textarea) { - color: #000; -} - -@media (max-width: 767px) { - html.dark-mode .gh-head-open #gh-head, - html.dark-mode .gh-head-open #gh-head .gh-head-actions { - background: var(--color-darkmode); - } -} - -@media (prefers-color-scheme: dark) { - html.auto-color body { - color: rgba(255, 255, 255, 0.75); - background: var(--color-darkmode); - } - - html.auto-color img { - opacity: 0.9; - } - - html.auto-color kbd { - background: #0c0d0e; - border-color: rgba(255, 255, 255, 0.15); - box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.15); - } - - html.auto-color mark { - background-color: rgba(253, 255, 182, 0.2); - color: rgba(255, 255, 255, 0.9); - } - - html.auto-color figcaption a { - color: #fff; - } - - html.auto-color .gh-head { - background: var(--color-darkmode); - color: #fff; - } - - html.auto-color .gh-burger::before, - html.auto-color .gh-burger::after { - background-color: #fff; - } - - html.auto-color .site-header-content { - color: #fff; - } - - html.auto-color .post-card-image { - background: var(--color-darkmode); - } - - html.auto-color :is(.post-card-tags, .post-card-meta, .article-tag a, .byline-meta-content, .pagination .page-number) { - color: var(--color-secondary-text); - } - - html.auto-color .post-card-featured { - color: #fff; - } - - html.auto-color .post-card-title { - color: #fff; - } - - html.auto-color .post-card-excerpt { - color: var(--color-secondary-text); - } - - html.auto-color .pagination a { - color: #fff; - } - - html.auto-color .article-title { - color: #fff; - } - - html.auto-color .article-excerpt { - color: var(--color-secondary-text); - } - - html.auto-color .author-avatar { - border-color: var(--color-darkmode); - background-color: #131416; - } - - html.auto-color .author-profile-image { - opacity: 1; - } - - html.auto-color .author-profile-image path { - fill: var(--color-darkmode); - } - - html.auto-color .article-byline-meta .author-name a { - color: #fff; - } - - html.auto-color .gh-button-share { - color: rgba(255, 255, 255, 0.85); - border-color: rgba(255, 255, 255, 0.15); - } - - html.auto-color .gh-button-share:hover { - border-color: rgba(255, 255, 255, 0.5); - } - - html.auto-color .gh-content > [id] { - color: rgba(255, 255, 255, 0.9); - } - - html.auto-color .gh-content pre { - background: #000; - } - - html.auto-color .gh-content :not(pre) > code { - background: #0e0f11; - border-color: #131416; - color: var(--color-wash); - } - - :where(html.auto-color) .gh-content a { - color: #fff; - } - - html.auto-color .gh-content code { - color: #fff; - background: #000; - } - - html.auto-color hr { - border-top-color: #424242; - } - - html.auto-color .gh-content hr:after { - background: #131416; - box-shadow: var(--color-darkmode) 0 0 0 5px; - } - - html.auto-color figcaption { - color: rgba(255, 255, 255, 0.6); - } - - html.auto-color figcaption strong { - color: rgba(255, 255, 255, 0.9); - } - - html.auto-color .gh-content table:not(.gist table) td:first-child { - background-image: linear-gradient(to right, var(--color-darkmode) 50%, rgba(21, 23, 25, 0) 100%); - } - - html.auto-color .gh-content table:not(.gist table) td:last-child { - background-image: linear-gradient(to left, var(--color-darkmode) 50%, rgba(21, 23, 25, 0) 100%); - } - - html.auto-color .gh-content table:not(.gist table) th { - color: rgba(255, 255, 255, 0.85); - background-color: #282b2f; - } - - html.auto-color .gh-content table:not(.gist table) th, - html.auto-color .gh-content table:not(.gist table) td { - border: #282b2f 1px solid; - } - - html.auto-color .gh-content :is(input, textarea) { - color: #000; - } - - @media (max-width: 767px) { - html.auto-color .gh-head-open #gh-head, - html.auto-color .gh-head-open #gh-head .gh-head-actions { - background: var(--color-darkmode); - } -} -} - - -/* 12. Roller Additions -/* ---------------------------------------------------------- */ - -/* Markup that only exists in Roller: entry tags, the comment -macros (#showWeblogEntryComments, #showWeblogEntryCommentForm) -and the search form. Styled to sit in Casper's article column. */ - -/* The search icon is a link to the search page rather than -upstream's + + #if($utils.isNotEmpty($model.errorMessage)) +

$model.errorMessage

+ #elseif($model.hits > 0) + #set($firstHit = $model.offset + 1) + #set($lastHit = $model.offset + $model.limit) + #if($lastHit > $model.hits)#set($lastHit = $model.hits)#end + + #elseif($utils.isNotEmpty($model.term)) +

No posts matched “$model.term”. Try a different word.

+ #end +
+ #if($model.hits > 0) + #set($pager = $model.getWeblogEntriesPager()) + #includeTemplate($model.weblog "_post_list") + #end + + + diff --git a/app/src/main/webapp/themes/hyde/sidebar.vm b/app/src/main/webapp/themes/hyde/sidebar.vm new file mode 100644 index 0000000000..159c5a5bd9 --- /dev/null +++ b/app/src/main/webapp/themes/hyde/sidebar.vm @@ -0,0 +1,29 @@ +## Hyde's _includes/sidebar.html. + diff --git a/app/src/main/webapp/themes/hyde/tags.vm b/app/src/main/webapp/themes/hyde/tags.vm new file mode 100644 index 0000000000..6848202117 --- /dev/null +++ b/app/src/main/webapp/themes/hyde/tags.vm @@ -0,0 +1,16 @@ + + + + #includeTemplate($model.weblog "standard_head") + #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end · $model.weblog.name + + + #includeTemplate($model.weblog "standard_sidebar") + +
+

Tagged #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end

+ #set($pager = $model.getWeblogEntriesPager()) + #includeTemplate($model.weblog "_post_list") +
+ + diff --git a/app/src/main/webapp/themes/hyde/theme.css b/app/src/main/webapp/themes/hyde/theme.css new file mode 100644 index 0000000000..99c8486b11 --- /dev/null +++ b/app/src/main/webapp/themes/hyde/theme.css @@ -0,0 +1,1026 @@ +/*! + * Hyde for Apache Roller + * + * Ported from Hyde (https://github.com/poole/hyde, commit 7c7f755): + * public/css/poole.css and public/css/hyde.css, unchanged, followed by the + * Apache Roller additions at the end of this file. + * + * Released under MIT License + * + * Copyright (c) 2013 Mark Otto. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * ___ + * /\_ \ + * _____ ___ ___\//\ \ __ + * /\ '__`\ / __`\ / __`\\ \ \ /'__`\ + * \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/ + * \ \ ,__/\ \____/\ \____//\____\ \____\ + * \ \ \/ \/___/ \/___/ \/____/\/____/ + * \ \_\ + * \/_/ + * + * Designed, built, and released under MIT license by @mdo. Learn more at + * https://github.com/poole/poole. + */ + + +/* + * Contents + * + * Body resets + * Custom type + * Messages + * Container + * Masthead + * Posts and pages + * Pagination + * Reverse layout + * Themes + */ + + +/* + * Body resets + * + * Update the foundational and global aspects of the page. + */ + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html, +body { + margin: 0; + padding: 0; +} + +html { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 1.5; +} +@media (min-width: 38em) { + html { + font-size: 20px; + } +} + +body { + color: #515151; + background-color: #fff; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +/* No `:visited` state is required by default (browsers will use `a`) */ +a { + color: #268bd2; + text-decoration: none; +} +a strong { + color: inherit; +} +/* `:focus` is linked to `:hover` for basic accessibility */ +a:hover, +a:focus { + text-decoration: underline; +} + +/* Headings */ +h1, h2, h3, h4, h5, h6 { + margin-bottom: .5rem; + font-weight: bold; + line-height: 1.25; + color: #313131; + text-rendering: optimizeLegibility; +} +h1 { + font-size: 2rem; +} +h2 { + margin-top: 1rem; + font-size: 1.5rem; +} +h3 { + margin-top: 1.5rem; + font-size: 1.25rem; +} +h4, h5, h6 { + margin-top: 1rem; + font-size: 1rem; +} + +/* Body text */ +p { + margin-top: 0; + margin-bottom: 1rem; +} + +strong { + color: #303030; +} + + +/* Lists */ +ul, ol, dl { + margin-top: 0; + margin-bottom: 1rem; +} + +dt { + font-weight: bold; +} +dd { + margin-bottom: .5rem; +} + +/* Misc */ +hr { + position: relative; + margin: 1.5rem 0; + border: 0; + border-top: 1px solid #eee; + border-bottom: 1px solid #fff; +} + +abbr { + font-size: 85%; + font-weight: bold; + color: #555; + text-transform: uppercase; +} +abbr[title] { + cursor: help; + border-bottom: 1px dotted #e5e5e5; +} + +/* Code */ +code, +pre { + font-family: Menlo, Monaco, "Courier New", monospace; +} +code { + padding: .25em .5em; + font-size: 85%; + color: #bf616a; + background-color: #f9f9f9; + border-radius: 3px; +} +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + padding: 1rem; + font-size: .8rem; + line-height: 1.4; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; + background-color: #f9f9f9; +} +pre code { + padding: 0; + font-size: 100%; + color: inherit; + background-color: transparent; +} + +/* Pygments via Jekyll */ +.highlight { + margin-bottom: 1rem; + border-radius: 4px; +} +.highlight pre { + margin-bottom: 0; +} + +/* Gist via GitHub Pages */ +.gist .gist-file { + font-family: Menlo, Monaco, "Courier New", monospace !important; +} +.gist .markdown-body { + padding: 15px; +} +.gist pre { + padding: 0; + background-color: transparent; +} +.gist .gist-file .gist-data { + font-size: .8rem !important; + line-height: 1.4; +} +.gist code { + padding: 0; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +/* Quotes */ +blockquote { + padding: .5rem 1rem; + margin: .8rem 0; + color: #7a7a7a; + border-left: .25rem solid #e5e5e5; +} +blockquote p:last-child { + margin-bottom: 0; +} +@media (min-width: 30em) { + blockquote { + padding-right: 5rem; + padding-left: 1.25rem; + } +} + +img { + display: block; + max-width: 100%; + margin: 0 0 1rem; + border-radius: 5px; +} + +/* Tables */ +table { + margin-bottom: 1rem; + width: 100%; + border: 1px solid #e5e5e5; + border-collapse: collapse; +} +td, +th { + padding: .25rem .5rem; + border: 1px solid #e5e5e5; +} +tbody tr:nth-child(odd) td, +tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} + + +/* + * Custom type + * + * Extend paragraphs with `.lead` for larger introductory text. + */ + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + + +/* + * Messages + * + * Show alert messages to users. You may add it to single elements like a `

`, + * or to a parent if there are multiple elements to show. + */ + +.message { + margin-bottom: 1rem; + padding: 1rem; + color: #717171; + background-color: #f9f9f9; +} + + +/* + * Container + * + * Center the page content. + */ + +.container { + max-width: 38rem; + padding-left: 1rem; + padding-right: 1rem; + margin-left: auto; + margin-right: auto; +} + + +/* + * Masthead + * + * Super small header above the content for site name and short description. + */ + +.masthead { + padding-top: 1rem; + padding-bottom: 1rem; + margin-bottom: 3rem; +} +.masthead-title { + margin-top: 0; + margin-bottom: 0; + color: #505050; +} +.masthead-title a { + color: #505050; +} +.masthead-title small { + font-size: 75%; + font-weight: 400; + color: #c0c0c0; + letter-spacing: 0; +} + + +/* + * Posts and pages + * + * Each post is wrapped in `.post` and is used on default and post layouts. Each + * page is wrapped in `.page` and is only used on the page layout. + */ + +.page, +.post { + margin-bottom: 4em; +} + +/* Blog post or page title */ +.page-title, +.post-title, +.post-title a { + color: #303030; +} +.page-title, +.post-title { + margin-top: 0; +} + +/* Meta data line below post title */ +.post-date { + display: block; + margin-top: -.5rem; + margin-bottom: 1rem; + color: #9a9a9a; +} + +/* Related posts */ +.related { + padding-top: 2rem; + padding-bottom: 2rem; + border-top: 1px solid #eee; +} +.related-posts { + padding-left: 0; + list-style: none; +} +.related-posts h3 { + margin-top: 0; +} +.related-posts li small { + font-size: 75%; + color: #999; +} +.related-posts li a:hover { + color: #268bd2; + text-decoration: none; +} +.related-posts li a:hover small { + color: inherit; +} + + +/* + * Pagination + * + * Super lightweight (HTML-wise) blog pagination. `span`s are provide for when + * there are no more previous or next posts to show. + */ + +.pagination { + overflow: hidden; /* clearfix */ + margin-left: -1rem; + margin-right: -1rem; + font-family: "PT Sans", Helvetica, Arial, sans-serif; + color: #ccc; + text-align: center; +} + +/* Pagination items can be `span`s or `a`s */ +.pagination-item { + display: block; + padding: 1rem; + border: 1px solid #eee; +} +.pagination-item:first-child { + margin-bottom: -1px; +} + +/* Only provide a hover state for linked pagination items */ +a.pagination-item:hover { + background-color: #f5f5f5; +} + +@media (min-width: 30em) { + .pagination { + margin: 3rem 0; + } + .pagination-item { + float: left; + width: 50%; + } + .pagination-item:first-child { + margin-bottom: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + .pagination-item:last-child { + margin-left: -1px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } +} + +/* + * __ __ + * /\ \ /\ \ + * \ \ \___ __ __ \_\ \ __ + * \ \ _ `\/\ \/\ \ /'_` \ /'__`\ + * \ \ \ \ \ \ \_\ \/\ \_\ \/\ __/ + * \ \_\ \_\/`____ \ \___,_\ \____\ + * \/_/\/_/`/___/> \/__,_ /\/____/ + * /\___/ + * \/__/ + * + * Designed, built, and released under MIT license by @mdo. Learn more at + * https://github.com/poole/hyde. + */ + + +/* + * Contents + * + * Global resets + * Sidebar + * Container + * Reverse layout + * Themes + */ + + +/* + * Global resets + * + * Update the foundational and global aspects of the page. + */ + +html { + font-family: "PT Sans", Helvetica, Arial, sans-serif; +} +@media (min-width: 48em) { + html { + font-size: 16px; + } +} +@media (min-width: 58em) { + html { + font-size: 20px; + } +} + + +/* + * Sidebar + * + * Flexible banner for housing site name, intro, and "footer" content. Starts + * out above content in mobile and later moves to the side with wider viewports. + */ + +.sidebar { + text-align: center; + padding: 2rem 1rem; + color: rgba(255,255,255,.5); + background-color: #202020; +} +@media (min-width: 48em) { + .sidebar { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 18rem; + text-align: left; + } +} + +/* Sidebar links */ +.sidebar a { + color: #fff; +} + +/* About section */ +.sidebar-about h1 { + color: #fff; + margin-top: 0; + font-family: "Abril Fatface", serif; + font-size: 3.25rem; +} + +/* Sidebar nav */ +.sidebar-nav { + margin-bottom: 1rem; +} +.sidebar-nav-item { + display: block; + line-height: 1.75; +} +a.sidebar-nav-item:hover, +a.sidebar-nav-item:focus { + text-decoration: underline; +} +.sidebar-nav-item.active { + font-weight: bold; +} + +/* Sticky sidebar + * + * Add the `sidebar-sticky` class to the sidebar's container to affix it the + * contents to the bottom of the sidebar in tablets and up. + */ + +@media (min-width: 48em) { + .sidebar-sticky { + position: absolute; + right: 1rem; + bottom: 1rem; + left: 1rem; + } +} + + +/* Container + * + * Align the contents of the site above the proper threshold with some margin-fu + * with a 25%-wide `.sidebar`. + */ + +.content { + padding-top: 4rem; + padding-bottom: 4rem; +} + +@media (min-width: 48em) { + .content { + max-width: 38rem; + margin-left: 20rem; + margin-right: 2rem; + } +} + +@media (min-width: 64em) { + .content { + margin-left: 22rem; + margin-right: 4rem; + } +} + + +/* + * Reverse layout + * + * Flip the orientation of the page by placing the `.sidebar` on the right. + */ + +@media (min-width: 48em) { + .layout-reverse .sidebar { + left: auto; + right: 0; + } + .layout-reverse .content { + margin-left: 2rem; + margin-right: 20rem; + } +} + +@media (min-width: 64em) { + .layout-reverse .content { + margin-left: 4rem; + margin-right: 22rem; + } +} + + + +/* + * Themes + * + * As of v1.1, Hyde includes optional themes to color the sidebar and links + * within blog posts. To use, add the class of your choosing to the `body`. + */ + +/* Base16 (http://chriskempson.github.io/base16/#default) */ + +/* Red */ +.theme-base-08 .sidebar { + background-color: #ac4142; +} +.theme-base-08 .content a, +.theme-base-08 .related-posts li a:hover { + color: #ac4142; +} + +/* Orange */ +.theme-base-09 .sidebar { + background-color: #d28445; +} +.theme-base-09 .content a, +.theme-base-09 .related-posts li a:hover { + color: #d28445; +} + +/* Yellow */ +.theme-base-0a .sidebar { + background-color: #f4bf75; +} +.theme-base-0a .content a, +.theme-base-0a .related-posts li a:hover { + color: #f4bf75; +} + +/* Green */ +.theme-base-0b .sidebar { + background-color: #90a959; +} +.theme-base-0b .content a, +.theme-base-0b .related-posts li a:hover { + color: #90a959; +} + +/* Cyan */ +.theme-base-0c .sidebar { + background-color: #75b5aa; +} +.theme-base-0c .content a, +.theme-base-0c .related-posts li a:hover { + color: #75b5aa; +} + +/* Blue */ +.theme-base-0d .sidebar { + background-color: #6a9fb5; +} +.theme-base-0d .content a, +.theme-base-0d .related-posts li a:hover { + color: #6a9fb5; +} + +/* Magenta */ +.theme-base-0e .sidebar { + background-color: #aa759f; +} +.theme-base-0e .content a, +.theme-base-0e .related-posts li a:hover { + color: #aa759f; +} + +/* Brown */ +.theme-base-0f .sidebar { + background-color: #8f5536; +} +.theme-base-0f .content a, +.theme-base-0f .related-posts li a:hover { + color: #8f5536; +} + +/* ========================================================================== + Apache Roller additions + ========================================================================== */ + +/* + * Sidebar color + * + * Hyde colors the sidebar and content links with a body class; the port uses + * a variable instead so custom.css can recolor it in one line. The default is + * Hyde's Base16 red (theme-base-08). The theme-base-* classes above still work. + */ + +body { + --hyde-accent: #ac4142; +} +.sidebar { + background-color: var(--hyde-accent); +} +.content a, +.related-posts li a:hover { + color: var(--hyde-accent); +} +.sidebar .lead, +.sidebar p { + color: rgba(255,255,255,.75); +} + +/* Fonts: PT Sans and Abril Fatface are not bundled, so fall back to local + faces with a similar feel */ +html { + font-family: "PT Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} +.sidebar-about h1 { + font-family: "Abril Fatface", "Bodoni 72", "Bodoni MT", Didot, "Playfair Display", Georgia, serif; + overflow-wrap: break-word; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +/* Page headings on tag, category, search, and archive pages */ +.content > .page-title { + margin-bottom: 2rem; +} +.message > :last-child { + margin-bottom: 0; +} + +/* Entry footer: author, category, tags, edit link */ +.post-meta { + margin-top: 1.5rem; + font-size: .8rem; + color: #9a9a9a; +} +.post-meta > * + * { + margin-left: .25rem; +} +.post-tags a { + display: inline-block; + padding: 0 .5rem; + margin-right: .25rem; + border: 1px solid #e5e5e5; + border-radius: 3px; +} +.post-tags a:hover { + text-decoration: none; + border-color: var(--hyde-accent); +} +.post-edit { + margin-left: .5rem; +} +.readmore { + font-weight: bold; +} + +/* Entry pager: allow long entry titles in Hyde's two-up pagination */ +.pagination-item { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Comments (markup from Roller's #showWeblogEntryComments and + #showWeblogEntryCommentForm) */ +.post-comments { + padding-top: 2rem; + border-top: 1px solid #eee; +} +.post-comments br { + display: none; +} +.comments-head { + margin: 0 0 1rem; + font-size: 1.25rem; + font-weight: bold; + line-height: 1.25; + color: #313131; +} +.comments { + margin-bottom: 2rem; +} +.comments:not(:has(.comment)) { + display: none; +} +.comment { + margin-bottom: 1rem; + padding: .5rem 1rem; + border-left: .25rem solid #e5e5e5; +} +.comment-details { + margin-bottom: 0; + font-size: .8rem; + color: #9a9a9a; +} +.comment .entrypermalink { + margin-left: .25rem; +} +.comments-form ul { + padding-left: 0; + list-style: none; +} +.comments-form li { + margin-bottom: 1rem; +} +.comments-form label.desc { + display: block; + margin-bottom: .25rem; + font-size: .8rem; + font-weight: bold; +} +.comments-form label.choice { + margin-left: .25rem; + font-size: .8rem; +} +.comments-form li.info { + font-size: .8rem; + color: #9a9a9a; +} +.comments-form .status, +.comments-form .error { + display: block; + margin-bottom: 1rem; + padding: 1rem; + color: #717171; + background-color: #f9f9f9; +} +.comments-form .error { + color: #ac4142; +} + +/* Form controls */ +input:not([type]), +input[type=text], +input[type=search], +textarea { + max-width: 100%; + padding: .5rem .75rem; + font: inherit; + font-size: .9rem; + color: #515151; + background-color: #fff; + border: 1px solid #e5e5e5; + border-radius: 4px; +} +.comments-form input.text, +.comments-form textarea { + width: 100%; +} +input:not([type]):focus, +input[type=text]:focus, +input[type=search]:focus, +textarea:focus { + border-color: var(--hyde-accent); + outline: none; +} +button, +input[type=button], +input[type=submit] { + padding: .5rem 1rem; + font: inherit; + font-size: .9rem; + font-weight: bold; + color: #fff; + background-color: var(--hyde-accent); + border: 0; + border-radius: 4px; + cursor: pointer; +} +button:hover, +input[type=button]:hover, +input[type=submit]:hover { + filter: brightness(1.1); +} + +/* Search */ +.search-form { + display: flex; + gap: .5rem; + margin-bottom: 1rem; +} +.search-form input { + flex: 1; + min-width: 0; +} + +/* Archives */ +.archives h2 { + margin-top: 2rem; +} +.archive-list h3 { + margin-bottom: .25rem; + font-size: 1rem; +} +.archive-terms { + padding-left: 0; + list-style: none; +} +.archive-terms li { + display: inline-block; + margin: 0 1rem .25rem 0; +} +.archive-terms small { + color: #9a9a9a; +} + +/* + * Dark mode + * + * Hyde has no dark mode; this keeps the colored sidebar and inverts Poole's + * grays for the content column when the reader's system prefers dark. + */ + +@media (prefers-color-scheme: dark) { + body { + color: #c5c5c5; + background-color: #1c1c1e; + } + h1, h2, h3, h4, h5, h6, + strong, + .page-title, + .post-title, + .post-title a, + .comments-head { + color: #ececec; + } + .content a, + .related-posts li a:hover { + color: color-mix(in srgb, var(--hyde-accent) 60%, #fff); + } + code { + color: #e0828a; + background-color: #2a2a2d; + } + pre { + background-color: #2a2a2d; + } + blockquote { + color: #9a9a9a; + border-left-color: #3a3a3d; + } + hr { + border-top-color: #3a3a3d; + border-bottom-color: transparent; + } + table, + td, + th { + border-color: #3a3a3d; + } + tbody tr:nth-child(odd) td, + tbody tr:nth-child(odd) th { + background-color: #242427; + } + .message, + .comments-form .status, + .comments-form .error { + color: #a5a5a5; + background-color: #242427; + } + .comments-form .error { + color: color-mix(in srgb, var(--hyde-accent) 60%, #fff); + } + .pagination { + color: #555; + } + .pagination-item, + .related, + .post-comments { + border-color: #2f2f32; + } + a.pagination-item:hover { + background-color: #242427; + } + .comment, + .post-tags a { + border-color: #3a3a3d; + } + input:not([type]), + input[type=text], + input[type=search], + textarea { + color: #c5c5c5; + background-color: #242427; + border-color: #3a3a3d; + } +} diff --git a/app/src/main/webapp/themes/hyde/theme.xml b/app/src/main/webapp/themes/hyde/theme.xml new file mode 100644 index 0000000000..30df631cc2 --- /dev/null +++ b/app/src/main/webapp/themes/hyde/theme.xml @@ -0,0 +1,19 @@ + + + + + hydeHyde + A port of Hyde, the two-column Jekyll theme built on Poole: a bold colored sidebar with the blog's title and navigation beside the content, with automatic light and dark modes. + Mark Otto (ported for Apache Roller) + + custom.cssHyde custom stylescustom.csstext/csscustom.cssvelocity + + + + + + + + + + diff --git a/app/src/main/webapp/themes/hyde/weblog.vm b/app/src/main/webapp/themes/hyde/weblog.vm new file mode 100644 index 0000000000..baf331a516 --- /dev/null +++ b/app/src/main/webapp/themes/hyde/weblog.vm @@ -0,0 +1,33 @@ + + + + #includeTemplate($model.weblog "standard_head") + #if($model.tags && $model.tags.size() > 0) + #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end · $model.weblog.name + #elseif($model.weblogCategory) + $model.weblogCategory.name · $model.weblog.name + #elseif($utils.isNotEmpty($model.weblog.tagline)) + $model.weblog.name · $model.weblog.tagline + #else + $model.weblog.name + #end + + + #includeTemplate($model.weblog "standard_sidebar") + +

+ #set($pager = $model.getWeblogEntriesPager()) + #if($model.tags && $model.tags.size() > 0) +

Tagged #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end

+ #elseif($model.weblogCategory) +

$model.weblogCategory.name

+ #if($utils.isNotEmpty($model.weblogCategory.description)) +

$model.weblogCategory.description

+ #end + #elseif(!$pager.prevLink && $utils.isNotEmpty($model.weblog.about)) +
$model.weblog.about
+ #end + #includeTemplate($model.weblog "_post_list") +
+ + diff --git a/app/src/main/webapp/themes/minima/archives.vm b/app/src/main/webapp/themes/minima/archives.vm deleted file mode 100644 index e1ece85f79..0000000000 --- a/app/src/main/webapp/themes/minima/archives.vm +++ /dev/null @@ -1,64 +0,0 @@ - - - - #includeTemplate($model.weblog "standard_head") - Archives | $model.weblog.name - - - #includeTemplate($model.weblog "standard_header") -
-
-
-
-

Archives

- -
- -
- #set($archiveEntries = $model.weblog.getRecentWeblogEntries("nil", 100)) - #set($currentYear = "") - #foreach($archiveEntry in $archiveEntries) - #set($entryYear = $utils.formatDate($archiveEntry.pubTime, "yyyy")) - #if($entryYear != $currentYear) - #if($currentYear != "") - - #end - #set($currentYear = $entryYear) -

$entryYear

-
    - #end -
  • - - $archiveEntry.title -
  • - #end - #if($currentYear != "") -
- #end - - #set($archiveCategories = $model.weblog.weblogCategories) - #if($archiveCategories.size() > 0) -

Categories

- - #end - - #set($archiveTags = $model.weblog.getPopularTags(-1, 50)) - #if($archiveTags.size() > 0) -

Tags

-
    - #foreach($archiveTag in $archiveTags) -
  • $archiveTag.name
  • - #end -
- #end -
-
-
-
- #includeTemplate($model.weblog "standard_footer") - - diff --git a/app/src/main/webapp/themes/minima/custom.css b/app/src/main/webapp/themes/minima/custom.css deleted file mode 100644 index adc93b7c72..0000000000 --- a/app/src/main/webapp/themes/minima/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* Add weblog-specific Minima overrides here. */ diff --git a/app/src/main/webapp/themes/minima/entry.vm b/app/src/main/webapp/themes/minima/entry.vm deleted file mode 100644 index a58ae3821a..0000000000 --- a/app/src/main/webapp/themes/minima/entry.vm +++ /dev/null @@ -1,75 +0,0 @@ - - - - #includeTemplate($model.weblog "standard_head") - $model.weblogEntry.title | $model.weblog.name - - - #includeTemplate($model.weblog "standard_header") -
-
- #set($entry = $model.weblogEntry) -
-
-

$entry.title

- -
- -
- $entry.displayContent -
- -
- #if($entry.category) - - #end - #if($entry.tags && $entry.tags.size() > 0) - - #end - #if($utils.isUserAuthorizedToAuthor($entry.website)) - Edit - #end -
- - #set($pager = $model.getWeblogEntriesPager()) - #if($pager.prevLink || $pager.nextLink) - - #end - -
- #showWeblogEntryComments($entry) - #showWeblogEntryCommentForm($entry) -
-
-
-
- #includeTemplate($model.weblog "standard_footer") - - diff --git a/app/src/main/webapp/themes/minima/footer.vm b/app/src/main/webapp/themes/minima/footer.vm deleted file mode 100644 index 7d0fd085d3..0000000000 --- a/app/src/main/webapp/themes/minima/footer.vm +++ /dev/null @@ -1,38 +0,0 @@ -
- -
- - - -
-
diff --git a/app/src/main/webapp/themes/minima/header.vm b/app/src/main/webapp/themes/minima/header.vm deleted file mode 100644 index 0006f82e1a..0000000000 --- a/app/src/main/webapp/themes/minima/header.vm +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/app/src/main/webapp/themes/minima/post-list.vm b/app/src/main/webapp/themes/minima/post-list.vm deleted file mode 100644 index 143cbf42c3..0000000000 --- a/app/src/main/webapp/themes/minima/post-list.vm +++ /dev/null @@ -1,54 +0,0 @@ -## Minima's home post list, shared by the weblog, tag, and search templates. -## Expects $pager to be set by the including template. -#set($listEntries = []) -#foreach($day in $pager.entries.keySet()) - #foreach($entry in $pager.entries.get($day)) - #set($added = $listEntries.add($entry)) - #end -#end -#if($listEntries.size() > 0) -
    - #foreach($entry in $listEntries) -
  • - -

    - $entry.title -

    - #if($utils.isNotEmpty($entry.summary)) -
    $entry.transformedSummary
    - #elseif($model.searchResults) -

    $utils.truncateNicely($utils.removeHTML($entry.transformedText), 160, 200, "…")

    - #end -
  • - #end -
-#else -

No posts here yet.

-#end -#if($pager.prevLink || $pager.nextLink) -
-
    - #if($pager.prevLink) -
  • « Newer
  • - #else -
  • •
  • - #end - #if($model.searchResults) - #set($pageNumber = $model.offset / $model.limit + 1) - #else - #set($pageParam = $model.getRequestParameter("page")) - #if($pageParam && $pageParam.matches("[0-9]+")) - #set($pageNumber = $listEntries.size().parseInt($pageParam) + 1) - #else - #set($pageNumber = 1) - #end - #end -
  • $pageNumber
  • - #if($pager.nextLink) -
  • Older »
  • - #else -
  • •
  • - #end -
-
-#end diff --git a/app/src/main/webapp/themes/minima/preview.png b/app/src/main/webapp/themes/minima/preview.png deleted file mode 100644 index 59d7a945b55b9657de71c6940d880d04cc73b655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87713 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 PH)t}F3K9k4dY}IXw`2!` diff --git a/app/src/main/webapp/themes/minima/search.vm b/app/src/main/webapp/themes/minima/search.vm deleted file mode 100644 index 18f2eb533e..0000000000 --- a/app/src/main/webapp/themes/minima/search.vm +++ /dev/null @@ -1,36 +0,0 @@ - - - - #includeTemplate($model.weblog "standard_head") - Search: $model.term | $model.weblog.name - - - #includeTemplate($model.weblog "standard_header") -
-
-
-

Search

- - #if($utils.isNotEmpty($model.errorMessage)) - - #elseif($model.hits > 0) - #set($firstHit = $model.offset + 1) - #set($lastHit = $model.offset + $model.limit) - #if($lastHit > $model.hits)#set($lastHit = $model.hits)#end - -

Posts

- #set($pager = $model.getWeblogEntriesPager()) - #includeTemplate($model.weblog "_post_list") - #elseif($utils.isNotEmpty($model.term)) - - #end -
-
-
- #includeTemplate($model.weblog "standard_footer") - - diff --git a/app/src/main/webapp/themes/minima/tags.vm b/app/src/main/webapp/themes/minima/tags.vm deleted file mode 100644 index 70590b3744..0000000000 --- a/app/src/main/webapp/themes/minima/tags.vm +++ /dev/null @@ -1,22 +0,0 @@ - - - - #includeTemplate($model.weblog "standard_head") - #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end | $model.weblog.name - - - #includeTemplate($model.weblog "standard_header") -
- #includeTemplate($model.weblog "standard_footer") - - diff --git a/app/src/main/webapp/themes/minima/theme.css b/app/src/main/webapp/themes/minima/theme.css deleted file mode 100644 index 02800395a7..0000000000 --- a/app/src/main/webapp/themes/minima/theme.css +++ /dev/null @@ -1,1377 +0,0 @@ -/*! - * Minima for Apache Roller - * - * Compiled from Minima (https://github.com/jekyll/minima, commit 4de3223), auto skin. - * - * The MIT License (MIT) - * - * Copyright (c) 2016-present Parker Moore and the minima contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -:root { - --minima-brand-color: #818181; - --minima-brand-color-light: #e7e7e7; - --minima-brand-color-dimmed: #656565; - --minima-brand-color-dark: #414141; - --minima-site-title-color: #414141; - --minima-heading-color: #111111; - --minima-text-color: #414141; - --minima-background-color: #fdfdfd; - --minima-code-background-color: #f6f8fa; - --minima-link-base-color: #1e69d8; - --minima-link-visited-color: #154895; - --minima-link-hover-color: #414141; - --minima-border-color-01: #e7e7e7; - --minima-border-color-02: #dadada; - --minima-border-color-03: #414141; - --minima-table-text-color: #3f3f3f; - --minima-table-zebra-color: #f6f6f6; - --minima-table-header-bg-color: #efefef; - --minima-table-header-border: #dfdfdf; - --minima-table-border-color: #e7e7e7; -} - -.highlight .err { - color: #e3d2d2; - background-color: #a61717; -} -.highlight .c { - color: #9c9996; -} -.highlight .cm { - color: #9c9996; -} -.highlight .cp { - color: #9c9996; -} -.highlight .c1 { - color: #9c9996; -} -.highlight .cs { - color: #9c9996; - font-style: italic; -} -.highlight .gd { - color: #e25050; -} -.highlight .gd .x { - color: #e25050; -} -.highlight .ge { - font-style: italic; -} -.highlight .gh { - color: #999999; -} -.highlight .gi { - color: #3f993f; -} -.highlight .gi .x { - color: #3f993f; -} -.highlight .go { - color: #888888; -} -.highlight .gp { - color: #555555; -} -.highlight .gr { - color: #aa0000; -} -.highlight .gs { - font-weight: bold; -} -.highlight .gt { - color: #aa0000; -} -.highlight .gu { - color: #aaaaaa; -} -.highlight .k { - color: #cf222e; -} -.highlight .kc { - color: #cf222e; -} -.highlight .kd { - color: #cf222e; -} -.highlight .kp { - color: #cf222e; -} -.highlight .kr { - color: #cf222e; -} -.highlight .kt { - color: #445588; -} -.highlight .n { - color: #111111; -} -.highlight .na { - color: #097e39; -} -.highlight .nb { - color: #cf222e; -} -.highlight .bp { - color: #999999; -} -.highlight .nc { - color: #097e39; -} -.highlight .ne { - color: #990000; -} -.highlight .nf { - color: #2c7d74; -} -.highlight .ni { - color: #097e39; -} -.highlight .nn { - color: #097e39; -} -.highlight .no { - color: #a61154; -} -.highlight .nt { - color: #b81e63; -} -.highlight .nv { - color: #752a75; -} -.highlight .vc { - color: #752a75; -} -.highlight .vg { - color: #752a75; -} -.highlight .vi { - color: #752a75; -} -.highlight .o { - color: #0842a0; -} -.highlight .ow { - color: #0842a0; -} -.highlight .m { - color: #005a99; -} -.highlight .mf { - color: #005a99; -} -.highlight .mh { - color: #005a99; -} -.highlight .mi { - color: #005a99; -} -.highlight .il { - color: #005a99; -} -.highlight .mo { - color: #005a99; -} -.highlight .s { - color: #914d08; -} -.highlight .s1 { - color: #914d08; -} -.highlight .s2 { - color: #914d08; -} -.highlight .sb { - color: #914d08; -} -.highlight .sc { - color: #914d08; -} -.highlight .sd { - color: #914d08; -} -.highlight .se { - color: #914d08; -} -.highlight .sh { - color: #914d08; -} -.highlight .si { - color: #914d08; -} -.highlight .sr { - color: #009926; -} -.highlight .ss { - color: #0842a0; -} -.highlight .sx { - color: #914d08; -} -.highlight .w { - color: #bbbbbb; -} -.highlight .lineno, .highlight .gl { - color: #9c9996; -} -.highlight .hll { - background-color: #ffffcc; -} - -@media (prefers-color-scheme: dark) { - :root { - --minima-brand-color: #999999; - --minima-brand-color-light: #a6a6a6; - --minima-brand-color-dimmed: #858585; - --minima-brand-color-dark: #2b2b2b; - --minima-site-title-color: #a6a6a6; - --minima-heading-color: #bbbbbb; - --minima-text-color: #959595; - --minima-background-color: #181818; - --minima-code-background-color: #222222; - --minima-link-base-color: #5691cd; - --minima-link-visited-color: #80bbff; - --minima-link-hover-color: #959595; - --minima-border-color-01: #2b2b2b; - --minima-border-color-02: #a6a6a6; - --minima-border-color-03: #999999; - --minima-table-text-color: #959595; - --minima-table-zebra-color: #222222; - --minima-table-header-bg-color: #323232; - --minima-table-header-border: #3e3e3e; - --minima-table-border-color: #2b2b2b; - } - .highlight .err { - color: #e3d2d2; - background-color: #8c2121; - } - .highlight .c { - color: #8a8a8a; - } - .highlight .c1 { - color: #8a8a8a; - } - .highlight .cm { - color: #8a8a8a; - } - .highlight .cp { - color: #8a8a8a; - } - .highlight .cs { - color: #8a8a8a; - font-style: italic; - } - .highlight .gd { - color: #d85a5a; - } - .highlight .gd .x { - color: #d85a5a; - } - .highlight .ge { - font-style: italic; - } - .highlight .gh { - color: #999999; - } - .highlight .gi { - color: #4ec64e; - } - .highlight .gi .x { - color: #4ec64e; - } - .highlight .go { - color: #888888; - } - .highlight .gp { - color: #555555; - } - .highlight .gr { - color: #f07178; - } - .highlight .gs { - font-weight: bold; - } - .highlight .gt { - color: #f07178; - } - .highlight .gu { - color: #aaaaaa; - } - .highlight .k { - color: #d85a7b; - } - .highlight .kc { - color: #d85a7b; - } - .highlight .kd { - color: #d85a7b; - } - .highlight .kp { - color: #d85a7b; - } - .highlight .kr { - color: #d85a7b; - } - .highlight .kt { - color: #ffcb6b; - } - .highlight .n { - color: #c7d1d8; - } - .highlight .na { - color: #11a69f; - } - .highlight .nb { - color: #d85a7b; - } - .highlight .bp { - color: #999999; - } - .highlight .nc { - color: #11a69f; - } - .highlight .ne { - color: #990000; - } - .highlight .nf { - color: #5ab780; - } - .highlight .ni { - color: #11a69f; - } - .highlight .nn { - color: #11a69f; - } - .highlight .no { - color: #9d99e6; - } - .highlight .nt { - color: #de3581; - } - .highlight .nv { - color: #9680b1; - } - .highlight .vc { - color: #9680b1; - } - .highlight .vg { - color: #9680b1; - } - .highlight .vi { - color: #9680b1; - } - .highlight .o { - color: #bcd890; - } - .highlight .ow { - color: #bcd890; - } - .highlight .m { - color: #9d99e6; - } - .highlight .mf { - color: #9d99e6; - } - .highlight .mh { - color: #9d99e6; - } - .highlight .mi { - color: #9d99e6; - } - .highlight .il { - color: #9d99e6; - } - .highlight .mo { - color: #9d99e6; - } - .highlight .s { - color: #baa94a; - } - .highlight .s1 { - color: #baa94a; - } - .highlight .s2 { - color: #baa94a; - } - .highlight .sb { - color: #baa94a; - } - .highlight .sc { - color: #baa94a; - } - .highlight .sd { - color: #baa94a; - } - .highlight .se { - color: #baa94a; - } - .highlight .sh { - color: #baa94a; - } - .highlight .si { - color: #baa94a; - } - .highlight .sr { - color: #009926; - } - .highlight .ss { - color: #3c90f5; - } - .highlight .sx { - color: #baa94a; - } - .highlight .w { - color: #eeffff; - } - .highlight .lineno, .highlight .gl { - color: #8a8a8a; - } - .highlight .hll { - background-color: #373730; - } -} -html { - font-size: 16px; -} - -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - -/** - * Basic styling - */ -body { - font: 400 16px/1.5 -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif; - color: var(--minima-text-color); - background-color: var(--minima-background-color); - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - display: flex; - min-height: 100vh; - flex-direction: column; - overflow-wrap: break-word; -} - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -div.highlight, -figure.highlight { - margin-bottom: 15px; -} - -hr { - margin-top: 30px; - margin-bottom: 30px; -} - -/** - * `main` element - */ -main { - display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ -} - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: 14px; -} - -/** - * Lists - */ -ul, ol { - margin-left: 30px; -} - -li > ul, -li > ol { - margin-bottom: 0; -} - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - color: var(--minima-heading-color); - font-weight: 500; -} - -/** - * Links - */ -a { - color: var(--minima-link-base-color); - text-decoration: none; -} -a:visited { - color: var(--minima-link-visited-color); -} -a:hover { - color: var(--minima-link-hover-color); - text-decoration: underline var(--minima-brand-color); - text-underline-offset: 3px; -} -.social-media-list a:hover { - text-decoration: none; -} -.social-media-list a:hover .username { - text-decoration: underline; -} - -/** - * Blockquotes - */ -blockquote { - color: var(--minima-brand-color); - border-left: 4px solid var(--minima-border-color-01); - padding-left: 15px; - font-size: 1.05rem; - font-style: italic; -} -blockquote > :last-child { - margin-bottom: 0; -} -blockquote i, blockquote em { - font-style: normal; -} - -/** - * Code formatting - */ -pre, -code { - font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace; - background-color: var(--minima-code-background-color); -} -@media screen and (max-width: 600px) { - pre, - code { - font-family: monospace; - } -} - -pre { - padding: 8px 12px; - font-size: 15px; - line-height: 1.4; - color: var(--minima-heading-color); - overflow-x: auto; -} -pre > code { - display: inline-block; - width: 100%; -} - -div.highlight, figure.highlight { - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; -} -div.highlight pre, figure.highlight pre { - margin: 0; -} -div.highlight table, div.highlight tbody, div.highlight th, div.highlight tr, div.highlight td, figure.highlight table, figure.highlight tbody, figure.highlight th, figure.highlight tr, figure.highlight td { - margin: 0; - padding: 0; - border: 0; -} -div.highlight .lineno, div.highlight .gl, figure.highlight .lineno, figure.highlight .gl { - text-align: right; -} - -figure.highlight table { - margin: -8px -12px -14px; -} -figure.highlight td.gutter { - border-right: 1px solid var(--minima-border-color-01); -} -figure.highlight td.code { - width: 100%; -} - -code.highlighter-rouge { - padding: 1px 5px; - font-size: 14px; - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; -} - -/** - * Wrapper - */ -.wrapper { - max-width: 800px; - margin: 0 auto; - padding: 0 30px; -} -@media screen and (max-width: 600px) { - .wrapper { - padding-right: 18px; - padding-left: 18px; - } -} - -/** - * Clearfix - */ -.wrapper:after { - content: ""; - display: table; - clear: both; -} - -/** - * Icons - */ -.orange { - color: #f66a0a; -} - -.grey { - color: #828282; -} - -.svg-icon { - width: 1.25em; - height: 1.25em; - display: inline-block; - fill: currentColor; - vertical-align: text-bottom; - overflow: visible; -} - -/** - * Tables - */ -table { - margin-bottom: 30px; - width: 100%; - text-align: left; - color: var(--minima-table-text-color); - border-collapse: collapse; - border: 1px solid var(--minima-table-border-color); -} -table tr:nth-child(even) { - background-color: var(--minima-table-zebra-color); -} -table th, table td { - padding: 10px 15px; -} -table th { - background-color: var(--minima-table-header-bg-color); - border: 1px solid var(--minima-table-header-border); -} -table td { - border: 1px solid var(--minima-table-border-color); -} -@media screen and (max-width: 800px) { - table { - display: block; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } -} - -/** - * Site header - */ -.site-header { - position: relative; - width: 100%; - min-height: 55.95px; - line-height: 54px; - background-color: var(--minima-background-color); - border-top: 5px solid var(--minima-border-color-03); - border-bottom: 1px solid var(--minima-border-color-01); -} - -.site-title { - font-size: 1.625rem; - font-weight: 300; - letter-spacing: -1px; - margin-bottom: 0; - float: left; -} -@media screen and (max-width: 600px) { - .site-title { - padding-right: 45px; - } -} -.site-title, .site-title:visited { - color: var(--minima-site-title-color); -} - -.site-nav { - float: right; - border: none; - background-color: inherit; -} -.site-nav label[for=nav-trigger], .site-nav #nav-trigger { - display: none; -} -.site-nav .nav-item { - color: var(--minima-text-color); -} -.site-nav .nav-item:not(:last-child) { - margin-right: 15px; -} -@media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 9px; - right: 18px; - background-color: var(--minima-background-color); - border: 1px solid var(--minima-border-color-01); - border-radius: 5px; - text-align: right; - } - .site-nav label[for=nav-trigger] { - display: block; - float: right; - width: 36px; - height: 36px; - cursor: pointer; - } - .site-nav .menu-icon { - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 18px; - text-align: center; - } - .site-nav .menu-icon > svg path { - fill: var(--minima-border-color-03); - } - .site-nav #nav-trigger ~ .nav-items { - clear: both; - display: none; - } - .site-nav #nav-trigger:checked ~ .nav-items { - display: block; - padding-bottom: 5px; - } - .site-nav #nav-trigger:checked ~ .nav-items .nav-item { - margin-left: 20px; - padding: 5px 10px; - } - .site-nav .nav-item { - display: block; - margin-right: 15px; - padding: 5px 0; - color: var(--minima-text-color); - line-height: 1.5; - } -} - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid var(--minima-border-color-01); - padding: 30px 0; -} - -.footer-heading { - font-size: 1.125rem; - margin-bottom: 15px; -} - -.feed-subscribe .svg-icon { - padding: 5px 5px 2px 0; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper, -.social-links { - font-size: 0.9375rem; - color: var(--minima-brand-color-dimmed); -} - -.footer-col { - margin-bottom: 15px; -} - -.footer-col-1, -.footer-col-2 { - width: calc(50% - 30px / 2); -} - -.footer-col-3 { - width: calc(100% - 30px / 2); -} - -@media screen and (min-width: 800px) { - .footer-col-1 { - width: calc(35% - 30px / 2); - } - .footer-col-2 { - width: calc(20% - 30px / 2); - } - .footer-col-3 { - width: calc(45% - 30px / 2); - } -} -@media screen and (min-width: 600px) { - .footer-col-wrapper { - display: flex; - } - .footer-col { - width: calc(100% - 30px / 2); - padding: 0 15px; - } - .footer-col:first-child { - padding-right: 15px; - padding-left: 0; - } - .footer-col:last-child { - padding-right: 0; - padding-left: 15px; - } -} -/** - * Page content - */ -.page-content { - padding: 30px 0; - flex: 1 0 auto; -} - -.page-heading { - font-size: 2rem; -} - -.post-list-heading { - font-size: 1.75rem; -} - -.post-list { - margin-left: 0; - list-style: none; -} -.post-list > li { - margin-bottom: 30px; -} - -.post-meta { - font-size: 14px; - color: var(--minima-brand-color-dimmed); -} - -.post-link { - display: block; - font-size: 1.5rem; -} - -/** - * Posts - */ -.post-header { - margin-bottom: 30px; - padding-bottom: 18px; - text-align: center; - border-bottom: 1px solid var(--minima-border-color-01); -} - -.post-meta .bullet-divider { - padding-inline: 15px; -} -.post-meta .meta-label { - font-weight: 600; -} -.post-meta .force-inline { - display: inline; -} -.post-meta .force-inline::before { - content: "\2022"; - padding-inline: 5px; -} -.post-meta .post-authors { - margin-top: 3px; -} - -.post-title, -.post-content h1 { - margin-bottom: 10px; - font-size: 2.625rem; - font-weight: 400; - letter-spacing: -1px; - line-height: 1.15; -} -@media screen and (min-width: 800px) { - .post-title, - .post-content h1 { - font-size: 2.625rem; - } -} - -.post-content { - margin-bottom: 30px; -} -.post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6 { - margin-top: 30px; -} -.post-content h2 { - font-size: 1.75rem; -} -@media screen and (min-width: 800px) { - .post-content h2 { - font-size: 2rem; - } -} -.post-content h3 { - font-size: 1.375rem; -} -@media screen and (min-width: 800px) { - .post-content h3 { - font-size: 1.625rem; - } -} -.post-content h4 { - font-size: 1.25rem; -} -.post-content h5 { - font-size: 1.125rem; -} -.post-content h6 { - font-size: 1.0625rem; -} - -.comments-disabled-message { - text-align: center; - font-weight: 300; -} - -.social-media-list { - display: table; - margin: 0 auto; -} -.social-media-list li { - float: left; - min-width: 45px; - min-height: 45px; - text-align: center; - margin: 5px 10px 5px 0; -} -.social-media-list li:last-of-type { - margin-right: 0; -} -.social-media-list li a { - display: block; - padding: 10px 12px; - border: 1px solid var(--minima-border-color-01); -} -.social-media-list li a:hover { - border-color: var(--minima-border-color-02); -} - -/** - * Pagination navbar - */ -.pagination { - display: table; - margin: 0 auto; - list-style-type: none; -} -.pagination li { - float: left; - margin: 0 3px; - min-width: 45px; - min-height: 45px; - text-align: center; -} -.pagination li a { - display: block; - text-decoration: none; - border: 1px solid var(--minima-border-color-01); -} -.pagination li a:hover { - border-color: var(--minima-border-color-02); -} -.pagination li a, .pagination li div { - min-width: 41px; - padding: 10px 12px; - text-align: center; - box-sizing: border-box; -} -.pagination li div { - border: 1px solid transparent; -} -.pagination li div.pager-edge { - color: var(--minima-border-color-01); - border: 1px dashed; -} -.pagination li div.current-page { - font-weight: bold; -} - -/** - * Task-lists - */ -.task-list { - margin-left: 0; - padding-left: 18px; -} - -.task-list-item { - list-style-type: none; -} -.task-list-item-checkbox { - position: relative; - margin-right: 9px; - margin-left: -15px; - appearance: none; - border: 8px solid var(--minima-border-color-01); - vertical-align: text-top; - z-index: -1; -} -.task-list-item-checkbox::after { - position: absolute; - top: -8px; - left: -3px; - width: 4px; - height: 10px; - content: ""; - border: solid transparent; - border-width: 0 2px 2px 0; - transform: rotate(45deg); -} -.task-list-item-checkbox:checked::after { - border-color: var(--minima-border-color-03); -} - -/** - * Grid helpers - */ -@media screen and (min-width: 800px) { - .one-half { - width: calc(50% - 30px / 2); - } -} - -/** - * Apache Roller additions - * - * Everything below this point is not part of upstream Minima. It styles the - * markup that Roller generates (comments, comment form, search) and the few - * extra pieces this port adds, using Minima's own variables and spacing. - */ -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -/* Hamburger icon: inline SVG instead of Minima's Font Awesome glyphs */ -@media screen and (max-width: 600px) { - .site-nav .menu-icon { - display: flex; - align-items: center; - justify-content: center; - height: 36px; - padding-top: 0; - line-height: 1; - } - .site-nav .menu-icon .icon-close { - display: none; - } - .site-nav #nav-trigger:checked ~ label[for=nav-trigger] .menu-icon .icon-open { - display: none; - } - .site-nav #nav-trigger:checked ~ label[for=nav-trigger] .menu-icon .icon-close { - display: block; - } -} - -/* Inline code in Roller entries (Minima targets kramdown's code.highlighter-rouge) */ -.post-content :not(pre) > code { - padding: 1px 5px; - font-size: 14px; - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; -} - -/* Home */ -.home-about { - margin-bottom: 30px; -} -.home-about > :last-child { - margin-bottom: 0; -} -.page-description { - color: var(--minima-brand-color-dimmed); -} -.post-excerpt { - margin-top: 5px; -} -.post-excerpt > :last-child { - margin-bottom: 0; -} -.post-list-empty { - color: var(--minima-brand-color-dimmed); -} -.rss-subscribe { - margin-top: 30px; -} - -/* Pagination: allow longer labels than Minima's page numbers */ -.pager { - margin-bottom: 30px; -} -.pagination li a, .pagination li div { - min-height: 45px; -} -.pagination a.current-page { - font-weight: normal; -} -@media screen and (max-width: 600px) { - .post .pagination { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 6px 0; - } -} - -/* Entry footer: category, tags, edit link */ -.post-footer { - margin-bottom: 30px; - font-size: 14px; - color: var(--minima-brand-color-dimmed); -} -.post-footer > * + * { - margin-left: 15px; -} -.post-tags a { - display: inline-block; - padding: 0 8px; - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; -} -.post-tags a + a { - margin-left: 3px; -} -.post-tags a:hover { - border-color: var(--minima-border-color-02); - text-decoration: none; -} - -/* Comments (markup from Roller's #showWeblogEntryComments and #showWeblogEntryCommentForm) */ -.post-comments { - padding-top: 30px; - border-top: 1px solid var(--minima-border-color-01); -} -.post-comments br { - display: none; -} -.comments-head { - margin-bottom: 15px; - font-size: 1.375rem; - font-weight: 500; - color: var(--minima-heading-color); -} -.comments { - margin-bottom: 30px; -} -.comments:not(:has(.comment)) { - display: none; -} -.comment { - margin-bottom: 15px; - padding-left: 15px; - border-left: 4px solid var(--minima-border-color-01); -} -.comment-details { - font-size: 14px; - color: var(--minima-brand-color-dimmed); -} -.comment-details b { - font-weight: 600; -} -.comment .entrypermalink { - margin-left: 5px; -} -.comments-form ul { - margin-left: 0; - list-style: none; -} -.comments-form li { - margin-bottom: 15px; -} -.comments-form label.desc { - display: block; - margin-bottom: 3px; - font-size: 14px; - font-weight: 600; -} -.comments-form label.choice { - margin-left: 5px; -} -.comments-form li.info { - font-size: 14px; - color: var(--minima-brand-color-dimmed); -} -.comments-form .status, -.comments-form .error { - display: block; - margin-bottom: 15px; - color: var(--minima-brand-color-dimmed); -} -.comments-form .error { - color: #c62828; -} - -/* Form controls */ -input:not([type]), -input[type=text], -input[type=search], -textarea { - box-sizing: border-box; - max-width: 100%; - padding: 6px 10px; - font: inherit; - color: var(--minima-text-color); - background-color: var(--minima-background-color); - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; -} -.comments-form input.text, -.comments-form textarea { - width: 100%; -} -input:not([type]):focus, -input[type=text]:focus, -input[type=search]:focus, -textarea:focus { - border-color: var(--minima-border-color-03); - outline: none; -} -button, -input[type=button], -input[type=submit] { - padding: 6px 14px; - font: inherit; - color: var(--minima-text-color); - background-color: var(--minima-code-background-color); - border: 1px solid var(--minima-border-color-01); - border-radius: 3px; - cursor: pointer; -} -button:hover, -input[type=button]:hover, -input[type=submit]:hover { - border-color: var(--minima-border-color-02); -} - -/* Search */ -.search-form { - display: flex; - gap: 10px; - margin-bottom: 15px; -} -.search-form input { - flex: 1; -} -.social-links { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - gap: 15px; -} -.social-links .social-media-list { - margin: 0; -} -.footer-search input { - width: 200px; - padding: 4px 10px; - font-size: 14px; -} - -/* Archives */ -.archive-year { - margin-top: 30px; -} -.post-content .archive-year:first-child { - margin-top: 0; -} -.archive-list > li { - display: flex; - align-items: baseline; - margin-bottom: 5px; -} -.archive-list .post-meta { - flex: 0 0 60px; -} -.archive-list .post-link { - display: inline; - font-size: 1.125rem; -} -.archive-terms { - margin-left: 0; - list-style: none; -} -.archive-terms li { - display: inline-block; - margin: 0 15px 5px 0; -} diff --git a/app/src/main/webapp/themes/minima/weblog.vm b/app/src/main/webapp/themes/minima/weblog.vm deleted file mode 100644 index 1bd3ce0f6a..0000000000 --- a/app/src/main/webapp/themes/minima/weblog.vm +++ /dev/null @@ -1,45 +0,0 @@ - - - - #includeTemplate($model.weblog "standard_head") - #if($model.tags && $model.tags.size() > 0) - #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end | $model.weblog.name - #elseif($model.weblogCategory) - $model.weblogCategory.name | $model.weblog.name - #elseif($utils.isNotEmpty($model.weblog.tagline)) - $model.weblog.name | $model.weblog.tagline - #else - $model.weblog.name - #end - - - #includeTemplate($model.weblog "standard_header") -
-
-
- #set($pager = $model.getWeblogEntriesPager()) - #if($model.tags && $model.tags.size() > 0) -

Tagged #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end

- #elseif($model.weblogCategory) -

$model.weblogCategory.name

- #if($utils.isNotEmpty($model.weblogCategory.description)) -

$model.weblogCategory.description

- #end - #elseif(!$pager.prevLink && $utils.isNotEmpty($model.weblog.about)) -
$model.weblog.about
- #end -

Posts

- #includeTemplate($model.weblog "_post_list") - #if($model.tags && $model.tags.size() > 0) -

subscribe via Atom

- #elseif($model.weblogCategory) -

subscribe via Atom

- #else -

subscribe via Atom

- #end -
-
-
- #includeTemplate($model.weblog "standard_footer") - - diff --git a/app/src/main/webapp/themes/terminal/archives.vm b/app/src/main/webapp/themes/terminal/archives.vm new file mode 100644 index 0000000000..6fcde02476 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/archives.vm @@ -0,0 +1,60 @@ + + + + #includeTemplate($model.weblog "standard_head") + Archives :: $model.weblog.name + + +
+ #includeTemplate($model.weblog "standard_header") +
+
+

Archives

+ + + #set($archiveEntries = $model.weblog.getRecentWeblogEntries("nil", 100)) + #set($currentYear = "") + #foreach($archiveEntry in $archiveEntries) + #set($entryYear = $utils.formatDate($archiveEntry.pubTime, "yyyy")) + #if($entryYear != $currentYear) + #if($currentYear != "") + + #end + #set($currentYear = $entryYear) +

$entryYear

+
    + #end +
  • + + $archiveEntry.title +
  • + #end + #if($currentYear != "") +
+ #end + + #set($archiveCategories = $model.weblog.weblogCategories) + #if($archiveCategories.size() > 0) +

Categories

+ + #end + + #set($archiveTags = $model.weblog.getPopularTags(-1, 50)) + #if($archiveTags.size() > 0) +

Tags

+ + #end +
+
+ #includeTemplate($model.weblog "standard_footer") +
+ + diff --git a/app/src/main/webapp/themes/terminal/custom.css b/app/src/main/webapp/themes/terminal/custom.css new file mode 100644 index 0000000000..3e1ee119c9 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/custom.css @@ -0,0 +1,3 @@ +/* Add weblog-specific Terminal overrides here. */ +/* To change the color scheme, set --background, --foreground, and --accent on + :root (see https://panr.github.io/terminal-css/ for ready-made schemes). */ diff --git a/app/src/main/webapp/themes/terminal/entry.vm b/app/src/main/webapp/themes/terminal/entry.vm new file mode 100644 index 0000000000..ab11f01abd --- /dev/null +++ b/app/src/main/webapp/themes/terminal/entry.vm @@ -0,0 +1,73 @@ + + + + #includeTemplate($model.weblog "standard_head") + $model.weblogEntry.title :: $model.weblog.name + + +
+ #includeTemplate($model.weblog "standard_header") +
+ #set($entry = $model.weblogEntry) +
+

+ $entry.title +

+ + + #if($entry.tags && $entry.tags.size() > 0) + + #end + +
+ $entry.displayContent +
+ + #set($pager = $model.getWeblogEntriesPager()) + #if($pager.prevLink || $pager.nextLink) + + #end + +
+ #showWeblogEntryComments($entry) + #showWeblogEntryCommentForm($entry) +
+
+
+ #includeTemplate($model.weblog "standard_footer") +
+ + diff --git a/app/src/main/webapp/themes/terminal/footer.vm b/app/src/main/webapp/themes/terminal/footer.vm new file mode 100644 index 0000000000..20cf744d85 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/footer.vm @@ -0,0 +1,13 @@ + diff --git a/app/src/main/webapp/themes/casper/head.vm b/app/src/main/webapp/themes/terminal/head.vm similarity index 62% rename from app/src/main/webapp/themes/casper/head.vm rename to app/src/main/webapp/themes/terminal/head.vm index 021dcb8933..1a8d6bb8db 100644 --- a/app/src/main/webapp/themes/casper/head.vm +++ b/app/src/main/webapp/themes/terminal/head.vm @@ -1,9 +1,10 @@ - + + - - - - + + + + #showAutodiscoveryLinks($model.weblog) #showMetaDescription() #showAnalyticsTrackingCode($model.weblog) diff --git a/app/src/main/webapp/themes/terminal/header.vm b/app/src/main/webapp/themes/terminal/header.vm new file mode 100644 index 0000000000..85dcefd660 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/header.vm @@ -0,0 +1,36 @@ +## Terminal's header.html, logo.html, menu.html, and mobile-menu.html. +## The mobile menu uses
instead of Terminal's menu.js. +#set($navPages = []) +#foreach($navPage in $model.weblog.templates) + #if($navPage.navbar && !$navPage.hidden && $navPage.link) + #set($added = $navPages.add($navPage)) + #end +#end +
+
+ + +
+ +
diff --git a/app/src/main/webapp/themes/terminal/post-list.vm b/app/src/main/webapp/themes/terminal/post-list.vm new file mode 100644 index 0000000000..a6af5e3de7 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/post-list.vm @@ -0,0 +1,60 @@ +## Terminal's list.html and pagination.html, shared by the weblog, tag, and +## search templates. Expects $pager to be set by the including template. +#set($listEntries = []) +#foreach($day in $pager.entries.keySet()) + #foreach($entry in $pager.entries.get($day)) + #set($added = $listEntries.add($entry)) + #end +#end +
+ #foreach($entry in $listEntries) +
+

+ $entry.title +

+ + #if($entry.tags && $entry.tags.size() > 0) + + #end +
+ #if($utils.isNotEmpty($entry.summary)) + $entry.transformedSummary + #else +

$utils.truncateNicely($utils.removeHTML($entry.transformedText), 240, 300, "…")

+ #end +
+ +
+ #end + #if($listEntries.size() == 0) +

No posts here yet.

+ #end + #if($pager.prevLink || $pager.nextLink) + + #end +
diff --git a/app/src/main/webapp/themes/terminal/preview.png b/app/src/main/webapp/themes/terminal/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..054d2f6115f9604fc567faf94d131a712c45bf25 GIT binary patch literal 103956 zcmdSB1yEewmoG|$1W51z!2<-h;1(c|#@!u)ySvAL#)7*B4Fq>5!M$;JYusJ$PQL%l zo0<2fZq==ty7f+V(#h#QviDhgt)DCil$RAlMIk^zKtMp15QiutAUrNXKzQ^O=^@x7 zfUZ}F@Bjfp0wSdBHoY_F?Dk@U;K_mQN}0W@9Fl!2@@qHy>USl$al+<9!?C)_xIyn} zRkgoJ*)1cpEbr|VdEUpDSUq~3^!3%!Ex-5P9B~?(slPXy=|D-3lmimDz~VD~Gc%~L znVO`70S{sf&C`#?UlD@92YGJKlBrpJn`am;8UufI;%= zF~U3W=kNAd_@DQ`J3f9x-4%I&fPn<&?$7pjB;ft;j&#HKo(f=^|KkCFzVvs;#^j*x zi~n-KpAY|@ftRxa5AlEKl8Y5{x#u$=lK`)=l}ERGV>MII~gbB2_a#JzriF{&r(rSn%X(B;z6afrr(=L zjt(Eb89kR}D9+0=?p_+D_Ma626N_L*{m-+#K-2Lr9A(*GF#Dh?{Hy%fQnOJSb%o@S z$u8W-+s#1YD}3r)reG}3RdAwt%iE}@X&vq(BLBO0kS4AwN23ahn(TV?*);mL8*+#38VvTcahPmXEirc zi?`lCqW_-upz^7(sIEuWd1e1>F-~@EgP{_6Y8K?}lCL?B#BcC|7!A4RECxLLs?EE8 z+x~iut`|kV6dZc->7OZ=$zx)cMQXY|vrBsL?D?*!L$mI@Ktoee;=D@Q5I% zB?HTE>d=SFr44a@(bO4?-s9V~jG`zd)h|ZACF5Yu%A9;{b>)@{_~@@|Pr^_v%(y*1 z<9dI4be1YF1zCfG*7y1_Ijo3~$oXGWPXooZ6~93luKHLjh=m}(!@?lf+6L>ptT)tA zOomeqTQSCn=0mA+0|f;|G$x|v31_AFCGrxTit_U8f)uQLEG3M)=KrjUPY1oPD2uyi z(xWL~y>muQGmbv#xOGy4BkCA!neSu8sd(b+sw@skhW2^X zZZw@fUb(j8CL-^VK#Ne}c;oQ$*yR;bL?X?cN|?`c#~39(s_aqq`kIV5hbxhr=yE*TW|91N9YTVK7U4D3Yyo7Itq%(X$4u< zdHJ?s|4KN-)EN2rE*efW0oSMFK5Fa!OCZ`(Q}kMQjic476)Z*Crogye(FO__n0Huj zI+@<9aX;6ZvUV$)ZS^P84!_G=yLw`N|vQx7nk7&8=N~hfEPF12a(Y3}rtXrDE z%ii8wd$CYJscJLv-1WjlGrgil%ZS7-D6#h9Lunm_MVHYNoFo9_hY)ev4*~mb!h4s z*U?rEm}5wm`EW4Qf-WdwP5OFn!etQ4+`W*>LmKh#3UHf&`vkn97(YKc`_7o?$CxV$ zG5J;mUiaOeTPZ!ktV!_-p9{qy*_Y;h6Ops4u{PGa9uSj;=1+57t0iI(2oV~lL{C1Z zg1v6*u;h_qd@ibSw9`lif1-L~bn+AIOMfQr-+bDd3IWiJ+u{VLv>%4+475L|4g0S4 zGRGkvdR`7Dl!E()|77uW=G*p@ePta5IyzeHqYZJ%)!_TA%2B&LcwM4}5EF5W1j`k(zmsE@|A&}%NLSLC^HMXJ3mp@E7#QRHrnukf$<`sV?B@wQCg76Wx zkbF6!0E%6j_ERfX&FH9ikmcbXX@Z4~x~n z+bG(J?>sSMDo;&B!p3WG_hWrMMZ*9APe`N^N8-_Od14}p2`sFO^-B^(SDMx}ithagnHKJww$(DeFjDn4UkVyeFKDtf;ot&;OL@4FS z-;oJ;N4O#-RCD~;nCi(Vc=JB`)Jplp3a7F!kmfMvI^}(Nuav_{fxr5Bn&tWi9aDDv zi#w<*@?G^kOc+4OTk$LQ%mT5XG5CveQk=T3?^pG^K)+On+@AP59i`$$@>HZj8xT?RdwI(1^M|( z@H|h@b(Q~lpr<=O*+o%u(5L7ORT&j`%?fJ!Eq7{~zHj%g@2jg#PwK8byH+w;gLpSf z=OJxy%Ukldu%oks1gyh~p><>GfMjiW`VSjAvY(MjH$l~hbQEj@=c}6a)p6PyvA+9V z$#A%8ZytUywAY9lF&4+fZoROPVV{y9tIgA=`5D_If!r^FEW-2W%LraBpAOdNX`3dh9hx1swu`Jt zNp21fOm!{fV1-R(-fqH!bLf@7Kza*0sU1CGXJ#rmb(uN2RLiTI-lEwL4wGeQtaBWV z*=^-#vZm>gxcNG>;(o~m>up|Ae){M97dsF2O&WZ4MNg96buEDfjko^VYd}O*NrT{Q z$H+wZUG#o?SgkH1qaz~62&_TC9^Auz>cQe<%T0kgrS&sRR=`~0!q#sd4q55?8 zuDpPzyfa>p_dKyhT0S!F=;8#OC-ArP>6pb6oh#TZ^FZwVtE6ZQ2RQ)GlqQhL!tQ0i zx#b(K_wk*9DFxU}U6>q`Sr%>zu}I`Td)cU~I`%P8bbf-f9dV9M$m}X zHuZT!v*7TywuVBiar1uNbDiJBKE~H}>t7OuCiV=+?E`WlZ;$J1y?+(lDxzo>kEr#Z z&SCR8r%mQvL&)`Y-2$fvbUj1=Qi^74?e63g78 zl@n|Ks!}_Uo}l6)3*Y!4@8rdk3xC~Cw^12W`!#qtu=9`CXT3^c%*`?7sew*m^EKia!VAc0d9k9X@&qR$?|WS@KZ=<5iXum^AxbTsY+Fer_eE)OKV+#+%F zwRKSpFIsyCH}^#emRw%_ClU(yVnFIzSqh}Ic!KuGba$ehU}vR@^5FLa6J-zx!#@Mg z-p8uO;=JW89j)0`7m;yHBh-p7H5So;`?%8e$Zqf+<)*H1;TltG&#`<~(mQ`p71%0) z;yl5+n^|B=LC%!&(xG|iqR;JKd_Pz~?cUUkE2DXvL;-noxnb2GquzJA_v!UXVE|gH zW0ul+;Nd4Oi+s8oHh+OjYWlj#Q&zm&O3Mr`BTQUTjm6cT<0)$@ zsylC!X{5G}4Of*6KD6*W6z{gg8tT2ihPJxHAIn%N&h~CsI**Ot!cmhe^~#mf)a1eh zd5*F78{9V)Hd*GY&*jtx-w?hrZ1%Sgo1JKE2MJVfmN%;?C*yh&)jM|wpn||tS5G!W zi<*T(Vw1*Pt@E@v45x`1YqkL|gpX$*{}2nkWI5k}H+yTRjgB$%JU#bkX&^GMYVSlK zPpVpZPMw+ecd8ujRNu)%p}fv%M)Rg79?7<{1|@Tg*+H7PTz84;N-9(gber2%BJ%29 zH(S>R0Dff6OkK8VUfaRSO&YbQYbrNO1!9aZHB(Zc;++k8+Kc@HQPu2;RP-!%TmE=` zIzoH=)ot?UZEAboxmH~JY+vvVHrbQfJ+Qmhl%GHGJ?Fy2pAHrO=9Y-zB?q%WVw3D0 zjetVhvk3uOOfIx!dDC%@a^7Jcy>Bdn%BF$iO&)Yq8y$o3W-pg7|LRQoLF(<;5PZGr zQ#l%j0)UhNa#SzpDlR z#GF`j?WOq#K5caf!|--PR4>~68lI6TpWMP+E&K)fa5+gI@!d{~Cartukf64y%`N^^ zSV5r=c9o?iy%^b6h)Au3#CLQLxeH=y!9Q8%S1$Tjhx`uzs@8ZIk!<6AicTN= zs%|2gLe6!BmTXrt$1DbIR zd(q=-)p{%B%99|FHA?ves&yc%> zYO){UQ10{chD7A3CxPOk3e;p9Xdqa@_7O&o(eu-Fi`RjJ>#@TleS2M2OtBF7Z^3ni zipU#fDh!m8$53&QvOZFZLl}hg$qn|N;lN+x8B@Q$t#*{EeHc|`Yi-c=NW=K{M4glz z>jf5NMqBuG=)>!H~9QTy{Yaf7>*FmhPq9F_+&)8Xq z$AoXq8cM?Kn|&r_Kt81D3L+z)7mvbln9$#FnD2hHx`pk+7SKtu^(zdfT)Mw zhJc4o$N~;(=3eA*4=SyANMV*CzkUCg^L~JPE!H;@qmJl$u7xL$qxL#+LvIh)1LodJ zXpG6uQC-YWs%j|#_&?r81;CqtV0DMj28xX>?;oipK+vY4xrN*oMo&j20~w2<O|& z!7pL@8$mm5=|_>X;2UZjOpJXr-BOo}TE?^1UK;wM0D)A{pl24X%oiy1*SzA-pR!gO zX5Htw5cgdMIsW-A^M zv}8o$mkRv3QLyofzj{qh58uzYDKet=!%&dWl{{!|rPAq?5~tZGfp0dPEy zF+X2(PTlgOS+-I3z3$i%x0`*3*pKNEb4gA51yB3%a3g9eeKjpcgX8K0ZJdo(>G=)Z6yp;O z`_l8D@;zM0mlXqlyY_p^*?PEO+MmVaOze{+I2yUX4ndBSF@K-#+|5$!3d`pa6BeIm?}KMTa$=b()z#3(A^qx1S_9bErIU zb-A85qmiQ|-u~o>R(TuVO|tXtC*wJcd1)nYgF*0HviRW#SHOU{qTD%gUT@gd@ixJzIS_muTqks5jv$(jp! z*y{#CYoar9G%_Q`aI!D)BLE_cWThjuO9B6#lK4b!pm?-J)zIk8Sub(w%u!3LUq`^QIlu=D`f5&z93{_ib`3lwDUe4PE1pI?UoZolwqsADJgJJ4Vu zh5HL5d_*He3N#z~PDBJQ_YwAZ55vdg((5$}Nd6Dm@&CwxSwjEqwHN;fqwe3ln}2)% zPY%q#c{l&|{vSE=zfaVEGhzQkogMObB!TzezZbW)w>M4umTYfrkyB7eNlGfKs5m=2 z+p{O(;F72+YPWdpjTg?uDYEJ>=?e=BQ*}^ruQelyh=^cfV&dYiM@H_*)l&)x2uy2g zT5N5l`F@Xyj{fTBmynPkAtB-YfOe=$TuQ2bsRaisGAZec1v+rJE;Kw37VnyKWw{94 zHU@=Q?Ctj^8X6ixn{Bll%t}9f`W>LT-;GU8BH-2Lg^P=Mb-kZS>NVkWy{pF0-)KEk zBL~S?&ghZs$;ru4%8}MDRVUtmd}#?wMG*9zC#&k~#3)?w6>(n}|?M#&mUPRK<(|!K@ zMJ7aMb#+aXcb|`0zO=NIiHQl1S+}CJ6jcADn3NO@(*4E7S2Q#iLb%)>C-LSZ+6geJ zI3}N)jisj=J3kaMJHyf@%@${C7h+>$y#nE{k{H(pv!x(z>Lw;sK9Gm+ItMWmLp7$w9$+(-w#`MYDybM99laW+4~)%O-<$K?*&#lVLq~9Wsdqr! z^5D@Ew3lzf0b|=5&6P`A@V&oXDR8a(x$UH;My^?HGsnTjHToT$o}YiNyIVp*2vcNe zi38<^bagiQtvOaetNX>E_u(>S06OuV&*c%Cs+klnGZne7Z?i-cmGAXjHHFx>8?&FB z+g2{itH`5TW_gwqMY{DaG0=x!guT7IeY9(dj2|K#Xj~HT#b}(}mh~rboo~b68g+&9 zx!Qyg@aKD0+o%<3n_ovhdlnqapfQ^%hR(-V&*Ny4o11<3&HG@nY1?T646xF2g6C|L z?Ih{@{oOS)TYgrSQFmlJ+S!>>uI%Z_(P|1kHJ9mmkq$PMbV)^plZ%TkxY}%k_TJ>~ zOttMo)9vLk9C*+b<>l9houu?Vy)#V|=yP)*jAkdgyE{5e`X*Uy7`q$MNoLbHtrIIN zPt%3Ia9T}bVB-HKR?*XIw%)F~yS+}(QV${I`Zm)O0W~l%(9W%|lXaB=E75gd;5dPn zbnnM(ax$OmK5N=Up;o6Ayg;LTYkQl}`b$7S02oJ4P*9Fk@#Ysr4TZyA=H`=axRtRn zhknb~!9g{z*mu}s<$>)Uo}Trxu4{#C92^|wrm#AnTVB_$Qo~MvRALiz^UHp&1?@Vg zJW9c?B2-e&+2LV_gT>!s--wpb&{4hDc;`645%Rgr9B< zwf_FCe|Lk3i0Ic~ct2eZpIGogeg0g#M4K4yD* zwW7C<>(b@$mbKov+5iR?meQd^hm^gor6o)}yv`K=^ZA0@ICxtic41-RH7}3#bj9Xw z`DscbzatOPz}=&#SG+u@+iPG$2+;w^Qk89dhmb@JHs%C8r+W)Vy>>QIXrvVCYI8; zZkF#3N`2oA#?ae5dh&d^nLLz$<7#K>S(6X*{+#1NnR9(;sCE6gmXuWQNG?o6Q_~?J z`K`0ba+}0#F(+r$Q*`3PlOy-5QN#VFN38*2iz(iBpGB%|7LJe68yw+x73MedXCN*Y z>YO`M_|6mXCyEzdF);LnBy!siZ;rryu5W!ICv&rxVEyuWU(LEM^ta1NAY2SPAIKWF zwY3MJl2Xy1r{xNL{`|QeBGR11cMePOEz+#?I9zVm)lKz0+aYE%k=7b-U$QglPu0*? zu5g-CWKk%^rk0aV3Mw5nVXffvAM}{V}$O0O83^PE1V1@H*{3wrmb~O&-DUJ8=Jmkg&~%q2+W92 zpFV*^?Q(V|hDNHYEPr#DOFE-&6IZM~HZ(-?=EFO0@7pg=_vlp%FmQ12-@1vHvw66? z_op>~SO=NXq^}DGJ3l-77AEy(*Qh6CuFiQIMDhASlBrp`@Ai112Aio)ol}DQo;awi zcb_jIC%5MdGn49a@ozriUoOo!BW}8^z`Rig(%S)|TmywBy#c6}9-zKd7`U|Pgh5pfMw^SS> z^7H4@wT`(zph%8!^)*>tts@k?ycS2JdG|9X&B1ug0|{*Kf!!H`#6(DRN)*3G-%B2z z+U(v~6l4@)eh;UP=M!Lk*paFSg$2t%+tNCf9f4FgI`1Ix>mq_#^^QszPlxgsN@61FBFo5oqW z&2CGjUhU_Gogur!mAwmM-x&0omY3UuA)`A&=5>*8P&Kx<0EpQ#=}V?%U|4p!)wH%Q z3?J-lI#5-cc{3`A23zk>T3cHa3nQ7^apvZwN_1re7-iPv-leKaQc`kiYU;s*2Mb=up)oNy z=UAf^R7~>P%{CXt8-w3}`dl5(P8|p1GJ0HWkc}W^OeyVn`=gSMgOm+|LrhEzmcS;a ztQ-wJIYmw6UklvWnL2Lu59M~*IPNkbAgH!o7Qk4@&umN1vXNCbGD4n8#B-3E4bbmaKn-@Uzm!e{S`%E!m2p{e0}y_>ud zZ)UR)qN1V_fJSUkS0W`P;eK=?G4p5%)JnIz*KaLuE)HGy=hvt)o;*R6kdi9asgJ$n z^|^7|`vKt32$;kYgZ2=7HmKR+FCoK@Z#*6+T}3+eK<<(Z+9Xj@mX=l#iK+hCMHpO~F(CoOLVIT?A2&CKf|=QmloVpY?DM8C4#(?^dU^}JaZFkoT9^u;NQs7# zH2N;w^=nnJ>pYYp?We+}r|l+rWA|&9uex?>T75u)HY zs2O~K_~voT`v5d_0(Q5Rj?li4)6-Ls$rD+f>9}I0Q{N_-LpOG2i^14(Vad0LoiUIK z-vu9gk~@ex<`6j|7*b$@|)6y}Bk!Nl$?Or6Wf6)bKvh z&)lE&hMj2ZaR~u&aFBj9F_CaytOnBXGqzSlnU`m)X=&A)oD$?5A)z3Fluk#_rzN6M zyZNQXl#-T?q0Vcq3<^cU1mN-{N*j51$4V~Q%xo7Qizp*2>qkxz2^N+x1Wku1Q2-Ar zt|TR;v^^K*WfD_hGR$6 z*49Qvl~?DUmn^kjyltNkykrxTbU?wJnwjC)IV&}w>0SuxUk<3Pw{rC7K2W}P6TSWtgCt2F?9 zcjg)ov$j@;BE$U{?*JRA+G?upc4ytCFhAd8FkPtl{xL2dDPHFbA8D(;fGsCLQa>Gx zd?=rSw8ch78kK_>Qw)Mi_DIfPA$|GsaLvfL_IAI!x7T%RG_cmSlW(eGbA$l)l1La* z<#JZ+%eKjSZd#L{pYP@EZD?T7)6;u=d=zijPHbsq)wesS{a$K&uhEk<3%b05{rSrm zR#rBUHtBlkkB%?4;>AQY>uPE)(tPjm+3h}LHbSA$9|b=?_&BoFxomoX3R-2Am7bnn zSZFOSKe#FpC7Z@`Jh3+iOA}O6R(_6xV&Fr}spYZHN7K|Kps6{H6N589KVR&tzu_ka zVb?=Ve48l4>@qp{9h^x{QgV1`h?bt-`{H2eXd>*_<T~OG&VKKqoL>W zmcJ-?z0w(GIJ`)0WN26pcqRaZ#>O$UOiF-M)VcS@rZ0XVCbq`GiOGTasrC*GdA><}+>9%Hz4dvdRT5{~xu&Q26ubhY)2gwV55ErSeEKGc&Iv`qb>~Y%oMS zyB{IakwC;4F@-^CUURqYo$4_qa^q<-a!~p~@21NG&TioS- zxRiwjl2!Cw2-194S86}3q-4v9A?un_YBhCKaZ>Rsj#)}FC?T1aifaCoC*u=@U%{JN z#YI)B+R{7yf|rqz#>V&VbvXqE+L3cL!DrR`I9=U6SPI6*er?;GvOQ7@45l+x*6Zsg z0qCUqB&mnT$9&F5%JqA3VPP=8XLti?g0|;Z9Yehz5!Pj;%7IQa0f?u^sRcTE*!D!R zUadp>WLv!Xw=NSYECqbIG_EycV=OEzYp*Y{g@yflI`zXN!^_LdcjwIubF((1s%rGK zbgZ@&@bZ&+0U9gLnSp`5n@e0*@`aNjE05BamXEV=Y_h2)kVh zh>_VThL&`}-94TlB4T4Ydd8*=TV_ad*~?$#y>1~-YXWdlWOsM>z3^wm$B#wB2-aNY z7#ZH~7=OG!BK0vl(>CLfpyk8_K)FILO@J|_dWx;Otn8>irYa)@8c#HN;vC;@a5yiP zpI3BO(dn0_RM6f&ze=m8sw!JN)75Ynl>q_hg+orEp?D>&rzam(u=v`z_3G23r#{F1 zZ>Zru&+r(htDL2-W6<}18|2$(`ZCKVbGt0Ju@G7&>9>kKC*)kN*7F77Kz$LGBMpu8in};J6VpIN6m2yn_VkmFLD{?+9J|Uss-q+~dyu4>yQ@t=47Y%ofWp$A?1OFrMFI`<-H#ax2 zu`VNG_J1k-dVGxnS z7oN&5Fb~J2=Ut~dA)RK;KAL@9lU=Zhd#Sf7!9hWLv$b;odgdr$_(&Eb@AK0X7QWU_ z)lJ1?*6zEYNl~1fR1f(2)ve*cZfAFLq7;@eV)_i_nYFcG-^_4!RyINV8}i|?aZDVX z(_>4SQZCQ+j+^RXP@Y-Oe+8*967Dv<1N(4QJ9;XQ^{5sBrUjqvd|=yW1%(Y z#EglJIriWzcp&riSm2%V`4@?pZN5B(F-}OV6xx( zF1;Ob^bi&{u+lF0uFy&t-rwI3>Ye?@qL7I>vu=Z(tM9Mfi*KakoSb24Z{3ep13}!G ziMKl107`<3iwopC7bm9|ap5HuWewifRh5-8gi^LZp^1!)1nl6w|0K-(fC`wnC!$AI&V`PQMK!#F*kM$dCudwY8@9mU1_c}n-Sro)An zu0Rq(CG>H>yQu|Nmytnbn|1C80fflUF91`)Lvy-YDHl*;*i6~s#i1eMB_hNLK!vU! zUENW+Z(8FRG_Vd>KlCSZL?}c6Ab)6o2(-W3n;U@{OJPNW<&{o3G*Vu6uQnuO<23-L z5A-}_+!ln)ohg^NnO;GQQ z(N83l$9D{a+`TniIpgODcf(7HNF~7|(<`h9neqT zq>&0Z`CbgBKmp(;IITW=Ff}<%#OoBkIsFal{~W)}X;X1eoyWa4Q!EVB$c4edaOkAf z8Q@{3Cr(K^48iTwm+%1~BqhYhV<@Bvd|Ss|w_TovZL1Zjcc1i`TU$4NxVzEwy)G0< zN{LH@nUv$;TzZdr?$0;E`w|=hwFSr)kUdZX`ntP$xVQq++#Qb{KuxT5>DM%A_D3hZ zyDi(VHFUkJb^LvUI6Kc5%b>&SvZH?IYIGRcj)Q{($}_C1tE8l&#$(N*)xNY884Yc3 zrkWX(=gh_HW}|d>yV|g_?gW@01F8J=UhPM;N(93Z;Njm~9?!V3{~ZJYt5MhQF9H5& zxBfF~7>2OaW}iFv)(ny0gks5{ARq%ygr+noP5LFZKgRvu><$b93%tof2^7AR$b zjW%re{e!m4%LZXYJXk;yUb1`m@L{|S8@xY>`qirv_uh5ja~Y9m7}|D{y-(aPu9;$U z9qoz$Sk*vRcCuLS-qsYh4(EMqGg|{xq)>c5|8@f&-ZK(G{hRjS&;@v{_w||J-DE9T zi~tE~l$#W4l;?zkHFZBe7^@^LqvH)9Na_4W3r`1CW{5B*mKGGSlaZAI!=`ZKkdhv3Y`ueB?}RfBDWZwcs2Mpp zsJSM(x}fJgv1cQ(!z*^&!0y~MH@7m+6Sd7ZI~}s>HAq;Xr=_KJK6O@ARlT`Mg!gad z(dL2sYbaJdJ~*)hmVwJ$C}a0PcQ+?1tBFr1SN<>{Zh(Q+d3fwwikxMeId4{qQC@l| zt17>yqQ=3&)zDNwScq~gH?>hvPypP_zwT~~jeU=ps%l49%}6i8y=xUhWK7KF zXr7~mq=kiM&x|2Jn$FIrj~_qw^3ojqC@w8M+A_>b#alMjH9fDZLtrj2up3pNDIv>{ zn~oL73>@djE#DSrFCF<@cf77nx@V@Iex7<@*@1{g86sn`#*W+|N3#q|In#%sidI0x4WAX7kAF025hgS)Yvm) z9Ayj1pyp=1%un;hpjLaM5hkR@u5WM8>=*$F1E{#6Po6w}{QC9lWo@&4$M3J2f6dI) zmt`ym(?n%uWdSJTqmt{Tpn!SaAS)wb&d$m3HiWNAB$$zw_VDbCiI o$B)9!YC`Z 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

>vfFkf9= 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 literal 0 HcmV?d00001 diff --git a/app/src/main/webapp/themes/terminal/search.vm b/app/src/main/webapp/themes/terminal/search.vm new file mode 100644 index 0000000000..cfe4608df1 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/search.vm @@ -0,0 +1,34 @@ + + + + #includeTemplate($model.weblog "standard_head") + Search: $model.term :: $model.weblog.name + + +

+ #includeTemplate($model.weblog "standard_header") +
+

Search

+ + #if($utils.isNotEmpty($model.errorMessage)) + + #elseif($model.hits > 0) + #set($firstHit = $model.offset + 1) + #set($lastHit = $model.offset + $model.limit) + #if($lastHit > $model.hits)#set($lastHit = $model.hits)#end + + #set($pager = $model.getWeblogEntriesPager()) + #includeTemplate($model.weblog "_post_list") + #elseif($utils.isNotEmpty($model.term)) + + #end +
+ #includeTemplate($model.weblog "standard_footer") +
+ + diff --git a/app/src/main/webapp/themes/terminal/tags.vm b/app/src/main/webapp/themes/terminal/tags.vm new file mode 100644 index 0000000000..2a9eadda59 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/tags.vm @@ -0,0 +1,18 @@ + + + + #includeTemplate($model.weblog "standard_head") + #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end :: $model.weblog.name + + +
+ #includeTemplate($model.weblog "standard_header") +
+

Posts for: #foreach($tagName in $model.tags)#$tagName#if($foreach.hasNext), #end#end

+ #set($pager = $model.getWeblogEntriesPager()) + #includeTemplate($model.weblog "_post_list") +
+ #includeTemplate($model.weblog "standard_footer") +
+ + diff --git a/app/src/main/webapp/themes/terminal/theme.css b/app/src/main/webapp/themes/terminal/theme.css new file mode 100644 index 0000000000..52a1adf9a4 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/theme.css @@ -0,0 +1,1462 @@ +/*! + * Terminal for Apache Roller + * + * Ported from Terminal (https://github.com/panr/hugo-theme-terminal, commit 8ef994c): + * assets/css/main.css, header.css, menu.css, footer.css, post.css, + * pagination.css, buttons.css, terms.css, and code.css, with the default + * scheme from terminal.css. Fira Code is not bundled; the font stack uses it + * when the reader has it installed and falls back to the system monospace font. + * + * The MIT License (MIT) + * + * Copyright (c) 2024 panr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* ---- main.css ---- */ + +:root { + --background: #1a170f; + --foreground: #eceae5; + --accent: #eec35e; + --font-size: 1rem; + --line-height: 1.54em; + --radius: 0; +} + +html { + box-sizing: border-box; +} + +*, +*::before, +*::after { + box-sizing: inherit; + word-break: break-word; +} + +body { + margin: 0; + padding: 0; + font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; + font-size: var(--font-size); + line-height: var(--line-height); + background-color: var(--background); + color: var(--foreground); + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -webkit-overflow-scrolling: touch; + text-size-adjust: 100%; +} + +h1 { + font-size: calc(var(--font-size) * 1.45); + letter-spacing: 0; +} + +h2 { + font-size: calc(var(--font-size) * 1.35); + letter-spacing: 0; +} + +h3 { + font-size: calc(var(--font-size) * 1.15); + letter-spacing: 0; +} + +h4, +h5, +h6 { + font-size: calc(var(--font-size) * 1); + letter-spacing: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p, +ul, +ol, +img, +figure, +video, +table { + margin: 25px 0; +} + +a { + color: var(--accent); +} + +button { + position: relative; + font: inherit; + font-weight: bold; + text-decoration: none; + text-align: center; + background: transparent; + color: var(--accent); + padding: 5px 18px; + border: 4px solid var(--accent); + border-radius: var(--radius); + transition: background 0.15s linear; + appearance: none; + cursor: pointer; + outline: none; +} + +button:hover { + background: color-mix(in srgb, var(--accent) 15%, transparent); +} + +button:focus-visible, +a:focus-visible { + outline: 1px solid var(--accent); + outline-offset: 2px; +} + +fieldset { + display: inline-block; + border: 2px solid var(--foreground); + border-radius: calc(var(--radius) * 1.6); + padding: 10px; +} + +fieldset *:first-child { + margin-top: 0; +} + +fieldset input, +fieldset select, +fieldset textarea, +fieldset label, +fieldset button { + margin-top: calc(var(--line-height) * 0.5); + width: 100%; +} + +label { + display: inline-block; +} + +label input { + margin-top: 0; +} + +input, +textarea, +select { + background: transparent; + color: var(--foreground); + border: 1px solid var(--foreground); + border-radius: var(--radius); + padding: 10px; + font: inherit; + appearance: none; +} + +input[type="checkbox"] { + width: auto; +} + +input:focus-visible, +input:active, +textarea:focus-visible, +textarea:active, +select:focus-visible, +select:active { + border-color: var(--accent); + outline: 1px solid var(--accent); + outline-offset: 2px; +} + +input:active, +textarea:active, +select:active { + box-shadow: none; +} + +select { + background-image: linear-gradient( + 45deg, + transparent 50%, + var(--foreground) 50% + ), + linear-gradient(135deg, var(--foreground) 50%, transparent 50%); + background-position: calc(100% - 20px), calc(100% - 1em); + background-size: + 5px 5px, + 5px 5px; + background-repeat: no-repeat; + padding-right: 40px; +} + +select option { + background: var(--background); +} + +input[type="checkbox"] { + vertical-align: middle; + padding: 10px; + box-shadow: inset 0 0 0 3px var(--background); +} + +input[type="checkbox"]:checked { + background: var(--accent); +} + +img { + display: block; + max-width: 100%; + border: 8px solid var(--accent); + border-radius: var(--radius); + padding: 8px; + overflow: hidden; +} + +img.left { + margin-right: auto; +} + +img.center { + margin-left: auto; + margin-right: auto; +} + +img.right { + margin-left: auto; +} + +figure { + width: fit-content; +} + +figure.left { + margin-right: auto; +} + +figure.center { + margin-left: auto; + margin-right: auto; +} + +figure.right { + margin-left: auto; +} + +figure img, +figure video { + margin-bottom: 0; +} + +figure figcaption { + background: var(--accent); + color: var(--background); + text-align: center; + font-size: var(--font-size); + font-weight: normal; + margin-top: -8px; + padding: 0 8px; + border-radius: 0 0 var(--radius) var(--radius); +} + +figure figcaption p:first-child { + margin-top: 0; +} + +ul, +ol { + margin-left: 4ch; + padding: 0; +} + +ul ul, +ul ol, +ol ul, +ol ol { + margin-top: 0; +} + +li::marker { + color: var(--accent); +} + +ul li, +ol li { + position: relative; +} + +code, +kbd { + font-family: + "Fira Code", + Monaco, + Consolas, + "Ubuntu Mono", + monospace !important; + font-feature-settings: normal; + background: color-mix(in srgb, var(--foreground) 5%, transparent); + border: 1px solid var(--code-border); + padding: 1px 6px; + margin: 0 2px; + font-size: calc(var(--font-size) * 0.95); +} + +kbd { + border-top: 1px solid color-mix(in srgb, var(--accent) 25%, transparent); + border-left: 1px solid var(--accent); + border-right: 1px solid var(--accent); + border-bottom: 4px solid var(--accent); + border-radius: 4px; +} + +code code { + background: transparent; + padding: 0; + margin: 0; +} + +pre { + tab-size: 4; + background: color-mix(in srgb, var(--foreground) 5%, transparent) !important; + color: var(--foreground); + padding: 20px 10px; + font-size: calc(var(--font-size) * 0.95) !important; + overflow: auto; + border-radius: var(--radius); + border: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); +} + +pre code { + background: none !important; + margin: 0; + padding: 0; + border: none; +} + +sup { + line-height: 0; +} + +abbr { + position: relative; + text-decoration-style: wavy; + text-decoration-color: var(--accent); + cursor: help; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.25em; +} + +mark { + background: color-mix(in srgb, var(--accent) 45%, transparent); + color: var(--foreground); +} + +blockquote { + position: relative; + border-top: 1px solid var(--accent); + border-bottom: 1px solid var(--accent); + margin: 0; + padding: 25px; +} + +blockquote::before { + content: ">"; + display: block; + position: absolute; + left: 0; + color: var(--accent); +} + +blockquote p:first-child { + margin-top: 0; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +table { + table-layout: auto; + border-collapse: collapse; +} + +table, +th, +td { + border: 2px solid var(--foreground); + padding: 10px; +} + +th { + border-style: solid; + color: var(--foreground); + text-align: left; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +hr { + width: 100%; + border: none; + background: var(--accent); + height: 2px; +} + +/* One Heading Size */ +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3, +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + font-size: 1.4rem; + line-height: 1.3; + margin: 20px 0; +} + +.headings--one-size ~ h1:first-child, +.headings--one-size ~ h2:first-child, +.headings--one-size ~ h3:first-child, +.headings--one-size ~ h4:first-child, +.headings--one-size ~ h5:first-child, +.headings--one-size ~ h6:first-child { + margin-top: 20px; +} + +blockquote.twitter-tweet { + position: relative; + background: var(--background); + font: inherit; + color: inherit; + border: 1px solid var(--accent); + padding-top: 60px; +} + +blockquote.twitter-tweet a { + color: var(--accent); + text-decoration: underline; +} + +blockquote.twitter-tweet::before { + content: "> From X:"; + position: absolute; + top: 20px; + left: 20px; + color: var(--accent); + font-weight: bold; +} + +.container { + display: flex; + flex-direction: column; + padding: 40px; + max-width: 864px; + min-height: 100vh; + border-right: 1px solid color-mix(in srgb, var(--accent) 10%, transparent); +} + +.container.full, .container.center { + border: none; + margin: 0 auto; +} + +.container.full { + max-width: 100%; +} + +.content { + display: flex; + flex-direction: column; +} + +.hidden { + display: none; +} + +.__h_video { + position: relative; + overflow: visible !important; + height: auto !important; + padding-bottom: 0 !important; +} + +.__h_video a { + position: relative; + display: block; + width: 100%; +} + +.__h_video a img { + width: 100%; +} + +.__h_video a .play { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 60px; + height: 60px; +} + +iframe[src*="youtube.com"] { + border: 8px solid var(--accent) !important; + padding: 8px !important; +} + +@media (max-width: 684px) { + :root { + --font-size: 0.95rem; + } + + .container { + padding: 20px; + } +} + +@media print { + .container { + display: initial; + } + + .content { + display: initial; + } +} + +/* ---- header.css ---- */ + +.header { + display: flex; + flex-direction: column; + position: relative; +} + +.header__inner { + display: flex; + align-items: center; + justify-content: space-between; +} + +.header__logo { + display: flex; + flex: 1; +} + +.header__logo::after { + content: ""; + background: repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 10px); + display: block; + width: 100%; + right: 10px; +} + +.header__logo a { + flex: 0 0 auto; + max-width: 100%; + text-decoration: none; +} + +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: var(--accent); + color: var(--background); + font-weight: bold; + padding: 5px 10px; +} + +@media print { + .header { + display: none; + } +} + +/* ---- menu.css ---- */ + +.navigation-menu { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin: 20px 1px; +} + +.navigation-menu__inner { + display: flex; + flex: 1; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; +} + +.navigation-menu__inner > li { + flex: 0 0 auto; + margin-bottom: 10px; + white-space: nowrap; +} + +.navigation-menu__inner > li:not(:last-of-type) { + margin-right: 20px; +} + +.navigation-menu .spacer { + flex-grow: 1 !important; +} + +.menu { + display: flex; + flex-direction: column; + position: relative; + list-style: none; + padding: 0; + margin: 0; +} + +.menu__trigger { + margin-right: 0 !important; + color: var(--accent); + user-select: none; + cursor: pointer; +} + +.menu__dropdown { + display: none; + flex-direction: column; + position: absolute; + background: var(--background); + box-shadow: 0 10px var(--background), -10px 10px var(--background), 10px 10px var(--background); + color: var(--accent); + border: 2px solid var(--accent); + margin: 0; + padding: 10px; + top: 10px; + left: 0; + list-style: none; + z-index: 99; +} + +.open .menu__dropdown { + display: flex; +} + +.menu__dropdown > li { + flex: 0 0 auto; +} + +.menu__dropdown > li:not(:last-of-type) { + margin-bottom: 10px; +} + +.menu__dropdown > li a { + display: flex; + padding: 5px; +} + +.menu--mobile .menu__trigger { + color: var(--accent); + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; + display: none; +} + +.menu--mobile li { + flex: 0 0 auto; +} + +.menu--mobile li:not(:last-of-type) { + margin-bottom: 10px; +} + +.menu--language-selector .menu__trigger { + color: var(--accent); + border: 2px solid; + margin-left: 5px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; +} + +.menu--language-selector .menu__dropdown { + left: auto; + right: 0; +} + +@media (max-width: 684px) { + .navigation-menu { + margin: 0; + } + + .navigation-menu__inner { + flex-direction: column; + align-items: flex-start; + padding: 0; + } + + .navigation-menu__inner li { + margin: 0; + padding: 5px; + } + + .menu--desktop { + display: none; + } + + .menu--mobile .menu__trigger { + display: block; + } + + .menu--mobile .menu__dropdown { + left: auto; + right: 0; + } + + .menu--language-selector .menu__trigger { + display: none; + } +} + +/* ---- footer.css ---- */ + +.footer { + padding: 40px 0; + flex-grow: 0; + opacity: 0.65; +} + +.footer__inner { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; + max-width: 100%; +} + +.footer a { + color: inherit; +} + +.footer .copyright { + display: flex; + flex-flow: row wrap; + flex: 1; + align-items: center; + justify-content: center; +} + +.footer .copyright--user { + margin: auto; + text-align: center; +} + +.footer .copyright > *:first-child:not(:only-child) { + margin-right: 10px; +} + +.footer .copyright span { + white-space: nowrap; +} + +@media (max-width: 900px) { + .footer__inner { + flex-direction: column; + } +} + +/* ---- post.css ---- */ + +.index-content { + margin: 25px 0; +} + +.framed { + border: 1px solid var(--accent); + padding: 20px; +} + +.framed *:first-child { + margin-top: 0; +} + +.framed *:last-child { + margin-bottom: 0; +} + +.posts { + width: 100%; +} + +.post { + width: 100%; + text-align: left; + padding: 30px 0; +} + +.post:not(:last-of-type) { + border-bottom: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); +} + +.post-meta { + font-size: inherit; + margin-bottom: 10px; + color: color-mix(in srgb, var(--foreground) 65%, transparent); +} + +.post-meta > *:not(:first-child)::before { + content: "::"; + display: inline-block; + margin: 0 8px; +} + +.post-title { + position: relative; + color: var(--accent); + margin-top: 0 !important; + margin-bottom: 15px !important; + padding-bottom: 15px; + border-bottom: 3px dotted var(--accent); + text-decoration: none !important; +} + +.post-title::after { + content: ""; + position: absolute; + bottom: 2px; + display: block; + width: 100%; + border-bottom: 3px dotted var(--accent); +} + +.post-title a { + text-decoration: none; +} + +.post-tags { + display: block; + margin-bottom: 20px; + font-size: inherit; + color: var(--accent); +} + +.table-of-contents { + margin: 40px 0; +} + +.post-content { + margin-top: 25px; +} + +.post-cover { + margin: 25px 0; +} + +.post ul { + list-style: none; +} + +.post ul li:not(:empty)::before { + content: "-"; + position: absolute; + left: -20px; + color: var(--accent); +} + +.post--regulation h1 { + justify-content: center; +} + +.post--regulation h2 { + justify-content: center; + margin-bottom: 10px; +} + +.post--regulation h2 + h2 { + margin-top: -10px; + margin-bottom: 20px; +} + +.hanchor { + position: absolute; + color: var(--accent); + text-decoration: none; + margin-left: 10px; + visibility: hidden; +} + +h1:hover .hanchor, +h2:hover .hanchor, +h3:hover .hanchor, +h4:hover .hanchor, +h5:hover .hanchor, +h6:hover .hanchor { + visibility: visible; +} + +.footnotes { + color: color-mix(in srgb, var(--foreground) 50%, transparent); +} + +.footnotes hr { + background: color-mix(in srgb, var(--foreground) 50%, transparent); +} + +@media (max-width: 684px) { + .post-cover { + padding: 10px; + border-width: 10px; + } +} + +/* ---- pagination.css ---- */ + +.pagination { + margin-top: 50px; +} + +.pagination__title { + display: flex; + text-align: center; + position: relative; + margin: 100px 0 20px; +} + +.pagination__title-h { + text-align: center; + margin: 0 auto; + padding: 5px 10px; + background: var(--background); + color: color-mix(in srgb, var(--foreground) 30%, transparent); + font-size: calc(var(--font-size) * 0.8); + text-transform: uppercase; + text-decoration: none; + letter-spacing: 0.1em; + z-index: 1; +} + +.pagination__title hr { + position: absolute; + left: 0; + right: 0; + width: 100%; + margin-top: 15px; + z-index: 0; +} + +.pagination__buttons { + display: flex; + align-items: center; + justify-content: center; + flex-flow: row wrap; + gap: 10px; +} + +.pagination__buttons a { + display: inline-flex; + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: inherit; + padding: 0; + appearance: none; +} + +.button a { + display: flex; + justify-content: center; + flex: 1; + padding: 8px 16px; +} + +.button__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.next .button__icon { + margin-left: 8px; +} + +.prev .button__icon { + margin-right: 8px; +} + +@media print { + .pagination { + display: none; + } +} + +/* ---- buttons.css ---- */ + +.button-container { + display: table; + margin-left: auto; + margin-right: auto; +} + +button, +.button, +a.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 18px; + text-decoration: none; + text-align: center; + font: inherit; + font-weight: bold; + appearance: none; + cursor: pointer; + outline: none; +} + +button.outline, +.button.outline, +a.button.outline { + background: transparent; + box-shadow: none; + padding: 8px 18px; +} + +button.outline :hover, +.button.outline :hover, +a.button.outline :hover { + transform: none; + box-shadow: none; +} + +button.link, +.button.link, +a.button.link { + background: none; + font-size: var(--font-size); +} + +button.small, +.button.small, +a.button.small { + font-size: calc(var(--font-size) * 0.8); +} + +button.wide, +.button.wide, +a.button.wide { + min-width: 200px; + padding: 14px 24px; +} + +a.button.inline { + background: none; + color: var(--accent); + padding: initial; + margin: initial; + border: initial; + font-weight: initial; + text-decoration: none; +} + +a.button.inline:active, +a.button.inline:hover { + background: none; +} + +a.read-more, +a.read-more:hover, +a.read-more:active { + display: inline-flex; + border: none; + background: none; + box-shadow: none; + padding: 0; + max-width: 100%; + text-decoration: none; +} + +/* ---- terms.css ---- */ + +.terms h3 { + font-size: initial; +} + +.terms ul { + list-style: none; +} + +.terms ul li a { + color: var(--accent); +} + +.terms ul li:not(:empty)::before { + content: "-"; + position: absolute; + left: -20px; + color: var(--accent); +} + +/* ---- code.css ---- */ + +:root { + --code-border: color-mix(in srgb, var(--foreground) 10%, transparent); +} + +pre:not(.chroma) { + padding: 10px; +} + +pre.chroma { + margin: 0; + padding: 10px 0; + color: var(--foreground); +} + +pre code { + color: var(--foreground); + border: none; +} + +code { + color: var(--accent); + text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +.highlight { + position: relative; + margin: 20px 0; + border: 1px solid var(--code-border); +} + +.highlight pre { + border: none; +} + +.code-title { + display: flex; + align-items: center; + justify-content: space-between; + background: color-mix(in srgb, var(--foreground) 5%, transparent); + border-bottom: 1px solid var(--code-border); + color: var(--comment); + text-transform:uppercase; + font-size: calc(var(--font-size) * 0.8); + padding: 6px 10px; + line-height: 1; +} + +.copy-button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3px 8px; + text-decoration: none; + text-align: center; + font-size: 13px; + font-weight: 500; + border: 1px solid color-mix(in srgb, var(--accent) 15%, transparent); + appearance: none; + cursor: pointer; + outline: none; +} + +.code-title .copy-button { + z-index: 1; + background: color-mix(in srgb, var(--foreground) 5%, var(--background)); +} + +.code-title:hover .copy-button { + display: inline-block; +} + +.code-title .copy-button:hover { + background: color-mix(in srgb, var(--accent) 10%, var(--background)); +} + +.collapsable-code { + position: relative; + width: 100%; + margin: 20px 0; + border: 1px solid var(--accent); + + .highlight { + margin: 0; + } +} + +.collapsable-code__title { + display: inline-flex; + align-items: center; + flex: 1; + color: var(--accent); + padding: 3px 10px; + font-size: calc(var(--font-size) * 0.9); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.collapsable-code__language { + color: var(--accent); + border: 1px solid var(--accent); + border-bottom: none; + text-transform: uppercase; + padding: 3px 10px; +} + +.collapsable-code summary { + color: var(--accent); + padding: 0 10px; + cursor: pointer; +} + +.collapsable-code summary:hover { + background: color-mix(in srgb, var(--accent) 10%, transparent); +} + +.collapsable-code pre { + margin-top: 0; +} + +.collapsable-code pre::first-line { + line-height: 0; +} + +/* ========================================================================== + Apache Roller additions + ========================================================================== */ + +/* Light variant, used when the reader's system prefers a light color scheme. + Same hues as Terminal's default amber scheme, with the accent darkened to + keep link text readable on a light background. */ +@media (prefers-color-scheme: light) { + :root { + --background: #f6f3eb; + --foreground: #1a170f; + --accent: #8a5a00; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +/* Mobile menu:
in place of Terminal's menu.js */ +.menu--mobile { + display: none; +} +.menu--mobile summary { + list-style: none; +} +.menu--mobile summary::-webkit-details-marker { + display: none; +} +.menu--mobile[open] .menu__dropdown { + display: flex; + top: 40px; + width: max-content; + white-space: nowrap; +} +.navigation-menu a[aria-current="page"] { + text-decoration-style: double; +} +@media (max-width: 684px) { + .menu--mobile { + display: flex; + } + .navigation-menu { + display: none; + } +} + +/* Footer: Roller renders more items than Terminal's two spans, so space them + with a gap instead of the first item's margin */ +.footer .copyright { + column-gap: 1ch; +} +.footer .copyright > *:first-child:not(:only-child) { + margin-right: 0; +} + +.post-list-empty { + color: color-mix(in srgb, var(--foreground) 65%, transparent); +} +.post-meta a { + color: inherit; +} + +/* Entry footer: Roller comments (markup from #showWeblogEntryComments and + #showWeblogEntryCommentForm) styled like Terminal's framed blocks */ +.post-comments { + margin-top: 50px; +} +.post-comments br { + display: none; +} +.post-comments ul li::before, +.post-comments ul li:not(:empty)::before { + content: none; +} +.post-comments ul { + margin-left: 0; +} +.comments-head { + margin: 25px 0; + color: var(--accent); + font-weight: bold; +} +.comments-head::before { + content: "## "; +} +.comments:not(:has(.comment)) { + display: none; +} +.comment { + margin-bottom: 20px; + padding: 10px 20px; + border-left: 2px solid var(--accent); +} +.comment-details { + margin: 10px 0 0; + color: color-mix(in srgb, var(--foreground) 65%, transparent); +} +.comment .entrypermalink { + margin-left: 5px; + text-decoration: none; +} +.comments-form { + border: 1px solid var(--accent); + padding: 0 20px 20px; +} +.comments-form li { + margin-bottom: 15px; +} +.comments-form label.desc { + display: block; + margin-bottom: 5px; +} +.comments-form label.choice { + margin-left: 8px; +} +.comments-form input.text, +.comments-form textarea { + width: 100%; +} +.comments-form input[type="checkbox"] { + border-color: var(--accent); +} +.comments-form li.info { + color: color-mix(in srgb, var(--foreground) 65%, transparent); +} +.comments-form .status, +.comments-form .error { + display: block; + margin: 15px 0; +} +.comments-form .error { + color: #ff6b6b; +} +@media (prefers-color-scheme: light) { + .comments-form .error { + color: #b3261e; + } +} +input[type="submit"], +input[type="button"] { + font: inherit; + font-weight: bold; + background: transparent; + color: var(--accent); + padding: 5px 18px; + border: 4px solid var(--accent); + border-radius: var(--radius); + cursor: pointer; +} +input[type="submit"]:hover, +input[type="button"]:hover { + background: color-mix(in srgb, var(--accent) 15%, transparent); +} + +/* Search */ +.search-form { + display: flex; + align-items: center; + gap: 10px; + margin: 25px 0; +} +.search-form input { + flex: 1; + min-width: 0; +} +.search-prompt { + color: var(--accent); + font-weight: bold; +} + +/* Archives (Terminal's terms.html list style) */ +.archives h2 { + color: var(--accent); +} +.archive-list { + list-style: none; +} +.archive-list time { + margin: 0 10px 0 0; +} diff --git a/app/src/main/webapp/themes/minima/theme.xml b/app/src/main/webapp/themes/terminal/theme.xml similarity index 74% rename from app/src/main/webapp/themes/minima/theme.xml rename to app/src/main/webapp/themes/terminal/theme.xml index 0182141ed5..070770ddbd 100644 --- a/app/src/main/webapp/themes/minima/theme.xml +++ b/app/src/main/webapp/themes/terminal/theme.xml @@ -1,12 +1,12 @@ - + - minimaMinima - A port of Minima, Jekyll's default theme: a clean, single-column blog with system fonts and automatic light and dark modes. - Parker Moore and the Minima contributors (ported for Apache Roller) + terminalTerminal + A port of Terminal, the retro console theme for Hugo: monospace type, a dark background with amber accents, and a light variant for readers who prefer one. + panr (ported for Apache Roller) - custom.cssMinima custom stylescustom.csstext/csscustom.cssvelocity + custom.cssTerminal custom stylescustom.csstext/csscustom.cssvelocity @@ -14,7 +14,7 @@ - + - + diff --git a/app/src/main/webapp/themes/terminal/weblog.vm b/app/src/main/webapp/themes/terminal/weblog.vm new file mode 100644 index 0000000000..d81e740507 --- /dev/null +++ b/app/src/main/webapp/themes/terminal/weblog.vm @@ -0,0 +1,33 @@ + + + + #includeTemplate($model.weblog "standard_head") + #if($model.tags && $model.tags.size() > 0) + #foreach($tagName in $model.tags)$tagName#if($foreach.hasNext), #end#end :: $model.weblog.name + #elseif($model.weblogCategory) + $model.weblogCategory.name :: $model.weblog.name + #else + $model.weblog.name + #end + + +
+ #includeTemplate($model.weblog "standard_header") +
+ #set($pager = $model.getWeblogEntriesPager()) + #if($model.tags && $model.tags.size() > 0) +

Posts for: #foreach($tagName in $model.tags)#$tagName#if($foreach.hasNext), #end#end

+ #elseif($model.weblogCategory) +

Posts in: $model.weblogCategory.name

+ #if($utils.isNotEmpty($model.weblogCategory.description)) +
$model.weblogCategory.description
+ #end + #elseif(!$pager.prevLink && $utils.isNotEmpty($model.weblog.about)) +
$model.weblog.about
+ #end + #includeTemplate($model.weblog "_post_list") +
+ #includeTemplate($model.weblog "standard_footer") +
+ + diff --git a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java index 2888d733ec..e4d3aa2bee 100644 --- a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java +++ b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java @@ -51,12 +51,12 @@ public void testThemeAssumptions() throws Exception { assertNotNull( themeManager.getTheme("basic") ); assertNotNull( themeManager.getTheme("basic").getStylesheet() ); assertNull( themeManager.getTheme("frontpage").getStylesheet() ); - assertNotNull( themeManager.getTheme("casper") ); - assertNotNull( themeManager.getTheme("casper").getStylesheet() ); - assertNotNull( themeManager.getTheme("minima") ); - assertNotNull( themeManager.getTheme("minima").getStylesheet() ); + assertNotNull( themeManager.getTheme("hyde") ); + assertNotNull( themeManager.getTheme("hyde").getStylesheet() ); assertNotNull( themeManager.getTheme("papermod") ); assertNotNull( themeManager.getTheme("papermod").getStylesheet() ); + assertNotNull( themeManager.getTheme("terminal") ); + assertNotNull( themeManager.getTheme("terminal").getStylesheet() ); } } From 9c58188e9dda176536c7f7fed97a37cf8521e03a Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Sun, 25 Oct 2026 18:01:12 -0500 Subject: [PATCH 10/11] Measure the publishing time selects once the Advanced panel has settled assertPublishingTimeOnOneLine read the three selects' positions with separate boundingBox calls right after clicking the Advanced toggle, while Bootstrap was still animating the panel open. A layout shift between reads made the selects appear on different lines (y=940, 1014, 1030 in CI) even though they share one flex row. The check now waits for the panel's "collapse show" state and reads all three positions in a single page.evaluate call. --- .../java/org/apache/roller/playwright/BaseIT.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java b/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java index 158f70f208..54f203e25b 100644 --- a/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java +++ b/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -350,10 +351,17 @@ protected void insertMediaFileThroughDialog(String weblogHandle) { */ protected void assertPublishingTimeOnOneLine() { page.locator("a[href='#collapseAdvanced']").click(); + // Bootstrap marks the panel "collapsing" while it animates open and + // "collapse show" once it is done; wait for the layout to settle + page.locator("#collapseAdvanced.collapse.show").waitFor(); assertThat(page.locator("#collapseAdvanced")).isVisible(); - double hours = page.locator("select[name='bean.hours']").boundingBox().y; - double minutes = page.locator("select[name='bean.minutes']").boundingBox().y; - double seconds = page.locator("select[name='bean.seconds']").boundingBox().y; + // read all three positions in one pass, so a scroll or layout shift + // between separate reads can't make them disagree + List tops = (List) page.evaluate("() => ['hours', 'minutes', 'seconds'].map(name =>" + + " document.querySelector(\"select[name='bean.\" + name + \"']\").getBoundingClientRect().top)"); + double hours = ((Number) tops.get(0)).doubleValue(); + double minutes = ((Number) tops.get(1)).doubleValue(); + double seconds = ((Number) tops.get(2)).doubleValue(); org.junit.jupiter.api.Assertions.assertTrue( Math.abs(hours - minutes) < 2 && Math.abs(minutes - seconds) < 2, "publishing time selects should share a line, but sit at y=" + hours + ", " + minutes + ", " + seconds); From ef5c4ec08197fd187c0130c60d7fe3ec9d9cb151 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Sun, 25 Oct 2026 18:03:34 -0500 Subject: [PATCH 11/11] Wait for the Advanced panel's shown event and poll the publishing time layout Replace the wait on Bootstrap's internal collapse classes with the shown.bs.collapse event, the same way the Insert Media File dialog waits for shown.bs.modal, and drop the redundant waitFor. Poll until the hour, minute and second selects share a line instead of measuring once; if they never do, the assertion still reports where they sit. --- .../org/apache/roller/playwright/BaseIT.java | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java b/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java index 54f203e25b..54693bb506 100644 --- a/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java +++ b/it-playwright/src/test/java/org/apache/roller/playwright/BaseIT.java @@ -30,6 +30,7 @@ import com.microsoft.playwright.BrowserType; import com.microsoft.playwright.Page; import com.microsoft.playwright.Playwright; +import com.microsoft.playwright.TimeoutError; import com.microsoft.playwright.Tracing; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; @@ -344,21 +345,36 @@ protected void insertMediaFileThroughDialog(String weblogHandle) { } } + private static final String ADVANCED_PANEL = "#collapseAdvanced"; + private static final String PUBLISHING_TIME_TOPS = "() => ['hours', 'minutes', 'seconds'].map(name =>" + + " document.querySelector(`select[name='bean.${name}']`).getBoundingClientRect().top)"; + /** * Expands the entry editor's advanced settings and checks the publishing * time's hour, minute and second selects sit on one line rather than as * stacked form rows. */ protected void assertPublishingTimeOnOneLine() { - page.locator("a[href='#collapseAdvanced']").click(); - // Bootstrap marks the panel "collapsing" while it animates open and - // "collapse show" once it is done; wait for the layout to settle - page.locator("#collapseAdvanced.collapse.show").waitFor(); - assertThat(page.locator("#collapseAdvanced")).isVisible(); - // read all three positions in one pass, so a scroll or layout shift - // between separate reads can't make them disagree - List tops = (List) page.evaluate("() => ['hours', 'minutes', 'seconds'].map(name =>" - + " document.querySelector(\"select[name='bean.\" + name + \"']\").getBoundingClientRect().top)"); + // the selects only settle into place once Bootstrap has finished + // animating the panel open, so wait for the shown event + page.evaluate("sel => document.querySelector(sel).addEventListener('shown.bs.collapse'," + + " () => window.rollerAdvancedShown = true, {once: true})", ADVANCED_PANEL); + page.locator("a[href='" + ADVANCED_PANEL + "']").click(); + page.waitForFunction("() => window.rollerAdvancedShown === true"); + assertThat(page.locator(ADVANCED_PANEL)).isVisible(); + + // poll until the three selects share a line, retrying the way + // Playwright's own assertions do; a timeout falls through to the + // assertion below, which reports where they ended up + try { + page.waitForFunction("() => { const y = (" + PUBLISHING_TIME_TOPS + ")();" + + " return Math.abs(y[0] - y[1]) < 2 && Math.abs(y[1] - y[2]) < 2; }"); + } catch (TimeoutError e) { + // reported by the assertion below + } + // read all three positions in one pass, so a layout shift between + // separate reads can't make them disagree + List tops = (List) page.evaluate(PUBLISHING_TIME_TOPS); double hours = ((Number) tops.get(0)).doubleValue(); double minutes = ((Number) tops.get(1)).doubleValue(); double seconds = ((Number) tops.get(2)).doubleValue();
- -