Files
geointel/frontend/src/styles/landing.css
T

1766 lines
35 KiB
CSS

:root {
--landing-canvas: #f4f8f7;
--landing-surface: #ffffff;
--landing-ink: #0b2824;
--landing-ink-soft: #294944;
--landing-muted: #607873;
--landing-primary: #08786c;
--landing-primary-strong: #04584f;
--landing-primary-dark: #073d38;
--landing-mint: #dff7f2;
--landing-mint-strong: #a8e1d7;
--landing-blue: #4e7184;
--landing-line: #c8dbd7;
--landing-line-soft: #dde9e6;
--landing-shadow: 0 30px 90px rgba(9, 48, 42, 0.16);
}
html:has(body.landing-body) {
scroll-behavior: smooth;
}
body.landing-body {
overflow: auto;
background: var(--landing-canvas);
}
.landing-page {
min-width: 20rem;
min-height: 100dvh;
overflow-x: hidden;
background:
radial-gradient(circle at 10% 10%, rgba(153, 224, 211, 0.18), transparent 28rem),
var(--landing-canvas);
color: var(--landing-ink);
font-family: "Public Sans", "Segoe UI", sans-serif;
}
.landing-page *,
.landing-page *::before,
.landing-page *::after {
box-sizing: border-box;
}
.landing-page button,
.landing-page input {
font: inherit;
}
.landing-page button,
.landing-page a {
-webkit-tap-highlight-color: transparent;
}
.landing-page button:not(:disabled),
.landing-page a {
cursor: pointer;
}
.landing-skip-link {
position: fixed;
z-index: 200;
top: -5rem;
left: 1rem;
border-radius: var(--gi-radius-md);
padding: 0.75rem 1rem;
background: var(--landing-primary-dark);
color: #fff;
font-weight: 600;
text-decoration: none;
box-shadow: var(--gi-shadow-md);
}
.landing-skip-link:focus {
top: 0.75rem;
}
.landing-header {
position: fixed;
z-index: 100;
top: 0;
right: 0;
left: 0;
display: grid;
min-height: 4.5rem;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: clamp(1.25rem, 3vw, 3rem);
align-items: center;
border-bottom: 1px solid rgba(104, 139, 132, 0.22);
padding: 0.65rem clamp(1rem, 4vw, 4.5rem);
background: rgba(248, 251, 250, 0.9);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.78) inset;
backdrop-filter: blur(18px) saturate(1.25);
}
.landing-brand {
display: inline-flex;
min-width: max-content;
gap: 0.7rem;
align-items: center;
color: var(--landing-ink);
text-decoration: none;
}
.landing-brand-mark {
width: 2.35rem;
height: 2.35rem;
border-radius: var(--gi-radius-md);
box-shadow: var(--gi-shadow-md);
}
.landing-brand-copy {
display: grid;
gap: 0.08rem;
}
.landing-brand-copy strong {
font-family: "Manrope", "Segoe UI", sans-serif;
font-size: 0.97rem;
letter-spacing: -0.02em;
}
.landing-brand-copy small {
color: var(--landing-muted);
font-size: 0.59rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.landing-nav {
display: flex;
gap: clamp(1.15rem, 2.5vw, 2.2rem);
align-items: center;
}
.landing-nav a {
position: relative;
padding: 0.55rem 0;
color: #3c5a55;
font-size: 0.78rem;
font-weight: 600;
text-decoration: none;
}
.landing-nav a::after {
position: absolute;
right: 0;
bottom: 0.25rem;
left: 0;
height: 2px;
border-radius: var(--gi-radius-pill);
background: var(--landing-primary);
content: '';
opacity: 0;
transform: scaleX(0.4);
transition: 160ms ease;
}
.landing-nav a:hover,
.landing-nav a:focus-visible {
color: var(--landing-primary-strong);
}
.landing-nav a:hover::after,
.landing-nav a:focus-visible::after {
opacity: 1;
transform: scaleX(1);
}
.landing-header-actions {
display: flex;
gap: 0.55rem;
align-items: center;
}
.landing-header-login,
.landing-header-guest {
min-height: 2.55rem;
border-radius: var(--gi-radius-md);
padding: 0.5rem 1rem;
font-size: 0.76rem;
font-weight: 600;
transition: border-color 160ms ease, background 160ms ease, color 160ms ease, transform 160ms ease;
}
.landing-header-login {
border: 1px solid var(--landing-primary);
background: var(--landing-primary);
color: #fff;
box-shadow: var(--gi-shadow-md);
}
.landing-header-guest {
border: 1px solid #a9c8c2;
background: rgba(255, 255, 255, 0.72);
color: var(--landing-primary-strong);
}
.landing-header-login:hover:not(:disabled),
.landing-header-guest:hover:not(:disabled) {
transform: translateY(-1px);
}
.landing-header-login:hover:not(:disabled) {
background: var(--landing-primary-strong);
}
.landing-header-guest:hover:not(:disabled) {
border-color: var(--landing-primary);
background: #fff;
}
.landing-header-login:disabled,
.landing-header-guest:disabled {
cursor: wait;
opacity: 0.62;
}
.landing-menu-toggle {
display: none;
}
.landing-hero {
position: relative;
min-height: 52rem;
overflow: hidden;
padding: clamp(7.5rem, 10vw, 9.25rem) clamp(1.25rem, 5vw, 5.5rem) clamp(4.25rem, 6vw, 6.5rem);
isolation: isolate;
}
.landing-hero::before {
position: absolute;
z-index: -4;
inset: 0;
background:
linear-gradient(112deg, rgba(244, 250, 248, 1) 8%, rgba(241, 249, 247, 0.96) 45%, rgba(225, 241, 237, 0.77) 100%),
url('/portfolio/geointel-belgium-north-sea-hero.webp') center / cover;
content: '';
}
.landing-hero::after {
position: absolute;
z-index: -3;
inset: auto 0 0;
height: 8rem;
background: linear-gradient(transparent, var(--landing-canvas));
content: '';
}
.landing-hero-orbit {
position: absolute;
z-index: -2;
border: 1px solid rgba(68, 139, 128, 0.16);
border-radius: 50%;
pointer-events: none;
}
.landing-hero-orbit::before,
.landing-hero-orbit::after {
position: absolute;
border-radius: 50%;
background: rgba(8, 120, 108, 0.2);
box-shadow: 0 0 0 7px rgba(8, 120, 108, 0.07);
content: '';
}
.landing-hero-orbit-one {
top: 3rem;
right: -14rem;
width: 42rem;
height: 42rem;
}
.landing-hero-orbit-one::before {
top: 8rem;
left: 1.4rem;
width: 0.55rem;
height: 0.55rem;
}
.landing-hero-orbit-one::after {
right: 8rem;
bottom: 2.4rem;
width: 0.4rem;
height: 0.4rem;
}
.landing-hero-orbit-two {
bottom: -24rem;
left: -22rem;
width: 52rem;
height: 52rem;
}
.landing-hero-content {
display: grid;
width: min(86rem, 100%);
grid-template-columns: minmax(0, 1.05fr) minmax(25rem, 0.82fr);
gap: clamp(3.2rem, 7vw, 7.5rem);
align-items: center;
margin: 0 auto;
}
.landing-hero-copy {
max-width: 45rem;
padding-block: 1rem;
}
.landing-kicker,
.landing-section-heading > p,
.landing-workflow-eyebrow {
display: inline-flex;
gap: 0.5rem;
align-items: center;
margin: 0;
color: var(--landing-primary-strong);
font-size: 0.67rem;
font-weight: 700;
letter-spacing: 0.105em;
text-transform: uppercase;
}
.landing-kicker {
border: 1px solid rgba(104, 182, 169, 0.52);
border-radius: var(--gi-radius-pill);
padding: 0.48rem 0.8rem;
background: rgba(225, 250, 245, 0.82);
box-shadow: var(--gi-shadow-md);
}
.landing-kicker svg {
width: 0.9rem;
height: 0.9rem;
}
.landing-hero h1 {
max-width: 43rem;
margin: 1.45rem 0 0;
color: var(--landing-ink);
font-family: "Manrope", "Segoe UI", sans-serif;
font-size: clamp(3.1rem, 5.2vw, 5.35rem);
font-weight: 600;
letter-spacing: -0.06em;
line-height: 0.99;
text-wrap: balance;
}
.landing-hero h1 span {
display: block;
color: var(--landing-primary);
}
.landing-lead {
max-width: 42rem;
margin: 1.55rem 0 0;
color: var(--landing-ink-soft);
font-size: clamp(1rem, 1.25vw, 1.14rem);
line-height: 1.68;
}
.landing-hero-actions {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin-top: 2rem;
}
.landing-primary-action,
.landing-secondary-action {
display: inline-flex;
min-height: 3.25rem;
gap: 0.6rem;
align-items: center;
justify-content: center;
border-radius: var(--gi-radius-md);
padding: 0.8rem 1.2rem;
font-size: 0.82rem;
font-weight: 600;
text-decoration: none;
transition: border-color 160ms ease, background 160ms ease, color 160ms ease, transform 160ms ease, box-shadow 160ms ease;
}
.landing-primary-action {
border: 1px solid var(--landing-primary);
background: var(--landing-primary);
color: #fff;
box-shadow: var(--gi-shadow-md);
}
.landing-secondary-action {
border: 1px solid #a9c4bf;
background: rgba(255, 255, 255, 0.76);
color: var(--landing-ink);
backdrop-filter: blur(9px);
}
.landing-primary-action:hover:not(:disabled),
.landing-secondary-action:hover {
transform: translateY(-2px);
}
.landing-primary-action:hover:not(:disabled) {
background: var(--landing-primary-strong);
box-shadow: var(--gi-shadow-md);
}
.landing-secondary-action:hover {
border-color: var(--landing-primary);
background: #fff;
color: var(--landing-primary-strong);
}
.landing-primary-action svg,
.landing-secondary-action svg {
width: 1.05rem;
height: 1.05rem;
}
.landing-primary-action:disabled {
cursor: wait;
opacity: 0.72;
}
.landing-proof-row {
display: grid;
max-width: 43rem;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0.55rem;
margin-top: 2.25rem;
}
.landing-proof-row > div {
display: grid;
min-width: 0;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.55rem;
align-items: start;
border-left: 1px solid rgba(99, 139, 132, 0.42);
padding: 0.18rem 0.75rem;
}
.landing-proof-row > div:first-child {
border-left: 0;
padding-left: 0;
}
.landing-proof-row svg {
width: 0.9rem;
height: 0.9rem;
margin-top: 0.08rem;
color: var(--landing-primary);
}
.landing-proof-row span {
display: grid;
min-width: 0;
gap: 0.16rem;
}
.landing-proof-row strong,
.landing-proof-row small {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.landing-proof-row strong {
color: var(--landing-ink);
font-size: 0.71rem;
}
.landing-proof-row small {
color: var(--landing-muted);
font-size: 0.62rem;
}
.landing-access-card {
position: relative;
overflow: hidden;
border: 1px solid rgba(103, 147, 138, 0.48);
border-radius: var(--gi-radius-xl);
background: rgba(255, 255, 255, 0.96);
box-shadow: var(--landing-shadow);
scroll-margin-top: 6rem;
backdrop-filter: blur(16px);
}
.landing-access-card::before {
position: absolute;
z-index: 3;
top: 0;
right: 0;
left: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.96), transparent);
content: '';
}
.landing-access-preview {
position: relative;
display: grid;
min-height: 12.6rem;
overflow: hidden;
align-content: space-between;
padding: 1rem;
background:
linear-gradient(160deg, rgba(4, 39, 35, 0.28), rgba(3, 34, 31, 0.83)),
url('/landing-hero-belgium.webp') center 42% / cover;
color: #fff;
isolation: isolate;
}
.landing-access-preview::before {
position: absolute;
z-index: -1;
inset: 0;
background-image:
linear-gradient(rgba(164, 228, 216, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(164, 228, 216, 0.08) 1px, transparent 1px);
background-size: 28px 28px;
content: '';
}
.landing-access-preview::after {
position: absolute;
z-index: -1;
top: 35%;
left: 37%;
width: 9.5rem;
height: 6rem;
border: 1px solid rgba(116, 224, 204, 0.72);
border-radius: 45% 55% 52% 48% / 48% 46% 54% 52%;
background: rgba(49, 198, 171, 0.08);
box-shadow: 0 0 0 8px rgba(44, 186, 160, 0.03);
content: '';
transform: rotate(-8deg);
}
.landing-preview-toolbar {
display: flex;
gap: 1rem;
align-items: center;
justify-content: space-between;
color: rgba(255, 255, 255, 0.78);
font-size: 0.61rem;
font-weight: 600;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.landing-preview-toolbar span:first-child {
display: inline-flex;
gap: 0.4rem;
align-items: center;
}
.landing-preview-toolbar i {
width: 0.45rem;
height: 0.45rem;
border-radius: 50%;
background: #65e3ca;
box-shadow: 0 0 0 5px rgba(101, 227, 202, 0.15);
}
.landing-preview-focus {
display: grid;
width: fit-content;
max-width: calc(100% - 1rem);
grid-template-columns: auto minmax(0, 1fr);
gap: 0.75rem;
align-items: center;
margin: 1.4rem auto 1.1rem 0.7rem;
border: 1px solid rgba(189, 240, 230, 0.25);
border-radius: var(--gi-radius-lg);
padding: 0.72rem 0.85rem;
background: rgba(5, 36, 32, 0.78);
box-shadow: var(--gi-shadow-lg);
backdrop-filter: blur(8px);
}
.landing-preview-pin {
display: grid;
width: 2.15rem;
height: 2.15rem;
place-items: center;
border-radius: var(--gi-radius-md);
background: rgba(83, 223, 196, 0.16);
color: #7be7d1;
}
.landing-preview-pin svg {
width: 1.05rem;
}
.landing-preview-focus > div {
display: grid;
gap: 0.08rem;
}
.landing-preview-focus small,
.landing-preview-focus span {
color: rgba(255, 255, 255, 0.65);
font-size: 0.58rem;
}
.landing-preview-focus strong {
overflow: hidden;
font-family: "Manrope", sans-serif;
font-size: 0.75rem;
text-overflow: ellipsis;
white-space: nowrap;
}
.landing-preview-metrics {
display: grid;
grid-template-columns: repeat(3, 1fr);
border: 1px solid rgba(214, 246, 240, 0.18);
border-radius: var(--gi-radius-md);
background: rgba(5, 33, 30, 0.66);
backdrop-filter: blur(8px);
}
.landing-preview-metrics > span {
display: grid;
gap: 0.1rem;
border-left: 1px solid rgba(214, 246, 240, 0.14);
padding: 0.55rem 0.65rem;
}
.landing-preview-metrics > span:first-child {
border-left: 0;
}
.landing-preview-metrics strong {
color: #fff;
font-family: "Manrope", sans-serif;
font-size: 0.73rem;
}
.landing-preview-metrics small {
color: rgba(255, 255, 255, 0.61);
font-size: 0.51rem;
white-space: nowrap;
}
.landing-access-body {
padding: clamp(1.3rem, 2.5vw, 1.75rem);
}
.landing-access-heading {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.8rem;
align-items: start;
}
.landing-login-icon,
.landing-guest-icon {
display: grid;
flex: 0 0 auto;
place-items: center;
background: var(--landing-mint);
color: var(--landing-primary);
}
.landing-login-icon {
width: 2.45rem;
height: 2.45rem;
border-radius: var(--gi-radius-md);
}
.landing-login-icon svg,
.landing-guest-icon svg {
width: 1.08rem;
height: 1.08rem;
}
.landing-access-heading > div {
min-width: 0;
}
.landing-access-heading p {
margin: 0 0 0.22rem;
color: var(--landing-primary);
font-size: 0.59rem;
font-weight: 700;
letter-spacing: 0.09em;
text-transform: uppercase;
}
.landing-access-heading h2 {
margin: 0;
font-family: "Manrope", sans-serif;
font-size: clamp(1.15rem, 2vw, 1.38rem);
letter-spacing: -0.025em;
line-height: 1.2;
}
.landing-access-heading > div > span {
display: block;
margin-top: 0.32rem;
color: var(--landing-muted);
font-size: 0.7rem;
line-height: 1.45;
}
.landing-access-card form {
display: grid;
gap: 0.45rem;
margin-top: 1.35rem;
}
.landing-access-card label {
margin-top: 0.35rem;
color: #49645f;
font-size: 0.58rem;
font-weight: 700;
letter-spacing: 0.055em;
text-transform: uppercase;
}
.landing-access-card input {
width: 100%;
min-height: 2.85rem;
border: 1px solid #b8d1cc;
border-radius: var(--gi-radius-md);
padding: 0.7rem 0.78rem;
background: #f4fbf9;
color: var(--landing-ink);
outline: none;
transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
}
.landing-access-card input:hover:not(:disabled) {
border-color: #86b9b0;
background: #f8fdfc;
}
.landing-access-card input:focus {
border-color: var(--landing-primary);
background: #fff;
box-shadow: 0 0 0 3px rgba(8, 120, 108, 0.13);
}
.landing-password-field {
position: relative;
}
.landing-password-field input {
padding-right: 3rem;
}
.landing-password-field > button {
position: absolute;
top: 50%;
right: 0.35rem;
display: grid;
width: 2.15rem;
height: 2.15rem;
place-items: center;
border: 0;
border-radius: var(--gi-radius-sm);
background: transparent;
color: #55716b;
transform: translateY(-50%);
}
.landing-password-field > button:hover:not(:disabled),
.landing-password-field > button:focus-visible {
background: #e6f4f1;
color: var(--landing-primary-strong);
}
.landing-password-field > button svg {
width: 1rem;
height: 1rem;
}
.landing-operator-submit {
display: inline-flex;
min-height: 3rem;
gap: 0.55rem;
align-items: center;
justify-content: center;
margin-top: 0.55rem;
border: 1px solid var(--landing-primary);
border-radius: var(--gi-radius-md);
padding: 0.72rem 1rem;
background: var(--landing-primary);
color: #fff;
font-size: 0.77rem;
font-weight: 600;
box-shadow: var(--gi-shadow-md);
transition: background 160ms ease, transform 160ms ease, box-shadow 160ms ease;
}
.landing-authentik-submit {
display: inline-flex;
min-height: 3rem;
gap: 0.55rem;
align-items: center;
justify-content: center;
border: 1px solid var(--landing-primary);
border-radius: var(--gi-radius-md);
padding: 0.72rem 1rem;
background: var(--landing-primary);
color: #fff;
font-size: 0.77rem;
font-weight: 600;
text-decoration: none;
box-shadow: var(--gi-shadow-md);
transition: background 160ms ease, transform 160ms ease, box-shadow 160ms ease;
}
.landing-authentik-submit:hover {
background: var(--landing-primary-strong);
color: #fff;
}
.landing-authentik-submit:focus-visible {
outline: 3px solid color-mix(in srgb, var(--landing-primary) 38%, transparent);
outline-offset: 2px;
}
.landing-authentik-submit svg {
width: 1rem;
height: 1rem;
}
.landing-operator-submit:hover:not(:disabled) {
background: var(--landing-primary-strong);
box-shadow: var(--gi-shadow-md);
transform: translateY(-1px);
}
.landing-operator-submit:disabled {
cursor: not-allowed;
opacity: 0.5;
}
.landing-operator-submit svg {
width: 1rem;
height: 1rem;
}
.landing-login-error {
margin: 0.5rem 0 0;
border: 1px solid #efc4c1;
border-left: 3px solid #a23e38;
border-radius: var(--gi-radius-sm);
padding: 0.62rem 0.72rem;
background: #fff3f2;
color: #7c2d29;
font-size: 0.68rem;
line-height: 1.45;
}
.landing-access-divider {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 0.65rem;
align-items: center;
margin: 1.15rem 0;
color: #78908b;
font-size: 0.58rem;
font-weight: 600;
}
.landing-access-divider::before,
.landing-access-divider::after {
height: 1px;
background: var(--landing-line-soft);
content: '';
}
.landing-guest-access {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.7rem;
align-items: start;
border: 1px solid #bfe0d9;
border-radius: var(--gi-radius-md);
padding: 0.78rem;
background: linear-gradient(135deg, #f2fcfa, #ecf8f5);
}
.landing-guest-icon {
width: 2.15rem;
height: 2.15rem;
border-radius: var(--gi-radius-md);
}
.landing-guest-access > div {
min-width: 0;
}
.landing-guest-access strong {
font-family: "Manrope", sans-serif;
font-size: 0.76rem;
}
.landing-guest-access p {
margin: 0.25rem 0 0;
color: var(--landing-muted);
font-size: 0.63rem;
line-height: 1.5;
}
.landing-guest-access > button {
grid-column: 1 / -1;
display: inline-flex;
min-height: 2.7rem;
gap: 0.45rem;
align-items: center;
justify-content: space-between;
border: 1px solid #90c8bd;
border-radius: var(--gi-radius-md);
padding: 0.62rem 0.78rem;
background: #fff;
color: var(--landing-primary-strong);
font-size: 0.71rem;
font-weight: 600;
transition: border-color 160ms ease, background 160ms ease, transform 160ms ease;
}
.landing-guest-access > button:hover:not(:disabled) {
border-color: var(--landing-primary);
background: var(--landing-mint);
transform: translateY(-1px);
}
.landing-guest-access > button:disabled {
cursor: wait;
opacity: 0.65;
}
.landing-guest-access > button svg {
width: 0.95rem;
height: 0.95rem;
}
.landing-session-note {
display: flex;
gap: 0.42rem;
align-items: center;
justify-content: center;
margin: 1.05rem 0 0;
color: #708984;
font-size: 0.57rem;
text-align: center;
}
.landing-session-note svg {
width: 0.78rem;
height: 0.78rem;
color: var(--landing-primary);
}
.landing-capabilities {
padding: clamp(4.75rem, 8vw, 7rem) clamp(1.25rem, 5vw, 5.5rem);
background: var(--landing-surface);
}
.landing-section-heading {
width: min(52rem, 100%);
margin: 0 auto 2.7rem;
text-align: center;
}
.landing-section-heading > p {
display: block;
}
.landing-section-heading h2 {
margin: 0.7rem 0 0;
color: var(--landing-ink);
font-family: "Manrope", sans-serif;
font-size: clamp(2rem, 3.5vw, 3.25rem);
letter-spacing: -0.045em;
line-height: 1.08;
text-wrap: balance;
}
.landing-section-heading > span {
display: block;
max-width: 40rem;
margin: 1rem auto 0;
color: var(--landing-muted);
font-size: 0.9rem;
line-height: 1.65;
}
.landing-capability-grid {
display: grid;
width: min(78rem, 100%);
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin: 0 auto;
}
.landing-capability {
position: relative;
overflow: hidden;
min-height: 18rem;
border: 1px solid var(--landing-line-soft);
border-radius: var(--gi-radius-lg);
padding: clamp(1.35rem, 2.5vw, 1.85rem);
background:
linear-gradient(180deg, rgba(242, 250, 248, 0.58), transparent 55%),
#fff;
box-shadow: var(--gi-shadow-lg);
transition: border-color 170ms ease, transform 170ms ease, box-shadow 170ms ease;
}
.landing-capability::after {
position: absolute;
right: -2.5rem;
bottom: -3rem;
width: 9rem;
height: 9rem;
border: 1px solid rgba(100, 177, 164, 0.18);
border-radius: 50%;
content: '';
}
.landing-capability:hover {
border-color: #acd1ca;
box-shadow: var(--gi-shadow-lg);
transform: translateY(-3px);
}
.landing-capability-topline {
display: flex;
align-items: center;
justify-content: space-between;
}
.landing-capability-icon {
display: grid;
width: 2.85rem;
height: 2.85rem;
place-items: center;
border-radius: var(--gi-radius-lg);
background: var(--landing-mint);
color: var(--landing-primary);
}
.landing-capability-icon svg {
width: 1.25rem;
height: 1.25rem;
}
.landing-capability-topline small {
color: #9aafaa;
font-family: "Manrope", sans-serif;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.1em;
}
.landing-capability h3 {
max-width: 18rem;
margin: 2.3rem 0 0;
font-family: "Manrope", sans-serif;
font-size: 1.25rem;
letter-spacing: -0.025em;
line-height: 1.25;
}
.landing-capability p {
position: relative;
z-index: 1;
margin: 1rem 0 0;
color: var(--landing-muted);
font-size: 0.82rem;
line-height: 1.72;
}
.landing-workflow {
display: grid;
width: min(90rem, 100%);
grid-template-columns: minmax(0, 1.06fr) minmax(25rem, 0.94fr);
gap: clamp(2rem, 5vw, 5rem);
align-items: center;
margin: 0 auto;
padding: clamp(4.5rem, 8vw, 7.5rem) clamp(1.25rem, 5vw, 5.5rem);
}
.landing-workflow-visual {
position: relative;
min-height: 37rem;
overflow: hidden;
border: 1px solid rgba(115, 151, 144, 0.45);
border-radius: var(--gi-radius-xl);
background: #0a2824;
box-shadow: var(--gi-shadow-lg);
isolation: isolate;
}
.landing-workflow-map-image {
position: absolute;
z-index: -2;
inset: 0;
background-image: url('/landing-hero-belgium.webp');
background-position: center;
background-size: cover;
filter: brightness(0.54) saturate(0.7) contrast(1.05);
transform: scale(1.02);
}
.landing-workflow-visual::before {
position: absolute;
z-index: -1;
inset: 0;
background:
linear-gradient(180deg, rgba(2, 30, 27, 0.12), rgba(3, 27, 24, 0.92)),
radial-gradient(circle at 65% 35%, rgba(56, 198, 171, 0.17), transparent 12rem);
content: '';
}
.landing-workflow-visual::after {
position: absolute;
top: 20%;
right: 17%;
width: 11rem;
height: 8rem;
border: 1px solid rgba(93, 226, 201, 0.66);
border-radius: 48% 52% 61% 39% / 41% 45% 55% 59%;
background: rgba(46, 187, 161, 0.09);
box-shadow: 0 0 0 12px rgba(46, 187, 161, 0.025);
content: '';
transform: rotate(7deg);
}
.landing-workflow-overlay {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: clamp(1.7rem, 4vw, 3rem);
color: #fff;
}
.landing-workflow-overlay > p {
margin: 0 0 0.7rem;
color: #7be6d1;
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.landing-workflow-overlay h2 {
max-width: 33rem;
margin: 0;
font-family: "Manrope", sans-serif;
font-size: clamp(2rem, 3.5vw, 3.2rem);
letter-spacing: -0.045em;
line-height: 1.06;
text-wrap: balance;
}
.landing-workflow-overlay > span {
display: block;
max-width: 32rem;
margin-top: 0.9rem;
color: rgba(255, 255, 255, 0.66);
font-size: 0.75rem;
line-height: 1.55;
}
.landing-workflow-floating {
position: absolute;
top: 9%;
left: 7%;
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.65rem;
align-items: center;
border: 1px solid rgba(202, 244, 236, 0.28);
border-radius: var(--gi-radius-md);
padding: 0.68rem 0.78rem;
background: rgba(4, 38, 34, 0.76);
color: #fff;
box-shadow: var(--gi-shadow-lg);
backdrop-filter: blur(10px);
}
.landing-workflow-floating > svg {
width: 1rem;
height: 1rem;
color: #7be6d1;
}
.landing-workflow-floating > span {
display: grid;
gap: 0.12rem;
}
.landing-workflow-floating small {
color: rgba(255, 255, 255, 0.61);
font-size: 0.55rem;
}
.landing-workflow-floating strong {
font-size: 0.67rem;
}
.landing-workflow-content > h2 {
margin: 0.7rem 0 0;
font-family: "Manrope", sans-serif;
font-size: clamp(1.9rem, 3vw, 2.85rem);
letter-spacing: -0.04em;
line-height: 1.1;
text-wrap: balance;
}
.landing-workflow-steps {
display: grid;
gap: 0;
margin-top: 2rem;
border-top: 1px solid var(--landing-line);
}
.landing-workflow-steps article {
display: grid;
grid-template-columns: 2.35rem minmax(0, 1fr);
gap: 0.95rem;
align-items: start;
border-bottom: 1px solid var(--landing-line);
padding: 1.1rem 0;
}
.landing-workflow-steps article > span {
display: grid;
width: 2rem;
height: 2rem;
place-items: center;
border-radius: var(--gi-radius-md);
background: var(--landing-mint);
color: var(--landing-primary-strong);
font-family: "Manrope", sans-serif;
font-size: 0.61rem;
font-weight: 700;
}
.landing-workflow-steps h3 {
margin: 0;
font-family: "Manrope", sans-serif;
font-size: 0.95rem;
}
.landing-workflow-steps p {
margin: 0.28rem 0 0;
color: var(--landing-muted);
font-size: 0.72rem;
line-height: 1.55;
}
.landing-quality-callout {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 0.9rem;
align-items: start;
margin-top: 1.35rem;
border: 1px solid #c2ddd7;
border-radius: var(--gi-radius-lg);
padding: 1rem;
background: linear-gradient(135deg, #effbf8, #f7fcfb);
scroll-margin-top: 6rem;
}
.landing-quality-callout > svg {
width: 1.15rem;
height: 1.15rem;
margin-top: 0.08rem;
color: var(--landing-primary);
}
.landing-quality-callout strong {
font-family: "Manrope", sans-serif;
font-size: 0.8rem;
}
.landing-quality-callout p {
margin: 0.35rem 0 0;
color: var(--landing-muted);
font-size: 0.68rem;
line-height: 1.55;
}
.landing-footer {
display: flex;
gap: 2rem;
align-items: center;
justify-content: space-between;
border-top: 1px solid rgba(134, 190, 179, 0.12);
padding: 2.3rem clamp(1.25rem, 4vw, 4.5rem);
background:
radial-gradient(circle at 85% 0%, rgba(26, 118, 103, 0.22), transparent 18rem),
#051b18;
color: #fff;
}
.landing-footer-brand {
display: flex;
gap: 0.85rem;
align-items: center;
}
.landing-footer-mark {
width: 2.25rem;
height: 2.25rem;
border-radius: var(--gi-radius-md);
}
.landing-footer strong {
font-family: "Manrope", sans-serif;
font-size: 0.82rem;
}
.landing-footer p {
margin: 0.3rem 0 0;
color: rgba(255, 255, 255, 0.55);
font-size: 0.62rem;
}
.landing-footer-ownership {
display: grid;
gap: 0.55rem;
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.45);
font-size: 0.53rem;
font-weight: 600;
letter-spacing: 0.07em;
text-transform: uppercase;
}
.landing-footer .itworx-signature img {
width: 7.8rem;
height: auto;
filter: drop-shadow(0 3px 8px rgba(0, 0, 0, 0.25));
}
.landing-auth-loading {
display: grid;
min-height: 100dvh;
place-items: center;
background:
radial-gradient(circle at 50% 40%, rgba(142, 220, 206, 0.25), transparent 18rem),
#eef8f5;
color: var(--landing-primary-strong);
font-family: "Manrope", sans-serif;
}
.landing-auth-loading > div {
display: grid;
gap: 0.8rem;
justify-items: center;
}
.landing-auth-loading span {
width: 2.15rem;
height: 2.15rem;
border: 3px solid #b8dcd5;
border-top-color: var(--landing-primary);
border-radius: 50%;
animation: landing-spin 0.8s linear infinite;
}
@keyframes landing-spin {
to { transform: rotate(360deg); }
}
@media (max-width: 1050px) {
.landing-hero-content {
grid-template-columns: minmax(0, 1fr) minmax(23rem, 0.82fr);
gap: 2.5rem;
}
.landing-hero h1 {
font-size: clamp(3rem, 5.5vw, 4.35rem);
}
.landing-proof-row {
grid-template-columns: 1fr;
gap: 0.55rem;
}
.landing-proof-row > div,
.landing-proof-row > div:first-child {
border-left: 2px solid rgba(99, 139, 132, 0.42);
padding-left: 0.7rem;
}
.landing-proof-row strong,
.landing-proof-row small {
white-space: normal;
}
}
@media (max-width: 900px) {
.landing-header {
grid-template-columns: auto auto auto;
gap: 0.65rem;
}
.landing-menu-toggle {
display: grid;
width: 2.45rem;
height: 2.45rem;
place-items: center;
border: 1px solid var(--landing-line);
border-radius: var(--gi-radius-md);
background: rgba(255, 255, 255, 0.9);
color: var(--landing-ink);
}
.landing-menu-toggle svg {
width: 1.08rem;
height: 1.08rem;
}
.landing-nav {
position: absolute;
top: calc(100% + 0.35rem);
right: 1rem;
left: 1rem;
display: none;
flex-direction: column;
gap: 0;
align-items: stretch;
overflow: hidden;
border: 1px solid var(--landing-line);
border-radius: var(--gi-radius-lg);
padding: 0.35rem;
background: rgba(255, 255, 255, 0.98);
box-shadow: var(--gi-shadow-lg);
}
.landing-nav-open {
display: flex;
}
.landing-nav a {
border-radius: var(--gi-radius-md);
padding: 0.75rem 0.8rem;
}
.landing-nav a:hover,
.landing-nav a:focus-visible {
background: #eff8f6;
}
.landing-nav a::after {
display: none;
}
.landing-hero {
min-height: auto;
padding-top: 7rem;
}
.landing-hero-content {
width: min(44rem, 100%);
grid-template-columns: 1fr;
gap: 2.5rem;
}
.landing-hero-copy {
max-width: none;
}
.landing-proof-row {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.landing-proof-row > div,
.landing-proof-row > div:first-child {
border-left-width: 1px;
padding-left: 0.65rem;
}
.landing-proof-row > div:first-child {
border-left: 0;
padding-left: 0;
}
.landing-access-card {
width: min(34rem, 100%);
margin-inline: auto;
}
.landing-capability-grid {
grid-template-columns: 1fr;
}
.landing-capability {
min-height: 0;
}
.landing-capability h3 {
margin-top: 1.5rem;
}
.landing-workflow {
width: min(46rem, 100%);
grid-template-columns: 1fr;
}
.landing-workflow-visual {
min-height: 31rem;
}
}
@media (max-width: 640px) {
.landing-header {
min-height: 4.1rem;
grid-template-columns: minmax(0, 1fr) auto auto;
padding-inline: 0.75rem;
}
.landing-brand-mark {
width: 2rem;
height: 2rem;
}
.landing-brand-copy strong {
font-size: 0.85rem;
}
.landing-brand-copy small {
display: none;
}
.landing-header-actions {
gap: 0.35rem;
}
.landing-header-guest {
display: none;
}
.landing-header-login {
min-height: 2.35rem;
padding: 0.45rem 0.75rem;
font-size: 0.69rem;
}
.landing-menu-toggle {
width: 2.35rem;
height: 2.35rem;
}
.landing-hero {
padding: 6.25rem 1rem 3.75rem;
}
.landing-hero-orbit-one {
right: -24rem;
}
.landing-kicker {
width: fit-content;
max-width: 100%;
padding: 0.42rem 0.65rem;
font-size: 0.58rem;
line-height: 1.35;
}
.landing-hero h1 {
margin-top: 1.2rem;
font-size: clamp(2.65rem, 13.5vw, 3.75rem);
letter-spacing: -0.055em;
}
.landing-lead {
margin-top: 1.25rem;
font-size: 0.92rem;
line-height: 1.65;
}
.landing-hero-actions {
align-items: stretch;
flex-direction: column;
margin-top: 1.55rem;
}
.landing-primary-action,
.landing-secondary-action {
width: 100%;
min-height: 3.15rem;
}
.landing-proof-row {
grid-template-columns: 1fr;
gap: 0.48rem;
margin-top: 1.6rem;
}
.landing-proof-row > div,
.landing-proof-row > div:first-child {
border-left: 2px solid rgba(99, 139, 132, 0.42);
padding: 0.12rem 0 0.12rem 0.65rem;
}
.landing-access-preview {
min-height: 11.5rem;
}
.landing-preview-focus {
margin-left: 0;
}
.landing-preview-metrics small {
overflow: hidden;
text-overflow: ellipsis;
}
.landing-access-body {
padding: 1.15rem;
}
.landing-access-heading {
grid-template-columns: 2.25rem minmax(0, 1fr);
gap: 0.65rem;
}
.landing-login-icon {
width: 2.25rem;
height: 2.25rem;
}
.landing-access-heading h2 {
font-size: 1.12rem;
}
.landing-access-heading > div > span {
font-size: 0.65rem;
}
.landing-capabilities,
.landing-workflow {
padding: 3.75rem 1rem;
}
.landing-section-heading {
margin-bottom: 2rem;
text-align: left;
}
.landing-section-heading > p {
display: inline-flex;
}
.landing-section-heading h2 {
font-size: 2.05rem;
}
.landing-section-heading > span {
margin-left: 0;
font-size: 0.82rem;
}
.landing-capability {
padding: 1.25rem;
}
.landing-workflow {
gap: 2.5rem;
}
.landing-workflow-visual {
min-height: 28rem;
}
.landing-workflow-visual::after {
top: 20%;
right: 8%;
width: 8rem;
height: 6rem;
}
.landing-workflow-floating {
top: 1rem;
right: 1rem;
left: 1rem;
}
.landing-workflow-overlay {
padding: 1.35rem;
}
.landing-workflow-overlay h2 {
font-size: 2rem;
}
.landing-workflow-content > h2 {
font-size: 2rem;
}
.landing-footer {
align-items: flex-start;
flex-direction: column;
padding: 2rem 1rem;
}
.landing-footer-ownership {
justify-items: start;
text-align: left;
}
}
@media (max-width: 390px) {
.landing-brand-copy strong {
font-size: 0.78rem;
}
.landing-preview-toolbar span:last-child {
display: none;
}
.landing-preview-metrics > span {
padding-inline: 0.45rem;
}
.landing-preview-metrics small {
font-size: 0.46rem;
}
}
@media (prefers-reduced-motion: reduce) {
html:has(body.landing-body) {
scroll-behavior: auto;
}
.landing-page *,
.landing-page *::before,
.landing-page *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}
/* De storingsmelding onder de knop, zolang de bezoeker nog niets geprobeerd
heeft. Een mededeling, geen fout: zie de toelichting in LandingPage.tsx. */
.landing-login-note {
margin: 0.7rem 0 0;
color: var(--landing-muted);
font-size: 0.78rem;
line-height: 1.45;
text-align: center;
}