/* Sept blocs « à la Urbi » (techniques seulement), palette HUB IA. */
.u7 { --u7-rayon: clamp(22px, 2.6vw, 38px); --u7-pad: clamp(22px, 2.4vw, 34px); padding: clamp(64px, 8vw, 114px) var(--marge-page) clamp(24px, 3vw, 48px); position: relative; overflow: hidden; }
.u7 h2, .u7 h3 { font-family: var(--police-titres); font-weight: 500; letter-spacing: -0.02em; }
.u7-centre { text-align: center; max-width: 760px; margin: 0 auto; }
.u7-pastille { display: inline-block; margin: 0 0 18px; padding: 6px 14px; border-radius: 999px; background: var(--surface); border: 1px solid var(--bordure); font-size: var(--t-s); font-weight: 500; box-shadow: 0 2px 10px rgb(0 0 0 / 0.05); }
.u7-titre { font-size: clamp(2rem, 1.2rem + 2.6vw, 3.2rem); line-height: 1.08; margin: 0; }
.u7-titre--gauche { text-align: left; }
.u7-sous { margin: 20px auto 0; max-width: 52ch; color: var(--texte-doux); font-size: var(--t-m); line-height: 1.5; }
.u7-fictif { display: inline-block; font: 500 0.6875rem/1 var(--police-donnees); padding: 3px 6px; border-radius: 6px; background: color-mix(in srgb, var(--texte) 8%, transparent); color: var(--texte-doux); white-space: nowrap; }
.u7-ico { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* 1 — réseau, bulles flottantes, H en verre lime sur socle (CSS 3D, couches) */
.u7-1 { padding-bottom: 0; }
.u7-scene1 { position: relative; height: clamp(380px, 38vw, 540px); margin-top: 24px; }
.u7-reseau { position: absolute; inset: 0; width: 100%; height: 100%; fill: none; stroke: color-mix(in srgb, var(--texte) 16%, transparent); stroke-width: 1.2; }
.u7-reseau path { stroke-dasharray: 1400; stroke-dashoffset: 1400; transition: stroke-dashoffset 2.4s cubic-bezier(.2,.7,.2,1) calc(var(--i) * 120ms); }
.u7-vu .u7-reseau path { stroke-dashoffset: 0; }
.u7-bulle { position: absolute; width: 44px; height: 44px; margin: -22px; border-radius: 50%; display: grid; place-items: center; background: var(--surface); color: var(--texte); border: 2px solid var(--texte); animation: u7-flotte 5s ease-in-out calc(var(--d) * -0.7s) infinite; }
.u7-bulle .u7-ico { width: 20px; height: 20px; }
@keyframes u7-flotte { 50% { transform: translateY(-8px); } }
.u7-objet { position: absolute; left: 50%; top: 54%; width: clamp(220px, 24vw, 330px); aspect-ratio: 1; translate: -50% -50%; perspective: 1400px; }
.u7-objet__pivot { position: absolute; inset: 0; transform-style: preserve-3d; transform: rotateX(56deg) rotateZ(calc(-38deg + var(--u7-rot, 0deg))); transition: transform 0.6s cubic-bezier(.2,.7,.2,1); }
.u7-socle { position: absolute; inset: 6%; transform-style: preserve-3d; }
.u7-socle__dessus { position: absolute; inset: 0; border-radius: 22%; background: linear-gradient(135deg, #FFFFFF, #E6E4DE); transform: translateZ(34px); box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.06); }
.u7-socle__flanc { position: absolute; inset: 0; border-radius: 22%; background: #CFCDC6; box-shadow: 0 0 0 0 #BDBBB4, 30px 40px 60px rgb(0 0 0 / 0.18); }
.u7-socle::before { content: ""; position: absolute; inset: 0; border-radius: 22%; background: #D9D7D0; transform: translateZ(17px); }
.u7-h { position: absolute; inset: 24%; transform-style: preserve-3d; transform: translateZ(35px); }
.u7-h__c, .u7-h__face { position: absolute; inset: 0; transform: translateZ(calc(var(--z, 14) * 3.4px)); -webkit-mask: var(--u7-hmask) center / contain no-repeat; mask: var(--u7-hmask) center / contain no-repeat;
  background: color-mix(in srgb, var(--accent) 70%, #5E7A2A); opacity: 0.55; }
.u7-h__face { --z: 14; opacity: 0.92; background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 40%, #FFFFFF) 0%, var(--accent) 45%, color-mix(in srgb, var(--accent) 75%, #48601C) 100%); }
.u7-h { --u7-hmask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect x='8' y='6' width='26' height='88' rx='13'/%3E%3Crect x='66' y='6' width='26' height='88' rx='13'/%3E%3Crect x='30' y='40' width='40' height='20'/%3E%3C/svg%3E"); }
.u7-sphere { position: absolute; left: 50%; top: 50%; width: 30%; aspect-ratio: 1; translate: -50% -50%; border-radius: 50%; transform: translateZ(60px) rotateZ(38deg) rotateX(-56deg);
  background: radial-gradient(circle at 32% 30%, var(--sphere-clair), var(--accent) 55%, var(--sphere-sombre)); box-shadow: 0 0 40px color-mix(in srgb, var(--accent) 60%, transparent); }

/* 2 — rangée de graphiques flottants en décalage, parallaxe par carte */
.u7-2 { padding-top: 24px; }
.u7-rangee { display: flex; gap: clamp(14px, 2vw, 28px); justify-content: center; align-items: flex-start; padding: 60px 0; }
.u7-graphe { flex: 0 0 clamp(170px, 15vw, 220px); margin: 0; padding: 14px 14px 10px; border-radius: 14px; background: var(--surface); border: 1px solid var(--bordure); box-shadow: 0 10px 30px rgb(0 0 0 / 0.07);
  translate: 0 calc(var(--dy) + var(--px, 0px)); transition: box-shadow .3s; }
.u7-graphe:hover { box-shadow: 0 16px 40px rgb(0 0 0 / 0.12); }
.u7-graphe figcaption { display: flex; justify-content: space-between; gap: 6px; align-items: center; font-size: var(--t-xs); font-weight: 500; padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px solid var(--bordure); }
.u7 svg .grille path { stroke: color-mix(in srgb, var(--texte) 12%, transparent); stroke-dasharray: 3 3; fill: none; }
.u7 svg .a { fill: var(--accent); } .u7 svg .b { fill: color-mix(in srgb, var(--texte) 70%, var(--fond)); } .u7 svg .c { fill: color-mix(in srgb, var(--texte) 30%, var(--fond)); }
.u7 svg .anneau-fond { fill: none; stroke: color-mix(in srgb, var(--texte) 14%, transparent); stroke-width: 14; }
.u7 svg .anneau { fill: none; stroke: var(--accent); stroke-width: 14; }
.u7 svg .trait { fill: none; stroke: var(--texte); stroke-width: 2.5; stroke-linejoin: round; } .u7 svg .trait.doux { stroke: var(--accent); }
@media (max-width: 900px) { .u7-rangee { justify-content: flex-start; overflow-x: auto; padding: 50px 4px; scroll-snap-type: x mandatory; } .u7-graphe { scroll-snap-align: start; } }

/* 3 — trois colonnes */
.u7-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(20px, 3vw, 48px); max-width: 1100px; margin: 48px auto 0; }
.u7-col .u7-ico { width: 36px; height: 36px; color: var(--texte); background: var(--accent); border-radius: 10px; padding: 6px; }
.u7-col h3 { font-size: var(--t-l); margin: 16px 0 8px; }
.u7-col p { color: var(--texte-doux); margin: 0 0 18px; }
.u7-plus { display: inline-flex; align-items: center; gap: 12px; padding: 8px 8px 8px 16px; min-height: 44px; border-radius: 12px; background: var(--surface); border: 1px solid var(--bordure); color: var(--texte); text-decoration: none; font-weight: 500; }
.u7-plus__f { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; background: var(--fond); transition: transform .25s; }
.u7-plus:hover .u7-plus__f, .u7-plus:focus-visible .u7-plus__f { transform: translateX(3px); background: var(--accent); }
.u7-plus .u7-ico { width: 16px; height: 16px; }

/* 4 / 5 — bento */
.u7-bento { display: grid; gap: clamp(14px, 1.6vw, 24px); max-width: 1320px; margin: 0 auto; }
.u7-bento--3 { grid-template-columns: 1fr 1.45fr 1fr; }
.u7-bento--2 { grid-template-columns: 1fr 1.4fr; }
.u7-carte { position: relative; overflow: hidden; border-radius: var(--u7-rayon); padding: var(--u7-pad); background: var(--surface); border: 1px solid var(--bordure); min-height: 460px; display: flex; flex-direction: column; transition: transform .35s cubic-bezier(.2,.7,.2,1), box-shadow .35s; }
.u7-carte:hover { transform: translateY(-4px); box-shadow: 0 18px 50px rgb(0 0 0 / 0.10); }
.u7-carte h3 { font-size: clamp(1.6rem, 1rem + 1.4vw, 2.3rem); line-height: 1.1; margin: 0 0 12px; }
.u7-carte > p { color: var(--texte-doux); margin: 0; max-width: 44ch; }
.u7-degrade { background: linear-gradient(120deg, var(--texte) 35%, color-mix(in srgb, var(--accent) 55%, var(--texte))); -webkit-background-clip: text; background-clip: text; color: transparent; }
.u7-carte--sombre { background: radial-gradient(120% 90% at 85% 0%, color-mix(in srgb, var(--accent) 22%, #101211) 0%, #101211 55%), #101211; border-color: #2a2d2b; color: var(--texte); }
.u7-carte--sombre > p { color: var(--texte-doux); }
.u7-diagramme { position: relative; margin-top: auto; padding-top: 24px; }
.u7-pills { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
.u7-pill { padding: 9px 14px; border-radius: 12px; background: var(--fond); border: 1px solid var(--bordure); font-size: var(--t-s); box-shadow: 0 4px 12px rgb(0 0 0 / 0.05); }
.u7-hub { display: block; width: max-content; margin: 18px auto 0; padding: 8px 14px; border-radius: 10px; background: var(--accent); color: var(--sur-accent); font-weight: 700; font-size: var(--t-s); }
.u7-maquette { margin: auto auto -1px; width: min(100%, 420px); padding-top: 28px; }
.u7-recherche { display: flex; gap: 10px; align-items: center; padding: 12px 14px; border-radius: 12px; background: #ECEEED; color: #21201C; font-size: var(--t-s); position: relative; z-index: 1; box-shadow: 0 8px 24px rgb(0 0 0 / 0.3); }
.u7-recherche .u7-ico { width: 18px; height: 18px; flex: none; }
.u7-resultat { margin: -6px 18px 0; padding: 22px 18px 18px; border-radius: 0 0 14px 14px; background: rgb(255 255 255 / 0.07); border: 1px solid rgb(255 255 255 / 0.14); backdrop-filter: blur(10px); }
.u7-resultat__t { display: flex; justify-content: space-between; align-items: center; font-weight: 500; margin: 0 0 10px; }
.u7-resultat ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; font-size: var(--t-s); color: var(--texte-doux); }
.u7-resultat li { display: flex; gap: 10px; align-items: center; }
.u7-point { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex: none; } .u7-point--doux { background: #6F7673; }
.u7-resultat__a { margin: 14px 0 0; display: inline-block; padding: 6px 12px; border-radius: 999px; background: var(--accent); color: var(--sur-accent); font-size: var(--t-xs); font-weight: 600; }
.u7-carte--sombre .u7-fictif { background: rgb(255 255 255 / 0.1); color: #ADB5B2; }
.u7-cercles { position: relative; margin-top: auto; height: 220px; }
.u7-onde { position: absolute; left: 50%; top: 50%; width: calc(var(--r) * 90px); aspect-ratio: 1; translate: -50% -50%; border-radius: 50%; border: 1px solid var(--bordure); }
.u7-avatar { position: absolute; left: calc(50% + var(--a) * 62px); top: 34%; width: 46px; height: 46px; margin-left: -23px; border-radius: 50%; border: 3px solid var(--surface);
  background: radial-gradient(circle at 50% 36%, color-mix(in srgb, var(--texte) 40%, var(--fond)) 0 26%, transparent 27%), radial-gradient(circle at 50% 110%, color-mix(in srgb, var(--texte) 40%, var(--fond)) 0 46%, transparent 47%), var(--fond); }
.u7-avatar[style*="0"] { background-color: color-mix(in srgb, var(--accent) 40%, var(--fond)); }
.u7-logo { position: absolute; left: 50%; bottom: 18%; translate: -50% 0; padding: 6px 12px; border-radius: 10px; background: var(--surface); border: 1px solid var(--bordure); font-weight: 700; font-size: var(--t-s); box-shadow: 0 6px 16px rgb(0 0 0 / 0.08); }
.u7-note { font-size: var(--t-xs); color: var(--texte-doux); margin: 8px 0 0; text-align: center; }
.u7-iso { width: 100%; margin-top: auto; overflow: visible; }
.u7-iso path { stroke: var(--texte); stroke-width: 1; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.u7-iso .h { fill: var(--surface); } .u7-iso .g { fill: color-mix(in srgb, var(--texte) 10%, var(--surface)); } .u7-iso .d { fill: color-mix(in srgb, var(--texte) 22%, var(--surface)); }
.u7-iso .dalle.h { fill: var(--fond); }
.u7-iso .machine.h { fill: #2a2d2b; } .u7-iso .machine.g { fill: #202221; } .u7-iso .machine.d { fill: #101211; }
.u7-iso .bureau.h { fill: var(--accent); }
.u7-iso .trajet { fill: none; stroke: color-mix(in srgb, var(--accent) 70%, #3a5410); stroke-width: 4; stroke-linecap: round; stroke-dasharray: 400; stroke-dashoffset: 400; transition: stroke-dashoffset 2s ease .4s; }
.u7-vu .u7-iso .trajet { stroke-dashoffset: 0; }
.u7-iso .trajet-pt { fill: var(--accent); stroke: var(--texte); }
.u7-iso__t { font: 500 13px var(--police-interface); fill: var(--texte-doux); text-anchor: middle; }
.u7-entete { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.u7-cta { display: inline-flex; align-items: center; gap: 10px; padding: 8px 8px 8px 16px; min-height: 44px; border-radius: 12px; background: var(--accent); color: #101211; font-weight: 600; text-decoration: none; white-space: nowrap; }
.u7-cta__f { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; background: #FFFFFF; transition: transform .25s; } .u7-cta:hover .u7-cta__f { transform: translateX(3px); }
.u7-cta .u7-ico { width: 16px; height: 16px; }
.u7-tel-zone { position: relative; margin-top: auto; height: 300px; }
.u7-tel { position: absolute; left: 32%; bottom: -40px; width: 170px; height: 320px; border-radius: 30px; padding: 8px; background: #2a2d2b; box-shadow: 0 30px 60px rgb(0 0 0 / 0.5); }
.u7-tel__ecran { height: 100%; border-radius: 23px; background: #ECEEED; color: #21201C; padding: 26px 12px; display: flex; flex-direction: column; gap: 10px; font-size: 0.75rem; }
.u7-tel__t { margin: 0; font-weight: 600; display: flex; flex-direction: column; gap: 4px; }
.u7-tel__ecran .u7-fictif { background: #DCDBD6; color: #4a4b47; align-self: flex-start; }
.u7-tel__bulle { padding: 8px; border-radius: 10px; background: #FFFFFF; border: 1px solid #CFCECA; } .u7-tel__bulle--doux { opacity: 0.75; }
.u7-tel__btn { margin-top: auto; align-self: stretch; text-align: center; padding: 8px; border-radius: 999px; background: var(--accent); font-weight: 700; }
.u7-verre { position: absolute; border-radius: 16px; background: rgb(255 255 255 / 0.08); border: 1px solid rgb(255 255 255 / 0.18); backdrop-filter: blur(12px) saturate(1.2); -webkit-backdrop-filter: blur(12px) saturate(1.2); translate: 0 var(--px, 0px); display: grid; gap: 10px; padding: 16px; align-content: start; }
.u7-verre span { height: 8px; border-radius: 4px; background: rgb(255 255 255 / 0.2); } .u7-verre span:nth-child(2) { width: 70%; background: color-mix(in srgb, var(--accent) 70%, transparent); } .u7-verre span:nth-child(3) { width: 50%; }
.u7-verre--grand { right: 0; top: 10px; width: 46%; height: 260px; }
.u7-verre--recherche { left: 4%; bottom: 60px; width: 42%; display: flex; align-items: center; padding: 10px 14px; z-index: 2; } .u7-verre--recherche span { flex: 1; }
.u7-verre--petit { right: 10%; bottom: 40px; width: 110px; z-index: 2; }

/* 6 — bande sombre, écran + widgets en verre */
.u7-6 { padding: 0 var(--marge-panneau); background: transparent; overflow: visible; }
.u7-bande { position: relative; border-radius: var(--rayon-panneau) var(--rayon-panneau) var(--rayon-panneau) var(--rayon-panneau); padding: clamp(60px, 6vw, 100px) var(--marge-page) 0; background: radial-gradient(90% 120% at 90% 0%, color-mix(in srgb, var(--accent) 22%, #101211), #101211 60%); overflow: hidden; }
.u7-ecran { max-width: 820px; margin: 0 auto; border-radius: 16px 16px 0 0; padding: 12px; background: rgb(255 255 255 / 0.06); border: 1px solid rgb(255 255 255 / 0.15); border-bottom: 0; }
.u7-ecran__barre { display: flex; gap: 6px; padding: 0 0 10px; } .u7-ecran__barre span { width: 9px; height: 9px; border-radius: 50%; background: rgb(255 255 255 / 0.25); }
.u7-ecran .u7-iso { display: block; background: #E7E5DF; border-radius: 8px 8px 0 0; --texte: #21201C; --surface: #FDFDFC; height: clamp(220px, 26vw, 360px); }
.u7-ecran .u7-iso .bloc.h { fill: #FDFDFC; }
.u7-widget { position: absolute; margin: 0; padding: 12px; width: clamp(170px, 17vw, 230px); border-radius: 16px; background: rgb(255 255 255 / 0.1); border: 1px solid rgb(255 255 255 / 0.2); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); translate: 0 var(--px, 0px);
  box-shadow: 0 20px 40px rgb(0 0 0 / 0.3); }
.u7-widget svg { display: block; background: #FDFDFC; border-radius: 10px; --texte: #21201C; --fond: #FDFDFC; }
.u7-widget figcaption { display: flex; justify-content: space-between; align-items: center; gap: 6px; font-size: var(--t-xs); color: var(--texte); margin-bottom: 8px; }
.u7-widget--g { left: 5%; top: 18%; } .u7-widget--c { left: 66%; top: 58%; background: rgb(16 18 17 / 0.55); } .u7-widget--d { right: 5%; top: 8%; }

/* 7 — cas d'usage sur fond sombre */
.u7-7 { margin: clamp(40px, 5vw, 80px) var(--marge-panneau) 0; border-radius: var(--rayon-panneau); background: radial-gradient(80% 80% at 100% 100%, color-mix(in srgb, var(--accent) 18%, #101211), #101211 65%); color: var(--texte); padding-bottom: clamp(60px, 7vw, 100px); }
.u7-cas-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(18px, 2.4vw, 36px); margin-top: 40px; }
.u7-cas__ill { border-radius: 14px; border: 1px solid rgb(255 255 255 / 0.18); background: rgb(255 255 255 / 0.05); overflow: hidden; transition: transform .35s cubic-bezier(.2,.7,.2,1), border-color .35s; }
.u7-cas:hover .u7-cas__ill { transform: translateY(-4px); border-color: color-mix(in srgb, var(--accent) 60%, transparent); }
.u7-cas__ill svg { display: block; width: 100%; height: auto; }
.u7-cas h3 { font-size: var(--t-l); margin: 18px 0 8px; } .u7-cas p { color: var(--texte-doux); margin: 0; }
.u7-7 .rues path { stroke: rgb(255 255 255 / 0.12); stroke-width: 10; fill: none; }
.u7-7 .route { fill: none; stroke: var(--accent); stroke-width: 5; stroke-linejoin: round; stroke-dasharray: 300; stroke-dashoffset: 300; transition: stroke-dashoffset 1.8s ease .3s; }
.u7-vu .route { stroke-dashoffset: 0; }
.u7-7 .pin { fill: #ECEEED; } .u7-7 .modes rect { fill: var(--accent); } .u7-7 .modes circle { fill: #101211; }
.u7-7 .etiq rect { fill: rgb(255 255 255 / 0.08); stroke: rgb(255 255 255 / 0.2); } .u7-7 .etiq text { fill: #ECEEED; font: 500 11px var(--police-interface); text-anchor: middle; }
.u7-7 .arc-fond { fill: none; stroke: rgb(255 255 255 / 0.12); stroke-width: 26; } .u7-7 .arc { fill: none; stroke: var(--accent); stroke-width: 26; }
.u7-7 .fictif-t { fill: #ADB5B2; font: 500 11px var(--police-donnees); text-anchor: middle; }
.u7-7 .ilots rect { fill: rgb(255 255 255 / 0.08); stroke: rgb(255 255 255 / 0.14); }
.u7-7 .zone { fill: color-mix(in srgb, var(--accent) 14%, transparent); stroke: var(--accent); stroke-width: 1.5; }
.u7-7 .alerte { fill: #FF9592; stroke: #101211; stroke-width: 2; } .u7-7 .alerte.doux { fill: #F2C14E; } .u7-7 .ok { fill: var(--accent); stroke: #101211; stroke-width: 2; }

/* apparition */
.js-mouvement .u7 [data-u7-entre] { opacity: 0; transform: translateY(24px); transition: opacity .8s cubic-bezier(.2,.7,.2,1), transform .8s cubic-bezier(.2,.7,.2,1); }
.js-mouvement .u7 [data-u7-entre].u7-la { opacity: 1; transform: none; }

@media (max-width: 1000px) {
  .u7-bento--3, .u7-bento--2, .u7-cols, .u7-cas-grille { grid-template-columns: 1fr; }
  .u7-carte { min-height: 0; } .u7-cercles { height: 200px; } .u7-tel-zone { height: 280px; }
}
@media (max-width: 600px) {
  .u7-bulle { width: 34px; height: 34px; margin: -17px; } .u7-bulle .u7-ico { width: 16px; height: 16px; }
  .u7-scene1 { height: 340px; } .u7-objet { width: 200px; }
  .u7-widget { position: relative; left: auto !important; right: auto !important; top: auto !important; translate: none !important; margin: 12px auto; width: 100%; max-width: 260px; }
  .u7-bande { padding-bottom: 24px; } .u7-entete { flex-direction: column; } .u7-tel { left: 18%; }
  .u7-verre--grand { width: 40%; }
}
@media (prefers-reduced-motion: reduce) {
  .u7-bulle { animation: none; } .u7 * { transition: none !important; }
  .u7-reseau path, .u7-iso .trajet, .u7-7 .route { stroke-dashoffset: 0; }
  .u7-graphe, .u7-verre, .u7-widget { --px: 0px !important; }
}
