Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-01-12 17:09:38 -06:00
parent 609ed970c5
commit 648ef44e4d
46 changed files with 1101 additions and 40 deletions

View File

@ -18,6 +18,7 @@ struct SelfieCamApp: App {
WindowGroup {
AppLaunchView(config: .selfieCam) {
ContentView()
.preferredColorScheme(.dark)
}
}
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.14", "green": "0.10", "blue": "0.16" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.94", "green": "0.92", "blue": "0.93" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.14", "green": "0.10", "blue": "0.16" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.09", "blue": "0.14" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.96", "green": "0.95", "blue": "0.96" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.09", "blue": "0.14" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.10", "green": "0.07", "blue": "0.12" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.98", "green": "0.97", "blue": "0.98" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.10", "green": "0.07", "blue": "0.12" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.08", "green": "0.06", "blue": "0.10" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.98", "blue": "0.98" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.08", "green": "0.06", "blue": "0.10" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.08", "blue": "0.14" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.96", "green": "0.94", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.08", "blue": "0.14" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.12", "blue": "0.18" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.92", "green": "0.90", "blue": "0.91" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.12", "blue": "0.18" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.11", "blue": "0.18" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.92", "green": "0.89", "blue": "0.91" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.11", "blue": "0.18" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -14,13 +14,13 @@ extension Color {
/// SelfieCam branding colors for icon and launch screen.
enum Branding {
/// Primary gradient color - rich magenta/rose for a vibrant, modern selfie aesthetic.
static let primary = Color(red: 0.85, green: 0.25, blue: 0.45)
static let primary = Color("Branding/primary")
/// Secondary gradient color - deeper magenta/purple for depth.
static let secondary = Color(red: 0.45, green: 0.12, blue: 0.35)
static let secondary = Color("Branding/secondary")
/// Accent color - soft white/cream for clean, bright text and icons.
static let accent = Color.white
static let accent = Color("Branding/accent")
}
}

View File

