diff --git a/.gitignore b/.gitignore
index 160a2747..0a826448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -72,3 +72,6 @@ docs/img/sam.jpg
ClaudeReport.md
ClaudeReport.md
ClaudeReport.md
+docs/brand/visual-identity.md
+docs/brand/asset-system.md
+docs/brand/visual-identity.md
diff --git a/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt b/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt
index 4e9b9a2a..440eb607 100644
--- a/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt
+++ b/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt
@@ -20,7 +20,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.geometry.Offset
@@ -80,7 +79,7 @@ internal fun AuthLogoMark(
painter = painterResource(R.drawable.ic_launcher_foreground),
contentDescription = "Closer",
contentScale = ContentScale.Fit,
- modifier = Modifier.matchParentSize().alpha(0.96f)
+ modifier = Modifier.matchParentSize()
)
}
}
diff --git a/app/src/main/java/app/closer/ui/pairing/PairingSuccessScreen.kt b/app/src/main/java/app/closer/ui/pairing/PairingSuccessScreen.kt
index d6c18a27..73b5e9d5 100644
--- a/app/src/main/java/app/closer/ui/pairing/PairingSuccessScreen.kt
+++ b/app/src/main/java/app/closer/ui/pairing/PairingSuccessScreen.kt
@@ -9,6 +9,7 @@ import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
+import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
@@ -27,7 +28,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Person
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@@ -49,6 +49,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.scale
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
@@ -57,6 +58,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import app.closer.R
import app.closer.core.navigation.AppRoute
import app.closer.domain.repository.AuthRepository
import app.closer.domain.repository.CoupleRepository
@@ -205,15 +207,14 @@ fun PairingSuccessScreen(
.background(MaterialTheme.colorScheme.background)
.padding(5.dp)
.clip(CircleShape)
- .background(SettingsPrimary),
+ .background(Color(0xFFFFF8FC)),
contentAlignment = Alignment.Center
) {
- Icon(
- Icons.Filled.Favorite,
+ Image(
+ painter = painterResource(R.drawable.closer_mark_loader),
contentDescription = null,
- tint = SettingsOnPrimary,
modifier = Modifier
- .size(28.dp)
+ .size(38.dp)
.scale(pulse)
)
}
diff --git a/app/src/main/res/drawable-nodpi/closer_launcher_foreground.png b/app/src/main/res/drawable-nodpi/closer_launcher_foreground.png
index 5cba8845..97d8a1e9 100644
Binary files a/app/src/main/res/drawable-nodpi/closer_launcher_foreground.png and b/app/src/main/res/drawable-nodpi/closer_launcher_foreground.png differ
diff --git a/docs/brand/asset-system.md b/docs/brand/asset-system.md
index 95a81665..fca16732 100644
--- a/docs/brand/asset-system.md
+++ b/docs/brand/asset-system.md
@@ -66,6 +66,8 @@ This section is only about the artwork used to represent notifications, not noti
| Asset | Use | Source / Target |
| --- | --- | --- |
| Primary app mark | Launcher, favicon, small brand moments | `docs/brand/sources/closer-approved-icon-source.png` |
+| Mark for dark backgrounds | Logo use on aubergine/purple surfaces | `docs/brand/sources/closer-mark-on-dark.svg` |
+| Mark for light backgrounds | Logo use on blush/white/light surfaces | `docs/brand/sources/closer-mark-on-light.svg` |
| Adaptive foreground | Android launcher layer | `app/src/main/res/drawable/ic_launcher_foreground.xml` |
| Adaptive background | Android launcher layer | `app/src/main/res/drawable/ic_launcher_background.xml` |
| Monochrome mark | Android themed icon, single-color use | `app/src/main/res/drawable/ic_launcher_monochrome.xml` |
@@ -80,6 +82,10 @@ approved pink upper C, lavender lower sweep, heart-shaped inner space, and true
redraw it as a generic `C`, turn the keyhole into a heart, add a key or lock shackle, add faces, add
text inside it, or use it as a reaction emoji.
+Keyhole rule: keep the dark keyhole in the official launcher/store icon. Use the white keyhole only
+when the transparent mark sits directly on dark aubergine/purple. Use the aubergine keyhole on light
+or blush backgrounds.
+
### 2. App Icons
| Platform | Required Assets |
diff --git a/docs/brand/sources/closer-approved-icon-square-white-keyhole.png b/docs/brand/sources/closer-approved-icon-square-white-keyhole.png
new file mode 100644
index 00000000..208cda74
Binary files /dev/null and b/docs/brand/sources/closer-approved-icon-square-white-keyhole.png differ
diff --git a/docs/brand/visual-identity.md b/docs/brand/visual-identity.md
index de2ad2fd..6e8843c0 100644
--- a/docs/brand/visual-identity.md
+++ b/docs/brand/visual-identity.md
@@ -17,6 +17,8 @@ meeting in one private space; the keyhole represents trust and privacy.
- Master mark source: `docs/brand/sources/closer-approved-icon-source.png`
- Transparent mark source: `docs/brand/sources/closer-mark-transparent-keyhole-aubergine.png`
+- Dark-background mark source: `docs/brand/sources/closer-mark-on-dark.svg`
+- Light-background mark source: `docs/brand/sources/closer-mark-on-light.svg`
- Launcher source: `docs/store/sources/app-icon.svg`
- Android adaptive layers: `app/src/main/res/drawable/ic_launcher_*`
- Android notification glyph: `app/src/main/res/drawable-nodpi/ic_notification_closer.png`
@@ -27,6 +29,20 @@ Keep the mark visually faithful to the approved artwork. Do not redraw it as a g
the aperture into an `O`, add a padlock shackle, turn the keyhole into a heart, add a separate key,
or place text inside the icon.
+### Keyhole color
+
+Use the keyhole color to support contrast without changing the official icon:
+
+- **Primary app icon / launcher / store icon:** keep the approved dark keyhole. It feels private and
+ premium, and keeps the icon from looking like a generic security app.
+- **Transparent mark on dark aubergine or purple:** use the white-keyhole variant so the privacy
+ cue stays visible.
+- **Transparent mark on blush, white, or light UI:** use the aubergine-keyhole variant first; use
+ the black-keyhole variant only when maximum contrast is needed.
+- **Notification small icon:** use the single-color platform glyph; do not use the full-color
+ launcher art.
+- **Loading mark:** use the aubergine-keyhole variant on light/card surfaces.
+
## Core colors
| Role | Color | Hex |
diff --git a/docs/store/feature-graphic-1024x500.png b/docs/store/feature-graphic-1024x500.png
index 9e46d407..f04950b3 100644
Binary files a/docs/store/feature-graphic-1024x500.png and b/docs/store/feature-graphic-1024x500.png differ
diff --git a/docs/store/sources/feature-graphic.svg b/docs/store/sources/feature-graphic.svg
index 3eeabe90..0d1816ac 100644
--- a/docs/store/sources/feature-graphic.svg
+++ b/docs/store/sources/feature-graphic.svg
@@ -13,7 +13,7 @@
-
+
Closer
A private space