diff --git a/ZB.MOM.WW.Secrets/Directory.Build.props b/ZB.MOM.WW.Secrets/Directory.Build.props
new file mode 100644
index 0000000..c4755a6
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/Directory.Build.props
@@ -0,0 +1,12 @@
+
+
+
+ net10.0
+ enable
+ enable
+ latest
+ 0.1.0
+ true
+
+
+
diff --git a/ZB.MOM.WW.Secrets/Directory.Packages.props b/ZB.MOM.WW.Secrets/Directory.Packages.props
new file mode 100644
index 0000000..0fb7b4c
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/Directory.Packages.props
@@ -0,0 +1,41 @@
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.slnx b/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.slnx
new file mode 100644
index 0000000..f74e9c1
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.slnx
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/AssemblyMarker.cs b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/AssemblyMarker.cs
new file mode 100644
index 0000000..53d84d4
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/AssemblyMarker.cs
@@ -0,0 +1,9 @@
+namespace ZB.MOM.WW.Secrets.Abstractions;
+
+///
+/// Internal marker giving the assembly a compilable input while the contract
+/// surface is scaffolded. Replace with real contracts as they are implemented.
+///
+internal static class AssemblyMarker
+{
+}
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/ZB.MOM.WW.Secrets.Abstractions.csproj b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/ZB.MOM.WW.Secrets.Abstractions.csproj
new file mode 100644
index 0000000..4977b7d
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Abstractions/ZB.MOM.WW.Secrets.Abstractions.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
+ true
+ ZB.MOM.WW.Secrets.Abstractions
+ ZB.MOM.WW
+ Secrets contracts (envelope-encrypted secret storage) for the ZB.MOM.WW SCADA family.
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/Program.cs b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/Program.cs
new file mode 100644
index 0000000..44ac559
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/Program.cs
@@ -0,0 +1,3 @@
+// Placeholder entry point for the ZB.MOM.WW.Secrets CLI. Real commands are added
+// in a later task; for now it is a no-op that exits successfully.
+return 0;
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/ZB.MOM.WW.Secrets.Cli.csproj b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/ZB.MOM.WW.Secrets.Cli.csproj
new file mode 100644
index 0000000..063ae94
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Cli/ZB.MOM.WW.Secrets.Cli.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net10.0
+ enable
+ enable
+ false
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/AssemblyMarker.cs b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/AssemblyMarker.cs
new file mode 100644
index 0000000..4c5bad5
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/AssemblyMarker.cs
@@ -0,0 +1,9 @@
+namespace ZB.MOM.WW.Secrets.Ui;
+
+///
+/// Internal marker giving the assembly a compilable input while the Blazor
+/// components are scaffolded. Replace with real components as they are added.
+///
+internal static class AssemblyMarker
+{
+}
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/ZB.MOM.WW.Secrets.Ui.csproj b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/ZB.MOM.WW.Secrets.Ui.csproj
new file mode 100644
index 0000000..c3b2a71
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets.Ui/ZB.MOM.WW.Secrets.Ui.csproj
@@ -0,0 +1,38 @@
+
+
+
+ ZB.MOM.WW.Secrets.Ui
+ true
+
+ true
+ $(NoWarn);CS1591
+ true
+ ZB.MOM.WW.Secrets.Ui
+ ZB.MOM.WW
+ Blazor secrets-management UI (Technical-Light) for the ZB.MOM.WW SCADA family.
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/AssemblyMarker.cs b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/AssemblyMarker.cs
new file mode 100644
index 0000000..4217325
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/AssemblyMarker.cs
@@ -0,0 +1,9 @@
+namespace ZB.MOM.WW.Secrets;
+
+///
+/// Internal marker giving the assembly a compilable input while the store and
+/// resolver are scaffolded. Replace with real implementation as it is added.
+///
+internal static class AssemblyMarker
+{
+}
diff --git a/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.csproj b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.csproj
new file mode 100644
index 0000000..2776ae5
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/src/ZB.MOM.WW.Secrets/ZB.MOM.WW.Secrets.csproj
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
+ true
+ ZB.MOM.WW.Secrets
+ ZB.MOM.WW
+ Envelope-encrypted (AES-256-GCM) secrets store + resolver for the ZB.MOM.WW SCADA family.
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+ https://gitea.dohertylan.com/dohertj2/zb-mom-ww-secrets
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/PlaceholderTests.cs b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/PlaceholderTests.cs
new file mode 100644
index 0000000..8464965
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/PlaceholderTests.cs
@@ -0,0 +1,7 @@
+namespace ZB.MOM.WW.Secrets.Tests;
+
+public class PlaceholderTests
+{
+ [Fact]
+ public void Builds() => Assert.True(true);
+}
diff --git a/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/ZB.MOM.WW.Secrets.Tests.csproj b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/ZB.MOM.WW.Secrets.Tests.csproj
new file mode 100644
index 0000000..89c1e1b
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Tests/ZB.MOM.WW.Secrets.Tests.csproj
@@ -0,0 +1,24 @@
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/PlaceholderTests.cs b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/PlaceholderTests.cs
new file mode 100644
index 0000000..24ecffb
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/PlaceholderTests.cs
@@ -0,0 +1,7 @@
+namespace ZB.MOM.WW.Secrets.Ui.Tests;
+
+public class PlaceholderTests
+{
+ [Fact]
+ public void Builds() => Assert.True(true);
+}
diff --git a/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/ZB.MOM.WW.Secrets.Ui.Tests.csproj b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/ZB.MOM.WW.Secrets.Ui.Tests.csproj
new file mode 100644
index 0000000..a6d9697
--- /dev/null
+++ b/ZB.MOM.WW.Secrets/tests/ZB.MOM.WW.Secrets.Ui.Tests/ZB.MOM.WW.Secrets.Ui.Tests.csproj
@@ -0,0 +1,23 @@
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+