Give dashboards a themed orb background and a solid current-nav state.

Login pages share the same wash as the app shell; customer light mode matches business while dark mode stays gray.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-17 09:00:08 +03:30
co-authored by Cursor
parent e0e68de30f
commit 36180cda2b
25 changed files with 636 additions and 121 deletions
@@ -63,6 +63,8 @@
}
.poweredBy {
position: relative;
z-index: 1;
font-size: 12px;
font-weight: 500;
color: var(--text-muted);
+2
View File
@@ -9,6 +9,7 @@ import { toE164CellNumber } from '../lib/cellNumber'
import { getBusinessDomain } from '../lib/config'
import { resetPassword, sendOtp } from '../services/authService'
import { useT } from '../i18n/useT'
import { BackgroundOrbs } from '../components/BackgroundOrbs'
import styles from './LoginPage.module.css'
type AuthView = 'login' | 'forgot' | 'otp'
@@ -199,6 +200,7 @@ export function LoginPage() {
return (
<div className={styles.page}>
<BackgroundOrbs />
<div className={styles.card}>
<div className={styles.brand}>
{logoUrl ? <img src={logoUrl} alt="" className={styles.logo} /> : null}
@@ -1,3 +1,9 @@
.pageHeader {
padding-bottom: 16px;
margin-bottom: 20px;
border-bottom: 1px solid rgba(148, 163, 184, 0.2);
}
.slot {
margin-bottom: 28px;
}
@@ -32,7 +32,7 @@ import type {
import { parseAspectRatio } from '../utils/aspectRatio'
import {
staticImagePageLabel,
staticImagePageOptions,
staticImagePagesFromSlots,
} from '../utils/staticImagePages'
import controlStyles from '../components/CategoryRow.module.css'
import pageStyles from '../components/PageContent.module.css'
@@ -122,9 +122,16 @@ export function WebsiteStaticImagesPage() {
}
const pageOptions = useMemo(
() => staticImagePageOptions(slots.map((slot) => slot.pageKey)),
() => staticImagePagesFromSlots(slots.map((slot) => slot.pageKey)),
[slots],
)
useEffect(() => {
if (pageOptions.length === 0) return
if (!pageOptions.includes(pageKey)) {
setPageKey(pageOptions[0])
}
}, [pageOptions, pageKey])
const visibleSlots = useMemo(
() => slots.filter((slot) => (slot.pageKey || 'home') === pageKey),
[slots, pageKey],
@@ -271,28 +278,30 @@ export function WebsiteStaticImagesPage() {
]}
/>
<div className={pageStyles.pageHeader}>
<div className={`${pageStyles.pageHeader} ${styles.pageHeader}`}>
<div>
<PageTitle en="STATIC IMAGES">{t('title.staticImages')}</PageTitle>
<p className={pageStyles.pageSubtitle}>
{t('website.staticImages.subtitle', { domain })}
</p>
</div>
<div className={styles.pageSelect}>
<label htmlFor="static-images-page">{t('website.staticImages.page')}</label>
<select
id="static-images-page"
value={pageKey}
onChange={(e) => setPageKey(e.target.value)}
disabled={isLoading}
>
{pageOptions.map((option) => (
<option key={option} value={option}>
{staticImagePageLabel(option, t)}
</option>
))}
</select>
</div>
{pageOptions.length > 1 ? (
<div className={styles.pageSelect}>
<label htmlFor="static-images-page">{t('website.staticImages.page')}</label>
<select
id="static-images-page"
value={pageKey}
onChange={(e) => setPageKey(e.target.value)}
disabled={isLoading}
>
{pageOptions.map((option) => (
<option key={option} value={option}>
{staticImagePageLabel(option, t)}
</option>
))}
</select>
</div>
) : null}
</div>
{error && <p className={specialStyles.error}>{error}</p>}