spb/toit-ka Public
Toit-Ka — louer ou acheter un toit au Québec, un seul endroit (fusion Lou-Ka × Immo-Ka) — www.toit-ka.com
Python 40.2%
TypeScript 39%
CSS 20.2%
HTML 0.7%
1/* Author: Simon-Pierre Boucher — Contact: contact@spboucher.ai — Project: Toit-Ka */2/* -----------------------------------------------------------------------------3 styles.css : système de design « éditorial sharp » — thème clair BI-ACCENT.4 · Typo display Space Grotesk / texte Inter / micro-étiquettes JetBrains Mono5 · Bordures encre + ombres décalées (néo-brutalisme raffiné)6 · L'ACCENT SUIT L'UNIVERS : terracotta (marque Toit-Ka, pages neutres),7 lime (mode Louer — héritage Lou-Ka), rouge (mode Acheter — héritage8 Immo-Ka). Le basculement se fait par html[data-mode] (voir api.setMode).9 · 100 % adaptatif mobile10----------------------------------------------------------------------------- */11:root {12 --paper: #f6f2ec;13 --surface: #ffffff;14 --surface-2: #fbf7f1;15 --ink: #181410; /* encre brune/near-black chaud */16 --ink-2: #57504a;17 --ink-3: #98908a;18 --line: rgba(24, 20, 16, 0.14);19 --line-strong: rgba(24, 20, 16, 0.85);20 /* accent MARQUE (terracotta) — surchargé par univers ci-dessous */21 --accent: #e07a3f;22 --on-accent: #ffffff;23 --accent-soft: #f9e6d7;24 --accent-deep: #a34d1a; /* accent secondaire (kickers, liens) */25 --accent-deep2: #7d3a12;26 --amber: #e8a33d;27 --amber-soft: #fdf3e2;28 --danger: #b3202b;29 --r-card: 14px;30 --r-ctl: 8px;31 --shadow-flat: 0 1px 2px rgba(24, 20, 16, 0.06);32 --shadow-off: 6px 6px 0 var(--ink);33 --shadow-off-soft: 8px 8px 0 color-mix(in srgb, var(--accent) 14%, transparent);34 --font-display: "Space Grotesk", system-ui, sans-serif;35 --font-body: "Inter", system-ui, sans-serif;36 --font-mono: "JetBrains Mono", ui-monospace, monospace;37}38/* univers LOUER — lime électrique sur encre (identité Lou-Ka) */39html[data-mode="louer"] {40 --accent: #d9f26b;41 --on-accent: #141814;42 --accent-soft: #f0f9d2;43 --accent-deep: #1c5c41;44 --accent-deep2: #123f2e;45}46/* univers ACHETER — rouge vif (identité Immo-Ka) */47html[data-mode="acheter"] {48 --accent: #e23744;49 --on-accent: #ffffff;50 --accent-soft: #fbe0e2;51 --accent-deep: #b3202b;52 --accent-deep2: #7f1620;53}5455* { box-sizing: border-box; }56html { scroll-behavior: smooth; scroll-padding-top: 76px; }57body {58 margin: 0; background: var(--paper); color: var(--ink);59 font-family: var(--font-body); font-size: 15px; line-height: 1.55;60 -webkit-font-smoothing: antialiased; padding-bottom: env(safe-area-inset-bottom);61}62body::before {63 content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: 0.35;64 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.02 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");65}66#root { position: relative; z-index: 1; }6768h1, h2, h3, h4 { font-family: var(--font-display); letter-spacing: -0.03em; margin: 0; }69a { color: inherit; text-decoration: none; }70button { font-family: inherit; }71img { display: block; }72::selection { background: var(--accent); color: var(--on-accent); }7374.mono { font-family: var(--font-mono); }75.kicker {76 font-family: var(--font-mono); font-size: 11.5px; font-weight: 500;77 text-transform: uppercase; letter-spacing: 0.14em; color: var(--accent-deep);78 display: inline-flex; align-items: center; gap: 8px;79}80.kicker::before { content: ""; width: 22px; height: 2px; background: var(--accent-deep); }8182.container { max-width: 1240px; margin: 0 auto; padding: 0 24px; }83@media (max-width: 640px) { .container { padding: 0 16px; } }8485/* ================= Header ================= */86.header {87 position: sticky; top: 0; z-index: 50;88 background: color-mix(in srgb, var(--paper) 88%, transparent);89 backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);90 border-bottom: 2px solid var(--ink);91}92.header-inner { display: flex; align-items: center; gap: 20px; height: 64px; }93.brand { font-family: var(--font-display); font-weight: 700; font-size: 26px; letter-spacing: -0.04em; display: flex; align-items: center; line-height: 1; }94.brand .ka { background: var(--ink); color: var(--accent); padding: 2px 7px 4px; border-radius: 6px; margin-left: 3px; transform: rotate(-2deg); transition: transform 0.2s ease; }95.brand:hover .ka { transform: rotate(0deg); }96.brand-tag { font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-3); letter-spacing: 0.08em; text-transform: uppercase; margin-left: 12px; }97@media (max-width: 900px) { .brand-tag { display: none; } }98.nav { margin-left: auto; display: flex; gap: 4px; }99.nav a { padding: 9px 16px; border-radius: 999px; font-weight: 600; font-size: 14px; color: var(--ink-2); border: 1.5px solid transparent; transition: all 0.15s ease; min-height: 40px; display: inline-flex; align-items: center; gap: 7px; }100.nav a:hover { border-color: var(--ink); color: var(--ink); }101.nav a.active { background: var(--ink); color: var(--accent); }102.nav .nav-dot { width: 8px; height: 8px; border-radius: 3px; transform: rotate(45deg); border: 1px solid var(--ink); }103.nav .nav-dot.louer { background: #d9f26b; }104.nav .nav-dot.acheter { background: #e23744; }105.nav a.active .nav-dot { border-color: var(--accent); }106107/* ================= Ticker ================= */108.ticker { background: var(--ink); color: var(--accent); overflow: hidden; font-family: var(--font-mono); font-size: 11.5px; letter-spacing: 0.1em; text-transform: uppercase; padding: 7px 0; white-space: nowrap; border-bottom: 1px solid color-mix(in srgb, var(--accent) 25%, transparent); }109.ticker-track { display: inline-flex; gap: 0; animation: ticker 48s linear infinite; will-change: transform; }110.ticker span { padding: 0 26px; position: relative; }111.ticker span::after { content: "◆"; position: absolute; right: -6px; opacity: 0.5; font-size: 8px; top: 3px; }112@keyframes ticker { from { transform: translateX(0); } to { transform: translateX(-50%); } }113@media (prefers-reduced-motion: reduce) { .ticker-track { animation: none; } * { transition-duration: 0.01ms !important; } }114115/* ================= Hero + toggle Louer/Acheter ================= */116.hero { padding: 50px 0 22px; }117@media (max-width: 640px) { .hero { padding: 30px 0 14px; } }118.hero h1 { font-size: clamp(36px, 6vw, 72px); font-weight: 700; line-height: 0.98; text-transform: uppercase; letter-spacing: -0.035em; max-width: 940px; margin-top: 16px; }119.hero h1 .outline { color: transparent; -webkit-text-stroke: 2px var(--ink); }120.hero h1 .hl { background: var(--accent); color: var(--on-accent); padding: 0 10px; border-radius: 8px; display: inline-block; transform: rotate(-1deg); }121.hero p.lede { color: var(--ink-2); font-size: 16.5px; max-width: 680px; margin: 18px 0 0; }122.stat-row { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }123.stat-chip { background: var(--surface); border: 1.5px solid var(--ink); border-radius: 999px; padding: 8px 16px; font-family: var(--font-mono); font-size: 12px; color: var(--ink-2); display: flex; gap: 8px; align-items: center; box-shadow: 3px 3px 0 rgba(24, 20, 16, 0.12); }124.stat-chip b { color: var(--ink); font-weight: 700; }125.stat-chip .pulse { width: 8px; height: 8px; border-radius: 50%; background: var(--accent-deep); box-shadow: 0 0 0 4px var(--accent-soft); animation: pulse 2.4s ease infinite; }126@keyframes pulse { 50% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--accent) 40%, transparent); } }127128/* le grand commutateur d'univers — pièce centrale de l'accueil */129.tx-toggle {130 display: inline-flex; border: 2px solid var(--ink); border-radius: 14px;131 overflow: hidden; background: var(--surface); box-shadow: 5px 5px 0 rgba(24, 20, 16, 0.2);132}133.tx-toggle button {134 border: 0; background: transparent; cursor: pointer; padding: 14px 30px;135 font-family: var(--font-display); font-weight: 700; font-size: 18px;136 letter-spacing: -0.01em; color: var(--ink-2); display: inline-flex;137 align-items: center; gap: 9px; transition: all 0.15s ease; min-height: 54px;138}139.tx-toggle button + button { border-left: 2px solid var(--ink); }140.tx-toggle button.on { background: var(--ink); color: var(--accent); }141.tx-toggle .tt-dot { width: 10px; height: 10px; border-radius: 3px; transform: rotate(45deg); border: 1.5px solid var(--ink); }142.tx-toggle .tt-dot.louer { background: #d9f26b; }143.tx-toggle .tt-dot.acheter { background: #e23744; }144.tx-toggle button.on .tt-dot { border-color: var(--accent); }145@media (max-width: 640px) {146 .tx-toggle { width: 100%; }147 .tx-toggle button { flex: 1; justify-content: center; padding: 13px 10px; font-size: 16.5px; }148}149150/* ================= Filter bar ================= */151.filterbar { background: var(--surface); border: 2px solid var(--ink); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); padding: 14px; margin: 26px 0 6px; display: flex; flex-direction: column; gap: 0; min-width: 0; }152.f-primary { display: flex; gap: 10px; align-items: stretch; flex-wrap: wrap; min-width: 0; }153.f-search { flex: 1 1 240px; min-width: 0; display: flex; align-items: center; gap: 9px; border: 1.5px solid var(--ink); border-radius: 9px; background: var(--surface-2); padding: 0 13px; min-height: 52px; color: var(--ink-2); transition: box-shadow 0.15s ease; }154.f-search:focus-within { box-shadow: 3px 3px 0 var(--accent); background: var(--surface); }155.f-search input { border: none; background: none; outline: none; flex: 1; min-width: 0; font-size: 15px; color: var(--ink); font-family: inherit; }156.f-clear { border: none; background: var(--line); color: var(--ink-2); border-radius: 50%; width: 20px; height: 20px; font-size: 10px; cursor: pointer; flex: none; display: grid; place-items: center; }157.f-ctl { flex: 0 1 auto; min-width: 0; display: flex; flex-direction: column; justify-content: center; gap: 2px; border: 1.5px solid var(--ink); border-radius: 9px; background: var(--surface); padding: 7px 12px 6px; min-height: 52px; cursor: pointer; transition: box-shadow 0.15s ease; }158.f-ctl:focus-within { box-shadow: 3px 3px 0 var(--accent); }159.f-ctl > span { font-family: var(--font-mono); font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--ink-3); }160.f-ctl select { border: none; background: transparent; outline: none; font-family: var(--font-display); font-weight: 700; font-size: 14.5px; color: var(--ink); cursor: pointer; appearance: none; -webkit-appearance: none; padding-right: 16px; min-width: 0; max-width: 180px; text-overflow: ellipsis; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='5'%3E%3Cpath d='M0 0l4.5 5L9 0z' fill='%23181410'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right center; }161.range-pair { display: flex; align-items: center; gap: 4px; }162.range-pair select { max-width: 92px; }163.range-sep { color: var(--ink-3); font-family: var(--font-mono); font-size: 11px; }164.f-more { flex: none; align-self: stretch; border: 1.5px solid var(--ink); border-radius: 9px; background: var(--surface); color: var(--ink); padding: 0 18px; cursor: pointer; font-family: var(--font-display); font-weight: 700; font-size: 14px; min-height: 52px; transition: all 0.13s ease; }165.f-more:hover { background: var(--accent-soft); }166.f-more.on { background: var(--ink); color: var(--accent); box-shadow: 3px 3px 0 rgba(24, 20, 16, 0.22); }167.f-adv { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 16px 22px; border-top: 1.5px dashed var(--line); margin-top: 14px; padding-top: 14px; min-width: 0; animation: adv-in 0.18s ease; }168@keyframes adv-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }169.f-group { display: flex; flex-direction: column; gap: 7px; min-width: 0; }170.f-group > label { font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--ink-3); }171.f-group-end { justify-content: flex-end; }172.f-group .btn:disabled { opacity: 0.4; cursor: default; }173.f-native { border: 1.5px solid var(--line); background: var(--surface-2); border-radius: var(--r-ctl); padding: 10px 30px 10px 12px; font-size: 14px; color: var(--ink); outline: none; font-family: inherit; min-height: 42px; width: 100%; min-width: 0; appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23181410'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; }174.f-native:focus { border-color: var(--ink); box-shadow: 3px 3px 0 var(--accent); }175.seg { display: inline-flex; flex-wrap: wrap; row-gap: 6px; }176.seg button { border: 1.5px solid var(--ink); background: var(--surface); color: var(--ink-2); padding: 8px 13px; font-family: var(--font-display); font-weight: 600; font-size: 13px; cursor: pointer; margin-left: -1.5px; white-space: nowrap; min-height: 38px; transition: all 0.12s ease; }177.seg button:first-child { border-radius: 8px 0 0 8px; margin-left: 0; }178.seg button:last-child { border-radius: 0 8px 8px 0; }179.seg button:hover { background: var(--accent-soft); color: var(--ink); }180.seg button.on { background: var(--ink); color: var(--accent); position: relative; z-index: 1; }181182.pills { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 2px; }183.pill { display: inline-flex; align-items: center; gap: 7px; border: 1.5px solid var(--ink); background: var(--accent-soft); color: var(--ink); border-radius: 999px; padding: 6px 13px; font-size: 12.5px; font-weight: 600; font-family: var(--font-mono); cursor: pointer; transition: all 0.13s ease; }184.pill:hover { background: var(--accent); color: var(--on-accent); }185.pill-x { font-size: 10px; opacity: 0.65; }186.pill-clear { background: var(--surface); border-color: var(--danger); color: var(--danger); }187.pill-clear:hover { background: var(--danger); color: #fff; }188.link-btn { background: none; border: none; padding: 0; color: var(--accent-deep); font: inherit; text-decoration: underline; cursor: pointer; }189190.btn { border: 1.5px solid var(--ink); border-radius: var(--r-ctl); padding: 11px 20px; font-weight: 700; font-size: 14px; cursor: pointer; min-height: 44px; transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.15s ease; font-family: var(--font-display); letter-spacing: 0.01em; }191.btn:active { transform: translate(2px, 2px); box-shadow: none !important; }192.btn-primary { background: var(--ink); color: var(--accent); box-shadow: 4px 4px 0 rgba(24, 20, 16, 0.25); }193.btn-primary:hover { background: var(--accent-deep2); }194.btn-ghost { background: transparent; color: var(--ink); }195.btn-ghost:hover { background: var(--accent); color: var(--on-accent); box-shadow: 4px 4px 0 rgba(24, 20, 16, 0.2); }196197/* ================= Chips ================= */198.chips { display: flex; gap: 8px; margin: 16px 0 4px; overflow-x: auto; padding-bottom: 6px; scrollbar-width: none; }199.chips::-webkit-scrollbar { display: none; }200.chip { border: 1.5px solid var(--ink); background: var(--surface); color: var(--ink); border-radius: 999px; padding: 8px 18px; font-size: 13.5px; font-weight: 600; cursor: pointer; font-family: var(--font-display); white-space: nowrap; min-height: 40px; transition: all 0.13s ease; }201.chip:hover { background: var(--accent-soft); transform: translateY(-1px); }202.chip.on { background: var(--ink); color: var(--accent); box-shadow: 3px 3px 0 rgba(24, 20, 16, 0.2); }203204/* ================= Results ================= */205.results-head { display: flex; align-items: baseline; gap: 14px; margin: 28px 0 18px; flex-wrap: wrap; }206.results-head h2 { font-size: 22px; text-transform: uppercase; letter-spacing: -0.02em; }207.results-tools { display: flex; align-items: center; gap: 12px; margin-left: auto; }208.results-tools > span { font-family: var(--font-mono); color: var(--ink-3); font-size: 12px; letter-spacing: 0.06em; }209.sort-ctl select { border: 1.5px solid var(--line-strong); background: var(--surface); border-radius: var(--r-ctl); padding: 7px 28px 7px 12px; font-family: var(--font-mono); font-size: 12px; color: var(--ink); cursor: pointer; appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23181410'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; }210.view-toggle { display: inline-flex; border: 1.5px solid var(--line-strong); border-radius: var(--r-ctl); overflow: hidden; background: var(--surface); box-shadow: var(--shadow-flat); }211.view-toggle button { border: 0; background: transparent; padding: 7px 14px; cursor: pointer; font-family: var(--font-mono); font-size: 12px; color: var(--ink-2); }212.view-toggle button + button { border-left: 1.5px solid var(--line-strong); }213.view-toggle button.on { background: var(--ink); color: var(--accent); }214215.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 22px; padding-bottom: 20px; }216@media (max-width: 640px) { .grid { grid-template-columns: 1fr; gap: 16px; } }217218.card { background: var(--surface); border: 1.5px solid var(--line-strong); border-radius: var(--r-card); overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-flat); transition: transform 0.16s ease, box-shadow 0.16s ease; }219.card:hover { transform: translate(-3px, -3px); box-shadow: var(--shadow-off); }220.card:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }221.card-img { position: relative; aspect-ratio: 16/10.5; background: repeating-linear-gradient(45deg, #eceae3 0 12px, #f3f1ea 12px 24px); overflow: hidden; }222.card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s ease; }223.card:hover .card-img img { transform: scale(1.05); }224.card-img .noimg { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--ink-3); font-size: 34px; }225226/* favoris ♥ (magasin central au hub Groupe KA) */227.fav-btn {228 position: absolute; right: 10px; bottom: 10px; z-index: 2;229 width: 34px; height: 34px; display: flex; align-items: center; justify-content: center;230 background: rgba(255, 255, 255, 0.94); border: 1.5px solid var(--ink);231 border-radius: 999px; cursor: pointer; color: var(--ink); padding: 0;232 transition: transform 0.12s ease, background 0.12s ease;233}234.fav-btn:hover { transform: scale(1.12); }235.fav-btn.on { background: var(--accent-soft); color: var(--accent-deep); }236.fav-btn.fav-fiche { top: 14px; right: 14px; bottom: auto; width: 42px; height: 42px; z-index: 5; }237.badge { position: absolute; top: 12px; left: 12px; border-radius: 6px; padding: 4px 10px; font-family: var(--font-mono); font-size: 11.5px; font-weight: 700; letter-spacing: 0.04em; background: rgba(255, 255, 255, 0.95); color: var(--ink); border: 1px solid var(--ink); }238.badge.type { background: var(--ink); color: var(--accent); border-color: var(--ink); }239.badge.tx-louer { background: #d9f26b; color: #141814; border-color: #141814; }240.badge.tx-acheter { background: #e23744; color: #fff; border-color: #141814; }241.badge.right { left: auto; right: 12px; background: rgba(255, 255, 255, 0.92); border-color: transparent; }242.card-body { padding: 16px 18px; display: flex; flex-direction: column; gap: 6px; flex: 1; }243.card-price { font-family: var(--font-display); font-weight: 700; font-size: 21px; letter-spacing: -0.02em; }244.card-price em { font-style: normal; font-size: 13px; color: var(--ink-3); font-family: var(--font-mono); }245.card-title { font-weight: 600; font-size: 14.5px; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }246.card-meta { color: var(--ink-3); font-size: 12.5px; display: flex; gap: 7px; flex-wrap: wrap; align-items: center; font-family: var(--font-mono); }247.card-meta .sep { width: 4px; height: 4px; background: var(--accent); border: 1px solid var(--ink); border-radius: 1px; transform: rotate(45deg); }248.card-specs { display: flex; gap: 12px; font-size: 12.5px; color: var(--ink-2); font-family: var(--font-mono); }249.card-specs span { display: inline-flex; align-items: center; gap: 5px; }250.card-specs .ico { color: var(--accent-deep); }251.card-foot { margin-top: auto; padding-top: 11px; border-top: 1.5px dashed var(--line); display: flex; justify-content: space-between; align-items: center; gap: 8px; }252.source-tag { font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent-deep2); background: var(--accent-soft); border: 1px solid var(--accent-deep); border-radius: 4px; padding: 3px 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 62%; }253.avail { font-size: 11px; color: var(--ink-3); font-weight: 500; text-align: right; font-family: var(--font-mono); }254255/* ================= Skeletons ================= */256@keyframes shimmer { 0% { background-position: -400px 0; } 100% { background-position: 400px 0; } }257.skel { border-radius: var(--r-card); border: 1.5px solid var(--line); overflow: hidden; background: var(--surface); }258.skel .sk-img, .skel .sk-line { background: linear-gradient(90deg, #eeece5 25%, #f7f5ef 50%, #eeece5 75%); background-size: 800px 100%; animation: shimmer 1.4s infinite linear; }259.skel .sk-img { aspect-ratio: 16/10.5; }260.skel .sk-line { height: 14px; border-radius: 4px; margin: 12px 16px; }261.skel .sk-line.short { width: 45%; }262263/* ================= Empty / error ================= */264.notice { text-align: center; padding: 72px 24px; color: var(--ink-2); }265.notice .big { font-size: 44px; margin-bottom: 10px; }266.notice .big .ico { color: var(--accent); }267.notice h2 { text-transform: uppercase; }268269/* ================= Fiche ================= */270.detail { padding: 30px 0 90px; }271.crumbs { font-family: var(--font-mono); font-size: 11.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 20px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }272.crumbs a { border-bottom: 1.5px solid transparent; }273.crumbs a:hover { color: var(--accent-deep); border-color: var(--accent-deep); }274275.fiche { display: flex; flex-direction: column; gap: 22px; }276.f-col { display: contents; }277.f-galerie { order: 1; } .f-hero { order: 2; }278.f-desc { order: 3; } #caracteristiques { order: 4; }279#carte { order: 5; }280@media (min-width: 900px) {281 .fiche { display: grid; grid-template-columns: 1.6fr 1fr; gap: 30px; align-items: start; }282 .f-col { display: flex; flex-direction: column; gap: 26px; min-width: 0; }283 .f-col:last-child { position: sticky; top: 88px; }284}285.f-bloc { min-width: 0; }286.f-bloc h2 { font-size: 21px; letter-spacing: -0.02em; margin-bottom: 12px; border-left: 4px solid var(--accent); padding-left: 10px; }287.f-bloc:empty { display: none; }288289/* galerie */290.carousel { position: relative; border-radius: var(--r-card); overflow: hidden; border: 1.5px solid var(--line-strong); background: var(--surface-2); box-shadow: var(--shadow-off-soft); }291.carousel-track { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; aspect-ratio: 16/11; }292.carousel-track::-webkit-scrollbar { display: none; }293.carousel-track img { flex: 0 0 100%; width: 100%; object-fit: cover; scroll-snap-align: center; cursor: zoom-in; }294.carousel-empty { display: flex; align-items: center; justify-content: center; aspect-ratio: 16/11; font-size: 48px; }295.carousel-empty .ico { color: var(--ink-3); }296.carousel-count { position: absolute; right: 12px; bottom: 12px; z-index: 2; background: rgba(24, 20, 16, 0.82); color: var(--accent); font-family: var(--font-mono); font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 999px; }297.carousel-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; width: 44px; height: 44px; border-radius: 50%; border: 1.5px solid var(--ink); background: rgba(255, 255, 255, 0.92); font-size: 22px; cursor: pointer; display: flex; align-items: center; justify-content: center; line-height: 1; }298.carousel-nav.prev { left: 10px; } .carousel-nav.next { right: 10px; }299@media (max-width: 640px) { .carousel-nav { display: none; } }300.thumbs { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; margin-top: 10px; }301.thumbs button { border: 2px solid var(--line); border-radius: 8px; overflow: hidden; padding: 0; cursor: pointer; aspect-ratio: 4/3; background: #eceae3; transition: border-color 0.12s ease, transform 0.12s ease; }302.thumbs button:hover { transform: translateY(-2px); }303.thumbs button.on { border-color: var(--ink); box-shadow: 3px 3px 0 var(--accent); }304.thumbs img { width: 100%; height: 100%; object-fit: cover; }305@media (max-width: 640px) { .thumbs { display: flex; overflow-x: auto; scrollbar-width: none; } .thumbs::-webkit-scrollbar { display: none; } .thumbs button { flex: 0 0 84px; } }306307/* lightbox */308.lightbox { position: fixed; inset: 0; background: rgba(18, 16, 14, 0.94); z-index: 100; display: flex; align-items: center; justify-content: center; cursor: zoom-out; padding: max(16px, env(safe-area-inset-top)) 16px; }309.lightbox img { max-width: 94vw; max-height: 86vh; border-radius: 6px; border: 2px solid var(--accent); object-fit: contain; }310.lb-close { position: absolute; top: 18px; right: 22px; background: none; border: none; color: #fff; font-size: 30px; cursor: pointer; }311.lb-nav { position: absolute; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--accent); font-size: 52px; cursor: pointer; padding: 0 22px; user-select: none; }312.lb-nav.prev { left: 6px; } .lb-nav.next { right: 6px; }313.lb-count { position: absolute; bottom: 24px; color: #ccc7c0; font-family: var(--font-mono); font-size: 13px; }314315/* panneau (colonne droite) */316.f-hero { background: var(--surface); border: 1.5px solid var(--ink); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); padding: 26px; }317.price-kicker { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--accent-deep); }318.price-kicker::before { content: ""; display: inline-block; width: 16px; height: 2px; background: var(--accent); vertical-align: 3px; margin-right: 7px; }319.price-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }320.f-hero .price { font-family: var(--font-display); font-size: clamp(30px, 6vw, 40px); font-weight: 700; letter-spacing: -0.03em; }321.f-hero .price em { font-style: normal; font-size: 16px; color: var(--ink-3); font-family: var(--font-mono); }322.type-chip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 11px; background: var(--accent-soft); color: var(--accent-deep2); border: 1px solid color-mix(in srgb, var(--accent-deep) 25%, transparent); border-radius: 999px; font-size: 12px; font-weight: 600; }323.price-sub { font-family: var(--font-mono); font-size: 11.5px; color: var(--ink-3); margin-top: 2px; }324.f-hero h1 { font-size: clamp(20px, 4.5vw, 24px); margin-top: 10px; }325.f-hero .loc { color: var(--ink-2); font-size: 13.5px; margin-top: 3px; display: flex; align-items: center; gap: 5px; }326.f-hero .loc .ico { color: var(--accent-deep); }327328.spec-list { margin: 18px 0 4px; border-top: 1.5px solid var(--line-strong); }329.spec-row { display: grid; grid-template-columns: 30px 1fr auto; align-items: center; gap: 11px; padding: 8.5px 0; border-bottom: 1px dashed var(--line); }330.spec-row:last-child { border-bottom: 1.5px solid var(--line-strong); }331.spec-badge { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 9px; background: var(--accent-soft); color: var(--accent-deep2); }332.spec-k { font-family: var(--font-mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-2); }333.spec-v { font-family: var(--font-display); font-size: 15.5px; font-weight: 700; text-align: right; }334335.broker { margin: 16px 0; padding: 14px; border: 1.5px dashed var(--line-strong); border-radius: var(--r-ctl); background: var(--surface-2); }336.broker-k { font-family: var(--font-mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--ink-3); }337.broker-name { font-family: var(--font-display); font-weight: 700; font-size: 15px; margin-top: 3px; }338339.cta { display: block; text-align: center; background: var(--ink); color: var(--accent); font-weight: 700; font-family: var(--font-display); border-radius: var(--r-ctl); padding: 15px; border: 1.5px solid var(--ink); min-height: 48px; box-shadow: 4px 4px 0 rgba(24, 20, 16, 0.25); transition: all 0.14s ease; margin-top: 6px; }340.cta:hover { background: var(--accent); color: var(--on-accent); }341.cta:active { transform: translate(2px, 2px); box-shadow: none; }342.cta .ico { vertical-align: -2.5px; margin-left: 3px; }343.f-hero .fine { font-size: 11.5px; color: var(--ink-3); margin-top: 14px; text-align: center; font-family: var(--font-mono); letter-spacing: 0.02em; }344345.desc-text { color: var(--ink-2); font-size: 14.5px; white-space: pre-line; line-height: 1.6; margin: 0; }346347.dtable { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 0 22px; }348.drow { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--line); font-size: 13.5px; }349.drow span { color: var(--ink-3); } .drow b { text-align: right; font-family: var(--font-display); }350351.amenity-row { display: flex; flex-wrap: wrap; gap: 7px; }352.amenity { background: var(--accent-soft); color: var(--accent-deep2); font-size: 12px; font-weight: 600; border: 1px solid var(--accent-deep); border-radius: 999px; padding: 5px 12px; }353.amenity .ico { color: var(--accent-deep); margin-right: 2px; }354355.mini-map { height: 320px; border: 1.5px solid var(--line-strong); border-radius: var(--r-card); overflow: hidden; }356.mini-map .mapview { border: none; border-radius: 0; box-shadow: none; height: 100%; }357358.cta-sticky { position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; display: flex; align-items: center; gap: 12px; background: color-mix(in srgb, var(--paper) 94%, transparent); backdrop-filter: blur(12px); border-top: 2px solid var(--ink); padding: 10px 16px calc(10px + env(safe-area-inset-bottom)); }359.cta-sticky .cta { flex: 1; margin: 0; }360.cta-sticky-prix { font-family: var(--font-display); font-weight: 700; font-size: 19px; white-space: nowrap; }361@media (min-width: 900px) { .cta-sticky { display: none; } }362@media (max-width: 899px) { .detail { padding-bottom: 84px; } }363.f-foot { margin-top: 26px; }364.fine { font-size: 12px; color: var(--ink-3); }365366/* ================= Stats ================= */367.stats-page { padding: 44px 0 90px; }368.stats-title { font-size: clamp(30px, 4.6vw, 46px); text-transform: uppercase; margin: 10px 0 6px; }369.stats-page .sub { color: var(--ink-2); max-width: 660px; margin-bottom: 30px; }370.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; margin-bottom: 30px; }371.tile { background: var(--surface); border: 1.5px solid var(--ink); border-radius: var(--r-card); padding: 18px 20px; box-shadow: 3px 3px 0 rgba(24, 20, 16, 0.1); }372.tile-v { font-family: var(--font-display); font-weight: 700; font-size: clamp(22px, 3vw, 32px); letter-spacing: -0.03em; line-height: 1.05; }373.tile-k { font-family: var(--font-mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--ink-3); margin-top: 6px; }374.hero-tile { background: var(--ink); color: var(--accent); border-color: var(--ink); }375.hero-tile .tile-k { color: color-mix(in srgb, var(--accent) 70%, transparent); }376.viz-card { background: var(--surface); border: 1.5px solid var(--ink); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); padding: 26px 28px 20px; margin-bottom: 22px; }377.viz-card h2 { font-size: 19px; text-transform: uppercase; letter-spacing: -0.01em; }378.viz-sub { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-3); margin: 4px 0 20px; }379.viz-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }380@media (max-width: 900px) { .viz-grid { grid-template-columns: 1fr; } }381.hbars { display: flex; flex-direction: column; gap: 7px; }382.hbar-row { display: grid; grid-template-columns: minmax(96px, 180px) 1fr auto; gap: 12px; align-items: center; min-height: 26px; }383.hbar-label { font-size: 13px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }384.hbar-label a { border-bottom: 1.5px solid var(--accent); }385.hbar-label a:hover { color: var(--accent-deep2); }386.hbar-track { background: var(--surface-2); border-radius: 0 4px 4px 0; height: 18px; overflow: hidden; }387.hbar-fill { display: block; height: 100%; background: var(--accent-deep); border-radius: 0 4px 4px 0; min-width: 2px; transition: background 0.12s ease; }388.hbar-row:hover .hbar-fill { background: var(--ink); box-shadow: inset 0 0 0 2px var(--accent); }389.hbar-value { font-family: var(--font-mono); font-size: 11.5px; font-weight: 700; white-space: nowrap; }390.hbar-value em { font-style: normal; font-weight: 500; color: var(--ink-3); }391.stats-foot { font-family: var(--font-mono); font-size: 11px; color: var(--ink-3); letter-spacing: 0.04em; margin-top: 6px; }392.stats-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }393@media (max-width: 900px) { .stats-duo { grid-template-columns: 1fr; } }394.stats-univers { border: 2px solid var(--ink); border-radius: var(--r-card); background: var(--surface); padding: 22px 24px; box-shadow: var(--shadow-off-soft); }395.stats-univers h2 { font-size: 20px; text-transform: uppercase; display: flex; align-items: center; gap: 9px; }396.viz-table table { width: 100%; border-collapse: collapse; font-size: 13px; }397.viz-table th { text-align: left; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-3); padding: 6px 10px; border-bottom: 1.5px solid var(--ink); }398.viz-table td { padding: 6px 10px; border-bottom: 1px solid var(--line); }399400/* ---- iconographie maison ---- */401.ico { vertical-align: -3px; flex-shrink: 0; }402.mm-ico .ico { vertical-align: -4px; }403.mv-noimg svg { color: var(--ink-3); }404405/* ================= Carte ================= */406.map-split { display: grid; grid-template-columns: minmax(300px, 400px) 1fr; gap: 18px; height: calc(100dvh - 200px); min-height: 420px; }407.map-list { overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding-right: 4px; scrollbar-width: thin; }408.map-list .card { margin: 0; flex: 0 0 auto; }409.mapwrap { position: relative; width: 100%; height: 100%; }410.mapview { width: 100%; height: 100%; border: 1.5px solid var(--line-strong); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); overflow: hidden; background: var(--surface-2); }411.map-loading { display: flex; align-items: center; justify-content: center; color: var(--ink-3); font-family: var(--font-mono); font-size: 13px; }412@media (max-width: 780px) { .map-split { grid-template-columns: 1fr; height: calc(100dvh - 230px); } .map-list { display: none; } .results-tools { width: 100%; justify-content: space-between; } }413.mv-pop img, .mv-noimg { width: 100%; height: 130px; object-fit: cover; }414.mv-noimg { display: flex; align-items: center; justify-content: center; font-size: 34px; background: var(--surface-2); }415.mv-pop-body { padding: 10px 12px 12px; }416.mv-pop-price { font-family: var(--font-display); font-weight: 700; font-size: 18px; }417.mv-pop-title { font-size: 13px; color: var(--ink-2); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }418.mv-pop-meta { font-family: var(--font-mono); font-size: 11px; color: var(--ink-2); margin-top: 6px; }419.mv-pop-src { font-family: var(--font-mono); font-size: 10px; color: var(--ink-3); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 2px; }420.mv-pop-cta { display: block; margin-top: 10px; padding: 8px 10px; text-align: center; background: var(--ink); color: #fff; border-radius: var(--r-ctl); font-weight: 600; font-size: 13px; }421.mv-pop-cta:hover { background: var(--accent-deep2); }422.mv-legend { position: absolute; bottom: 26px; left: 10px; z-index: 3; display: flex; flex-direction: column; gap: 4px; padding: 8px 11px; background: rgba(255, 255, 255, 0.92); border: 1px solid var(--line); border-radius: var(--r-ctl); font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-2); pointer-events: none; }423.mv-legend span { display: inline-flex; align-items: center; gap: 6px; }424.mv-dot { width: 10px; height: 10px; border-radius: 999px; display: inline-block; border: 1px solid var(--ink); }425.mv-dot-louer { background: #d9f26b; }426.mv-dot-acheter { background: #1a1214; }427.ka-preview .mv-pop img, .ka-preview .mv-noimg { height: 120px; width: 100%; object-fit: cover; }428.ka-preview-sheet .mv-pop { display: grid; grid-template-columns: 130px 1fr; }429.ka-preview-sheet .mv-pop img, .ka-preview-sheet .mv-noimg { height: 100%; min-height: 120px; }430.mapview .ka-map {431 --ka-accent: var(--accent);432 --ka-on-accent: var(--on-accent);433 --ka-surface: var(--surface);434 --ka-ink: var(--ink);435 --ka-line: var(--line-strong);436 --ka-radius: var(--r-ctl);437 --ka-shadow: 4px 4px 0 rgba(24, 20, 16, 0.18);438 --ka-font: var(--font-body);439}440.mapview { position: relative; overflow: hidden; }441.mapview .ka-map { position: absolute; inset: 0; }442.map-card { border-radius: var(--r-card); }443.map-card-sel { outline: 2px solid var(--accent); outline-offset: 2px; }444445/* fiche : marqueur-prix pulsant + anneaux piéton */446.pm-wrap { position: relative; width: 100%; height: 100%; }447.pm-marker { display: flex; flex-direction: column; align-items: center; }448.pm-pill { padding: 5px 13px; background: #fff; border: 1.5px solid var(--line-strong); border-radius: 999px; font-family: var(--font-display); font-weight: 700; font-size: 14px; color: var(--ink); box-shadow: var(--shadow-off-soft); white-space: nowrap; margin-bottom: 4px; }449.pm-dot { width: 14px; height: 14px; border-radius: 50%; background: var(--accent); border: 2.5px solid #fff; box-shadow: 0 1px 4px rgba(24, 20, 16, 0.4); }450.pm-pulse { position: absolute; bottom: -8px; width: 30px; height: 30px; border-radius: 50%; background: var(--accent); opacity: 0.35; animation: pm-pulse 2s ease-out infinite; }451@keyframes pm-pulse { 0% { transform: scale(0.5); opacity: 0.45; } 80% { transform: scale(1.9); opacity: 0; } 100% { opacity: 0; } }452.pm-rings-legend { position: absolute; bottom: 8px; left: 8px; z-index: 3; display: flex; gap: 12px; padding: 4px 10px; background: rgba(255, 255, 255, 0.9); border-radius: 999px; font-family: var(--font-mono); font-size: 10px; color: var(--accent-deep); pointer-events: none; }453454/* ================= Menu mobile ================= */455.menu-btn { display: none; position: relative; z-index: 60; width: 44px; height: 44px; margin-left: auto; border: 1.5px solid var(--ink); border-radius: var(--r-ctl); background: var(--surface); cursor: pointer; padding: 0; flex-direction: column; align-items: center; justify-content: center; gap: 5px; box-shadow: 3px 3px 0 rgba(24, 20, 16, 0.15); transition: box-shadow 0.15s ease, transform 0.15s ease; }456.menu-btn:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 rgba(24, 20, 16, 0.15); }457.menu-btn span { display: block; width: 18px; height: 2px; background: var(--ink); border-radius: 2px; transition: transform 0.25s ease, opacity 0.2s ease; }458.menu-btn.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }459.menu-btn.open span:nth-child(2) { opacity: 0; }460.menu-btn.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }461.mobile-menu { display: none; position: absolute; left: 0; right: 0; top: 100%; background: var(--paper); border-bottom: 2px solid var(--ink); box-shadow: 0 18px 30px rgba(24, 20, 16, 0.18); padding: 8px 16px calc(16px + env(safe-area-inset-bottom)); max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.3s ease, opacity 0.22s ease; }462.mobile-menu.open { max-height: 480px; opacity: 1; }463.mm-link { display: flex; align-items: center; gap: 12px; padding: 15px 10px; min-height: 52px; font-family: var(--font-display); font-weight: 700; font-size: 19px; letter-spacing: -0.02em; border-bottom: 1.5px dashed var(--line); opacity: 0; transform: translateY(-8px); transition: opacity 0.25s ease, transform 0.25s ease; }464.mobile-menu.open .mm-link { opacity: 1; transform: translateY(0); }465.mm-link.active { color: var(--accent-deep); }466.mm-ico { width: 26px; text-align: center; font-size: 17px; }467.mm-arrow { margin-left: auto; opacity: 0.25; }468.mm-link:active { background: var(--accent-soft); border-radius: var(--r-ctl); }469.mm-foot { padding: 12px 10px 4px; font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-3); letter-spacing: 0.04em; }470.mm-backdrop { position: fixed; inset: 0; z-index: 40; background: rgba(24, 20, 16, 0.35); backdrop-filter: blur(2px); }471@media (max-width: 760px) {472 .menu-btn { display: flex; }473 .nav { display: none; }474 .mobile-menu { display: block; }475 .auth-slot { margin-left: auto; margin-right: 10px; }476 .auth-btn { padding: 8px 12px; min-height: 36px; font-size: 12.5px; }477}478479/* ================= Footer ================= */480.footer { background: var(--ink); color: rgba(246, 242, 236, 0.75); margin-top: 20px; padding: 44px 0 max(40px, env(safe-area-inset-bottom)); font-size: 13px; position: relative; z-index: 1; }481.footer .fbrand { font-family: var(--font-display); font-weight: 700; font-size: 34px; color: var(--paper); letter-spacing: -0.04em; margin-bottom: 12px; }482.footer .fbrand .ka { color: var(--accent); }483.footer b { color: var(--paper); }484.footer .frow { display: flex; flex-direction: column; gap: 5px; max-width: 760px; }485.footer .flegal { margin-top: 16px; font-size: 12.5px; }486.footer .flegal a { color: rgba(246, 242, 236, 0.75); text-decoration: underline; text-underline-offset: 3px; }487.footer .flegal a:hover { color: var(--accent); }488.footer .fmono { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: rgba(246, 242, 236, 0.45); margin-top: 18px; }489.footer .fmono a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }490491/* ================= Mobile : feuille de filtres + FAB ================= */492.sheet-head { display: none; }493.sheet-apply { display: none; }494.sheet-backdrop { display: none; }495.fab { display: none; }496@media (max-width: 640px) {497 .header-inner { height: 56px; }498 .brand { font-size: 21px; }499 .hero h1 { font-size: clamp(28px, 9vw, 42px); }500 .hero p.lede { font-size: 15px; }501 .stat-row { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-bottom: 6px; margin-right: -16px; padding-right: 16px; }502 .stat-row::-webkit-scrollbar { display: none; }503 .stat-chip { flex: 0 0 auto; white-space: nowrap; }504 .filterbar { display: none; }505 .filterbar.open .f-primary { flex-direction: column; }506 .filterbar.open .f-ctl select { max-width: none; width: 100%; }507 .filterbar.open .f-more { display: none; }508 .filterbar.open { display: flex; flex-direction: column; gap: 12px; position: fixed; left: 0; right: 0; bottom: 0; z-index: 95; margin: 0; border-radius: 20px 20px 0 0; border-width: 2px 0 0 0; max-height: 82dvh; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 16px 18px calc(18px + env(safe-area-inset-bottom)); box-shadow: 0 -16px 48px rgba(18, 16, 14, 0.35); animation: sheet-up 0.22s ease; }509 @keyframes sheet-up { from { transform: translateY(30%); opacity: 0.4; } to { transform: none; opacity: 1; } }510 .filterbar.open .sheet-head { display: flex; justify-content: space-between; align-items: center; font-family: var(--font-display); font-weight: 700; font-size: 17px; text-transform: uppercase; position: sticky; top: -16px; background: var(--surface); padding: 6px 0 8px; border-bottom: 1.5px solid var(--line); margin-bottom: 2px; z-index: 1; }511 .sheet-close { border: 1.5px solid var(--ink); background: var(--surface); border-radius: 50%; width: 36px; height: 36px; font-size: 15px; cursor: pointer; line-height: 1; }512 .filterbar.open .sheet-apply { display: block; width: 100%; }513 .sheet-backdrop { display: block; position: fixed; inset: 0; z-index: 90; background: rgba(18, 16, 14, 0.45); backdrop-filter: blur(2px); }514 .fab { display: flex; align-items: center; gap: 6px; position: fixed; left: 50%; transform: translateX(-50%); bottom: calc(18px + env(safe-area-inset-bottom)); z-index: 80; background: var(--ink); color: var(--accent); border: 1.5px solid var(--ink); border-radius: 999px; padding: 13px 24px; font-family: var(--font-display); font-weight: 700; font-size: 15px; cursor: pointer; box-shadow: 0 8px 24px rgba(18, 16, 14, 0.35), 4px 4px 0 rgba(24, 20, 16, 0.25); }515 .fab:active { transform: translateX(-50%) scale(0.97); }516 .results-head { margin-top: 20px; }517 .chips { margin-right: -16px; padding-right: 16px; }518 .notice { padding: 48px 16px; }519}520@media (max-width: 900px) { .f-search input, .f-native, .f-ctl select { font-size: 16px; } }521522/* --- pagination -------------------------------------------------------- */523.pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; margin: 32px 0 8px; }524.pager-btn { font-family: var(--font-mono); font-size: 14px; min-width: 40px; padding: 8px 12px; border: 2px solid var(--ink); background: var(--surface); color: var(--ink); cursor: pointer; box-shadow: var(--shadow-off-soft); }525.pager-btn:hover:not(:disabled) { background: var(--accent-soft); }526.pager-btn.on { background: var(--ink); color: var(--accent); font-weight: 700; }527.pager-btn:disabled { opacity: 0.4; cursor: not-allowed; box-shadow: none; }528.pager-gap { padding: 0 4px; color: var(--ink-3); }529.pager-info { width: 100%; text-align: center; margin-top: 8px; font-size: 12px; color: var(--ink-3); font-family: var(--font-mono); }530531/* --- pages légales ------------------------------------------------------ */532.legal { max-width: 760px; padding-top: 34px; padding-bottom: 60px; }533.legal h1 { font-family: var(--font-display); font-size: clamp(28px, 5vw, 40px); letter-spacing: -0.03em; margin: 0 0 6px; }534.legal .legal-meta { font-family: var(--font-mono); font-size: 11.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-3); margin: 0 0 26px; }535.legal h2 { font-size: 17px; margin: 26px 0 6px; }536.legal p { color: var(--ink-2); line-height: 1.65; margin: 0 0 10px; }537.legal a { color: var(--ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }538539/* --- compte Groupe-Ka ---------------------------------------------------- */540.auth-btn { padding: 9px 15px; border-radius: 999px; font-weight: 800; font-size: 13.5px;541 background: #141814; color: #f5f3ee; border: 1.5px solid #141814;542 min-height: 40px; display: inline-flex; align-items: center; gap: 8px;543 letter-spacing: 0.02em; white-space: nowrap; }544.auth-btn:hover { background: #000; color: #d9f26b; }545.auth-kab { display: inline-flex; align-items: center; justify-content: center;546 width: 22px; height: 18px; border-radius: 4px; background: #d9f26b; color: #141814;547 font-size: 10px; font-weight: 800; letter-spacing: -0.02em; transform: rotate(-2deg); flex: none; }548.auth-slot { margin-left: 10px; display: inline-flex; align-items: center; }549.auth-user { position: relative; display: inline-flex; }550.auth-avatar { width: 40px; height: 40px; border-radius: 999px; border: 2px solid var(--ink);551 padding: 0; overflow: hidden; cursor: pointer; background: var(--accent);552 display: inline-flex; align-items: center; justify-content: center;553 font-weight: 800; font-size: 16px; color: var(--on-accent); }554.auth-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }555.auth-menu { position: absolute; right: 0; top: calc(100% + 10px); z-index: 60;556 background: var(--surface); border: 2px solid var(--ink); border-radius: 12px;557 box-shadow: var(--shadow-off-soft); min-width: 230px; padding: 12px; }558.auth-menu .auth-id { display: flex; flex-direction: column; gap: 2px; font-size: 13.5px; }559.auth-menu .auth-id span { color: var(--ink-2); font-size: 12px; word-break: break-all; }560.auth-menu .auth-note { font-family: var(--font-mono); font-size: 10px;561 text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-3); margin: 8px 0 10px; }562.auth-menu button { width: 100%; padding: 8px 10px; border-radius: 8px;563 border: 1.5px solid var(--ink); background: transparent; font-weight: 700;564 font-size: 13px; cursor: pointer; color: var(--ink); }565.auth-menu button:hover { background: var(--ink); color: var(--accent); }566.auth-menu-link { display: block; width: 100%; box-sizing: border-box;567 padding: 8px 10px; margin-bottom: 8px; border-radius: 8px;568 border: 1.5px solid var(--ink); background: transparent; font-weight: 700;569 font-size: 13px; color: var(--ink); text-align: center; }570.auth-menu-link:hover { background: var(--ink); color: var(--accent); }571572/* ================= Profil — carte de membre Groupe KA =================573 La carte porte l'IDENTITÉ DU GROUPE (encre #141814 + lime #d9f26b),574 volontairement distincte des accents Toit-Ka : même carte sur toutes575 les plateformes du Groupe KA. */576:root { --ka-ink: #141814; --ka-lime: #d9f26b; --ka-paper: #f5f3ee; }577578.profil { padding-top: 40px; padding-bottom: 60px; }579.profil h1 { font-size: clamp(30px, 5vw, 44px); margin: 10px 0 26px; }580.profil h1 .hl { background: var(--accent); color: var(--on-accent); padding: 0 8px; border-radius: 8px; display: inline-block; transform: rotate(-1deg); }581.profil .lede { max-width: 520px; color: var(--ink-2); margin-bottom: 22px; font-size: 16px; }582583.pc {584 position: relative; max-width: 520px; overflow: hidden;585 background: var(--ka-ink); color: var(--ka-paper);586 border: 2px solid var(--ka-ink); border-radius: 16px;587 padding: 24px 26px 0; box-shadow: 10px 10px 0 rgba(20, 24, 20, 0.18);588}589.pc-watermark {590 position: absolute; right: -18px; top: -34px; pointer-events: none;591 font-family: var(--font-display); font-weight: 700; font-size: 170px;592 letter-spacing: -0.06em; color: rgba(217, 242, 107, 0.07);593 transform: rotate(-8deg); line-height: 1;594}595.pc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }596.pc-brand { font-family: var(--font-display); font-weight: 700; font-size: 24px; letter-spacing: -0.04em; }597.pc-ka { background: var(--ka-lime); color: var(--ka-ink); padding: 1px 6px 3px; border-radius: 5px; margin-left: 3px; display: inline-block; transform: rotate(-2deg); }598.pc-label { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.16em; color: rgba(245, 243, 238, 0.55); }599.pc-id-block { margin: 26px 0 22px; display: flex; flex-direction: column; gap: 4px; }600.pc-id-label { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.2em; color: rgba(217, 242, 107, 0.65); }601.pc-id {602 font-family: var(--font-mono); font-weight: 700; color: var(--ka-lime);603 font-size: clamp(22px, 6vw, 34px); letter-spacing: 0.14em;604 text-shadow: 0 0 24px rgba(217, 242, 107, 0.35);605}606.pc-foot { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; padding-bottom: 18px; }607.pc-holder { display: flex; flex-direction: column; gap: 2px; min-width: 0; }608.pc-holder-name { font-weight: 600; font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }609.pc-holder-since { font-family: var(--font-mono); font-size: 10.5px; color: rgba(245, 243, 238, 0.5); letter-spacing: 0.06em; }610.pc-role-badge {611 display: inline-block; width: fit-content; margin: 3px 0 2px;612 background: var(--ka-lime); color: var(--ka-ink);613 font-family: var(--font-mono); font-size: 9px; font-weight: 700;614 text-transform: uppercase; letter-spacing: 0.12em;615 padding: 2px 7px 3px; border-radius: 5px; transform: rotate(-1deg);616}617.pc-avatar { width: 52px; height: 52px; border-radius: 999px; border: 2px solid var(--ka-lime); flex: none; object-fit: cover; }618.pc-strip { display: flex; gap: 5px; margin: 0 -26px; padding: 9px 18px; background: rgba(217, 242, 107, 0.1); border-top: 1px solid rgba(217, 242, 107, 0.25); overflow: hidden; }619.pc-strip i { display: block; width: 3px; border-radius: 1px; background: var(--ka-lime); opacity: 0.7; }620.pc-strip i:nth-child(3n) { height: 14px; opacity: 0.35; }621.pc-strip i:nth-child(3n+1) { height: 9px; }622.pc-strip i:nth-child(3n+2) { height: 17px; opacity: 0.9; }623.pc-copy { margin-top: 16px; }624.pc-copy.ok { background: var(--ka-lime); border-color: var(--ka-ink); color: var(--ka-ink); }625626.profil-grid {627 display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));628 gap: 12px; margin-top: 30px; max-width: 760px;629}630.pg-item {631 background: var(--surface); border: 1.5px solid var(--ink);632 border-radius: var(--r-card); padding: 14px 16px;633 display: flex; flex-direction: column; gap: 4px; box-shadow: var(--shadow-flat);634}635.pg-label { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--ink-3); }636.pg-value { font-weight: 600; font-size: 14.5px; word-break: break-word; }637.pg-value.mono { font-family: var(--font-mono); color: var(--accent-deep2); }638639.hub-profile { margin-top: 34px; padding-top: 24px; border-top: 2px solid var(--ink); max-width: 640px; display: flex; flex-direction: column; gap: 14px; }640.hub-profile h3 { font-size: 18px; margin: 0; }641.hub-profile .hub-bio { color: var(--ink-2); font-size: 14px; margin: 0; max-width: 560px; }642.hub-profile .pub-meta { display: flex; gap: 8px; flex-wrap: wrap; }643.hub-profile .stat-chip { display: inline-flex; align-items: center; gap: 6px; }644.hub-profile a.stat-chip { color: var(--ink); text-decoration: none; }645.hub-profile a.stat-chip:hover { background: var(--accent-soft); }646.hub-profile .btn-primary { display: inline-flex; align-items: center; gap: 7px; }647.hub-hint { color: var(--ink-3); font-size: 12.5px; margin: 0; }648649.profil-note { max-width: 640px; color: var(--ink-2); font-size: 13.5px; margin-top: 22px; }650.profil-note a { text-decoration: underline; text-underline-offset: 3px; }651.profil-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 26px; }652.profil-actions .btn { display: inline-flex; align-items: center; gap: 7px; }653