diff --git a/client/src/App.jsx b/client/src/App.jsx index cf85ad0..d91590d 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -14,11 +14,11 @@ import ProjectManagement from './pages/ProjectManagement' const THEME_COOKIE = 'graphyma-theme' function readThemeCookie() { - if (typeof document === 'undefined') return 'dark' + if (typeof document === 'undefined') return 'light' const match = document.cookie.match(new RegExp(`(?:^|; )${THEME_COOKIE}=([^;]*)`)) const value = match ? decodeURIComponent(match[1]) : '' - return value === 'light' ? 'light' : 'dark' + return value === 'dark' ? 'dark' : 'light' } function writeThemeCookie(theme) { diff --git a/client/src/assets/graphyma_logo2.png b/client/src/assets/graphyma_logo2.png new file mode 100644 index 0000000..54af72c Binary files /dev/null and b/client/src/assets/graphyma_logo2.png differ diff --git a/client/src/components/footer.jsx b/client/src/components/footer.jsx index baa4b41..6e17df1 100644 --- a/client/src/components/footer.jsx +++ b/client/src/components/footer.jsx @@ -47,9 +47,13 @@ export default function Footer() {

Services

diff --git a/client/src/components/navbar.jsx b/client/src/components/navbar.jsx index e2a41b8..6b6c569 100644 --- a/client/src/components/navbar.jsx +++ b/client/src/components/navbar.jsx @@ -3,6 +3,7 @@ import { Link, useLocation } from 'react-router-dom' import { motion, AnimatePresence } from 'framer-motion' import './styles/navbar.css' import graphymaLogo from '../assets/graphyma_logo1.png' +import graphymaLogoLight from '../assets/graphyma_logo2.png' const NAV_LINKS = [ { path: '/', label: 'Home' }, @@ -40,7 +41,7 @@ export default function Navbar({ theme = 'dark', onThemeToggle }) { {/* Logo mark */} - GRAPHYMA + GRAPHYMA GRAPHYMA diff --git a/client/src/index.css b/client/src/index.css index 1f0c4bc..06fb5a0 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -1,41 +1,34 @@ -/* ═══════════════════════════════════════════ - GRAPHYMA — Global Styles - Aesthetic: Dark Orbital Luxury - Palette: Deep teal-black + bioluminescent mint -═══════════════════════════════════════════ */ - -/* Deep teal-black */ -/* :root { - color-scheme: dark; +:root { + color-scheme: light; - --bg: #050c0b; - --bg-rgb: 5, 12, 11; - --bg-alt: #071412; - --bg-alt-rgb: 7, 20, 18; - --bg-card: rgba(13, 255, 196, 0.025); - --bg-card-hover: rgba(13, 255, 196, 0.05); - --surface: #0b1815; - --surface-rgb: 11, 24, 21; - --surface-2: #10211d; - --surface-2-rgb: 16, 33, 29; + --bg: #f8fafc; + --bg-rgb: 248, 250, 252; + --bg-alt: #f1f5f9; + --bg-alt-rgb: 241, 245, 249; + --bg-card: rgba(255, 255, 255, 0.8); + --bg-card-hover: rgba(255, 255, 255, 0.95); + --surface: #ffffff; + --surface-rgb: 255, 255, 255; + --surface-2: #f4f6f8; + --surface-2-rgb: 244, 246, 248; + + --accent: #2563eb; + --accent-rgb: 37, 99, 235; + --accent-2: #4f7cff; + --accent-2-rgb: 79, 124, 255; + --accent-3: #1d4ed8; + --accent-dim: rgba(16, 185, 129, 0.12); + --accent-glow: rgba(16, 185, 129, 0.18); - --accent: #0dffc4; - --accent-rgb: 13, 255, 196; - --accent-2: #00c49a; - --accent-2-rgb: 0, 196, 154; - --accent-3: #007a60; - --accent-dim: rgba(13, 255, 196, 0.1); - --accent-glow: rgba(13, 255, 196, 0.35); - - --text: #ebf7f5; - --text-rgb: 235, 247, 245; - --text-2: #6bbab5; - --text-2-rgb: 107, 186, 181; - --text-3: #2e5f5c; - --text-3-rgb: 46, 95, 92; - - --border: rgba(13, 255, 196, 0.08); - --border-bright: rgba(13, 255, 196, 0.28); + --text: #0f172a; + --text-rgb: 15, 23, 42; + --text-2: #475569; + --text-2-rgb: 71, 85, 105; + --text-3: #94a3b8; + --text-3-rgb: 148, 163, 184; + + --border: rgba(37, 99, 235, 0.08); + --border-bright: rgba(37, 99, 235, 0.28); --shadow-soft: 0 18px 50px rgba(0, 0, 0, 0.24); --shadow-strong: 0 28px 80px rgba(0, 0, 0, 0.36); @@ -50,13 +43,12 @@ --font-display: 'Syne', sans-serif; --font-body: 'DM Sans', sans-serif; --font-mono: 'JetBrains Mono', monospace; -} */ +} - /* Floral Lavender */ -:root { +:root[data-theme='dark'] { color-scheme: dark; - --bg: #050c0b; + --bg: #050c0b; --bg-rgb: 5, 12, 11; --bg-alt: #071412; --bg-alt-rgb: 7, 20, 18; @@ -75,7 +67,7 @@ --accent-dim: rgba(181, 126, 220, 0.1); --accent-glow: rgba(181, 126, 220, 0.35); - --text: #f3eef8; + --text: #f3eef8; --text-rgb: 243, 238, 248; --text-2: #b3a3c7; --text-2-rgb: 179, 163, 199; diff --git a/client/src/pages/About.jsx b/client/src/pages/About.jsx index fb71542..2684ac1 100644 --- a/client/src/pages/About.jsx +++ b/client/src/pages/About.jsx @@ -100,7 +100,7 @@ const STORY_PARAS = [ { label: 'What We Do', heading: 'Intelligence from orbit', - text: 'At its core, GRAPHYMA offers specialised services in satellite data analysis, digital consultancy, professional training, and project management. Its Earth Observation expertise allows the company to develop tailored solutions for environmental challenges, while its broader technological perspective supports clients in digital transformation, operational efficiency, and data-informed planning.', + text: 'GRAPHYMA offers specialised services in satellite data analysis, digital consultancy, professional training, and project management. Its Earth Observation expertise allows the company to develop tailored solutions for environmental challenges, while its broader technological perspective supports clients in digital transformation, operational efficiency, and data-informed planning.', }, { label: 'Our Ambition', @@ -161,7 +161,7 @@ export default function About() { transition={{ delay: 0.6, duration: 0.8 }} className="about-hero-copy" > - GRAPHYMA is not only a startup with technical expertise, but a growing platform for connecting Earth Observation with the challenges and opportunities of the real world. + GRAPYMA is a startup that combines technical expertise with communication and user uptake experience, merging deep science with clear and accessible communication
@@ -235,7 +235,7 @@ export default function About() { {/* ══════════════════════════════════════ CAPABILITIES ══════════════════════════════════════ */} -
+ {/*
@@ -288,7 +288,7 @@ export default function About() { ))}
-
+
*/} {/* ══════════════════════════════════════ VALUES @@ -364,7 +364,7 @@ export default function About() { {/* ══════════════════════════════════════ EXPERTISE BADGES ══════════════════════════════════════ */} -
+ {/*
-
+
*/} {/* ══════════════════════════════════════ CTA @@ -422,7 +422,7 @@ export default function About() { Ready to work with us?

- Whether you are an institution, company, or research body — GRAPHYMA can help you unlock the value of Earth Observation. + Whether you are an institution, company, or research body, GRAPHYMA can help!

diff --git a/client/src/pages/Communications.jsx b/client/src/pages/Communications.jsx index ce3624b..65f5a4e 100644 --- a/client/src/pages/Communications.jsx +++ b/client/src/pages/Communications.jsx @@ -74,7 +74,7 @@ export default function Communications() { transition={{ duration: 0.65, delay: 0.12 }} className="comms-hero-copy" > - We turn technical capability into measurable uptake. Our communication strategy connects EO outputs to real-world decisions, making the value obvious to every stakeholder. + We turn Earth Observation insights into business actions, making the value obvious at every level. + {/*
-
+ */} {/* ══════════════════════════════════════ SERVICES @@ -375,15 +374,6 @@ export default function Home() { Specialised services
built for impact - - We provide specialised services that combine technical expertise, communication, training, and strategic support. -
{/* Service image cards (static visuals) */} @@ -454,7 +444,6 @@ export default function Home() { {/* Satellite dots on outer ring */} - {/* Node labels */} @@ -462,7 +451,7 @@ export default function Home() { { label: 'ESA', top: '47%', left: '5%' }, { label: 'Copernicus',top: '9%', left: '62%' }, { label: 'EUMETSAT', top: '65%', left: '77%' }, - { label: 'JRC', top: '78%', left: '20%' }, + { label: 'ECMWF', top: '78%', left: '20%' }, { label: 'GRAPHYMA', top: '45%', left: '41%' }, ].map(({ label, top, left }) => (
Our Heritage

A legacy shaped by
- Europe's most trusted
- EO entities + Helping organizations unlock the power of
+ Earth Observation

- We inherit a legacy of expertise, shaped by our team's years of collaboration with Europe's most trusted Earth Observation entities — from ESA and Copernicus to EUMETSAT and JRC. + Whether you're a startup, public institution, research organization, or enterprise, we help you navigate the Earth Observation ecosystem with confidence. Our team combines years of experience across Europe's leading EO programmes to transform complex satellite technologies into practical solutions tailored to your goals.

- This foundation gives us a unique vantage point: we understand both the technical depth of satellite systems and the practical needs of the organisations that depend on them. + From identifying the right data and platforms to designing workflows, delivering training, and supporting implementation, we make Earth Observation accessible to organizations of every size and level of expertise.

{/* Tags */} diff --git a/client/src/pages/RemoteSensing.jsx b/client/src/pages/RemoteSensing.jsx index 5409a10..041e69c 100644 --- a/client/src/pages/RemoteSensing.jsx +++ b/client/src/pages/RemoteSensing.jsx @@ -10,11 +10,27 @@ const page = { } const CAPABILITIES = [ - { title: 'Acquisition Strategy', detail: 'Right sensors, right revisit, right data.' }, - { title: 'Pre-processing', detail: 'Radiometric, geometric, and atmospheric corrections.' }, - { title: 'Analytics & Models', detail: 'Indices, ML pipelines, and change detection.' }, - { title: 'Decision Layers', detail: 'Actionable maps and executive-ready outputs.' }, -] + { + title: 'Understand Your Needs', + detail: 'Aligning Earth Observation solutions with your objectives.', + }, + { + title: 'Identify the Right EO Data', + detail: 'Selecting the most suitable satellite data and platforms.', + }, + { + title: 'Analyse & Interpret', + detail: 'Transforming satellite data into meaningful insights.', + }, + { + title: 'Deliver Actionable Insights', + detail: 'Clear reports, dashboards, and decision-ready outputs.', + }, + { + title: 'Support & Capacity Building', + detail: 'Training teams for confident Earth Observation adoption.', + }, +]; function SatelliteGraphic() { return ( @@ -111,7 +127,7 @@ export default function RemoteSensing() { transition={{ duration: 0.65, delay: 0.12 }} className="rs-hero-copy" > - We design end-to-end remote sensing workflows that translate complex satellite data into operational decisions. From sensor selection to advanced analytics, every step is tuned for your mission and timeframe. + We design remote sensing consultancy strategies that integrate directly into our clients' workflows - Every project is built on a proven pipeline that compresses time-to-insight while preserving data quality. We align the pipeline to your operational decisions, not the other way around. + We deliver fast, high-quality insights using a proven process. Most importantly, we adapt our workflow to fit your business decisions, not the other way around.
- {['Ingest', 'Normalize', 'Analyze', 'Validate', 'Deploy'].map((step, i) => ( + {['Understand', 'Identify', 'Analyse', 'Deliver', 'Support'].map((step, i) => (
{String(i + 1).padStart(2, '0')}
diff --git a/client/src/pages/styles/Home.css b/client/src/pages/styles/Home.css index 27a4b1b..835a456 100644 --- a/client/src/pages/styles/Home.css +++ b/client/src/pages/styles/Home.css @@ -172,7 +172,7 @@ .home-stats-grid { display: grid; - grid-template-columns: repeat(5, 1fr); + grid-template-columns: repeat(4, 1fr); gap: 1.5rem; } @@ -192,7 +192,7 @@ .home-stat-label { font-family: var(--font-mono); - font-size: 0.65rem; + font-size: 0.70rem; letter-spacing: 0.15em; color: var(--text-3); text-transform: uppercase; diff --git a/client/src/pages/styles/RemoteSensing.css b/client/src/pages/styles/RemoteSensing.css index 0e20b70..b22a7cc 100644 --- a/client/src/pages/styles/RemoteSensing.css +++ b/client/src/pages/styles/RemoteSensing.css @@ -263,7 +263,7 @@ .rs-stage-list { display: grid; - gap: 1rem; + gap: 3rem; } .rs-stage-row { @@ -309,3 +309,7 @@ letter-spacing: 0.12em; } +.rs-stage-align { + align-self: end; + padding-bottom: 2.2rem; +}