/* ============================================================================
   OpenLumena — feuille de style du site public (refonte 2026-08-23)
   `styles.css` est CONSERVE tel quel : auth.html, dashboard.html et l'admin
   en dependent. Cette feuille ne sert qu'a index.html.
   ========================================================================= */

html, body { background: #070b10 !important; color: #f4f4f5; }

:root{
  /* fond & matiere — identite Lumena */
  --bg:#070b10;
  --bg-2:#0a0f14;
  --panel:#0c121a;
  --panel-2:#0e151e;

  /* texte */
  --text:#f4f4f5;
  --soft:#d4d4d8;
  --muted:#9aa0aa;

  /* accent ambre — la marque */
  --accent:#f59f4a;
  --accent-2:#e67e22;
  --accent-dark:#7a3a12;
  --glow:rgba(245,159,74,.34);

  /* filets */
  --border:rgba(255,255,255,.16);
  --border-soft:rgba(255,255,255,.10);
  --border-amber:rgba(245,159,74,.42);
  /* jetons repris tels quels de l'ancienne version */
  --line:rgba(255,255,255,.11);
  --line-strong:rgba(245,159,74,.35);

  --ok:#22c55e;
  --danger:#ef4444;

  --ui:"Inter",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --serif:"Instrument Serif","Times New Roman",Times,serif;
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Consolas,monospace;

  --logo:15.5px;
  --nav:14px;
  --nav-h:40px;
  --btn:13.5px;
  --btn-h:40px;
  --hero-btn-h:44px;
  --h1:56px;
  --h2:38px;
  --lede:16px;
  --badge:12.5px;

  --header-y:22px;
  --shell:1220px;
  --gut:clamp(20px,4vw,40px);
  --sec-y:clamp(72px,9vw,132px);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:#070b10;background:var(--bg);
  color:#f4f4f5;color:var(--text);
  font-family:var(--ui);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
  position:relative;
  line-height:1.5;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
img,video{max-width:100%;display:block}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}

/* ── grain + halo de fond ────────────────────────────────────────────── */
.grain{
  position:fixed;top:-120px;right:-120px;bottom:-120px;left:-120px;z-index:100;pointer-events:none;opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E");
}
.site-glow{
  position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(58% 42% at 50% -6%, rgba(245,159,74,.16) 0%, transparent 62%),
    radial-gradient(46% 38% at 88% 12%, rgba(110,168,255,.07) 0%, transparent 70%);
}

main > .shell,.site-footer,.runway{position:relative;z-index:1}
.shell{width:100%;max-width:var(--shell);margin-inline:auto;padding-inline:var(--gut)}

/* ══ EN-TETE ═══════════════════════════════════════════════════════════ */
.site-header{
  position:sticky;top:0;z-index:50;
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  padding:var(--header-y) var(--gut) 14px;
  background:linear-gradient(180deg,rgba(7,11,16,.94),rgba(7,11,16,.72) 62%,transparent);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
.brand{
  display:inline-flex;align-items:center;gap:10px;justify-self:start;
  font-size:var(--logo);font-weight:600;letter-spacing:-.03em;color:#fff;
}
.brand-logo{width:24px;height:24px;object-fit:contain}
.brand .suffix{font-weight:400;color:var(--accent)}

/* Navigation reprise de l'ancienne version : du texte, pas des boutons.
   Un filet ambre apparait sous le lien au survol — c'est tout. */
.nav-links{
  display:flex;align-items:center;justify-content:center;
  gap:18px;justify-self:center;color:var(--muted);font-size:13px;
}
.nav-links a{
  min-height:34px;display:inline-flex;align-items:center;
  white-space:nowrap;letter-spacing:-.005em;
  border-bottom:1px solid transparent;
  transition:color .26s ease,border-color .26s ease;
}
.nav-links a:hover,.nav-links a:focus-visible{
  color:var(--text);border-color:var(--border-amber);
}

/* Le bouton de connexion garde la pastille ambre de l'ancienne version. */
.header-cta{
  justify-self:end;
  min-width:112px;min-height:38px;height:auto;
  padding:9px 14px;border-radius:6px;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:#0a0f14;border-color:transparent;
  font-size:13px;font-weight:800;letter-spacing:0;
  box-shadow:0 14px 34px rgba(245,159,74,.22);
}
.header-cta:hover,.header-cta:focus-visible{
  background:linear-gradient(135deg,#ffb968,var(--accent));
  border-color:transparent;
  box-shadow:0 14px 38px rgba(245,159,74,.34);
}

/* Bascule de langue : discrète, du même métal que la navigation. */
.lang-switch{
  justify-self:end;
  min-height:34px;padding:0 11px;margin-right:12px;
  border:1px solid var(--line);border-radius:6px;
  background:transparent;color:var(--muted);cursor:pointer;
  font-family:var(--mono);font-size:11.5px;font-weight:500;letter-spacing:.12em;
  transition:color .26s ease,border-color .26s ease,background .26s ease;
}
.lang-switch:hover,.lang-switch:focus-visible{
  color:var(--accent);border-color:var(--border-amber);background:rgba(245,159,74,.06);
}
/* La bascule, Connexion et le burger vivent dans la 3ᵉ colonne. Sans ce
   conteneur, un 4ᵉ enfant partirait à la ligne suivante de la grille. */
.header-right{
  grid-column:3;justify-self:end;
  display:flex;align-items:center;gap:12px;
}
.lang-switch{margin-right:0}

/* ── burger ── */
.burger{
  display:none;width:42px;height:42px;border-radius:6px;
  border:1px solid var(--border);background:rgba(8,8,8,.55);
  place-items:center;gap:5px;cursor:pointer;z-index:60;
  transition:border-color .25s ease,background .25s ease;
}
.burger:hover{border-color:rgba(255,255,255,.32);background:rgba(255,255,255,.05)}
.burger span{display:block;width:16px;height:1.5px;background:#fff;border-radius:1px;
  transition:transform .25s ease,opacity .2s ease}
body.menu-open .burger span:nth-child(1){transform:translateY(6.5px) rotate(45deg)}
body.menu-open .burger span:nth-child(2){opacity:0}
body.menu-open .burger span:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}

.menu-backdrop{
  display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:rgba(8,8,8,.42);
  opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s ease;
}

/* ══ BOUTONS — langage repris de l'ancienne version ════════════════════
   Fond a peine marque, filet blanc, et un souleve d'1px au survol. Pas de
   reflet balaye : c'est ce qui alourdissait la page. */
.btn{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:42px;padding:11px 16px;
  border:1px solid var(--line);border-radius:7px;
  background:rgba(255,255,255,.04);
  color:var(--text);cursor:pointer;
  font-size:13px;font-weight:800;line-height:1;white-space:nowrap;
  transition:transform .18s ease,border-color .18s ease,background .18s ease,box-shadow .18s ease;
}
.btn:hover,.btn:focus-visible{
  border-color:var(--line-strong);
  transform:translateY(-1px);
}
.btn.primary{
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:#0a0f14;border-color:transparent;
  box-shadow:0 18px 45px rgba(245,159,74,.22),inset 0 1px 0 rgba(255,255,255,.26);
}
.btn.primary:hover,.btn.primary:focus-visible{border-color:transparent}
.btn.ghost{color:#ffd0a0}
.btn.full{width:100%}

/* ══ HERO ══════════════════════════════════════════════════════════════ */
.hero{
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  align-items:center;gap:clamp(28px,5vw,72px);
  padding-block:clamp(48px,7vw,96px) var(--sec-y);
}
.hero-copy{max-width:640px}

.badge{
  display:inline-flex;align-items:center;gap:8px;
  margin-bottom:24px;padding:9px 15px;border:0;border-radius:5px;
  background:linear-gradient(90deg,var(--accent-dark) 0%,#241a12 52%,#0a0a0a 100%);
  color:#f2f2f2;font-size:var(--badge);font-weight:400;letter-spacing:-.01em;
}
.badge svg{filter:drop-shadow(0 0 3px var(--glow))}

h1{
  font-family:var(--ui);font-weight:500;font-size:var(--h1);
  letter-spacing:-.045em;line-height:1.1;color:#fff;text-wrap:balance;
}
.headline-line{display:block;overflow:hidden;padding:.06em .15em .14em}
/* le mot-these, en serif italique ambre */
h1 em{
  font-family:var(--serif);font-style:italic;font-weight:400;
  font-size:1.08em;letter-spacing:-.03em;color:var(--accent);
}
.hero-lead{
  max-width:52ch;margin-top:20px;color:var(--muted);
  font-size:var(--lede);font-weight:400;line-height:1.6;letter-spacing:-.015em;
}
.hero-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}

/* bandeau de faits — remplace les « stats » du modele */
.hero-metrics{
  display:flex;flex-wrap:wrap;gap:26px;margin-top:36px;
  padding-top:24px;border-top:1px solid var(--border-soft);
  color:var(--soft);font-size:13.5px;letter-spacing:-.015em;
}
.hero-metrics span{display:inline-flex;align-items:center;gap:9px}
.hero-metrics strong{color:var(--accent);font-weight:600}
.hero-metrics .tick{
  width:5px;height:5px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 9px var(--glow);flex:none;
}

/* panneau logo 3D — conserve */
.logo-panel{display:grid;place-items:center;min-height:min(52vh,480px)}
.logo3d{width:100%;height:100%;min-height:inherit;display:grid;place-items:center}
.logo3d canvas{display:block}
.logo3d-fallback{width:min(62%,300px);opacity:.92}
.logo3d canvas+.logo3d-fallback,.logo3d:has(canvas) .logo3d-fallback{display:none}

/* ══ SECTIONS ══════════════════════════════════════════════════════════ */
section[id],.section{scroll-margin-top:96px}
.section{padding-block:var(--sec-y);position:relative}
.section+.section{border-top:1px solid var(--border-soft)}

.eyebrow{
  display:inline-flex;align-items:center;gap:.7em;margin-bottom:16px;
  font-family:var(--mono);font-size:.72rem;font-weight:500;
  letter-spacing:.22em;text-transform:uppercase;color:var(--accent);
}
.eyebrow::before{content:"";width:26px;height:1px;background:var(--border-amber)}
.live-dot{
  width:6px;height:6px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 10px var(--glow);animation:pulse 2.6s ease-in-out infinite;
}
@keyframes pulse{0%,100%{opacity:.45;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}

.section-heading{max-width:60ch;margin-bottom:clamp(32px,4vw,56px)}
h2{
  font-family:var(--ui);font-weight:500;font-size:var(--h2);
  letter-spacing:-.04em;line-height:1.12;color:#fff;text-wrap:balance;
}
h2 em{font-family:var(--serif);font-style:italic;font-weight:400;font-size:1.06em;color:var(--accent)}
.section-heading p{margin-top:16px;color:var(--muted);font-size:15.5px;line-height:1.65;max-width:56ch}

h3{font-size:1.1rem;font-weight:600;letter-spacing:-.02em;color:var(--text)}

/* ── bandeau d'integrations ── */
.trusted-strip{
  display:flex;flex-wrap:wrap;gap:1px;
  border-block:1px solid var(--border-soft);background:var(--border-soft);
}
.trusted-strip span{
  flex:1 1 auto;text-align:center;padding:16px 18px;background:var(--bg);
  font-family:var(--mono);font-size:.76rem;letter-spacing:.06em;color:var(--muted);
  transition:color .3s ease,background .3s ease;
}
.trusted-strip span:hover{color:var(--accent);background:var(--panel)}

/* ── grille produit ── */
.feature-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,3.4vw,52px)}
.feature-main p{color:var(--muted);margin-top:14px;line-height:1.65;font-size:15.5px}
.clean-list{list-style:none;display:grid;gap:2px;margin-top:24px}
.clean-list li{
  position:relative;padding:14px 0 14px 26px;border-top:1px solid var(--border-soft);
  color:var(--soft);font-size:15px;line-height:1.55;
}
.clean-list li::before{
  content:"";position:absolute;left:2px;top:22px;width:8px;height:1px;background:var(--accent);
}
.feature-stack{display:grid;gap:1px;background:var(--border-soft);border:1px solid var(--border-soft)}
.feature-stack>div{background:var(--panel);padding:24px;display:grid;gap:8px;align-content:start;
  transition:background .32s ease}
.feature-stack>div:hover{background:var(--panel-2)}
.feature-stack span{font-family:var(--mono);font-size:.72rem;color:var(--accent);letter-spacing:.14em}
.feature-stack p{color:var(--muted);font-size:14.5px;line-height:1.6}

/* ── quickstart + terminal ── */
.quickstart-section{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);
  gap:clamp(28px,4vw,64px);align-items:center}
.quickstart-copy p{margin-top:16px;color:var(--muted);font-size:15.5px;line-height:1.65}
.terminal-card{
  border:1px solid var(--border);border-radius:10px;overflow:hidden;
  background:linear-gradient(180deg,var(--panel-2),var(--bg-2));
  box-shadow:0 24px 60px rgba(0,0,0,.5);
}
.terminal-tabs{display:flex;align-items:center;gap:6px;padding:12px 14px;
  border-bottom:1px solid var(--border-soft);background:rgba(255,255,255,.02);flex-wrap:wrap}
.traffic{display:flex;gap:6px;margin-right:8px}
.win{width:10px;height:10px;border-radius:50%;display:block}
.win.red{background:#ff5f57}.win.amber{background:var(--accent)}.win.green{background:#28c840}
.tab{
  min-height:34px;padding:0 12px;
  border:1px solid transparent;border-radius:6px;
  background:transparent;color:var(--muted);cursor:pointer;
  font:700 12px var(--mono);
  transition:color .18s ease,background .18s ease;
}
.tab:hover{color:var(--text)}
.tab.active{background:var(--accent);color:#0a0f14}
.terminal-body{padding:20px;display:grid;gap:14px;font-family:var(--mono);font-size:13px}
/* 3,68:1 avant — sous le seuil AA. Eclairci a ~7:1. */
.comment{color:#8b99a8}
.command-row{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:14px 16px;border:1px solid var(--border-soft);border-radius:7px;
  background:#05080c;
}
.command-row code{color:var(--soft);word-break:break-all;flex:1 1 240px;line-height:1.5}
.copy-btn{
  flex:0 0 auto;padding:10px 12px;
  border:1px solid var(--line);border-radius:6px;
  background:rgba(255,255,255,.05);color:var(--text);cursor:pointer;
  font-family:var(--ui);font-size:12.5px;
  transition:border-color .18s ease,transform .18s ease;
}
.copy-btn:hover,.copy-btn:focus-visible{border-color:var(--line-strong);transform:translateY(-1px)}
.download-row{display:flex;gap:10px;flex-wrap:wrap;font-family:var(--ui)}

/* ── demo ── */
.demo-player{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#000}
.demo-player video{width:100%;display:block;aspect-ratio:16/9;object-fit:cover}

/* ── flux d'architecture ── */
.workflow{display:flex;align-items:center;gap:0;flex-wrap:wrap}
.node{
  flex:1 1 170px;padding:20px 18px;text-align:center;
  border:1px solid var(--border-soft);border-radius:8px;background:var(--panel);
  font-size:14.5px;font-weight:500;letter-spacing:-.01em;
  transition:border-color .3s ease,color .3s ease,background .3s ease;
}
.node:hover{border-color:var(--border-amber);background:var(--panel-2)}
.node.core,.node.react{color:var(--accent)}
.connector{flex:0 1 46px;height:1px;background:linear-gradient(90deg,var(--border-soft),var(--border-amber),var(--border-soft))}

/* ── licences ── */
.plans-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;
  background:var(--border-soft);border:1px solid var(--border-soft)}
.plan-card{background:var(--panel);padding:28px 24px;display:grid;gap:12px;align-content:start;
  transition:background .32s ease}
.plan-card:hover{background:var(--panel-2)}
.plan-card.highlighted{background:linear-gradient(180deg,rgba(245,159,74,.09),var(--panel) 46%)}
.plan-name{font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--accent)}
.plan-card p{color:var(--muted);font-size:14.5px;line-height:1.6}
.plan-card ul{list-style:none;display:grid;gap:2px;margin-top:4px}
.plan-card li{position:relative;padding:10px 0 10px 010px;padding-left:18px;
  border-top:1px solid var(--border-soft);color:var(--soft);font-size:14px}
.plan-card li::before{content:"";position:absolute;left:0;top:18px;width:7px;height:1px;background:var(--accent)}
.plan-card .btn{margin-top:10px}

/* ── FAQ ── */
.faq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;
  background:var(--border-soft);border:1px solid var(--border-soft)}
.faq-item{background:var(--panel);padding:20px 22px;transition:background .3s ease}
.faq-item[open]{background:var(--panel-2)}
.faq-item summary{
  cursor:pointer;list-style:none;font-size:15px;font-weight:500;letter-spacing:-.015em;
  display:flex;align-items:center;justify-content:space-between;gap:14px;color:var(--text);
}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{
  content:"+";font-family:var(--mono);color:var(--accent);font-size:1.1rem;
  transition:transform .3s ease;flex:none;
}
.faq-item[open] summary::after{transform:rotate(45deg)}
.faq-item p{margin-top:12px;color:var(--muted);font-size:14.5px;line-height:1.65}

/* ── contact ── */
.contact-section{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(28px,4vw,64px);align-items:start}
.contact-section>div p{margin-top:16px;color:var(--muted);font-size:15.5px;line-height:1.65}
.contact-form{display:grid;gap:16px}
.contact-form label{display:grid;gap:8px}
.contact-form label>span{font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted)}
.contact-form input,.contact-form textarea{
  width:100%;padding:13px 14px;border:1px solid var(--border-soft);border-radius:7px;
  background:#05080c;color:var(--text);font-family:var(--ui);font-size:14.5px;
  transition:border-color .28s ease,box-shadow .28s ease;resize:vertical;
}
.contact-form input::placeholder,.contact-form textarea::placeholder{color:#5d6b7a}
.contact-form input:focus,.contact-form textarea:focus{
  outline:none;border-color:var(--border-amber);box-shadow:0 0 0 3px rgba(245,159,74,.10);
}
.hp-field{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-status{font-size:13.5px;color:var(--muted);min-height:1.2em}
.form-status.ok{color:var(--ok)}
.form-status.err{color:var(--danger)}

/* ══ PIED DE PAGE ══════════════════════════════════════════════════════ */
.site-footer{border-top:1px solid var(--border-soft);padding-block:clamp(48px,6vw,80px) 28px}
.footer-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2.1fr);
  gap:clamp(28px,4vw,64px)}
.footer-brand p{margin-top:16px;color:var(--muted);font-size:14px;line-height:1.65;max-width:34ch}
.footer-columns{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px}
.footer-col{display:grid;gap:9px;align-content:start}
.footer-col h2{font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--accent);font-weight:500;margin-bottom:4px}
.footer-col a{color:var(--muted);font-size:14px;transition:color .26s ease}
.footer-col a:hover{color:var(--accent)}
.footer-bottom{
  display:flex;flex-wrap:wrap;gap:16px 28px;justify-content:space-between;
  margin-top:clamp(36px,4vw,56px);padding-top:22px;border-top:1px solid var(--border-soft);
  font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;color:#6b7482;
}

