Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// /admin/connexion — la porte du panel, version signature : mur encre avec3// filigrane KA géant et lignes « ce que le panel contient » à gauche,4// carte de connexion à ombre dure à droite. Mobile : la carte seule, sur5// un condensé du mur. Hors du groupe (panel) : pas de garde ici.6import type { Metadata } from "next";7import { redirect } from "next/navigation";8import { getAdminSession } from "@/lib/comms/admin-auth";9import LoginForm from "./LoginForm";1011export const metadata: Metadata = {12 title: "Connexion — administration",13 robots: { index: false, follow: false },14};1516const LINES: [string, string][] = [17 ["Inbox", "les demandes des 10 formulaires publics, priorisées et assignées"],18 ["Courriel", "erikabc@ et spboucher@groupe-ka.com — envoi et réception Resend"],19 ["Candidatures", "le pipeline d'embauche, du CV à l'offre"],20 ["Équipe & accès", "rôles, confidentialité et mots de passe"],21];2223export default async function AdminLoginPage() {24 if (await getAdminSession()) redirect("/admin");25 return (26 <main data-admin-root className="min-h-[100dvh] lg:grid lg:grid-cols-[1.05fr_1fr]">27 {/* mur encre — plein écran desktop, manchette compacte mobile */}28 <section className="login-wall flex flex-col justify-between px-6 py-8 lg:px-14 lg:py-12">29 <div className="login-watermark" aria-hidden="true">30 KA31 </div>32 <div className="relative">33 <p className="gk-display text-[26px] font-bold tracking-[-0.04em] lg:text-[32px]">34 Groupe{" "}35 <span className="inline-block -rotate-2 rounded-md bg-lime px-[8px] pb-[3px] text-ink">36 KA37 </span>38 </p>39 <p className="gk-mono mt-2 text-[10px] font-bold tracking-[0.24em] text-[rgba(245,243,238,0.55)] uppercase">40 Communication Hub · Administration41 </p>42 <h1 className="gk-display mt-8 hidden max-w-md text-[clamp(30px,3.2vw,44px)] leading-[1.02] font-bold tracking-[-0.035em] uppercase lg:block">43 Une seule porte.44 <br />45 Tout le <span className="text-lime">courrier</span> du groupe.46 </h1>47 </div>48 <div className="relative mt-8 hidden lg:block">49 {LINES.map(([k, v]) => (50 <p key={k} className="login-line">51 <span className="pulse-dot" aria-hidden="true" />52 <b>{k}</b>53 <span className="font-normal normal-case tracking-normal">{v}</span>54 </p>55 ))}56 <p className="gk-mono mt-6 text-[9.5px] font-bold tracking-[0.18em] text-[rgba(245,243,238,0.35)] uppercase">57 Accès réservé · toutes les actions sont journalisées · RBAC serveur58 </p>59 </div>60 </section>6162 {/* carte de connexion */}63 <section className="flex flex-1 items-start justify-center bg-ink px-4 pt-6 pb-14 lg:items-center lg:bg-paper lg:px-10 lg:pt-10">64 <div className="w-full max-w-[400px]">65 <div className="login-card p-7 sm:p-9">66 <p className="kicker">Connexion</p>67 <h2 className="gk-display mt-3 text-[24px] leading-tight font-bold tracking-[-0.03em]">68 Ouvrir le panel69 </h2>70 <p className="mt-2 text-[13px] leading-relaxed text-ink-2">71 Votre boîte courriel, l'inbox des demandes et le pipeline —72 au même endroit.73 </p>74 <div className="mt-6">75 <LoginForm />76 </div>77 </div>78 <p className="gk-mono mt-5 text-center text-[9.5px] font-bold tracking-[0.16em] text-[rgba(245,243,238,0.45)] uppercase lg:text-ink-3">79 Session de 12 heures · chiffrée · révoquée au changement de mot de passe80 </p>81 </div>82 </section>83 </main>84 );85}86