feat: establish GeoIntel and ITWorx branding
This commit is contained in:
@@ -812,7 +812,7 @@ function WorkbenchApp({ username, loggingOut, onLogout }: WorkbenchAppProps): JS
|
||||
<div className="workbench-stage">
|
||||
<header className="workbench-topbar">
|
||||
<div className="mobile-brand">
|
||||
<span className="brand-mark" aria-hidden="true">GI</span>
|
||||
<img className="brand-mark geointel-mark" src="/geointel-icon.svg" alt="" aria-hidden="true" />
|
||||
<strong>GeoIntel</strong>
|
||||
</div>
|
||||
<div className="context-bar" aria-label="Actieve werkcontext">
|
||||
|
||||
@@ -27,6 +27,7 @@ describe('LandingPage', () => {
|
||||
render(<LandingPage onAuthenticated={onAuthenticated} />)
|
||||
|
||||
expect(screen.getByRole('heading', { name: /Operationele GIS-analyse/i })).toBeTruthy()
|
||||
expect(screen.getByRole('img', { name: 'ITWorx.tech' })).toBeTruthy()
|
||||
fireEvent.change(screen.getByLabelText('Gebruikersnaam'), { target: { value: 'operator' } })
|
||||
fireEvent.change(screen.getByLabelText('Wachtwoord'), { target: { value: 'correct' } })
|
||||
fireEvent.click(screen.getAllByRole('button', { name: 'Inloggen' })[1])
|
||||
|
||||
@@ -16,6 +16,8 @@ import { login } from '../../services/api/auth'
|
||||
import type { AuthSession } from '../../services/api/auth'
|
||||
import { formatError } from '../../lib/formatError'
|
||||
import '../../styles/landing.css'
|
||||
import { GeoIntelMark } from '../brand/GeoIntelBrand'
|
||||
import { ItWorxSignature } from '../brand/ItWorxSignature'
|
||||
|
||||
interface LandingPageProps {
|
||||
onAuthenticated: (session: AuthSession) => void
|
||||
@@ -86,7 +88,7 @@ export function LandingPage({ onAuthenticated, serviceError = null }: LandingPag
|
||||
<a className="landing-skip-link" href="#login-panel">Ga naar aanmelden</a>
|
||||
<header className="landing-header">
|
||||
<a className="landing-brand" href="#top" aria-label="GeoIntel Atlas startpagina">
|
||||
<span className="landing-brand-mark" aria-hidden="true">GI</span>
|
||||
<GeoIntelMark className="landing-brand-mark" />
|
||||
<span>GeoIntel Atlas</span>
|
||||
</a>
|
||||
<button
|
||||
@@ -222,7 +224,10 @@ export function LandingPage({ onAuthenticated, serviceError = null }: LandingPag
|
||||
|
||||
<footer className="landing-footer">
|
||||
<div><strong>GeoIntel Atlas Workbench</strong><p>Operationele GIS-analyse voor België en de Belgische Noordzee.</p></div>
|
||||
<p>© {new Date().getFullYear()} GeoIntel · Interne operatoromgeving</p>
|
||||
<div className="landing-footer-ownership">
|
||||
<ItWorxSignature />
|
||||
<p>© {new Date().getFullYear()} GeoIntel · Interne operatoromgeving</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
interface GeoIntelMarkProps {
|
||||
className?: string
|
||||
}
|
||||
|
||||
export function GeoIntelMark({ className = '' }: GeoIntelMarkProps): JSX.Element {
|
||||
return (
|
||||
<img
|
||||
className={`geointel-mark ${className}`.trim()}
|
||||
src="/geointel-icon.svg"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
/>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
export function ItWorxSignature(): JSX.Element {
|
||||
return (
|
||||
<div className="itworx-signature" aria-label="Ontwikkeld door Jens van ITWorx.tech">
|
||||
<span>Ontwikkeld door Jens</span>
|
||||
<img src="/itworx-wordmark.png" alt="ITWorx.tech" />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import {
|
||||
type LucideIcon,
|
||||
} from 'lucide-react'
|
||||
import type { WorkspaceKey } from '../overview/OverviewWorkspace'
|
||||
import { GeoIntelMark } from '../brand/GeoIntelBrand'
|
||||
import { ItWorxSignature } from '../brand/ItWorxSignature'
|
||||
|
||||
export interface WorkspaceNavigationItem {
|
||||
key: WorkspaceKey
|
||||
@@ -49,7 +51,7 @@ export function WorkbenchNavigation({
|
||||
return (
|
||||
<aside className="workbench-sidebar" aria-label="Navigatie van de werkruimte">
|
||||
<div className="sidebar-brand" aria-label="GeoIntel">
|
||||
<span className="brand-mark" aria-hidden="true">GI</span>
|
||||
<GeoIntelMark className="brand-mark" />
|
||||
<span className="sidebar-brand-copy">
|
||||
<strong>GeoIntel</strong>
|
||||
<small>Atlas Workbench</small>
|
||||
@@ -85,6 +87,7 @@ export function WorkbenchNavigation({
|
||||
</div>
|
||||
))}
|
||||
</nav>
|
||||
<ItWorxSignature />
|
||||
</aside>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -74,6 +74,8 @@ body {
|
||||
/* Brand rail */
|
||||
|
||||
.workbench-sidebar {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 0;
|
||||
padding: 1rem 0.85rem 1.25rem;
|
||||
color: rgba(255, 255, 255, 0.76);
|
||||
@@ -100,13 +102,42 @@ body {
|
||||
height: 2.65rem;
|
||||
border: 1px solid rgba(173, 238, 227, 0.44);
|
||||
border-radius: 0.8rem;
|
||||
color: #dffaf5;
|
||||
background: rgba(255, 255, 255, 0.09);
|
||||
object-fit: cover;
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.14),
|
||||
0 10px 24px rgba(0, 0, 0, 0.16);
|
||||
}
|
||||
|
||||
.workbench-sidebar > nav {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.itworx-signature {
|
||||
display: grid;
|
||||
gap: 0.38rem;
|
||||
}
|
||||
|
||||
.itworx-signature > span {
|
||||
color: rgba(223, 250, 245, 0.48);
|
||||
font-size: 0.58rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.itworx-signature img {
|
||||
display: block;
|
||||
width: 7.4rem;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.workbench-sidebar > .itworx-signature {
|
||||
margin: 1.25rem 0.45rem 0;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.09);
|
||||
padding-top: 1rem;
|
||||
opacity: 0.88;
|
||||
}
|
||||
|
||||
.sidebar-brand-copy {
|
||||
display: grid;
|
||||
gap: 0.12rem;
|
||||
|
||||
@@ -71,14 +71,10 @@ body.landing-body {
|
||||
}
|
||||
|
||||
.landing-brand-mark {
|
||||
display: grid;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
place-items: center;
|
||||
border: 1px solid #8ec7bc;
|
||||
border-radius: 4px;
|
||||
background: #e7faf6;
|
||||
font-size: 0.76rem;
|
||||
border-radius: 0.48rem;
|
||||
box-shadow: 0 5px 14px rgba(6, 40, 36, 0.19);
|
||||
}
|
||||
|
||||
.landing-nav {
|
||||
@@ -321,6 +317,10 @@ body.landing-body {
|
||||
.landing-footer { display: flex; gap: 2rem; align-items: center; justify-content: space-between; padding: 2rem clamp(1.25rem, 4vw, 4.5rem); background: #061815; color: #fff; }
|
||||
.landing-footer strong { font-family: "Manrope", sans-serif; }
|
||||
.landing-footer p { margin: 0.35rem 0 0; color: rgba(255, 255, 255, 0.58); font-size: 0.7rem; }
|
||||
.landing-footer-ownership { display: grid; gap: 0.65rem; justify-items: end; text-align: right; }
|
||||
.landing-footer .itworx-signature { display: flex; gap: 0.7rem; align-items: center; }
|
||||
.landing-footer .itworx-signature > span { color: rgba(255, 255, 255, 0.48); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; }
|
||||
.landing-footer .itworx-signature img { width: 7.7rem; height: auto; filter: drop-shadow(0 3px 8px rgba(0, 0, 0, 0.25)); }
|
||||
|
||||
.landing-auth-loading {
|
||||
display: grid;
|
||||
@@ -363,6 +363,7 @@ body.landing-body {
|
||||
.landing-workflow { padding: 3.5rem 1rem; }
|
||||
.landing-workflow-map { min-height: 28rem; }
|
||||
.landing-footer { align-items: flex-start; flex-direction: column; }
|
||||
.landing-footer-ownership { justify-items: start; text-align: left; }
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
|
||||
Reference in New Issue
Block a user