/* ══ MAINTENANCE (contrat app.js) ══════════════════════════════════════ */
body.maintenance-active>*:not(#maintenance-screen):not(.grain){display:none !important}
.maintenance-screen{
  position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:grid;place-items:center;
  padding:var(--gut);background:var(--bg);
}
.maintenance-screen[hidden]{display:none}
.maintenance-card{
  position:relative;
  max-width:520px;text-align:center;display:grid;gap:14px;justify-items:center;
  border:1px solid var(--border-soft);border-radius:12px;padding:44px 34px;
  background:var(--panel);
}
.maintenance-logo{width:64px}
.maintenance-card h1{font-size:1.7rem;letter-spacing:-.03em}
.maintenance-card p{color:var(--muted);font-size:15px;line-height:1.65}
/* Bouton d'acces admin, invisible mais TROUVABLE : coin bas-droit de la
   carte, cible de 52px, comme dans l'ancienne version. Sans `position`
   il retombait dans le flux de la grille — centre sous le paragraphe,
   sans curseur, donc introuvable. Deux clics revelent le lien (app.js). */
.maintenance-secret{
  position:absolute;right:14px;bottom:14px;
  width:52px;height:52px;
  border:0;border-radius:50%;background:transparent;
  cursor:pointer;
}
.maintenance-login[hidden]{display:none}

/* ══ ENTREE CHOREGRAPHIEE ══════════════════════════════════════════════
   Repos = opacite 1 : si les animations ne partent pas, la page reste
   lisible. Le remplissage `both` applique la keyframe 0% pendant le delai,
   donc l'effet joue quand tout va bien. */
.appear{
  opacity:1;
  animation-duration:1.05s;
  animation-fill-mode:both;
  animation-timing-function:cubic-bezier(.16,1,.3,1);
  animation-delay:var(--d,.08s);
}
.appear.is-in{animation:none;opacity:1;transform:none;clip-path:none;filter:none}
.appear--scale{animation-name:in-scale}
.appear--soft {animation-name:in-soft}
.appear--mask {animation-name:in-mask}
.appear--pop  {animation-name:in-pop}
.appear--btn  {animation-name:in-btn}
.appear--side {animation-name:in-side}
.appear--stat {animation-name:in-stat}

@keyframes in-scale{from{opacity:0;transform:scale(.84)}to{opacity:1;transform:none}}
@keyframes in-soft {from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes in-mask {from{opacity:0;transform:translateY(40%)}to{opacity:1;transform:none}}
@keyframes in-pop  {0%{opacity:0;transform:scale(.9)}70%{opacity:1;transform:scale(1.03)}100%{opacity:1;transform:scale(1)}}
@keyframes in-btn  {from{opacity:0;transform:translateY(18px) scale(.94)}to{opacity:1;transform:none}}
@keyframes in-side {from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:none}}
@keyframes in-stat {from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}

.badge-star{animation:in-star .9s cubic-bezier(.16,1,.3,1) .28s both}
@keyframes in-star{
  0%{transform:scale(.2) rotate(-50deg)}
  65%{transform:scale(1.2) rotate(8deg)}
  100%{transform:scale(1) rotate(0)}
}
.hero h1 em{animation:in-em 1.2s cubic-bezier(.16,1,.3,1) .72s both}
@keyframes in-em{from{opacity:.35;filter:blur(4px)}to{opacity:1;filter:none}}

/* reveal au defilement — contrat app.js (`[data-reveal]` / `.is-visible`) */
body.reveal-ready [data-reveal]{
  opacity:0;transform:translateY(22px);
  transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1);
  transition-delay:var(--reveal-delay,0ms);
}
body.reveal-ready [data-reveal].is-visible{opacity:1;transform:none}
/* Le hero est deja chorégraphié par `.appear` : on le sort du systeme de
   reveal d'app.js pour que les deux ne se disputent pas l'opacite. */
