diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e43b0f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
diff --git a/Promenade.nnwtheme/Info.plist b/Promenade.nnwtheme/Info.plist
new file mode 100644
index 0000000..db06b88
--- /dev/null
+++ b/Promenade.nnwtheme/Info.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ Name
+ Promenade
+ ThemeIdentifer
+ com.mynameisstuart.themes.promenade
+ CreatorHomePage
+ https://mynameisstuart.com/
+ CreatorName
+ Stuart Breckenridge
+ Version
+ 9
+
+
diff --git a/Promenade.nnwtheme/stylesheet.css b/Promenade.nnwtheme/stylesheet.css
new file mode 100644
index 0000000..4d1cb0b
--- /dev/null
+++ b/Promenade.nnwtheme/stylesheet.css
@@ -0,0 +1,677 @@
+body {
+ margin-left: auto;
+ margin-right: auto;
+
+ word-wrap: break-word;
+ max-width: 44em;
+}
+
+.feedHeader {
+ margin: auto;
+ text-align: center;
+}
+
+.feedHeader img {
+ margin: auto;
+ display: block;
+ padding-top: 1em;
+ padding-bottom: 1em;
+}
+
+a {
+ text-decoration: none;
+ font-weight: bold;
+}
+a:hover {
+ text-decoration: underline;
+}
+.feedlink {
+ font-weight: bold;
+}
+.headerTable {
+ width: 100%;
+ height: 68px;
+}
+
+img {
+ border-radius: 4px;
+}
+
+pre {
+ padding: 5px;
+ border-radius: 4px;
+}
+
+.systemMessage {
+ position: absolute;
+ top: 45%;
+ left: 50%;
+ transform: translateX(-55%) translateY(-50%);
+ -webkit-user-select: none;
+ cursor: default;
+}
+
+:root {
+ --header-table-border-color: rgba(0, 0, 0, 0.1);
+ --header-color: rgba(0, 0, 0, 0.3);
+ --body-code-color: #666;
+ --system-message-color: #cbcbcb;
+ --feedlink-color: rgba(255, 0, 0, 0.6);
+ --article-title-color: #333;
+ --article-date-color: rgba(0, 0, 0, 0.3);
+ --table-cell-border-color: lightgray;
+}
+
+@media(prefers-color-scheme: dark) {
+ :root {
+ --header-color: rgba(94, 158, 244, 1);
+ --body-code-color: #b2b2b2;
+ --system-message-color: #5f5f5f;
+ --feedlink-color: rgba(94, 158, 244, 1);
+ --article-title-color: #e0e0e0;
+ --article-date-color: rgba(255, 255, 255, 0.5);
+ --table-cell-border-color: dimgray;
+ }
+}
+
+body .headerTable {
+ border-bottom: 1px solid var(--header-table-border-color);
+ color: var(--header-color);
+}
+body .header {
+ color: var(--header-color);
+}
+body .header a:link, .header a:visited {
+ color: var(--header-color);
+}
+
+body code, body pre {
+ color: var(--body-code-color);
+}
+
+body > .systemMessage {
+ color: var(--system-message-color);
+}
+
+.feedlink a:link, .feedlink a:visited {
+ color: var(--feedlink-color);
+}
+
+.avatar img {
+ border-radius: 4px;
+}
+
+.feedIcon {
+ border-radius: 4px;
+}
+.rightAlign {
+ text-align: end;
+}
+.leftAlign {
+ text-align: start;
+}
+
+.articleTitle a:link, .articleTitle a:visited, .articleTitle h1 {
+ color: var(--article-title-color);
+ margin-top: 26px;
+ padding-bottom: 12px;
+ text-align: center;
+ margin: auto;
+ font-family: Charter, ui-serif;
+}
+
+.articleDateline {
+ color: rgba(124, 124, 124, 1);
+ margin-bottom: 5px;
+ text-align: center;
+ padding-top: 1em;
+}
+
+.articleDateline a:link, .articleDateline a:visited {
+ color: rgba(166, 166, 166, 1);
+ font-weight: normal;
+ padding-top: 1em;
+ text-align: center;
+}
+
+.articleDatelineTitle {
+ color: rgba(124, 124, 124, 1);
+ margin-bottom: 5px;
+ font-weight: normal;
+}
+
+.articleDatelineTitle a:link, .articleDatelineTitle a:visited {
+ color: var(--article-title-color);
+}
+
+.externalLink {
+ margin-bottom: 5px;
+ font-style: italic;
+ width: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-align: center;
+}
+
+
+
+.articleBody {
+ margin-top: 20px;
+ line-height: 1.6em;
+}
+
+h1 {
+ line-height: 1.15em;
+ font-weight: bold;
+ padding-bottom: 0;
+ margin-bottom: 5px;
+}
+
+pre {
+ max-width: 100%;
+ margin: 0;
+ overflow: auto;
+ overflow-y: hidden;
+ word-wrap: normal;
+ word-break: normal;
+}
+
+pre {
+ line-height: 1.4286em;
+}
+
+code, pre {
+ font-family: "SF Mono", Menlo, "Courier New", Courier, monospace;
+ font-size: 0.95em;
+ -webkit-hyphens: none;
+}
+
+pre code {
+ letter-spacing: -.027em;
+ font-size: 0.9375em;
+}
+
+.nnw-overflow {
+ overflow-x: auto;
+}
+/*
+ Instead of the last-child bits, border-collapse: collapse
+ could have been used. However, then the inter-cell borders
+ overlap the table border, which looks bad.
+ */
+.nnw-overflow table {
+ margin-bottom: 1px;
+ border-spacing: 0;
+ border: 1px solid var(--secondary-accent-color);
+ font-size: inherit;
+}
+.nnw-overflow table table {
+ margin-bottom: 0;
+ border: none;
+}
+.nnw-overflow td, .nnw-overflow th {
+ -webkit-hyphens: none;
+ word-break: normal;
+ border: 1px solid var(--table-cell-border-color);
+ border-top: none;
+ border-left: none;
+ padding: 5px;
+}
+
+.nnw-overflow tr :matches(td, th):last-child {
+ border-right: none;
+}
+
+.nnw-overflow :matches(thead, tbody, tfoot):last-child > tr:last-child :matches(td, th) {
+ border-bottom: none;
+}
+.nnw-overflow td pre {
+ border: none;
+ padding: 0;
+}
+.nnw-overflow table[border="0"] {
+ border-width: 0;
+}
+
+img, figure, video, div, object {
+ max-width: 100%;
+ height: auto !important;
+ margin: 0 auto;
+}
+
+iframe {
+ max-width: 100%;
+ margin: 0 auto;
+}
+
+iframe.nnw-constrained {
+ max-height: 50vw;
+}
+
+figure {
+ margin-bottom: 1em;
+ margin-top: 1em;
+}
+
+figcaption {
+ font-size: 14px;
+ line-height: 1.3em;
+}
+
+sup {
+ vertical-align: top;
+ position: relative;
+ bottom: 0.2rem;
+}
+
+sub {
+ vertical-align: bottom;
+ position: relative;
+ top: 0.2rem;
+}
+
+hr {
+ border: none;
+ background-color: var(--table-cell-border-color);
+ height: 1px;
+ margin-top: 1em;
+}
+
+.iframeWrap {
+ position: relative;
+ display: block;
+ padding-top: 56.25%;
+}
+
+.iframeWrap iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100% !important;
+ width: 100% !important;
+}
+
+@media (prefers-color-scheme: light) {
+ blockquote {
+ background: color(srgb 0.947 0.947 0.947);
+ border-radius: 4px;
+ margin: 1.5em 0;
+ padding: 1rem;
+ color: color(srgb 0.383 0.383 0.383);
+ font-size: 0.95rem;
+ }
+
+ pre {
+ background: color(srgb 0.947 0.947 0.947);
+ }
+
+ p code {
+ background: color(srgb 0.947 0.947 0.947);
+ padding: 0.2em;
+ border-radius: 4px;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ blockquote {
+ background: rgba(49, 49, 49, 1);
+ border-radius: 4px;
+ margin: 1.5em 0;
+ padding: 1em;
+ color: rgba(195, 195, 195, 1);
+ font-size: 0.95rem;
+ }
+
+ pre {
+ background: rgba(49, 49, 49, 1);
+ }
+
+ p code {
+ background: rgba(49, 49, 49, 1);
+ padding: 0.2em;
+ border-radius: 4px;
+ }
+}
+
+blockquote > blockquote {
+ padding-left: 1em;
+ padding-top: 0em;
+ padding-bottom: 0em;
+ font-style: italic;
+}
+
+
+blockquote > *:first-child {
+ margin-block-start: 0px;
+}
+
+blockquote > *:last-child {
+ margin-block-end: 0px;
+}
+
+
+/* Feed Specific */
+
+.feedbin--article-wrap {
+ border-top: 1px solid var(--header-table-border-color);
+}
+
+/* Hide the external link at the bottom of Daring Fireball posts */
+
+.x-netnewswire-hide {
+ display: none;
+}
+
+/* see removeWpSmiley; this rule is kept in case a wp-smiley is encountered without alt text */
+
+.wp-smiley {
+ height: 1em;
+ max-height: 1em;
+}
+
+/* Twitter */
+
+.twitterAvatar {
+ vertical-align: middle;
+ border-radius: 4px;
+ height: 1.7em;
+ width: 1.7em;
+}
+
+.twitterUsername {
+ line-height: 1.2;
+ margin-left: 4px;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.twitterScreenName {
+ font-size: 66%;
+}
+
+.twitterTimestamp {
+ font-size: 66%;
+}
+
+/*Block ads and junk*/
+
+iframe[src*="feedads"],
+iframe[src*="doubleclick"],
+iframe[src*="plusone.google"] {
+ display: none !important;
+}
+
+a[href*=".ads."],
+a[href*="feedads"],
+a[href*="doubleclick"],
+a[href*="//ads."],
+a[href*="api.tweetmeme"],
+a[href*="delicious.com/post?"],
+a[href*="digg.com/submit?"],
+a[href*="google.com/bookmarks/mark?"],
+a[href*="posterous.com/share?"],
+a[href*="tumblr.com/share?"],
+a[href*="linkedin.com/shareArticle?"],
+a[href*="facebook.com/share.php?"],
+a[href*="http://twitter.com/home?"],
+a[href*="addtoany.com/share_save"] {
+ display: none !important;
+}
+
+img[src*=".ads."],
+img[src*="//ads."],
+img[src*="doubleclick"],
+img[src*="feedads"],
+img[src*="feedburner"],
+img[src*="feedblitz"],
+img[src*="share-buttons"] {
+ display: none !important;
+}
+
+/* Newsfoot specific styles. Structural styles come first, theme styles second */
+.newsfoot-footnote-container {
+ position: relative;
+ display: inline-block;
+ z-index: 9999;
+}
+
+.newsfoot-footnote-popover {
+ position: absolute;
+ display: block;
+ padding: 0em 1em;
+ margin: 1em;
+ top: 0.75em;
+ max-width: none;
+ border-radius: 0.3em;
+ box-sizing: border-box;
+}
+
+.newsfoot-footnote-popover {
+ left: calc(-1 * (50vw - 1em));
+ right: calc(-1 * (50vw - 1em));
+}
+.newsfoot-footnote-popover-arrow {
+ content: '';
+ display: block;
+ width: 1em;
+ position: absolute;
+ top: -0.5em;
+ left: calc(50% - 0.5em);
+ height: 1em !important;
+ transform: rotate(45deg);
+ z-index:0;
+}
+.newsfoot-footnote-popover-inner {
+ border-radius: calc(0.3em - 1px);
+ padding: 1em;
+ position: relative;
+ z-index: 1;
+}
+
+.newsfoot-footnote-popover-inner :first-child {
+ margin-top: 0;
+}
+.newsfoot-footnote-popover-inner :last-child {
+ margin-bottom: 0;
+}
+
+.newsfoot-footnote-popover .reversefootnote,
+.newsfoot-footnote-popover .footnoteBackLink,
+.newsfoot-footnote-popover .footnote-return,
+.newsfoot-footnote-popover a[href*='#fn'] {
+ display: none;
+}
+
+sup[id^='fn'] {
+ vertical-align: baseline;
+}
+
+a.footnote {
+ display: inline-block;
+ text-decoration: none;
+ padding: 0.05em 0.75em;
+ border-radius: 1em;
+ min-width: 1em;
+ text-align: center;
+ font-size: 0.8em;
+ line-height: 1em;
+ position:relative;
+ top: -0.1em;
+}
+
+/* light / default */
+.newsfoot-footnote-popover {
+ background: #ccc;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5), 0 3px 6px rgba(0, 0, 0, 0.25);
+ color: black;
+ padding: 1px;
+}
+.newsfoot-footnote-popover-arrow {
+ background: #fafafa;
+ border: 1px solid #ccc;
+}
+.newsfoot-footnote-popover-inner {
+ background: #fafafa;
+}
+body a.footnote,
+body a.footnote:visited,
+.newsfoot-footnote-popover + a.footnote:hover {
+ background: #aaa;
+ color: white;
+ transition: background-color 200ms ease-out;
+}
+a.footnote:hover,
+.newsfoot-footnote-popover + a.footnote {
+ background: #666;
+ transition: background-color 200ms ease-out;
+}
+
+/* dark */
+@media screen and (prefers-color-scheme: dark) {
+ .newsfoot-footnote-popover {
+ background: #444;
+ color: rgb(224, 224, 224);
+ }
+ .newsfoot-footnote-popover-arrow {
+ background: #242424;
+ border: 1px solid #444;
+ }
+ .newsfoot-footnote-popover-inner {
+ background: #242424;
+ }
+ body a.footnote,
+ body a.footnote:visited,
+ .newsfoot-footnote-popover + a.footnote:hover {
+ background: #aaa;
+ color: white;
+ transition: background-color 200ms ease-out;
+ }
+ a.footnote:hover,
+ .newsfoot-footnote-popover + a.footnote {
+ background: #666;
+ transition: background-color 200ms ease-out;
+ }
+}
+
+/* iOS Specific */
+@supports (-webkit-touch-callout: none) {
+
+ body {
+ margin-top: 3px;
+ margin-bottom: 20px;
+ padding-left: 20px;
+ padding-right: 20px;
+
+ word-break: break-word;
+ -webkit-hyphens: auto;
+ -webkit-text-size-adjust: none;
+ }
+
+ :root {
+ color-scheme: light dark;
+ font-family: 'Avenir-Book', -apple-system-body;
+ font-size: [[font-size]]px;
+ --primary-accent-color: #086AEE;
+ --secondary-accent-color: #086AEE;
+ --block-quote-border-color: rgba(8, 106, 238, 0.75);
+ }
+
+ @media(prefers-color-scheme: dark) {
+ :root {
+ --primary-accent-color: #2D80F1;
+ --secondary-accent-color: #5E9EF4;
+ --block-quote-border-color: rgba(94, 158, 244, 0.75);
+ --header-table-border-color: rgba(255, 255, 255, 0.2);
+ }
+ }
+
+ body a, body a:visited {
+ color: var(--secondary-accent-color);
+ }
+ body .header {
+ font: -apple-system-body;
+ font-size: [[font-size]]px;
+ }
+ body .header a:link, body .header a:visited {
+ color: var(--primary-accent-color);
+ }
+
+ .avatar img {
+ border-radius: 4px;
+ }
+
+ .nnw-overflow table {
+ border: none;
+ }
+
+ .activityIndicatorWrap {
+ position: relative;
+ }
+
+ .activityIndicator {
+ z-index: 1;
+ width: 64px;
+ height: 64px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+}
+
+/* macOS Specific */
+@supports not (-webkit-touch-callout: none) {
+
+ body {
+ margin-top: 20px;
+ margin-bottom: 64px;
+ padding-left: 48px;
+ padding-right: 48px;
+ font-family: 'Avenir', -apple-system;
+ }
+
+ .smallText {
+ font-size: 14px;
+ }
+
+ .mediumText {
+ font-size: 16px;
+ }
+
+ .largeText {
+ font-size: 18px;
+ }
+
+ .xlargeText {
+ font-size: 20px;
+ }
+
+ .xxlargeText {
+ font-size: 22px;
+ }
+
+ :root {
+ color-scheme: light dark;
+ --accent-color: rgba(8, 106, 238, 1);
+ --block-quote-border-color: rgba(8, 106, 238, .50);
+ }
+
+ @media(prefers-color-scheme: dark) {
+ :root {
+ --accent-color: rgba(94, 158, 244, 1);
+ --block-quote-border-color: rgba(94, 158, 244, .50);
+ --header-table-border-color: rgba(255, 255, 255, 0.1);
+ }
+ }
+
+ body a, body a:visited {
+ color: var(--accent-color);
+ }
+
+ .nnw-overflow table {
+ //border: 1px solid var(--accent-color);
+ }
+
+}
diff --git a/Promenade.nnwtheme/template.html b/Promenade.nnwtheme/template.html
new file mode 100644
index 0000000..f8dc22a
--- /dev/null
+++ b/Promenade.nnwtheme/template.html
@@ -0,0 +1,25 @@
+
+
+
+
+[[body]]
+[[date_medium]]
+
+ [[external_link]]
+
+
+
+