diff --git a/Twain.sln b/Twain.sln
index a7f7087..7683f26 100644
--- a/Twain.sln
+++ b/Twain.sln
@@ -16,6 +16,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MarkdownImport", "src\Modul
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BenRameyTheme", "src\Themes\BenRameyTheme\BenRameyTheme.csproj", "{A7498019-5941-479B-ADB2-56B6C984C608}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OapTheme", "src\Themes\OapTheme\OapTheme.csproj", "{3B8C90D3-A50A-4184-A702-70185A4F870A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Themes", "Themes", "{C5891B30-F830-4094-A4D5-E2DB8D9ED819}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{3DA05917-02EA-4B04-9C48-B86C77A73584}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -38,12 +44,19 @@ Global
{A7498019-5941-479B-ADB2-56B6C984C608}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7498019-5941-479B-ADB2-56B6C984C608}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7498019-5941-479B-ADB2-56B6C984C608}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B8C90D3-A50A-4184-A702-70185A4F870A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B8C90D3-A50A-4184-A702-70185A4F870A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B8C90D3-A50A-4184-A702-70185A4F870A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B8C90D3-A50A-4184-A702-70185A4F870A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{97FFBB7D-C82D-47B2-B110-377B5F6B49C2} = {7C34E548-E385-4902-8A50-B7F49CABAC10}
+ {7B0477DA-BCD5-47ED-8B88-76D046524434} = {3DA05917-02EA-4B04-9C48-B86C77A73584}
+ {A7498019-5941-479B-ADB2-56B6C984C608} = {C5891B30-F830-4094-A4D5-E2DB8D9ED819}
+ {3B8C90D3-A50A-4184-A702-70185A4F870A} = {C5891B30-F830-4094-A4D5-E2DB8D9ED819}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0F7F9D4C-DF95-43AF-9E9A-DA09B5EE03C7}
diff --git a/src/Themes/OapTheme/.eslintrc.js b/src/Themes/OapTheme/.eslintrc.js
new file mode 100644
index 0000000..e556eb8
--- /dev/null
+++ b/src/Themes/OapTheme/.eslintrc.js
@@ -0,0 +1,26 @@
+module.exports = {
+ env: {
+ browser: true,
+ es2021: true,
+ },
+ extends: 'airbnb-base',
+ overrides: [
+ {
+ env: {
+ node: true,
+ },
+ files: [
+ '.eslintrc.{js,cjs}',
+ ],
+ parserOptions: {
+ sourceType: 'script',
+ },
+ },
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ },
+ rules: {
+ },
+};
diff --git a/src/Themes/OapTheme/Manifest.cs b/src/Themes/OapTheme/Manifest.cs
new file mode 100644
index 0000000..e3a48b0
--- /dev/null
+++ b/src/Themes/OapTheme/Manifest.cs
@@ -0,0 +1,9 @@
+using OrchardCore.DisplayManagement.Manifest;
+
+[assembly: Theme(
+ Name = "OAP Theme",
+ Author = "Ben Ramey",
+ Website = "https://oaprotection.org/",
+ Version = "0.0.1",
+ Description = "Theme for oaprotection.org"
+)]
diff --git a/src/Themes/OapTheme/OapTheme.csproj b/src/Themes/OapTheme/OapTheme.csproj
new file mode 100644
index 0000000..6cf1919
--- /dev/null
+++ b/src/Themes/OapTheme/OapTheme.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net8.0
+ true
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Themes/OapTheme/ResourceManagementOptionsConfiguration.cs b/src/Themes/OapTheme/ResourceManagementOptionsConfiguration.cs
new file mode 100644
index 0000000..eac3c88
--- /dev/null
+++ b/src/Themes/OapTheme/ResourceManagementOptionsConfiguration.cs
@@ -0,0 +1,24 @@
+using Microsoft.Extensions.Options;
+using OrchardCore.ResourceManagement;
+
+namespace OapTheme;
+
+public class ResourceManagementOptionsConfiguration : IConfigureOptions
+{
+ static ResourceManagementOptionsConfiguration()
+ {
+ m_manifest = new ResourceManifest();
+
+ m_manifest
+ .DefineStyle("OapTheme-styles")
+ .SetUrl("~/OapTheme/site.css")
+ .SetVersion("1.0.0");
+ }
+
+ public void Configure(ResourceManagementOptions options)
+ {
+ options.ResourceManifests.Add(m_manifest);
+ }
+
+ private static ResourceManifest m_manifest;
+}
diff --git a/src/Themes/OapTheme/Scripts/site.js b/src/Themes/OapTheme/Scripts/site.js
new file mode 100644
index 0000000..b121272
--- /dev/null
+++ b/src/Themes/OapTheme/Scripts/site.js
@@ -0,0 +1,2 @@
+import "../Styles/site.css";
+import 'htmx.org';
diff --git a/src/Themes/OapTheme/Startup.cs b/src/Themes/OapTheme/Startup.cs
new file mode 100644
index 0000000..f8380f7
--- /dev/null
+++ b/src/Themes/OapTheme/Startup.cs
@@ -0,0 +1,14 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using OrchardCore.Modules;
+using OrchardCore.ResourceManagement;
+
+namespace OapTheme;
+
+public class Startup : StartupBase
+{
+ public override void ConfigureServices(IServiceCollection serviceCollection)
+ {
+ serviceCollection.AddTransient, ResourceManagementOptionsConfiguration>();
+ }
+}
diff --git a/src/Themes/OapTheme/Styles/richtext.css b/src/Themes/OapTheme/Styles/richtext.css
new file mode 100644
index 0000000..5bf726a
--- /dev/null
+++ b/src/Themes/OapTheme/Styles/richtext.css
@@ -0,0 +1,23 @@
+div.richtext a {
+ @apply text-blue-700 underline;
+}
+
+div.richtext ol, div.richtext ul {
+ @apply my-2 pl-8;
+}
+
+div.richtext ol li {
+ @apply list-decimal my-1;
+}
+
+div.richtext ul li {
+ @apply list-disc my-1;
+}
+
+div.richtext p {
+ @apply my-4;
+}
+
+div.richtext .red {
+ @apply text-red-500;
+}
diff --git a/src/Themes/OapTheme/Styles/site.css b/src/Themes/OapTheme/Styles/site.css
new file mode 100644
index 0000000..bba4e1a
--- /dev/null
+++ b/src/Themes/OapTheme/Styles/site.css
@@ -0,0 +1,6 @@
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "./richtext.css";
+@import "./validation.css";
+@import "tailwindcss/utilities";
+
diff --git a/src/Themes/OapTheme/Styles/validation.css b/src/Themes/OapTheme/Styles/validation.css
new file mode 100644
index 0000000..c00b0e2
--- /dev/null
+++ b/src/Themes/OapTheme/Styles/validation.css
@@ -0,0 +1,3 @@
+span.field-validation-error {
+ @apply text-sm text-red-600;
+}
\ No newline at end of file
diff --git a/src/Themes/OapTheme/Views/Layout.liquid b/src/Themes/OapTheme/Views/Layout.liquid
new file mode 100644
index 0000000..5975681
--- /dev/null
+++ b/src/Themes/OapTheme/Views/Layout.liquid
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+ {% page_title Site.SiteName, position: "before", separator: " - " %}
+
+ {% resources type: "Meta" %}
+
+ {% link type: "image/x-icon", rel: "shortcut icon", href: "~/OapTheme/assets/favicon.ico" %}
+
+ {% style name: "oaptheme" %}
+
+ {% resources type: "HeadLink" %}
+
+
+ {% resources type: "Stylesheet" %}
+ {% resources type: "HeadScript" %}
+
+
+
+
+
+
+ {% render_body %}
+
+
+
+
+
+
+ {% resources type: "FootScript" %}
+
+
+
+