@ -15,37 +15,37 @@ import Bedrock
/// Provides more visual separation than neutral grays.
public enum SelfieCamSurfaceColors: SurfaceColorProvider {
/// Primary background - deep rose-tinted dark
public static let primary = Color(red: 0.08, green: 0.06, blue: 0.10)
public static let primary = Color("Surface/primary")
/// Secondary/elevated surface - slightly lighter with rose tint
public static let secondary = Color(red: 0.12, green: 0.08, blue: 0.14)
public static let secondary = Color("Surface/secondary")
/// Tertiary/card surface - more elevated
public static let tertiary = Color(red: 0.16, green: 0.11, blue: 0.18)
public static let tertiary = Color("Surface/tertiary")
/// Overlay background (for sheets/modals) - deep with subtle rose
public static let overlay = Color(red: 0.10, green: 0.07, blue: 0.12)
public static let overlay = Color("Surface/overlay")
/// Card/grouped element background - distinct from primary
public static let card = Color(red: 0.14, green: 0.10, blue: 0.16)
public static let card = Color("Surface/card")
/// Subtle fill for grouped content sections
public static let groupedFill = Color(red: 0.12, green: 0.09, blue: 0.14)
public static let groupedFill = Color("Surface/groupedFill")
/// Section fill for list sections - slightly more visible
public static let sectionFill = Color(red: 0.16, green: 0.12, blue: 0.18)
public static let sectionFill = Color("Surface/sectionFill")
}
// MARK: - SelfieCam Text Colors
/// Text colors optimized for rose-tinted dark backgrounds.
public enum SelfieCamTextColors: TextColorProvider {
public static let primary = Color.white
public static let secondary = Color.white.opacity(Design.Opacity.accent)
public static let tertiary = Color.white.opacity(Design.Opacity.medium)
public static let disabled = Color.white.opacity(Design.Opacity.light)
public static let placeholder = Color.white.opacity(Design.Opacity.overlay)
public static let inverse = Color.black
public static let primary = Color("Text/primary")
public static let secondary = Color("Text/secondary")
public static let tertiary = Color("Text/tertiary")
public static let disabled = Color("Text/disabled")
public static let placeholder = Color("Text/placeholder")
public static let inverse = Color("Text/inverse")
}
// MARK: - SelfieCam Accent Colors
@ -53,57 +53,57 @@ public enum SelfieCamTextColors: TextColorProvider {
/// Accent colors derived from the app's branding magenta/rose.
public enum SelfieCamAccentColors: AccentColorProvider {
/// Primary accent - bright magenta/rose from branding
public static let primary = Color(red: 0.85, green: 0.25, blue: 0.45)
public static let primary = Color("Accent/primary")
/// Light variant - softer pink
public static let light = Color(red: 0.95, green: 0.45, blue: 0.60)
public static let light = Color("Accent/light")
/// Dark variant - deeper magenta
public static let dark = Color(red: 0.65, green: 0.18, blue: 0.35)
public static let dark = Color("Accent/dark")
/// Secondary accent - soft cream/warm white for contrast
public static let secondary = Color(red: 1.0, green: 0.95, blue: 0.90)
public static let secondary = Color("Accent/secondary")
}
// MARK: - SelfieCam Button Colors
/// Button colors matching the branded theme.
public enum SelfieCamButtonColors: ButtonColorProvider {
public static let primaryLight = Color(red: 0.95, green: 0.40, blue: 0.55)
public static let primaryDark = Color(red: 0.75, green: 0.20, blue: 0.40)
public static let secondary = Color.white.opacity(Design.Opacity.subtle)
public static let destructive = Color.red.opacity(Design.Opacity.heavy)
public static let cancelText = Color.white.opacity(Design.Opacity.strong)
public static let primaryLight = Color("Button/primaryLight")
public static let primaryDark = Color("Button/primaryDark")
public static let secondary = Color("Button/secondary")
public static let destructive = Color("Button/destructive")
public static let cancelText = Color("Button/cancelText")
}
// MARK: - SelfieCam Status Colors
/// Standard semantic status colors.
public enum SelfieCamStatusColors: StatusColorProvider {
public static let success = Color(red: 0.2, green: 0.8, blue: 0.4)
public static let warning = Color(red: 1.0, green: 0.75, blue: 0.2)
public static let error = Color(red: 0.9, green: 0.3, blue: 0.3)
public static let info = Color(red: 0.5, green: 0.7, blue: 0.95)
public static let success = Color("Status/success")
public static let warning = Color("Status/warning")
public static let error = Color("Status/error")
public static let info = Color("Status/info")
}
// MARK: - SelfieCam Border Colors
/// Border colors for the rose-tinted theme.
public enum SelfieCamBorderColors: BorderColorProvider {
public static let subtle = Color.white.opacity(Design.Opacity.subtle)
public static let standard = Color.white.opacity(Design.Opacity.hint)
public static let emphasized = Color.white.opacity(Design.Opacity.light)
public static let selected = SelfieCamAccentColors.primary.opacity(Design.Opacity.medium)
public static let subtle = Color("Border/subtle")
public static let standard = Color("Border/standard")
public static let emphasized = Color("Border/emphasized")
public static let selected = Color("Border/selected")
}
// MARK: - SelfieCam Interactive Colors
/// Interactive state colors for the theme.
public enum SelfieCamInteractiveColors: InteractiveColorProvider {
public static let selected = SelfieCamAccentColors.primary.opacity(Design.Opacity.selection)
public static let hover = Color.white.opacity(Design.Opacity.subtle)
public static let pressed = Color.white.opacity(Design.Opacity.hint)
public static let focus = SelfieCamAccentColors.light
public static let selected = Color("Interactive/selected")
public static let hover = Color("Interactive/hover")
public static let pressed = Color("Interactive/pressed")
public static let focus = Color("Interactive/focus")
}
// MARK: - SelfieCam Theme