/* Frise du village */
.fv-frise { --fv-max: 300px; position: relative; width: 100%; margin: 0; clear: both; line-height: 1.4; font-family: inherit;
	/* Les bords prolongent le ciel, l'herbe et la rue quand l'écran est plus large que la frise. */
	background: linear-gradient(180deg, #bfe3f2 0%, #e4f3fa 60%, #9fd38a 70%, #9fd38a 82.4%, #d9d4cb 82.4%, #d9d4cb 87.4%, #9aa0a7 87.4%); }
.fv-frise *, .fv-frise *::before, .fv-frise *::after { box-sizing: border-box; }
.fv-scroll { overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
.fv-stage { margin: 0 auto; min-width: 1050px; max-width: calc(var(--fv-max) * 5.975); }
.fv-stage svg { display: block; width: 100%; height: auto; }
.fv-frise:not(.is-ready) .fv-stage { display: none; }
.fv-frise.is-wide .fv-stage svg { -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 3%, #000 97%, transparent 100%); mask-image: linear-gradient(90deg, transparent 0, #000 3%, #000 97%, transparent 100%); }
.fv-house, .fv-tag { cursor: pointer; outline: none; }
.fv-house .fv-lift { transition: transform .35s cubic-bezier(.2, .9, .3, 1.3); transform-box: fill-box; transform-origin: 50% 100%; }
.fv-house:hover .fv-lift, .fv-house:focus-visible .fv-lift, .fv-house.is-active .fv-lift { transform: translateY(-10px) scale(1.04); }
.fv-win { transition: fill .3s; }
.fv-house:hover .fv-win, .fv-house:focus-visible .fv-win, .fv-house.is-active .fv-win { fill: #ffe27a; }
.fv-shadow { opacity: .16; transition: opacity .35s; }
.fv-house.is-active .fv-shadow { opacity: .3; }
.fv-label { font: 600 20px "Poppins", "Inter", system-ui, sans-serif; fill: #fff; }
.fv-pill { transition: fill .25s; }
.fv-tag.is-active .fv-pill { fill: #1f3a5f; }
.fv-house:focus-visible .fv-shadow { opacity: .45; }
/* Bulle */
.fv-tip { position: absolute; z-index: 50; width: 270px; max-width: calc(100% - 16px); padding: 14px 16px 12px; background: #fff; color: #1d2327; border-radius: 16px; box-shadow: 0 10px 30px rgba(0, 0, 0, .2); pointer-events: none; opacity: 0; transform: translate(-50%, 8px) scale(.96); transition: opacity .2s, transform .2s; text-align: left; }
.fv-tip.is-on { opacity: 1; transform: translate(-50%, 0) scale(1); }
.fv-tip::after { content: ""; position: absolute; left: var(--fv-arrow, 50%); bottom: -8px; width: 16px; height: 16px; margin-left: -8px; background: #fff; transform: rotate(45deg); border-radius: 0 0 4px 0; }
.fv-tip b { display: block; font-size: 17px; margin-bottom: 4px; }
.fv-tip span { display: block; font-size: 14px; line-height: 1.45; color: #3c434a; white-space: pre-line; }
.fv-tip em { display: block; margin-top: 8px; font-style: normal; font-size: 13px; font-weight: 600; color: #1f3a5f; }
/* Animations */
.fv-cloud { animation: fv-drift 70s linear infinite; }
.fv-c2 { animation-duration: 95s; animation-delay: -40s; }
@keyframes fv-drift { from { transform: translateX(-200px); } to { transform: translateX(2100px); } }
.fv-smoke { animation: fv-smoke 4s ease-in-out infinite; transform-box: fill-box; transform-origin: center; opacity: 0; }
.fv-s2 { animation-delay: 1.3s; } .fv-s3 { animation-delay: 2.6s; }
@keyframes fv-smoke { 0% { opacity: 0; transform: translate(0, 0) scale(.6); } 20% { opacity: .7; } 100% { opacity: 0; transform: translate(14px, -46px) scale(1.4); } }
.fv-flag { animation: fv-flag 1.6s ease-in-out infinite alternate; transform-box: fill-box; transform-origin: 0% 50%; }
@keyframes fv-flag { to { transform: skewY(-6deg) scaleX(.92); } }
.fv-bell { animation: fv-bell 3s ease-in-out infinite; transform-box: fill-box; transform-origin: 50% 0%; }
@keyframes fv-bell { 0%, 70%, 100% { transform: rotate(0); } 78% { transform: rotate(14deg); } 86% { transform: rotate(-12deg); } 94% { transform: rotate(6deg); } }
/* Passants : ils traversent la rue, sans gêner les clics */
.fv-walkers { pointer-events: none; }
.fv-no-walkers .fv-walkers { display: none; }
.fv-walker { animation: fv-walk 60s linear infinite; }
.fv-right { animation-name: fv-walk; }
.fv-left { animation-name: fv-walk-back; }
@keyframes fv-walk { from { transform: translateX(-80px); } to { transform: translateX(1980px); } }
@keyframes fv-walk-back { from { transform: translateX(1980px); } to { transform: translateX(-80px); } }
.fv-leg { transform-box: fill-box; transform-origin: 50% 0%; animation: fv-step .7s ease-in-out infinite alternate; }
.fv-l2 { animation-direction: alternate-reverse; }
@keyframes fv-step { from { transform: rotate(-16deg); } to { transform: rotate(16deg); } }
.fv-bob { animation: fv-bob .35s ease-in-out infinite alternate; }
@keyframes fv-bob { to { transform: translateY(-1.5px); } }
.fv-wheel { animation: fv-spin .8s linear infinite; }
@keyframes fv-spin { to { transform: rotate(360deg); } }
.fv-tail { animation: fv-wag .4s ease-in-out infinite alternate; }
@keyframes fv-wag { to { transform: rotate(-25deg); } }
/* Sans JavaScript : simple liste de liens */
.fv-fallback { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 18px; margin: 0; padding: 14px; list-style: none; }
.fv-frise.is-ready .fv-fallback { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.fv-fallback a { color: #1d2327; font-weight: 600; }
@media (prefers-reduced-motion: reduce) {
	.fv-cloud, .fv-smoke, .fv-flag, .fv-bell, .fv-leg, .fv-bob, .fv-wheel, .fv-tail { animation: none; }
	.fv-walker { animation-play-state: paused; }
	.fv-house .fv-lift { transition: none; }
}
/* Collée en bas de l'écran */
.fv-frise.fv-sticky { position: fixed; left: 0; right: 0; bottom: 0; z-index: 9990; box-shadow: 0 -6px 20px rgba(0, 0, 0, .18); transition: transform .35s ease; }
.fv-sticky .fv-stage { min-width: 900px; }
.fv-sticky.is-collapsed { transform: translateY(100%); box-shadow: none; }
.fv-toggle { position: absolute; right: 16px; bottom: 100%; z-index: 2; margin: 0; padding: 6px 14px 5px; border: 0; border-radius: 12px 12px 0 0; background: #3b4250; color: #fff; font: 600 13px/1.2 "Poppins", "Inter", system-ui, sans-serif; cursor: pointer; box-shadow: 0 -3px 10px rgba(0, 0, 0, .15); }
.fv-toggle:hover, .fv-toggle:focus-visible { background: #1f3a5f; outline: none; }
.fv-toggle:focus-visible { box-shadow: 0 0 0 3px #f5c518; }
.fv-t-closed { display: none; }
.fv-sticky.is-collapsed .fv-t-open { display: none; }
.fv-sticky.is-collapsed .fv-t-closed { display: inline; }
@media (prefers-reduced-motion: reduce) { .fv-frise.fv-sticky { transition: none; } }
/* Jour, crépuscule et nuit (selon la hauteur du soleil) */
.fv-sky1, .fv-sky2 { transition: stop-color 2s; }
.fv-hill1, .fv-hill2, .fv-pave, .fv-road { transition: fill 2s; }
.fv-lift > *, .fv-bg > *, .fv-tree, .fv-walkers, .fv-cloud { transition: filter 2s, opacity 2s; }
.fv-night, .fv-halo { opacity: 0; transition: opacity 2s; }
.fv-sun { transition: opacity 2s, transform 2s; }
.fv-frise { transition: background 2s; }
.fv-frise.is-dusk { background: linear-gradient(180deg, #f7a77a 0%, #fcd9a8 60%, #7fae70 70%, #7fae70 82.4%, #b9b3aa 82.4%, #b9b3aa 87.4%, #7c8189 87.4%); }
.is-dusk .fv-sky1 { stop-color: #6d6aa8; } .is-dusk .fv-sky2 { stop-color: #fcbf8a; }
.is-dusk .fv-sun { opacity: .9; transform: translateY(70px); }
.is-dusk .fv-hill1 { fill: #8fb87e; } .is-dusk .fv-hill2 { fill: #7fae70; } .is-dusk .fv-pave { fill: #b9b3aa; } .is-dusk .fv-road { fill: #7c8189; }
.is-dusk .fv-lift > :not(.fv-win):not(.fv-signbox), .is-dusk .fv-bg > :not(.fv-win), .is-dusk .fv-tree, .is-dusk .fv-walkers { filter: brightness(.82) saturate(.9); }
.is-dusk .fv-cloud { opacity: .75; }
.fv-frise.is-night { background: linear-gradient(180deg, #0b1633 0%, #1d2b55 60%, #2c4a3a 70%, #2c4a3a 82.4%, #55545a 82.4%, #55545a 87.4%, #3c4049 87.4%); }
.is-night .fv-sky1 { stop-color: #0b1633; } .is-night .fv-sky2 { stop-color: #23356a; }
.is-night .fv-sun { opacity: 0; transform: translateY(120px); }
.is-night .fv-night { opacity: 1; }
.is-night .fv-hill1 { fill: #34523f; } .is-night .fv-hill2 { fill: #2c4a3a; } .is-night .fv-pave { fill: #55545a; } .is-night .fv-road { fill: #3c4049; }
.is-night .fv-lift > :not(.fv-win):not(.fv-signbox):not(.fv-sign), .is-night .fv-bg > :not(.fv-win), .is-night .fv-tree, .is-night .fv-walkers { filter: brightness(.5) saturate(.75); }
.is-night .fv-signbox, .is-night .fv-lift > .fv-sign { filter: brightness(.85); }
.is-night .fv-cloud { opacity: .18; }
.is-dusk .fv-win, .is-night .fv-win { fill: #ffd36a; }
.is-night .fv-win { filter: drop-shadow(0 0 4px rgba(255, 211, 106, .8)); }
.is-dusk .fv-halo { opacity: .5; } .is-night .fv-halo { opacity: 1; }
.is-dusk .fv-bulb, .is-night .fv-bulb { fill: #fff2b3; }
.is-night .fv-house:hover .fv-win, .is-night .fv-house.is-active .fv-win { fill: #fff2b3; }
.fv-tw { animation: fv-twinkle 3s ease-in-out infinite alternate; }
@keyframes fv-twinkle { to { opacity: .3; } }
@media (prefers-reduced-motion: reduce) { .fv-tw { animation: none; } }
@media print { .fv-frise { display: none; } }