body.reveal-ready .hero-copy[data-reveal],
body.reveal-ready .hero-panel[data-reveal]{opacity:1;transform:none}

/* ══ MOTION PILOTE PAR LE DEFILEMENT ═══════════════════════════════════
   Quand motion.js tourne (`body.motion-on`), c'est LUI qui pose opacite et
   transform, image par image, en fonction pure de la position de scroll.
   On neutralise donc le reveal a sens unique d'app.js, sinon les deux se
   disputent les memes proprietes et le retour en arriere reste fige. */
body.motion-on.reveal-ready [data-reveal],
body.motion-on.reveal-ready [data-reveal].is-visible{
  opacity:1;transform:none;transition:none;
}
body.motion-on .motion-item{
  opacity:0;                       /* valeur de depart ; motion.js prend la main */
}
/* `will-change` seulement la ou le gain compte : sur ~50 blocs, il
   creait autant de couches de compositing gardees en memoire — cause
   directe de plantage sur telephone. */
@media (min-width:901px){
  body.motion-on .terminal-card,body.motion-on .shot,
  body.motion-on .demo-player{will-change:opacity,transform}
}
/* Filet : si motion.js ne demarre pas, rien ne doit rester invisible. */
body:not(.motion-on) .motion-item{opacity:1;transform:none}

