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

Welkom terug

Open je persoonlijke vacatureselectie.

- {% if form.errors %}
Gebruikersnaam of wachtwoord klopt niet.
{% endif %} -
{% csrf_token %}
-

Beveiligde lokale toegang via je eigen netwerk, VPN of reverse proxy.

-
+
+
+ + + + +
+
+

Beveiligde toegang

Welkom terug

Open je persoonlijke intelligence cockpit.

+ {% if form.errors %}{% endif %} +
{% csrf_token %}{{ form.username }}{{ form.password }}{% if next %}{% endif %}
+
Lokale, afgeschermde sessieJe gegevens blijven binnen de geconfigureerde omgeving.
+
+
{% endblock %}