diff --git a/static/css/pages.css b/static/css/pages.css
index df3e4ef..10649d3 100644
--- a/static/css/pages.css
+++ b/static/css/pages.css
@@ -66,6 +66,83 @@
.command-panel { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.command-panel pre { margin: 6px 0 0; padding: 10px; background: var(--surface-lowest); color: var(--emerald); }
.auth-card .stack label { color: var(--text); font-size: 13px; }
+.login-cockpit { display: grid; width: min(1120px, 100%); min-height: min(720px, calc(100vh - 48px)); grid-template-columns: minmax(0, 1.15fr) minmax(380px, .85fr); overflow: hidden; border: 1px solid color-mix(in srgb, var(--outline) 58%, transparent); background: var(--surface-low); box-shadow: 0 38px 120px rgba(0,0,0,.42), var(--shadow-signal); }
+.login-intelligence { position: relative; display: flex; overflow: hidden; flex-direction: column; justify-content: space-between; padding: clamp(28px, 4vw, 58px); border-right: 1px solid color-mix(in srgb, var(--cyan) 20%, var(--outline)); background: radial-gradient(circle at 72% 35%, color-mix(in srgb, var(--cyan) 9%, transparent), transparent 15rem), linear-gradient(145deg, color-mix(in srgb, var(--surface-container) 90%, var(--indigo)), var(--surface-lowest)); }
+.login-brandline { position: relative; z-index: 2; display: flex; align-items: center; gap: 12px; }
+.login-brandline strong, .login-brandline small { display: block; }
+.login-brandline strong { color: var(--text-strong); font: 700 19px var(--font-headline); }
+.login-brandline small { margin-top: 4px; font: 10px var(--font-mono); letter-spacing: .13em; text-transform: uppercase; }
+.login-radar { position: absolute; top: 18%; right: -6%; width: min(31vw, 390px); aspect-ratio: 1; border: 1px solid color-mix(in srgb, var(--cyan) 22%, transparent); border-radius: 50%; opacity: .75; }
+.login-radar::before, .login-radar::after, .login-radar span { position: absolute; inset: 15%; content: ""; border: 1px solid color-mix(in srgb, var(--cyan) 18%, transparent); border-radius: 50%; }
+.login-radar::after { inset: 31%; }
+.login-radar span:nth-child(1) { inset: 46% 0 auto 0; border: 0; border-top: 1px solid color-mix(in srgb, var(--cyan) 22%, transparent); border-radius: 0; transform: rotate(-24deg); transform-origin: center; }
+.login-radar span:nth-child(2) { inset: 0 auto 0 50%; border: 0; border-left: 1px solid color-mix(in srgb, var(--cyan) 18%, transparent); border-radius: 0; }
+.login-radar i { position: absolute; top: 38%; left: 32%; width: 9px; height: 9px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 0 6px color-mix(in srgb, var(--cyan) 10%, transparent), 0 0 22px var(--cyan); }
+.login-intro { position: relative; z-index: 2; max-width: 570px; margin-top: auto; }
+.login-intro h1 { max-width: 560px; margin-bottom: 18px; font-size: clamp(35px, 4.3vw, 62px); line-height: .98; }
+.login-intro > p:last-child { max-width: 520px; color: var(--text-muted); font-size: 16px; line-height: 1.6; }
+.login-signals { position: relative; z-index: 2; display: flex; flex-wrap: wrap; gap: 10px 18px; margin: 28px 0 0; padding: 22px 0 0; border-top: 1px solid color-mix(in srgb, var(--outline) 36%, transparent); list-style: none; color: var(--text-muted); font: 10px var(--font-mono); text-transform: uppercase; }
+.login-signals li { display: flex; align-items: center; gap: 7px; }
+.login-signals .icon { width: 14px; color: var(--emerald); }
+.login-cockpit .auth-card { align-self: center; width: auto; margin: clamp(24px, 4vw, 52px); padding: 0; border: 0; background: transparent; box-shadow: none; }
+.login-cockpit .auth-brand { margin-bottom: 30px; }
+.login-cockpit .auth-brand h2 { margin: 4px 0 6px; font-size: 30px; }
+.login-cockpit .stack { gap: 9px; margin-top: 22px; }
+.login-cockpit .stack input { margin-bottom: 9px; }
+.login-cockpit .stack .button { margin-top: 12px; }
+.auth-trust { display: flex; align-items: center; gap: 10px; margin-top: 30px; padding-top: 20px; border-top: 1px solid color-mix(in srgb, var(--outline) 38%, transparent); }
+.auth-trust strong, .auth-trust small { display: block; }
+.auth-trust strong { color: var(--text); font-size: 12px; }
+.auth-trust small { margin-top: 3px; font: 10px var(--font-mono); }
+.insight-hero { position: relative; display: grid; min-height: 210px; grid-template-columns: 130px minmax(0, 1fr) auto; align-items: center; gap: 28px; overflow: hidden; margin-bottom: 12px; padding: 28px; border: 1px solid color-mix(in srgb, var(--cyan) 32%, var(--outline)); background: linear-gradient(135deg, color-mix(in srgb, var(--surface-container) 92%, var(--cyan)), var(--surface-low)); box-shadow: var(--shadow-signal); }
+.insight-hero::after { position: absolute; z-index: 0; right: -80px; bottom: -120px; width: 330px; height: 330px; content: ""; border: 1px solid color-mix(in srgb, var(--cyan) 10%, transparent); border-radius: 50%; }
+.insight-hero > * { position: relative; z-index: 1; }
+.insight-hero h2 { max-width: 800px; margin: 7px 0; font-size: clamp(23px, 2.2vw, 34px); }
+.insight-hero p { margin: 0; color: var(--text-muted); }
+.insight-orbit { position: relative; display: grid; width: 122px; height: 122px; place-items: center; border: 1px solid color-mix(in srgb, var(--cyan) 44%, var(--outline)); border-radius: 50%; box-shadow: inset 0 0 28px color-mix(in srgb, var(--cyan) 6%, transparent), 0 0 24px color-mix(in srgb, var(--cyan) 8%, transparent); }
+.insight-orbit::before, .insight-orbit span { position: absolute; content: ""; border: 1px solid color-mix(in srgb, var(--cyan) 22%, transparent); border-radius: 50%; }
+.insight-orbit::before { inset: 16px; }
+.insight-orbit span:nth-child(1) { inset: 42px; }
+.insight-orbit span:nth-child(2) { top: 19px; left: 76px; width: 6px; height: 6px; border: 0; background: var(--cyan); box-shadow: 0 0 10px var(--cyan); }
+.insight-orbit strong { color: var(--cyan); font: 650 25px var(--font-headline); }
+.skill-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 22px; border: solid color-mix(in srgb, var(--outline) 42%, transparent); border-width: 0 1px 1px; background: var(--surface-low); }
+.skill-metrics article { min-height: 104px; padding: 17px; border-right: 1px solid color-mix(in srgb, var(--outline) 32%, transparent); }
+.skill-metrics article:last-child { border-right: 0; }
+.skill-metrics span, .skill-metrics strong, .skill-metrics small { display: block; }
+.skill-metrics span { color: var(--text-faint); font: 9px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; }
+.skill-metrics strong { margin: 10px 0 3px; color: var(--text-strong); font: 650 27px var(--font-headline); }
+.skill-metrics small { font: 10px var(--font-mono); }
+.skill-metrics .metric-accent strong { color: var(--amber); }
+.skills-filter-console { grid-template-columns: minmax(180px, 1fr) minmax(180px, 1fr) auto auto; }
+.skills-insight-layout { display: grid; grid-template-columns: minmax(0, 1fr) 330px; align-items: start; gap: 16px; }
+.skill-demand-list, .skills-method-rail { display: grid; gap: 10px; }
+.skills-method-rail { position: sticky; top: calc(var(--topbar-height) + 18px); }
+.skill-demand-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; overflow: hidden; border: 1px solid color-mix(in srgb, var(--outline) 43%, transparent); background: var(--surface-container); }
+.skill-demand-card.is-gap { border-left: 2px solid var(--amber); }
+.skill-demand-main { padding: 18px; }
+.skill-demand-action { display: flex; min-width: 160px; align-items: center; padding: 16px; border-left: 1px solid color-mix(in srgb, var(--outline) 34%, transparent); background: var(--surface-low); }
+.skill-card-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; }
+.skill-card-heading h3 { margin: 4px 0 0; }
+.skill-category { color: var(--cyan-dim); font: 9px var(--font-mono); letter-spacing: .09em; text-transform: uppercase; }
+.demand-meter { height: 5px; overflow: hidden; margin: 15px 0 8px; background: var(--surface-highest); }
+.demand-meter span { display: block; height: 100%; background: linear-gradient(90deg, var(--indigo), var(--cyan)); }
+.skill-demand-stats { display: flex; flex-wrap: wrap; gap: 5px 16px; color: var(--text-faint); font: 10px var(--font-mono); }
+.skill-demand-stats strong { color: var(--text); }
+.learning-focus { margin: 13px 0; padding: 10px 12px; border-left: 2px solid var(--amber); background: color-mix(in srgb, var(--amber) 5%, var(--surface-high)); color: var(--text-muted); }
+.learning-focus strong { display: block; margin-bottom: 4px; color: var(--amber); font: 9px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; }
+.skill-job-examples { display: grid; gap: 0; margin: 13px 0 0; padding: 0; list-style: none; }
+.skill-job-examples li { display: flex; min-height: 36px; align-items: center; justify-content: space-between; gap: 15px; border-top: 1px solid color-mix(in srgb, var(--outline) 28%, transparent); }
+.skill-job-examples a { color: var(--text); }
+.skill-job-examples span { color: var(--text-faint); font: 9px var(--font-mono); }
+.legend-list, .radar-steps { display: grid; gap: 10px; margin: 14px 0 0; padding: 0; list-style: none; }
+.legend-list li, .radar-steps li { display: flex; align-items: flex-start; gap: 9px; }
+.legend-list strong, .legend-list small, .radar-steps strong, .radar-steps span { display: block; }
+.legend-list small, .radar-steps span { margin-top: 3px; }
+.legend-dot { width: 8px; height: 8px; flex: 0 0 auto; margin-top: 4px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 8px color-mix(in srgb, var(--cyan) 50%, transparent); }
+.legend-dot.inferred { background: var(--indigo); box-shadow: 0 0 8px color-mix(in srgb, var(--indigo) 50%, transparent); }
+.radar-steps { counter-reset: radar-step; }
+.radar-steps li { counter-increment: radar-step; }
+.radar-steps li::before { display: grid; width: 24px; height: 24px; flex: 0 0 auto; place-items: center; content: counter(radar-step, decimal-leading-zero); border: 1px solid var(--outline); color: var(--cyan); font: 9px var(--font-mono); }
.mini-timeline { display: grid; gap: 4px; }
.mini-event { display: flex; align-items: flex-start; gap: 10px; padding: 9px 0; border-top: 1px solid color-mix(in srgb, var(--outline) 30%, transparent); }
.mini-event strong, .mini-event small { display: block; }
diff --git a/static/css/responsive.css b/static/css/responsive.css
index e089e27..8ba25bf 100644
--- a/static/css/responsive.css
+++ b/static/css/responsive.css
@@ -30,6 +30,8 @@
.employer-radar-layout, .employer-detail-grid, .automation-layout { grid-template-columns: 1fr; }
.employer-intelligence-rail { position: static; border-top: 1px solid var(--outline); border-left: 0; }
.automation-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .skills-insight-layout { grid-template-columns: 1fr; }
+ .skills-method-rail { position: static; grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 820px) {
@@ -66,6 +68,17 @@
.automation-status dl { display: grid; grid-template-columns: repeat(3, 1fr); width: 100%; }
.automation-status dl > div { min-width: 0; border-top: 1px solid var(--outline); border-left: 0; padding: 11px 4px; }
.employer-job-grid { grid-template-columns: 1fr; }
+ .login-cockpit { min-height: 0; grid-template-columns: 1fr; }
+ .login-intelligence { min-height: 360px; border-right: 0; border-bottom: 1px solid var(--outline); }
+ .login-radar { width: 310px; }
+ .login-cockpit .auth-card { margin: 34px; }
+ .insight-hero { grid-template-columns: 96px minmax(0, 1fr); }
+ .insight-hero .button { grid-column: 1 / -1; width: fit-content; }
+ .insight-orbit { width: 92px; height: 92px; }
+ .skill-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .skill-metrics article:nth-child(2) { border-right: 0; }
+ .skill-metrics article:nth-child(-n+2) { border-bottom: 1px solid color-mix(in srgb, var(--outline) 32%, transparent); }
+ .skills-method-rail { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
@@ -108,6 +121,19 @@
.match-history a { grid-column: 1 / -1; }
.auth-shell { padding: 14px; }
.auth-card { padding: 22px 18px; }
+ .login-intelligence { min-height: 310px; padding: 24px; }
+ .login-intro h1 { font-size: 34px; }
+ .login-signals { display: none; }
+ .login-radar { top: 3%; right: -34%; width: 290px; }
+ .login-cockpit .auth-card { margin: 28px 20px; padding: 0; }
+ .insight-hero { min-height: 0; grid-template-columns: 1fr; padding: 20px; }
+ .insight-orbit { width: 82px; height: 82px; }
+ .skill-metrics { grid-template-columns: 1fr; }
+ .skill-metrics article { border-right: 0; border-bottom: 1px solid color-mix(in srgb, var(--outline) 32%, transparent); }
+ .skill-demand-card { grid-template-columns: 1fr; }
+ .skill-demand-action { min-width: 0; border-top: 1px solid color-mix(in srgb, var(--outline) 34%, transparent); border-left: 0; }
+ .skill-demand-action .button { width: 100%; }
+ .skill-card-heading, .skill-job-examples li { align-items: flex-start; flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
diff --git a/templates/registration/login.html b/templates/registration/login.html
index 5b5100e..35475c3 100644
--- a/templates/registration/login.html
+++ b/templates/registration/login.html
@@ -1,10 +1,19 @@
{% extends "base.html" %}
{% block title %}Aanmelden · VacatureRadar{% endblock %}
+{% block body_class %}login-page{% endblock %}
{% block content %}
- Intelligence cockpit Open je persoonlijke vacatureselectie. Beveiligde lokale toegang via je eigen netwerk, VPN of reverse proxy.Welkom terug
Persoonlijke vacature-intelligence
Breng vacatures, werkgevers, skillsvraag en opvolging samen in één betrouwbare radar.
Beveiligde toegang
Open je persoonlijke intelligence cockpit.