/* jauge de progression */
.scroll-bar{
  position:fixed;top:0;left:0;right:0;height:2px;z-index:90;
  background:linear-gradient(90deg,var(--accent-2),var(--accent));
  transform:scaleX(0);transform-origin:0 50%;
  box-shadow:0 0 12px var(--glow);pointer-events:none;
}
@media (prefers-reduced-motion:reduce){
  body.motion-on .motion-item{opacity:1;transform:none}
  .scroll-bar{display:none}
}

/* ══ CAPTURES DU PRODUIT ═══════════════════════════════════════════════
   Un site qui vend un logiciel doit le montrer. Ces captures sont reelles,
   prises dans Lumena — rien n'est reconstitue. */
.shot{margin:0;display:grid;gap:14px}
.shot img{
  width:100%;height:auto;display:block;border-radius:10px;
  border:1px solid var(--line);
  box-shadow:0 40px 90px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.05);
  background:var(--bg-2);
}
.shot figcaption{color:var(--muted);font-size:13.5px;line-height:1.55;max-width:62ch}
.shot-main img{box-shadow:0 60px 130px rgba(0,0,0,.62),0 0 0 1px rgba(245,159,74,.10)}

.shot-row{
  display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);
  gap:clamp(24px,3.4vw,56px);align-items:center;
  margin-top:clamp(36px,4.4vw,72px);
}
.shot-note{display:grid;gap:14px;justify-items:start}
.shot-note-t{font-size:clamp(1.15rem,1.9vw,1.5rem);font-weight:500;
  letter-spacing:-.03em;color:var(--text);text-wrap:balance}
.shot-note p{color:var(--muted);font-size:15px;line-height:1.65;max-width:44ch}
.shot-note .btn{margin-top:6px}

@media (max-width:900px){
  .shot-row{grid-template-columns:1fr;gap:26px}
}

/* ══ CARTES DE DEMANDE — ce qu'on peut lui dire ════════════════════════ */
.ask-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;
  background:var(--border-soft);border:1px solid var(--border-soft)}
.ask{background:var(--panel);padding:26px 24px;display:grid;gap:12px;align-content:start;
  transition:background .32s ease}
.ask:hover{background:var(--panel-2)}
.ask-q{
  font-family:var(--serif);font-style:italic;font-size:1.24rem;line-height:1.3;
  color:var(--accent);letter-spacing:-.02em;text-wrap:balance;
}
.ask-a{color:var(--muted);font-size:14.5px;line-height:1.6}

/* ══ RASSURANCE ════════════════════════════════════════════════════════ */
.guard-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;
  background:var(--border-soft);border:1px solid var(--border-soft)}
.guard{background:var(--panel);padding:24px 22px;position:relative;
  transition:background .32s ease}
.guard:hover{background:var(--panel-2)}
.guard::before{content:"";position:absolute;left:22px;top:0;width:18px;height:1px;background:var(--accent)}
.guard p{color:var(--soft);font-size:15px;line-height:1.6;margin-top:8px}

@media (max-width:1180px){
  .ask-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .guard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:560px){
  .ask-grid,.guard-grid{grid-template-columns:1fr}
}

/* Appareil leger : pas de WebGL, on montre la marque en image. */
.logo3d.logo3d-statique{place-items:center}
.logo3d.logo3d-statique .logo3d-fallback{
  display:block;width:min(58%,340px);opacity:.9;
  filter:drop-shadow(0 24px 60px rgba(0,0,0,.6));
}
/* Sur grand ecran, le rendu 3D est pousse dans la moitie droite par
   `hook.x` (motion.js). Le repli, lui, restait au CENTRE — donc derriere le
   texte, et la page n'avait pas la meme composition selon que la machine
   pouvait faire du WebGL ou non. On lui donne la meme place. */
/* NB specificite : `.stage-logo .logo3d` (plus bas dans ce fichier) repose
   `place-items:center` a specificite EGALE et l'emporte par l'ordre. Il faut
   donc porter le meme prefixe ici, sinon la regle est inerte — et un
   `padding-right` seul recentrerait la marque vers la GAUCHE. */
@media (min-width:901px){
  .stage-logo .logo3d.logo3d-statique{place-items:center end;padding-right:16vw}
  .stage-logo .logo3d.logo3d-statique .logo3d-fallback{width:min(34%,400px)}
}


/* ══ FOND ANIME — repris TEL QUEL de la version 2 ══════════════════════
   Grille en perspective, faisceaux et etincelles : c'est la signature de
   la marque. Copie sans retouche depuis `openlumena encien/styles.css`.
   Le fond de `body` passe en transparent pour le laisser voir ; `html`
   garde la couleur de base, ce qui preserve la garde anti-flash blanc. */
html{background:#070b10 !important}
body{background:transparent !important}

.motion-bg {
  position: fixed;
  top:0;right:0;bottom:0;left:0;
  z-index: -1;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% -18%, rgba(255, 174, 89, 0.28), transparent 30%),
    radial-gradient(ellipse at 82% 18%, rgba(51, 88, 111, 0.18), transparent 33%),
    radial-gradient(ellipse at 12% 62%, rgba(122, 58, 18, 0.34), transparent 38%),
    linear-gradient(140deg, #05060a 0%, #101623 45%, #07151a 100%);
  perspective: 1100px;
}

.motion-bg::before,
.motion-bg::after {
  content: "";
  position: absolute;
  pointer-events: none;
}

.motion-bg::before {
  left: -14vw;
  top: -10vh;
  width: 62vw;
  height: 128vh;
  background:
    linear-gradient(115deg, rgba(255,255,255,0.06), transparent 28%),
    linear-gradient(180deg, rgba(245,159,74,0.1), rgba(4,7,11,0.12));
  clip-path: polygon(26% 0, 100% 0, 72% 100%, 0 100%);
  opacity: 0.72;
  filter: blur(0.2px);
  transform: translateZ(-120px) rotateX(0deg);
  animation: premiumPlane 24s ease-in-out infinite;
}

.motion-bg::after {
  right: -16vw;
  bottom: -30vh;
  width: 76vw;
  height: 86vh;
  background:
    radial-gradient(circle at 32% 20%, rgba(245,159,74,0.18), transparent 34%),
    linear-gradient(130deg, rgba(255,255,255,0.055), rgba(255,255,255,0.012) 46%, transparent 72%);
  clip-path: polygon(14% 0, 100% 18%, 84% 100%, 0 76%);
  opacity: 0.62;
  transform: rotateX(62deg) rotateZ(-8deg) translate3d(0, 0, -160px);
  animation: premiumDeck 28s ease-in-out infinite;
}

.grid-layer {
  position: absolute;
  left: -14%;
  right: -14%;
  bottom: -34%;
  height: 92%;
  background-image:
    linear-gradient(rgba(255,255,255,0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.045) 1px, transparent 1px);
  background-size: 68px 68px;
  mask-image: linear-gradient(to top, rgba(0,0,0,0.88), transparent 80%);
  transform-origin: 50% 100%;
  transform: rotateX(68deg) translate3d(0, 10vh, -120px);
  opacity: 0.78;
  animation: gridDrift 22s linear infinite;
}

.beam {
  position: absolute;
  width: 48vw;
  height: 48vw;
  border-radius: 50%;
  filter: blur(72px);
  opacity: 0.42;
  mix-blend-mode: screen;
}

.beam-a {
  background: rgba(245, 159, 74, 0.38);
  top: -18vw;
  right: 4vw;
  animation: beamA 17s ease-in-out infinite;
}

.beam-b {
  background: rgba(230, 126, 34, 0.24);
  bottom: -8vh;
  left: -18vw;
  animation: beamB 21s ease-in-out infinite;
}

.spark {
  position: absolute;
  width: 3px;
  height: 3px;
  background: var(--accent);
  border-radius: 50%;
  box-shadow: 0 0 18px rgba(245, 159, 74, 0.9);
  animation: sparkFloat 11s ease-in-out infinite;
}

.s1 { left: 8%; top: 20%; animation-delay: -1s; }

.s2 { left: 82%; top: 14%; animation-delay: -4s; }

.s3 { left: 64%; top: 52%; animation-delay: -7s; }

.s4 { left: 22%; top: 74%; animation-delay: -2s; }

.s5 { left: 91%; top: 78%; animation-delay: -6s; }

@keyframes gridDrift {
  from { transform: rotateX(68deg) translate3d(0, 10vh, -120px); background-position: 0 0; }
  to { transform: rotateX(68deg) translate3d(0, 10vh, -120px); background-position: 68px 68px; }
}

@keyframes premiumPlane {
  0%, 100% { transform: translate3d(0, 0, -120px) skewX(-2deg); opacity: 0.66; }
  50% { transform: translate3d(2vw, 0.8vh, -120px) skewX(-4deg); opacity: 0.82; }
}

@keyframes premiumDeck {
  0%, 100% { transform: rotateX(62deg) rotateZ(-8deg) translate3d(0, 0, -160px); opacity: 0.56; }
  50% { transform: rotateX(62deg) rotateZ(-7deg) translate3d(-2vw, -1vh, -160px); opacity: 0.72; }
}

@keyframes beamA {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(-8vw, 12vh, 0) scale(1.12); }
}

@keyframes beamB {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(18vw, -10vh, 0) scale(0.9); }
}

@keyframes sparkFloat {
  0%, 100% { transform: translateY(0); opacity: 0.35; }
  50% { transform: translateY(-34px); opacity: 1; }
}

/* Le grain et le halo restent au-dessus, sans concurrencer le fond. */
.site-glow{opacity:.45}

@media (prefers-reduced-motion:reduce){
  .motion-bg::before,.motion-bg::after,.grid-layer,.beam,.spark{animation:none !important}
}

/* ══ PLATEAU — la scene fixe du haut de page ═══════════════════════════
   Le rail (.runway) donne la course au defilement ; le plateau (.stage)
   reste colle a l'ecran pendant que les actes se succedent. */
.runway{position:relative;height:340vh}
.stage{
  position:sticky;top:0;height:100vh;height:100dvh;
  overflow:hidden;display:grid;place-items:center;
}
/* Fond de page : fixe, derriere tout le contenu, actif du haut jusqu'au
   pied de page. `pointer-events:none` est obligatoire — sur toute la
   surface, il intercepterait sinon chaque clic de la page. */
.stage-logo{
  position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;
  display:grid;place-items:center;will-change:opacity;
}
/* Voile entre la marque et le texte : sans lui, un logo clair passe sous les
   lettres et rend l'acte illisible. La lisibilite prime sur le decor. */
.stage::after{
  content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;
  background:radial-gradient(62% 52% at 38% 50%,rgba(7,11,16,.92) 0%,rgba(7,11,16,.55) 58%,transparent 100%);
}
.stage-logo .logo3d{width:100%;height:100%;display:grid;place-items:center}
.stage-logo .logo3d canvas{display:block}

.stage-act{
  position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;
  display:grid;align-content:center;justify-items:start;
  padding:0 var(--gut);pointer-events:none;
  opacity:0;will-change:opacity,transform;
}
/* L'acte du bandeau : le titre reste dans la marge, le bandeau va d'un bord
   a l'autre. Sans ce debordement calcule, le masque n'aurait rien a fondre. */
.stage-act[data-act="Integrations"]{padding:0;justify-items:stretch}
.stage-intro{padding:0 var(--gut);margin-bottom:clamp(26px,3.4vw,52px)}
.stage-intro .stage-title{margin-bottom:0;max-width:24ch}
.stage-act>*{pointer-events:auto}
.stage-act .hero-copy{max-width:min(640px,54vw)}
/* Les actes qui portent du texte restent dans la moitie gauche : la marque
   occupe la droite, les deux ne se marchent plus dessus. */
.stage-act[data-act="Integrations"],
.stage-act[data-act="Principes"]{justify-items:start;text-align:left}
/* L'acte final porte trois colonnes : il lui faut de la largeur. La marque
   part plus loin a droite et s'efface davantage pour lui laisser la place. */
@media (min-width:901px){
  .stage-act.act-final>*{max-width:min(1000px,74vw)}
}

.stage-eyebrow{
  font-family:var(--mono);font-size:.72rem;font-weight:500;
  letter-spacing:.24em;text-transform:uppercase;color:var(--accent);
  margin-bottom:26px;
}

/* Bandeau : du TEXTE qui defile, pas des cases. Les cases donnaient trois
   rangees de largeurs inegales aux bords francs — ca ressemblait a un
   tableau casse. Ici les bords sont fondus par un masque, donc une rangee
   ne « s'arrete » jamais : elle disparait. */
.belt{
  width:100vw;display:grid;gap:clamp(14px,1.8vw,26px);overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%);
}
.belt-row{
  display:flex;align-items:center;width:max-content;
  gap:clamp(20px,2.4vw,42px);will-change:transform;
}
.belt-row span{
  display:inline-flex;align-items:center;gap:clamp(20px,2.4vw,42px);
  white-space:nowrap;color:var(--muted);
  font-size:clamp(1rem,1.55vw,1.35rem);font-weight:300;letter-spacing:-.02em;
}
/* la puce de separation appartient au mot, pas a la mise en page :
   elle suit donc le defilement sans jamais se decaler. */
.belt-row span::after{
  content:"";width:3px;height:3px;border-radius:50%;
  background:currentColor;opacity:.4;flex:none;
}
.belt-row span:last-child::after{display:none}
.belt-row span.on{color:var(--accent);font-weight:400}
.belt-row:nth-child(2) span{font-family:var(--mono);font-size:clamp(.86rem,1.15vw,1rem);letter-spacing:.02em}

/* ── ACTE FINAL — c'est l'ecran qui doit donner envie d'installer ────── */
.act-final{align-content:center}
.stage-title{
  font-size:clamp(1.9rem,3.4vw,3rem);font-weight:200;letter-spacing:-.042em;
  line-height:1.08;color:#fff;text-wrap:balance;margin-bottom:clamp(28px,3.6vw,46px);
  max-width:20ch;
}
.stage-title em{font-family:var(--serif);font-style:italic;font-weight:400;
  font-size:1.06em;color:var(--accent)}

.pillar-row{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(20px,2.6vw,44px);width:100%;
}
.pillar-col{
  display:grid;gap:6px;align-content:start;
  padding-top:18px;border-top:1px solid var(--border-soft);
}
.pillar-w{
  font-size:clamp(1.25rem,2vw,1.75rem);font-weight:600;letter-spacing:-.03em;
  color:var(--accent);line-height:1;
}
.pillar-t{color:var(--soft);font-size:15px;letter-spacing:-.015em}
.pillar-d{color:var(--muted);font-size:14px;line-height:1.6;margin-top:8px;max-width:32ch}
.stage-cta{margin-top:clamp(30px,3.8vw,52px)}

@media (max-width:900px){
  .stage-title{max-width:none}
  .pillar-row{grid-template-columns:1fr;gap:18px}
  .pillar-d{max-width:none}
}

/* instrumentation : elle affiche l'etat reel de la scene */
.stage-hud{
  position:absolute;left:var(--gut);bottom:clamp(18px,3.2vh,34px);z-index:3;
  display:flex;align-items:center;gap:.85rem;pointer-events:none;
  font-family:var(--mono);font-size:.68rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);
}
.hud-dot{width:5px;height:5px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 10px var(--glow)}
.hud-name{color:var(--soft)}
.hud-dir{color:var(--accent);width:1.1em;display:inline-block}
.stage-hint{
  position:absolute;right:var(--gut);bottom:clamp(18px,3.2vh,34px);z-index:3;
  display:flex;align-items:center;gap:.6rem;pointer-events:none;
  font-family:var(--mono);font-size:.66rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--muted);
}
.stage-hint .arr{display:inline-block;animation:bob 2.4s ease-in-out infinite}
@keyframes bob{0%,100%{transform:translateY(-2px);opacity:.45}50%{transform:translateY(2px);opacity:1}}

@media (max-width:900px){
  .runway{height:300vh}
  .stage-act .hero-copy{max-width:none}
  .stage-hint{display:none}
  .belt-row span{padding:12px 16px;font-size:.74rem}
}
@media (prefers-reduced-motion:reduce){
  /* Meme hero sur tous les PC : la preference systeme neutralise le mouvement,
     elle ne doit jamais transformer la mise en page en colonne. */
  main#top{position:relative}
  .runway{height:auto}
  .stage{
    position:relative;height:100vh;height:100dvh;min-height:640px;
    display:grid;place-items:center;overflow:hidden;padding:0;
  }
  .stage-logo{
    position:absolute;top:0;right:0;bottom:auto;left:50%;
    width:50%;height:100vh;height:100dvh;min-height:640px;
  }
  .stage-act{position:absolute;inset:0;opacity:0;padding:0 var(--gut)}
  .stage-act[data-act="Ouverture"]{display:grid;opacity:1;padding-right:50vw}
  .stage-act[data-act="Integrations"],
  .stage-act[data-act="Principes"]{display:none}
  .stage-logo .logo3d.logo3d-statique{place-items:center;padding-right:0}
  .stage-logo .logo3d.logo3d-statique .logo3d-fallback{width:min(64%,400px)}
  .stage-hud,.stage-hint{display:none}
}
@media (prefers-reduced-motion:reduce) and (max-width:900px){
  .stage{height:auto;min-height:820px;align-items:end}
  .stage-logo{
    top:72px;right:0;left:0;width:100%;height:300px;min-height:0;
  }
  .stage-act[data-act="Ouverture"]{
    position:relative;min-height:820px;
    padding:360px var(--gut) 72px;align-content:center;
  }
  .stage::after{
    background:linear-gradient(180deg,transparent 10%,rgba(7,11,16,.3) 35%,rgba(7,11,16,.94) 58%);
  }
  .stage-logo .logo3d.logo3d-statique .logo3d-fallback{width:min(62%,300px)}
}

/* ══ RESPONSIVE ════════════════════════════════════════════════════════ */
@media (min-width:1600px){
  :root{--h1:68px;--h2:44px;--lede:17.5px;--shell:1340px;--nav:15px;--nav-h:44px;
        --btn:14.5px;--btn-h:44px;--hero-btn-h:48px;--logo:17px}
}
@media (max-width:1180px){
  :root{--h1:46px;--h2:33px}
  .hero{grid-template-columns:1fr;gap:44px}
  .logo-panel{min-height:min(40vh,340px);order:-1}
  .hero-copy{max-width:none}
  .quickstart-section,.contact-section{grid-template-columns:1fr}
  .footer-top{grid-template-columns:1fr}
}
@media (max-width:900px){
  /* le flou d'arriere-plan se repeint a chaque image : trop cher ici */
  .site-header{backdrop-filter:none;-webkit-backdrop-filter:none;
    background:linear-gradient(180deg,rgba(7,11,16,.98),rgba(7,11,16,.86) 70%,transparent)}
  .menu-backdrop{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(7,11,16,.92)}
  :root{--h1:38px;--h2:29px;--lede:15.5px;--btn-h:44px;--hero-btn-h:48px}
  .site-header{grid-template-columns:1fr auto auto;gap:10px;
    padding-top:max(var(--header-y),env(safe-area-inset-top))}
  .brand,.header-cta,.burger{z-index:80}
  .burger{display:grid}
  .menu-backdrop{display:block}
  body.menu-open .menu-backdrop{opacity:1;visibility:visible}
  body.menu-open{overflow:hidden}

  .nav-links{
    position:fixed;top:0;right:0;bottom:0;left:0;z-index:45;
    flex-direction:column;justify-content:center;gap:12px;
    padding:96px 22px 32px;padding-top:max(96px,calc(env(safe-area-inset-top) + 88px));
    background:transparent;overflow-y:auto;
    opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s ease;
  }
  body.menu-open .nav-links{opacity:1;visibility:visible}
  /* En plein ecran, le lien redevient une cible : cadre et hauteur de doigt.
     Le filet ambre du bureau ne suffirait pas ici. */
  .nav-links a{
    width:min(420px,100%);min-height:56px;font-size:19px;
    justify-content:center;color:var(--text);
    border:1px solid var(--border-soft);border-radius:10px;
    background:rgba(12,18,26,.72);
  }
  .nav-links a:hover,.nav-links a:focus-visible{
    border-color:var(--border-amber);background:var(--panel-2);
  }

  .feature-layout{grid-template-columns:1fr}
  .plans-grid,.faq-grid{grid-template-columns:1fr}
  .footer-columns{grid-template-columns:repeat(2,minmax(0,1fr))}
  .workflow{flex-direction:column;align-items:stretch}
  .connector{width:1px;height:26px;margin-inline:auto;flex:none;
    background:linear-gradient(180deg,var(--border-soft),var(--border-amber),var(--border-soft))}
  .hero-metrics{gap:16px 22px}
}
@media (max-width:560px){
  :root{--h1:33px;--h2:26px}
  .hero-actions{flex-direction:column;align-items:stretch}
  .hero-actions .btn{width:100%}
  .footer-columns{grid-template-columns:1fr}
  .trusted-strip span{flex:1 1 42%}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none !important;animation:none !important}
  .appear,.hero h1 em,.badge-star{opacity:1;transform:none;clip-path:none;filter:none}
  body.reveal-ready [data-reveal]{opacity:1;transform:none}
  html{scroll-behavior:auto}
}

/* Pied de page légal des pages applicatives — sobre, toujours atteignable. */
.legal-mini{
  position:relative;z-index:5;
  display:flex;flex-wrap:wrap;gap:18px;justify-content:center;
  padding:22px 20px 26px;
  font-family:var(--mono),ui-monospace,monospace;font-size:.68rem;
  letter-spacing:.1em;text-transform:uppercase;
}
.legal-mini a{color:#8b99a8;border-bottom:1px solid transparent;transition:color .26s,border-color .26s}
.legal-mini a:hover,.legal-mini a:focus-visible{color:var(--accent);border-color:var(--border-amber)}
