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:
co-authored by
Cursor
parent
e0e68de30f
commit
36180cda2b
@@ -63,6 +63,8 @@
|
||||
}
|
||||
|
||||
.poweredBy {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
color: var(--text-muted);
|
||||
|
||||
@@ -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>}
|
||||
|
||||
Reference in New Issue
Block a user