SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
1 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%

History of frontend/src/styles.css · clear filter

  1. Mon, Sep 7, 2026 1

    1. feat(fiche): refonte premium mobile-first de la fiche d'offre (2026-09-07)
      …
      Même socle que les fiches Lou-Ka v3 / Immo-Ka v3 (frontend/src/fiche/,
      préfixe jk-, tokens --jk-*, fond papier, cartes blanches bord 1 px, cyan
      réservé aux CTA/salaire ; header encre conservé en version compacte) :
      héro (logo + employeur · lieu, salaire en exergue + équivalent annuel,
      capsules marché / nouveau / offre directe, titre, actions favoris / partage /
      Postuler) ; « En bref » déterministe (salaire vs médiane de la catégorie,
      source directe ou portail, exigences, mode/type/niveau, fraîcheur et date
      limite, volume de l'employeur, avantages) ; navigation sticky ; « Salaire et
      marché » (KPI, jauge P25–P75 du point médian, historique du salaire affiché,
      méthodologie — jamais d'estimation) ; « Le poste » (grille icône/valeur,
      rangées, avantages, description tronquée, champs bruts en accordéon) ; « Où
      travailler » (carte OSM) ; Dossier de l'offre ; Sources et méthodologie. CTA
      sticky après le héro, aside desktop sticky, « Demander à Ka » via le widget
      KA Agent. Header compact sur /emploi/ (favoris + partage via fiche/current.ts,
      badge masqué). Rangées d'offres de la liste : surface blanche, bord 1 px,
      ombre légère au survol. Icons.tsx (pictos partagés) ajouté. Aucun order CSS ;
      pas de scrollIntoView à l'ouverture. Scripts QA : preview.mjs,
      check-order.mjs, shots.mjs, interactions.mjs (Playwright via lien vers
      vrai-prix/node_modules).
      
      Validé sur M3U96a : tsc + vite build, check-order OK, interactions OK,
      captures 6 largeurs ; dist basculé, aucun changement API.
      Simon-Pierre Boucher committed 17 days ago · 1 file +6 −5
  2. Wed, Aug 26, 2026 1

  3. Tue, Aug 25, 2026 4

    1. Refonte visuelle majeure du front-end : design editorial premium
      …
      - Hero : halo cyan, pastille « marche en direct », recherche centrale
        (barre blanche a ombre decalee cyan) + chiffres live (offres,
        employeurs, % salaire affiche)
      - Filtres : rail de selecteurs discrets sur desktop (pilules, etat
        actif encre/cyan), panneau bas coulissant sur mobile, puces de
        filtres actifs retirables + « Tout effacer »
      - Offres : fini les cartes bordees — rangees editoriales a filets
        fins, titre Space Grotesk, salaire en exergue cyan a droite avec
        equivalent annuel, metadonnees calmes en mono, barre d'accent au
        survol ; favoris alignes sur la meme structure
      - Fiche : mise en page ouverte (plus de grosse boite), metriques en
        blocs a filet superieur, CTA « Postuler » en accent
      - Tableau employeurs allege (filets fins), pagination sobre en mono,
        menu mobile avec entree en cascade, prefers-reduced-motion respecte
      - Bulle KA Agent masquee quand un panneau plein ecran est ouvert
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +407 −130
    2. Nav v2 correctif : le ✕ de fermeture vit DANS le panneau (fixe, toujours visible)
      …
      Le ✕ était le burger du header ; si le header n'est pas épinglé (bas de page),
      il défilait hors écran alors que le panneau fixed restait affiché. Ajout d'un
      .mm-close position:fixed en haut à droite du panneau et burger masqué à
      l'ouverture.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +11 −1
    3. Nav mobile v2 : le dropdown 480px devient un panneau plein écran fixed
      …
      Standard KA 2026-08-25 : .mobile-menu passe de position:absolute top:100%
      (max-height 480px) à position:fixed inset:0 — le menu est visible peu importe
      la position de scroll. Liens numérotés font-display, rang du header (marque +
      burger→✕) maintenu au-dessus du panneau.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +26 −15
    4. Phase 3 — enrichissement des 1050+ connecteurs (exigences, séniorité) + refonte du display des offres avec métriques claires
      …
      Backend (enrichissement central via finalize() -> tous les connecteurs) :
      - normalize.py : extract_requirements() (années d'expérience, scolarité,
        langues exigées, FR/EN, bornes de plausibilité), parse_seniority()
        (stage/junior/intermédiaire/senior/direction : titre, libellés ATS,
        années d'expérience), en-têtes d'avantages élargis
      - schema.py : champ seniority + branchement des extracteurs (setdefault,
        jamais d'écrasement des valeurs ATS)
      - db.py : colonne seniority (migration auto) dans insert/update
      - web.py : filtre + facette séniorité, salary_context (médiane/quartiles
        de la catégorie + écart % de l'offre, cache 10 min), employer_jobs,
        median_salary_year dans /api/stats
      - scripts/backfill_enrich.py : backfill exécuté — 23 680 offres scannées,
        16 606 exigences ajoutées (26 % -> 77 %), 10 966 séniorités (0 -> 46 %)
      - tests/test_enrich.py : 27 nouveaux tests (101 au total, tous verts)
      
      Frontend (display + métriques claires) :
      - JobCard : badge Nouveau (≤3 j), salaire avec équivalent annuel, badges
        séniorité/exigences/bilingue, pied fraîcheur · avantages · plateforme
      - Fiche : panneau « En un coup d'œil » (salaire vs marché avec barre
        interquartile P25-P75, expérience, scolarité, langues, fraîcheur, date
        limite), volume d'offres de l'employeur, historique du salaire affiché
      - Accueil : filtre séniorité ; api.ts : types + helpers (compactMoney,
        yearlyEquiv, daysSince)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +33 −1
  4. Sun, Aug 23, 2026 1

    1. Favoris unifies « Mon univers Ka » (hub KA ID) : coeur sur cartes et fiche, page /favoris
      …
      - jobka/hubfav.py : client du magasin central de favoris du hub Groupe KA
        (HMAC signe, toggle synchrone, lecture cachee 30 s, zero stockage local)
      - jobka/web.py : GET /api/favorites + POST /api/favorites/toggle (session
        KA ID requise, 401 sinon) ; route SPA /favoris
      - jobka/auth.py : parametre next (chemin local, transporte dans le state
        signe) pour revenir a la page courante apres la connexion KA ID
      - frontend : favorites.tsx (FavProvider + FavButton), coeur sur JobCard et
        la fiche /emploi/:uid, page /favoris + liens nav et prefooter, CSS fav-btn
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +21
  5. Sat, Aug 22, 2026 3

    1. apparence : classes métier alignées sur la signature « éditorial sharp » Groupe KA
      …
      - job-card/sheet/tile/table : bordures encre 1,5 px + ombres décalées
        (--shadow-off-*), hover translate signature, tuiles avec liseré accent.
      - badges → chips du groupe (mono 10,5 px, uppercase, pilule bordée) ;
        salaire (vert bordé) et « offre directe » (accent) conservent leur sens.
      - filtres du héros : champs sharp (bordure encre, focus 3px 3px 0 accent,
        case « Salaire affiché » cochée = fond accent-soft).
      - héros : kicker signature « Pages carrières · Zéro intermédiaire » +
        surligné d'accent incliné (.hl) sur « à la source ».
      - pagination et titres de section en font-display 700 ; identité propre à
        l'emploi conservée (header encre, accent cyan, transparence salariale).
      - Vérifié Playwright : accueil desktop/mobile + fiche (localhost:8096),
        build Vite OK, pm2 job-ka-web redémarré, www.job-ka.com 200.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +77 −48
  6. Wed, Aug 19, 2026 1

    1. Correctifs front-end mobile : menu hamburger, carte calee sur la vraie hauteur du header, viewport-fit=cover, socle mobile ka-ui
      …
      - App.tsx : menu mobile hamburger sous 700px (bouton 44x44 aria-expanded, panneau deroulant sous le header, backdrop fixe HORS du header, verrou de scroll body + cleanup, fermeture route/Escape/backdrop) ; ResizeObserver sur header.site qui pose --header-h sur <html>
      - styles.css : .map-wrap = calc(100vh/100dvh - var(--header-h,58px)) (fini le saut de barre navigateur et le 58px faux sur header 2 lignes) ; styles .menu-btn/.mobile-menu/.mm-backdrop avec var(--z-modal)/var(--z-overlay) ; header.site a var(--z-header) ; champs filtres a 16px sous 700px (anti-zoom iOS) ; extension tactile ::after -8px sur a.logo
      - index.html : meta viewport avec viewport-fit=cover (safe-area iOS)
      - src/ka/tokens.css : section SOCLE MOBILE OBLIGATOIRE (z-index unifies, --vh100 dvh, verrous de scroll, filet anti-zoom 16px, extension tactile gk-badge)
      - public/ka-agent.js : agent corrige (safe-area, textarea 16px, plein ecran <=640px + verrou scroll)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +62 −3
  7. Tue, Aug 18, 2026 1

    1. Badge « Offre directe » + stats directes/portails + canal de dépôt direct employeurs
      …
      - is_direct (source hors AGGREGATORS) exposé sur /api/jobs, /api/jobs/{uid}
        et jobs.geojson ; badge sobre sur les cartes d offres (frontend rebuild)
      - /api/stats : direct_jobs, direct_employers, direct_sources, portal_jobs,
        duplicates_hidden ; KPI « Offres directes employeur » au tableau de bord
      - POST /api/employeurs/offres : dépôt direct validé (pydantic + pot de miel),
        normalisé par JobPosting.finalize(), stocké source=depot-direct INACTIF en
        attente de modération ; page /employeurs (formulaire + explications)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +5
  8. Mon, Aug 17, 2026 2

    1. Intégration complète à l'écosystème Groupe KA
      …
      - Design : ka-ui vendoré (tokens.css importé avant le CSS local), accent
        officiel cyan #0c8599 (fin du lime hérité), socle dédupliqué, badge
        « Un service Groupe KA » au header (desktop + mobile, zéro débordement
        à 360/768/1440), prefooter local + KaFooter commun, page /contact
        (ecosystem.json), title « Job-Ka — Un service Groupe KA », assets
        og.png/favicon.svg/apple-touch-icon + meta OG/Twitter absolues.
      - SSO KA ID : jobka/auth.py (client job-ka, cookie jobka_session, table
        users), bouton « Se connecter avec KA » au header, testé bout-en-bout
        jusqu'au hub (307 → /connexion, client reconnu).
      - Stats : /api/stats/dashboard (contrat SPEC, cache 5 min, salaires
        bornés 25–400 k$, série date_posted réelle) + /api/stats/report (PDF
        fpdf2 via jobka/kapdf.py, complet + synthèse), page /stats refaite sur
        ka/stats/kacharts.tsx ; /api/stats historique conservé pour le hub.
      - KA Agent : widget ka-agent.js câblé (site job-ka).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +121 −53
    2. Fondation Job·Ka : socle backend, 5 connecteurs pilotes, frontend, tests
      …
      - Schéma JobPosting + normalisation (salaires $/h↔$/an, dates ISO, villes
        canoniques, catégories) — 25 tests unitaires
      - Pipeline hérité de Lou·Ka : diff par content_hash, délai de grâce,
        anti-dérive, expiration sur date limite, dédup union-find, géocodage
        Nominatim + Adresses Québec avec cache
      - Plateformes ATS : Workday (facette Québec auto-découverte), Lever,
        Greenhouse, SmartRecruiters — connecteurs pilotes CAE, Desjardins, Poka,
        Mistplay, Ubisoft (442 offres QC)
      - API FastAPI (/api/jobs, geojson, facets, sources, stats, /health) +
        frontend React/Vite (liste, fiche, carte MapLibre, stats)
      - Fixtures HTTP enregistrées/rejouées hors ligne + hook pre-commit
        d'en-tête d'auteur (section 17)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +172