HTML 82.1%
Python 14.6%
TypeScript 1.9%
CSS 1%
JavaScript 0.5%
1/*2=============================================================================3Job·Ka — Groupe KA4Auteur : Simon-Pierre Boucher5Contact : contact@spboucher.ai6Fichier : frontend/src/styles.css7Rôle : CSS local Job·Ka — s'appuie sur le design system commun Groupe KA8 (ka/tokens.css, importé AVANT ce fichier dans main.tsx). Refonte9 « éditoriale premium » 2026-08-25 : moins de boîtes bordées, plus10 de filets fins et de hiérarchie typographique. Hero avec recherche11 centrale, filtres en rail discret + panneau bas mobile, offres en12 rangées éditoriales (salaire en exergue). Le socle (body, grain,13 .container, .btn, .card, .chip, ka-footer…) vit dans tokens.css.14Créé : 2026-08-17 Modifié : 2026-08-2515=============================================================================16*/1718:root {19 /* ---- ACCENT Job·Ka (cyan officiel — voir ka/ecosystem.json) ---- */20 --accent: #0c8599;21 --accent-soft: #def0f4;22 --accent-deep: #095c6b;23 --on-accent: #ffffff;24 --lime: var(--accent);25 --lime-soft: var(--accent-soft);2627 /* ---- alias hérités du CSS v1 ---- */28 --brand: var(--ink);29 --border: var(--line);30 --green-soft: #e7f2ec;31 --radius: var(--r-card);32 --shadow: var(--shadow-flat), 0 4px 14px rgb(20 24 20 / 6%);33}3435a { color: var(--green); text-decoration: none; }36a:hover { text-decoration: underline; }3738/* --- en-tête ---------------------------------------------------------------- */39header.site {40 background: var(--brand);41 color: #fff;42 position: sticky; top: 0; z-index: var(--z-header, 500);43}44/* menu mobile ouvert : le header (et son panneau) passe au-dessus du backdrop */45header.site.menu-open { z-index: var(--z-modal, 900); }46header.site .container {47 display: flex; align-items: center; flex-wrap: wrap;48 gap: 4px 14px; min-height: 58px; padding-top: 8px; padding-bottom: 8px;49}50.logo { font-family: var(--font-display); font-weight: 700; font-size: 20px; color: #fff; letter-spacing: -0.3px; white-space: nowrap; position: relative; }51/* extension tactile : le logo (63×31) atteint >=44px de cible sans changer le rendu */52.logo::after { content: ""; position: absolute; inset: -8px; }53.logo em { color: var(--accent-soft); font-style: normal; }54header.site .gk-badge { flex-shrink: 0; }55nav.main { display: flex; gap: 4px; margin-left: auto; }56nav.main a {57 /* pilules font-display 700 (standard header/menu KA 2026-08-22), thème encre conservé */58 color: #d7ddda; padding: 7px 12px; border-radius: 999px; font-weight: 700;59 font-family: var(--font-display, "Space Grotesk", system-ui, sans-serif); font-size: 13.5px;60 letter-spacing: -0.01em; white-space: nowrap;61}62nav.main a:hover { color: #fff; background: rgb(255 255 255 / 8%); text-decoration: none; }63nav.main a.active { color: var(--accent-soft); background: rgb(255 255 255 / 10%); }6465/* connexion KA ID (droite du header) */66.auth-box { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }67.btn-ka {68 display: inline-flex; align-items: center; gap: 7px; min-height: 34px;69 padding: 4px 13px; border: 1.5px solid rgb(245 243 238 / 45%);70 border-radius: var(--r-pill); background: transparent; color: #f5f3ee;71 font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;72 letter-spacing: 0.07em; text-transform: uppercase; cursor: pointer;73 white-space: nowrap; text-decoration: none;74}75.btn-ka b {76 font-family: var(--font-display); font-size: 12px; text-transform: none;77 letter-spacing: -0.02em; background: var(--accent); color: var(--on-accent);78 border-radius: 5px; padding: 0 6px 1px;79}80.btn-ka:hover { border-color: var(--accent-soft); text-decoration: none; }81.auth-user { display: inline-flex; align-items: center; gap: 8px; color: #d7ddda; font-size: 13px; white-space: nowrap; }82.auth-user img { width: 26px; height: 26px; border-radius: 50%; border: 1.5px solid rgb(245 243 238 / 45%); }83.auth-user button {84 border: 0; background: none; color: #9aa5a0; font: inherit; font-size: 12px;85 cursor: pointer; padding: 6px 0; min-height: 34px;86}87.auth-user button:hover { color: #fff; text-decoration: underline; }8889/* bascule mobile du header : sous 980 px la nav passe sur sa propre rangée */90@media (max-width: 979px) {91 nav.main {92 order: 10; flex-basis: 100%; margin-left: 0;93 overflow-x: auto; -webkit-overflow-scrolling: touch;94 scrollbar-width: none; padding-bottom: 2px;95 }96 nav.main::-webkit-scrollbar { display: none; }97 nav.main a { padding: 7px 9px; font-size: 13.5px; }98 .auth-box { margin-left: auto; }99}100@media (max-width: 560px) {101 header.site .gk-badge { padding: 2px 8px 3px; font-size: 9px; }102 header.site .gk-badge b { font-size: 11px; }103 .auth-user span.name { display: none; }104}105106/* --- menu mobile (hamburger) -------------------------------------------------107 Sous 700 px, panneau PLEIN ÉCRAN fixed inset:0 (KA Nav v2, 2026-08-25),108 backdrop fixe rendu HORS du header, verrou de scroll géré côté React. */109.menu-btn {110 display: none; width: 44px; height: 44px; margin-left: 4px;111 flex-direction: column; align-items: center; justify-content: center; gap: 5px;112 flex-shrink: 0; background: none; border: 0; border-radius: 8px;113 cursor: pointer; padding: 0;114}115.menu-btn:hover { background: rgb(255 255 255 / 8%); }116.menu-btn span {117 display: block; width: 22px; height: 2px; background: #f5f3ee; border-radius: 2px;118 transition: transform 0.2s ease, opacity 0.15s ease;119}120.menu-btn[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }121.menu-btn[aria-expanded="true"] span:nth-child(2) { opacity: 0; }122.menu-btn[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }123.mobile-menu {124 display: none; position: fixed; inset: 0;125 background: var(--brand);126 padding: calc(var(--header-h, 58px) + 14px) 22px calc(24px + env(safe-area-inset-bottom));127 overflow-y: auto; overscroll-behavior: contain;128 flex-direction: column; counter-reset: mnav;129}130.mobile-menu.open { animation: mm-in 0.16s ease; }131@keyframes mm-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }132/* burger masqué à l'ouverture : la fermeture passe par le ✕ fixe du panneau */133header.site.menu-open .menu-btn { visibility: hidden; }134.mm-close {135 position: fixed; top: 10px; right: 14px; z-index: 2;136 width: 44px; height: 44px; display: flex; align-items: center; justify-content: center;137 border: 1.5px solid #f5f3ee; border-radius: 999px;138 background: #f5f3ee; color: var(--brand);139 font-size: 17px; font-weight: 700; line-height: 1; cursor: pointer; padding: 0;140}141.mobile-menu a {142 display: flex; align-items: baseline; gap: 13px; padding: 16px 2px;143 color: #f5f3ee; font-family: var(--font-display, "Space Grotesk", system-ui, sans-serif);144 font-weight: 700; font-size: 21px; letter-spacing: -0.02em; line-height: 1.1;145 border-bottom: 1.5px dashed rgb(255 255 255 / 18%);146}147.mobile-menu a::before {148 counter-increment: mnav; content: "0" counter(mnav);149 font-family: var(--font-mono, ui-monospace, monospace); font-size: 11px;150 font-weight: 700; color: var(--accent-soft);151}152/* entrée en cascade des liens : le panneau prend vie sans devenir lent */153.mobile-menu.open a { animation: mm-link 0.32s cubic-bezier(0.22, 0.7, 0.3, 1) both; }154.mobile-menu.open a:nth-child(2) { animation-delay: 0.03s; }155.mobile-menu.open a:nth-child(3) { animation-delay: 0.06s; }156.mobile-menu.open a:nth-child(4) { animation-delay: 0.09s; }157.mobile-menu.open a:nth-child(5) { animation-delay: 0.12s; }158.mobile-menu.open a:nth-child(6) { animation-delay: 0.15s; }159.mobile-menu.open a:nth-child(7) { animation-delay: 0.18s; }160.mobile-menu.open a:nth-child(8) { animation-delay: 0.21s; }161@keyframes mm-link { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }162.mobile-menu a:last-child { border-bottom: 0; }163.mobile-menu a:hover { color: #fff; text-decoration: none; }164.mobile-menu a.active { color: var(--accent-soft); }165.mm-backdrop {166 position: fixed; inset: 0; background: rgb(16 18 16 / 45%);167 z-index: var(--z-overlay, 800);168}169@media (max-width: 700px) {170 nav.main { display: none; }171 .menu-btn { display: flex; }172 .mobile-menu.open { display: flex; }173}174175/* --- héros éditorial (encre + halo cyan, recherche centrale) ------------------ */176.hero {177 background:178 radial-gradient(680px 340px at 85% -60px, rgb(12 133 153 / 28%), transparent 70%),179 var(--brand);180 color: #fff;181 padding: 54px 0 46px;182}183.hero .kicker { color: var(--accent-soft); }184.hero .kicker::before { display: none; }185.hero .kicker .pulse {186 width: 8px; height: 8px; border-radius: 50%; background: var(--accent);187 box-shadow: 0 0 0 0 rgb(12 133 153 / 55%);188 animation: pulse 2.2s ease-out infinite;189}190@keyframes pulse {191 0% { box-shadow: 0 0 0 0 rgb(12 133 153 / 55%); }192 70% { box-shadow: 0 0 0 9px rgb(12 133 153 / 0%); }193 100% { box-shadow: 0 0 0 0 rgb(12 133 153 / 0%); }194}195.hero h1 {196 margin: 14px 0 10px;197 font-size: clamp(32px, 3.4vw + 16px, 54px);198 font-weight: 700; letter-spacing: -0.035em; color: #fff; line-height: 1.04;199}200.hero h1 em {201 /* surligné d'accent incliné — signature du groupe (.hl), déclinaison encre */202 display: inline-block; font-style: normal; background: var(--accent);203 color: var(--on-accent); border-radius: 10px; padding: 0 14px 3px;204 transform: rotate(-1deg);205}206.hero-lede { margin: 0 0 26px; color: #b9c2be; max-width: 560px; font-size: 15.5px; }207208/* barre de recherche centrale — LA porte d'entrée du site */209.searchbar {210 display: flex; align-items: center; gap: 4px;211 max-width: 720px; min-height: 62px; padding: 6px 6px 6px 18px;212 background: var(--surface); border: 2px solid var(--ink);213 border-radius: 14px;214 box-shadow: 8px 8px 0 rgb(12 133 153 / 32%);215 transition: box-shadow 0.18s, transform 0.18s;216}217.searchbar:focus-within {218 box-shadow: 8px 8px 0 var(--accent);219 transform: translate(-1px, -1px);220}221.searchbar svg {222 width: 21px; height: 21px; flex-shrink: 0;223 fill: none; stroke: var(--ink-3); stroke-width: 2.2; stroke-linecap: round;224}225.searchbar input {226 flex: 1; min-width: 0; border: 0; background: none; padding: 10px 12px;227 font: 500 17px/1.3 var(--font-body); color: var(--ink);228}229.searchbar input:focus { outline: none; }230.searchbar input::placeholder { color: var(--ink-3); }231.searchbar input::-webkit-search-cancel-button { -webkit-appearance: none; }232.searchbar button {233 flex-shrink: 0; min-height: 48px; padding: 0 22px;234 border: 0; border-radius: 9px; cursor: pointer;235 background: var(--accent); color: var(--on-accent);236 font-family: var(--font-display); font-weight: 700; font-size: 15px;237 letter-spacing: -0.01em;238 transition: background 0.15s;239}240.searchbar button:hover { background: var(--accent-deep); }241242/* chiffres du marché en direct sous la recherche */243.hero-stats {244 display: flex; flex-wrap: wrap; gap: 6px 26px; margin: 22px 0 0;245 font-family: var(--font-mono); font-size: 11px; font-weight: 500;246 text-transform: uppercase; letter-spacing: 0.08em; color: #8f9a95;247}248.hero-stats b {249 color: var(--accent-soft); font-weight: 700; font-size: 13px;250 font-variant-numeric: tabular-nums; letter-spacing: 0;251}252.hero-stats .hs-sync { opacity: 0.65; }253@media (max-width: 700px) {254 .hero { padding: 40px 0 36px; }255 .searchbar { min-height: 56px; padding-left: 14px; border-radius: 12px; }256 .searchbar button { padding: 0 16px; font-size: 14px; min-height: 44px; }257 .hero-stats { gap: 4px 18px; }258}259260/* --- zone de filtres sous le héros -------------------------------------------261 Desktop : rail de sélecteurs discrets (pas de formulaire lourd).262 Mobile : bouton « Filtres » → panneau bas + bascule salaire. */263.filter-zone {264 background: var(--paper);265 border-bottom: 1px solid var(--line);266 padding: 12px 0 14px;267}268.filter-rail { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }269.fr-label {270 font-family: var(--font-mono); font-size: 10px; font-weight: 700;271 text-transform: uppercase; letter-spacing: 0.1em; color: var(--ink-3);272 margin-right: 4px;273}274.f-select {275 appearance: none; -webkit-appearance: none;276 max-width: 168px; height: 38px; padding: 0 28px 0 13px;277 border: 1px solid var(--line-strong); border-radius: var(--r-pill);278 background: transparent no-repeat right 11px center;279 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%234d5551' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");280 font: 600 13px/1 var(--font-body); color: var(--ink-2);281 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;282 cursor: pointer; transition: border-color 0.12s, background-color 0.12s;283}284.f-select:hover { border-color: var(--ink); color: var(--ink); }285.f-select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgb(12 133 153 / 15%); }286.f-select[data-on="1"] {287 background-color: var(--ink); border-color: var(--ink); color: #f5f3ee;288 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23def0f4' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");289}290.f-toggle {291 display: inline-flex; align-items: center; gap: 8px;292 height: 38px; padding: 0 14px; cursor: pointer; user-select: none;293 border: 1px solid var(--line-strong); border-radius: var(--r-pill);294 font: 600 13px/1 var(--font-body); color: var(--ink-2); white-space: nowrap;295 transition: border-color 0.12s, background-color 0.12s;296}297.f-toggle:hover { border-color: var(--ink); color: var(--ink); }298.f-toggle input { accent-color: var(--accent); width: 15px; height: 15px; margin: 0; }299.f-toggle[data-on="1"] { background: var(--accent); border-color: var(--accent-deep); color: var(--on-accent); }300.f-toggle[data-on="1"] input { accent-color: #fff; }301302/* mobile : bouton d'ouverture du panneau */303.filter-mobile { display: none; gap: 8px; align-items: center; }304.fm-btn {305 display: inline-flex; align-items: center; gap: 9px;306 height: 44px; padding: 0 16px; cursor: pointer;307 border: 1.5px solid var(--ink); border-radius: var(--r-pill);308 background: var(--surface); color: var(--ink);309 font-family: var(--font-display); font-weight: 700; font-size: 14px;310}311.fm-btn svg {312 width: 17px; height: 17px; fill: none; stroke: currentColor;313 stroke-width: 1.8; stroke-linecap: round;314}315.fm-btn svg circle { fill: var(--surface); }316.fm-btn b {317 display: inline-flex; align-items: center; justify-content: center;318 min-width: 20px; height: 20px; padding: 0 5px; border-radius: 999px;319 background: var(--accent); color: var(--on-accent);320 font-family: var(--font-mono); font-size: 11px;321}322@media (max-width: 899px) {323 .filter-rail { display: none; }324 .filter-mobile { display: flex; }325 .filter-mobile .f-toggle { height: 44px; }326}327328/* puces des filtres actifs — retrait en un geste */329.filter-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin-top: 11px; }330.fchip {331 display: inline-flex; align-items: center; gap: 8px;332 min-height: 30px; padding: 3px 11px; cursor: pointer;333 border: 1px solid var(--accent); border-radius: var(--r-pill);334 background: var(--accent-soft); color: var(--accent-deep);335 font-family: var(--font-mono); font-size: 11px; font-weight: 700;336 letter-spacing: 0.03em;337}338.fchip span { font-size: 10px; opacity: 0.7; }339.fchip:hover { background: var(--accent); color: var(--on-accent); }340.fchip:hover span { opacity: 1; }341.fchip-clear {342 border: 0; background: none; cursor: pointer; min-height: 30px; padding: 0 6px;343 font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;344 text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-3);345 text-decoration: underline; text-underline-offset: 3px;346}347.fchip-clear:hover { color: var(--ink); }348349/* --- panneau bas de filtres (mobile) ------------------------------------------ */350.fsheet {351 position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-modal, 900);352 display: flex; flex-direction: column;353 max-height: 88vh; max-height: 88dvh;354 background: var(--surface);355 border-top: 2px solid var(--ink);356 border-radius: 18px 18px 0 0;357 transform: translateY(103%); visibility: hidden;358 transition: transform 0.28s cubic-bezier(0.32, 0.72, 0.28, 1), visibility 0.28s;359}360.fsheet.open { transform: none; visibility: visible; }361.fs-head {362 display: flex; align-items: center; justify-content: space-between;363 padding: 15px 12px 13px 20px; border-bottom: 1px solid var(--line);364}365.fs-close {366 width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;367 border: 1px solid var(--line-strong); border-radius: 999px; background: none;368 color: var(--ink); font-size: 15px; font-weight: 700; cursor: pointer; padding: 0;369}370.fs-body {371 padding: 16px 20px; overflow-y: auto; -webkit-overflow-scrolling: touch;372 overscroll-behavior: contain; display: grid; gap: 10px;373}374.fs-body .f-select {375 max-width: none; width: 100%; height: 48px; border-radius: 10px;376 font-size: 16px; background-color: var(--surface-2);377 border-color: var(--line-strong);378}379.fs-body .f-select[data-on="1"] { background-color: var(--ink); border-color: var(--ink); }380.fs-body .f-toggle { height: 48px; border-radius: 10px; font-size: 16px; justify-content: flex-start; }381.fs-foot {382 display: flex; gap: 10px; padding: 13px 20px calc(15px + env(safe-area-inset-bottom));383 border-top: 1px solid var(--line);384}385.fs-foot .btn { flex: 1; }386@media (min-width: 900px) { .fsheet { display: none; } }387388/* --- tête de résultats --------------------------------------------------------- */389.results-head {390 display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;391 gap: 6px 16px; margin: 26px 0 10px;392}393.results-count {394 margin: 0; font-family: var(--font-display); font-weight: 700;395 font-size: clamp(19px, 1.4vw + 13px, 24px); letter-spacing: -0.02em;396 font-variant-numeric: tabular-nums;397}398.sort-quiet {399 display: inline-flex; align-items: center; gap: 6px;400 font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;401 text-transform: uppercase; letter-spacing: 0.07em; color: var(--ink-3);402}403.sort-quiet select {404 border: 0; background: none; cursor: pointer; padding: 8px 0;405 font-family: var(--font-mono); font-size: 11px; font-weight: 700;406 text-transform: uppercase; letter-spacing: 0.07em; color: var(--ink);407 text-decoration: underline; text-underline-offset: 3px;408}409.sort-quiet select:focus { outline: none; color: var(--accent-deep); }410411/* --- liste d'offres : rangées éditoriales (fini les cartes bordées) ------------- */412.job-list { margin: 0 0 30px; display: flex; flex-direction: column; gap: 10px; }413.job-row {414 position: relative;415 display: grid; grid-template-columns: minmax(0, 1fr) auto auto;416 grid-template-areas: "main side fav";417 gap: 2px 26px; align-items: start;418 padding: 18px 16px 18px 18px;419 background: var(--surface); border: 1px solid rgba(20, 24, 20, 0.1); border-radius: 14px;420 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04); overflow: hidden;421 color: inherit; text-decoration: none;422 transition: transform 0.16s ease, box-shadow 0.16s ease, border-color 0.16s ease;423}424.job-row .jr-main { grid-area: main; }425.job-row .jr-side { grid-area: side; }426.job-row .fav-btn { grid-area: fav; }427.job-row::before {428 content: ""; position: absolute; left: 0; top: -1px; bottom: -1px; width: 3px;429 background: var(--accent); transform: scaleY(0); transform-origin: top;430 transition: transform 0.16s ease;431}432.job-row:hover { transform: translateY(-2px); box-shadow: 0 10px 28px rgba(0, 0, 0, 0.08); border-color: rgba(20, 24, 20, 0.18); text-decoration: none; }433.job-row:hover::before { transform: scaleY(1); }434.jr-main { min-width: 0; }435.jr-title {436 margin: 0; font-family: var(--font-display); font-size: 18px; font-weight: 700;437 letter-spacing: -0.02em; line-height: 1.22; color: var(--ink);438}439.job-row:hover .jr-title {440 text-decoration: underline; text-decoration-color: var(--accent);441 text-decoration-thickness: 2px; text-underline-offset: 3px;442}443.jr-new {444 display: inline-block; vertical-align: 2px; margin-right: 9px;445 padding: 2px 8px 3px; border-radius: 5px;446 background: var(--accent); color: var(--on-accent);447 font-family: var(--font-mono); font-size: 9.5px; font-weight: 700;448 text-transform: uppercase; letter-spacing: 0.07em;449}450.jr-org { margin: 5px 0 0; font-size: 14px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }451.jr-org .employer { font-weight: 600; color: var(--ink); }452.jr-city { color: var(--ink-3); }453.jr-city::before { content: "· "; }454.jr-direct {455 font-family: var(--font-mono); font-size: 9.5px; font-weight: 700;456 text-transform: uppercase; letter-spacing: 0.07em; color: var(--accent-deep);457}458.jr-direct::before { content: "✓ "; }459.jr-tags {460 margin: 7px 0 0; display: flex; flex-wrap: wrap; gap: 3px 7px;461 font-family: var(--font-mono); font-size: 10.5px; font-weight: 500;462 text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-3);463}464.jr-tags span:not(:last-child)::after { content: " ·"; color: var(--line-strong); }465.jr-side {466 display: flex; flex-direction: column; align-items: flex-end; gap: 3px;467 text-align: right; padding-top: 2px;468}469.jr-salary {470 font-family: var(--font-display); font-weight: 700; font-size: 16.5px;471 letter-spacing: -0.01em; color: var(--accent-deep);472 font-variant-numeric: tabular-nums; white-space: nowrap;473}474.jr-yearly { font-size: 12px; color: var(--ink-3); white-space: nowrap; }475.jr-nosalary {476 font-family: var(--font-mono); font-size: 10px; font-weight: 500;477 text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-3);478 padding-top: 4px;479}480.jr-when { margin-top: 4px; font-size: 12px; color: var(--ink-3); white-space: nowrap; }481@media (max-width: 700px) {482 .job-row {483 grid-template-columns: minmax(0, 1fr) auto;484 grid-template-areas: "main fav" "side side";485 padding: 17px 6px 17px 14px;486 }487 .jr-side {488 grid-column: 1 / -1; flex-direction: row; align-items: baseline;489 flex-wrap: wrap; gap: 3px 14px; text-align: left; margin-top: 9px; padding-top: 0;490 }491 .jr-when { margin: 0 0 0 auto; }492 .jr-salary { font-size: 15.5px; }493}494495/* cœur ♥ favoris — discret dans la rangée, plein quand actif */496.fav-btn {497 width: 38px; height: 38px; padding: 0; flex-shrink: 0;498 display: inline-flex; align-items: center; justify-content: center;499 border: 1px solid var(--line-strong); border-radius: 999px; cursor: pointer;500 background: transparent; color: var(--ink-2);501 transition: transform 0.12s ease, background 0.12s ease, border-color 0.12s ease;502}503.fav-btn svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linejoin: round; }504.fav-btn:hover { transform: scale(1.08); background: var(--accent-soft); border-color: var(--accent); color: var(--accent-deep); }505.fav-btn.on { background: var(--accent); border-color: var(--accent-deep); color: var(--on-accent); }506.fav-btn.on svg { fill: currentColor; }507/* fiche d'offre : le cœur à droite du titre */508.fav-btn.big { width: 44px; height: 44px; }509.fav-btn.big svg { width: 21px; height: 21px; }510511/* étiquettes de la fiche : mono, calmes, filets fins */512.badge {513 display: inline-flex; align-items: center; gap: 5px;514 padding: 3px 10px; border-radius: var(--r-pill);515 font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;516 text-transform: uppercase; letter-spacing: 0.05em;517 background: var(--surface-2); color: var(--ink-2);518 border: 1px solid var(--line);519}520.badge.salary { background: var(--green-soft); color: var(--green); border-color: var(--green); }521.badge.mode { background: var(--accent-soft); color: var(--accent-deep); border-color: var(--line); }522.badge.direct { background: transparent; border-color: var(--accent); color: var(--accent-deep); }523.badge.new { background: var(--accent); color: var(--on-accent); border-color: var(--accent-deep); }524.badge.seniority { background: var(--surface-2); color: var(--ink); border-color: var(--line-strong); }525.badge.salary .approx { font-style: normal; font-weight: 600; opacity: 0.75; margin-left: 5px; text-transform: none; letter-spacing: 0; }526527/* --- fiche d'offre : mise en page éditoriale ouverte (fini la grosse boîte) ----- */528.sheet { padding: 34px 0 10px; margin: 0 0 20px; }529.sheet h1 {530 margin: 0; font-size: clamp(26px, 2.6vw + 14px, 40px);531 letter-spacing: -0.03em; line-height: 1.08;532}533.sheet .facts { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0 8px; }534.sheet .description {535 white-space: pre-line; color: var(--ink-2);536 max-width: 760px; font-size: 15.5px; line-height: 1.62;537}538.sheet .btn-apply {539 min-height: 52px; padding: 12px 26px; font-size: 15.5px;540 background: var(--accent); color: var(--on-accent); border-color: var(--accent-deep);541}542.sheet .btn-apply:hover { background: var(--accent-deep); }543544/* métriques « En un coup d'œil » : blocs ouverts à filet supérieur (éditorial) */545.metrics {546 display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr));547 gap: 18px 26px; margin: 14px 0 26px;548}549.metric { border-top: 2px solid var(--ink); padding: 11px 2px 0; }550.metric .m-value { font-family: var(--font-display); font-size: 20px; font-weight: 700; letter-spacing: -0.02em; }551.metric .m-label { color: var(--ink-3); font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; margin-top: 3px; }552.metric .m-sub { color: var(--ink-3); font-size: 12px; margin-top: 6px; line-height: 1.45; }553.delta-up { color: var(--green); }554.delta-down { color: #a05a22; }555556/* position du salaire dans la fenêtre interquartile de sa catégorie */557.market-bar { position: relative; height: 12px; margin: 2px 0 7px; }558.market-bar .mb-track { position: absolute; inset: 4px 0; background: rgb(20 24 20 / 8%); border-radius: 4px; }559.market-bar .mb-window { position: absolute; top: 4px; bottom: 4px; background: var(--accent-soft); border: 1px solid var(--accent); border-radius: 4px; }560.market-bar .mb-marker { position: absolute; top: 0; bottom: 0; width: 3px; margin-left: -1.5px; background: var(--ink); border-radius: 2px; }561562/* historique du salaire affiché */563.salary-history { margin: 8px 0 0; padding-left: 18px; }564.salary-history li { margin: 3px 0; font-size: 14px; }565566/* --- tuiles de statistiques : blocs ouverts à filet supérieur -------------------- */567.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 18px 26px; margin: 22px 0; }568.tile { border-top: 2px solid var(--ink); padding: 11px 2px 0; position: relative; }569.tile::before { content: ""; position: absolute; top: -2px; left: 0; width: 34px; height: 2px; background: var(--accent); }570.tile .value { font-family: var(--font-display); font-size: 28px; font-weight: 700; letter-spacing: -0.5px; font-variant-numeric: tabular-nums; }571.tile .label { color: var(--ink-3); font-family: var(--font-mono); font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; margin-top: 4px; }572573/* --- barres horizontales (magnitude, teinte unique) --------------------------------- */574.bars { display: grid; gap: 8px; margin: 10px 0 26px; }575.bar-row { display: grid; grid-template-columns: 190px 1fr 52px; align-items: center; gap: 10px; }576.bar-row .name { font-size: 13.5px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }577.bar-row .track { background: rgb(20 24 20 / 6%); border-radius: 4px; height: 14px; }578.bar-row .fill { background: var(--accent); border-radius: 4px; height: 14px; min-width: 3px; }579.bar-row .n { font-size: 13px; color: var(--ink-2); text-align: right; font-variant-numeric: tabular-nums; }580581/* --- tableaux : filets fins, plus de boîte lourde ------------------------------------ */582table.data { width: 100%; border-collapse: separate; border-spacing: 0; }583table.data th, table.data td { text-align: left; padding: 11px 14px 11px 2px; border-bottom: 1px solid var(--border); font-size: 14px; }584table.data th {585 color: var(--ink-3); font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;586 text-transform: uppercase; letter-spacing: 0.08em;587 border-bottom: 2px solid var(--ink); background: none;588}589table.data tbody tr:hover td { background: var(--surface); }590591/* --- carte -------------------------------------------------------------------------- */592.map-wrap {593 height: calc(100vh - var(--header-h, 58px));594 height: calc(100dvh - var(--header-h, 58px));595 position: relative;596}597.map-wrap .maplibregl-map { height: 100%; }598.map-count {599 position: absolute; top: 14px; left: 14px; z-index: 5;600 background: var(--brand); color: #fff; border-radius: var(--r-card);601 border: 1.5px solid var(--ink); box-shadow: var(--shadow-off-mid);602 padding: 8px 14px; font-size: 13px; font-family: var(--font-display); font-weight: 700;603}604.map-popup h4 { margin: 0 0 2px; font-size: 14px; }605.map-popup { font: 13px "Inter", sans-serif; }606607/* --- pagination / divers ------------------------------------------------------------- */608.pager { display: flex; gap: 22px; align-items: center; justify-content: center; margin: 30px 0; }609.pager button {610 border: 0; background: none; cursor: pointer; padding: 10px 4px; min-height: var(--touch);611 font-family: var(--font-mono); font-size: 11.5px; font-weight: 700;612 text-transform: uppercase; letter-spacing: 0.07em; color: var(--ink);613}614.pager button:hover:not(:disabled) {615 color: var(--accent-deep); text-decoration: underline;616 text-decoration-thickness: 2px; text-underline-offset: 4px;617}618.pager button:disabled { opacity: 0.35; cursor: default; }619.pager .pg-pos {620 font-family: var(--font-mono); font-size: 11.5px; font-weight: 700;621 color: var(--ink-3); font-variant-numeric: tabular-nums;622}623.empty { text-align: center; color: var(--ink-3); padding: 64px 0; display: grid; gap: 14px; justify-items: center; }624.empty p { margin: 0; }625.section-title { font-family: var(--font-display); font-size: 19px; font-weight: 700; letter-spacing: -0.02em; margin: 30px 0 4px; }626.muted { color: var(--ink-3); font-size: 13px; }627.sub, .lede { color: var(--ink-2); max-width: 640px; }628629/* --- formulaire de dépôt direct (page Publier) ------------------------------------------ */630.depot-grid { display: grid; gap: 14px; grid-template-columns: 1fr 1fr; }631@media (max-width: 700px) { .depot-grid { grid-template-columns: 1fr; } }632.depot-form label {633 display: flex; flex-direction: column; gap: 6px;634 font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;635 text-transform: uppercase; letter-spacing: 0.07em; color: var(--ink-2);636}637.depot-form input:not([name="website"]), .depot-form select, .depot-form textarea {638 font: 15px/1.4 var(--font-body); color: var(--ink);639 border: 1.5px solid var(--ink); border-radius: var(--r-ctl);640 background: var(--surface); padding: 10px 12px; min-height: var(--touch);641}642.depot-form textarea { resize: vertical; }643.depot-form input:focus, .depot-form select:focus, .depot-form textarea:focus {644 outline: none; box-shadow: 3px 3px 0 var(--accent);645}646.depot-form input::placeholder, .depot-form textarea::placeholder { color: var(--ink-3); }647648/* --- page Contact (commune Groupe KA) -------------------------------------------------- */649.contact-page { padding: 44px 0 90px; }650.contact-page h1 { margin: 10px 0 8px; }651.contact-page .lede { color: var(--ink-2); max-width: 640px; margin: 0 0 26px; }652.contact-grid { display: grid; gap: 16px; grid-template-columns: 1fr; margin: 26px 0; }653@media (min-width: 768px) { .contact-grid { grid-template-columns: repeat(3, 1fr); } }654.contact-card { padding: 18px 20px; }655.contact-card .klabel { display: block; margin-bottom: 6px; }656.contact-card a.mail {657 font-family: var(--font-mono); font-weight: 700; font-size: 13.5px;658 color: var(--accent-deep); word-break: break-all;659 text-decoration: underline; text-underline-offset: 3px;660}661.contact-note {662 border-left: 3px solid var(--accent); background: var(--surface);663 border-radius: 0 var(--r-card) var(--r-card) 0;664 padding: 14px 18px; max-width: 720px; color: var(--ink-2); font-size: 14px;665}666.contact-note b { color: var(--ink); }667.contact-sites { list-style: none; margin: 14px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }668.contact-sites a {669 display: inline-flex; align-items: center; min-height: 34px;670 padding: 4px 12px; border: 1px solid var(--line-strong); border-radius: var(--r-pill);671 background: var(--surface); font-family: var(--font-mono); font-size: 11px;672 font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em;673 color: var(--ink); transition: transform 0.12s, box-shadow 0.12s;674}675.contact-sites a:hover { transform: translate(-1px, -1px); box-shadow: var(--shadow-off-mid); text-decoration: none; }676.contact-hub { margin-top: 26px; }677678/* --- rangée de navigation locale au-dessus du footer commun ----------------------------- */679.prefooter { border-top: 2px solid var(--ink); background: var(--surface-2); padding: 18px 0; margin-top: 60px; }680.prefooter .container {681 display: flex; flex-wrap: wrap; align-items: center; gap: 6px 20px;682}683.prefooter a {684 color: var(--ink-2); text-decoration: none; text-transform: uppercase;685 letter-spacing: 0.08em; font-family: var(--font-mono); font-weight: 700; font-size: 11.5px;686 min-height: var(--touch); display: inline-flex; align-items: center;687}688.prefooter a:hover { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 4px; }689.prefooter .baseline { width: 100%; font-size: 13px; color: var(--ink-2); }690.ka-footer { margin-top: 0; }691692@media (max-width: 640px) {693 .bar-row { grid-template-columns: 120px 1fr 44px; }694}695696/* bulle KA Agent masquée quand un panneau plein écran est ouvert (filtres,697 menu mobile) : son z-index maximal (2147483000) passerait au-dessus */698body.ka-hide-agent .kaa-btn { opacity: 0 !important; pointer-events: none !important; }699700/* --- mouvement réduit : on coupe les animations décoratives ----------------------------- */701@media (prefers-reduced-motion: reduce) {702 .hero .kicker .pulse { animation: none; }703 .mobile-menu.open, .mobile-menu.open a { animation: none; }704 .fsheet { transition: none; }705 .job-row, .job-row::before, .searchbar { transition: none; }706}707708/* --- KA ID v2 : badge « Recommandé pour vous » (parcimonieux, serveur) --- */709.jr-reco {710 display: inline-block; vertical-align: 2px; margin-right: 9px;711 padding: 2px 8px 3px; border-radius: 5px;712 background: var(--ink); color: var(--accent);713 font-family: var(--font-mono); font-size: 9.5px; font-weight: 700;714 text-transform: uppercase; letter-spacing: 0.07em;715}716