/* Calendrier de l'Avent · Décembre Hors-Jeu
   Un immeuble parisien la nuit : 30 fenêtres + la porte cochère (le 31). Tailles en cqw : tout suit la largeur. */
.cal{margin:44px 0 30px}
.cal-head h2{margin:8px 0 8px!important}
.cal-head p{color:var(--muted);margin:0 0 18px}
.cal-wrap{container-type:inline-size;max-width:min(520px,calc((100svh - 100px) * .58));margin:0 auto;border-radius:28px;overflow:hidden;isolation:isolate}
.cal-scene{position:relative;overflow:hidden;border-radius:28px;isolation:isolate;
  background:radial-gradient(70% 45% at 78% 6%,rgba(255,226,190,.16),transparent 70%),linear-gradient(180deg,#070A1C 0%,#0E1230 38%,#1A1A40 70%,#22204A 100%);
  border:1px solid rgba(255,194,161,.22);box-shadow:0 40px 90px -40px rgba(0,0,0,.9),0 0 0 1px rgba(0,0,0,.4) inset;padding-top:15cqw;font-family:var(--display,"Bricolage Grotesque")}
.cal-stars{position:absolute;inset:0 0 40% 0;z-index:-1;background-image:radial-gradient(1.2px 1.2px at 12% 18%,#fff 50%,transparent 51%),radial-gradient(1px 1px at 28% 8%,#fff 50%,transparent 51%),radial-gradient(1.4px 1.4px at 44% 22%,#fff 50%,transparent 51%),radial-gradient(1px 1px at 58% 6%,#fff 50%,transparent 51%),radial-gradient(1.2px 1.2px at 8% 40%,#fff 50%,transparent 51%),radial-gradient(1px 1px at 35% 36%,#fff 50%,transparent 51%),radial-gradient(1.3px 1.3px at 92% 30%,#fff 50%,transparent 51%),radial-gradient(1px 1px at 66% 28%,#fff 50%,transparent 51%),radial-gradient(1px 1px at 20% 30%,#fff 50%,transparent 51%),radial-gradient(1.2px 1.2px at 50% 12%,#fff 50%,transparent 51%);opacity:.75;animation:calTw 6s ease-in-out infinite alternate}
@keyframes calTw{to{opacity:.4}}
.cal-moon{position:absolute;right:9cqw;top:3.5cqw;width:17cqw;height:17cqw;border-radius:50%;z-index:-1;
  background:radial-gradient(circle at 38% 35%,#FFFBF0 0%,#FCE9C8 45%,#EFCB97 100%);box-shadow:0 0 6cqw rgba(255,226,180,.45),0 0 18cqw rgba(255,200,150,.18)}
.cal-moon::before,.cal-moon::after{content:"";position:absolute;border-radius:50%;background:rgba(214,170,120,.28)}
.cal-moon::before{width:3.4cqw;height:3.4cqw;left:28%;top:52%}
.cal-moon::after{width:2.2cqw;height:2.2cqw;left:60%;top:30%}
.cal-snow{position:absolute;inset:0;z-index:6;pointer-events:none;width:100%;height:100%}

/* ---------- immeuble ---------- */
.cal-bld{position:relative;margin:0 6cqw;z-index:1}
.cal-roof{position:relative;height:14cqw;margin:0 3cqw}
.cal-roof .zinc{position:absolute;inset:0;clip-path:polygon(7% 0,93% 0,100% 100%,0 100%);
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.07) 0 1px,transparent 1px 4.6cqw),linear-gradient(180deg,#3D4670,#2B3157)}
.cal-roof .zinc::after{content:"";position:absolute;left:0;right:0;top:0;height:1.3cqw;background:linear-gradient(180deg,#F4F6FF,#C9D2EC);opacity:.92;border-radius:0 0 1cqw 1cqw}
.cal-chim{position:absolute;bottom:100%;width:5cqw;height:7cqw;background:linear-gradient(90deg,#6B4A3E,#8A5F4F 45%,#5A3E35);border-radius:.6cqw .6cqw 0 0}
.cal-chim::before{content:"";position:absolute;left:-.8cqw;right:-.8cqw;top:-1cqw;height:1.4cqw;background:#F1F4FF;border-radius:1cqw}
.cal-chim i{position:absolute;left:1cqw;bottom:100%;width:2.6cqw;height:2.6cqw;border-radius:50%;background:rgba(220,226,255,.22);filter:blur(.6cqw);animation:calSmoke 5s linear infinite}
.cal-chim i:nth-child(2){animation-delay:-1.7s}.cal-chim i:nth-child(3){animation-delay:-3.4s}
@keyframes calSmoke{0%{transform:translate(0,0) scale(.6);opacity:0}15%{opacity:.9}100%{transform:translate(4cqw,-12cqw) scale(2.4);opacity:0}}
.cal-dorm{position:absolute;bottom:2.4cqw;width:6.6cqw;height:8cqw;border-radius:3.3cqw 3.3cqw .4cqw .4cqw;background:#1A1E3A;border:.7cqw solid #E9E2D4;box-sizing:border-box}
.cal-dorm.on{background:radial-gradient(circle at 50% 70%,#FFD9A0,#F59A6E 70%,#B5583A);box-shadow:0 0 4cqw rgba(255,190,120,.5)}
.cal-cat{position:absolute;bottom:13.6cqw;width:10.5cqw;height:13.5cqw;right:15cqw;z-index:2;filter:drop-shadow(0 0 .8cqw rgba(255,226,180,.35))}
.cal-cat svg{width:100%;height:100%;display:block}
.cal-corn{height:2.4cqw;background:linear-gradient(180deg,#F1EADB,#CDBFA6);border-radius:.4cqw;position:relative;box-shadow:0 1cqw 1.6cqw -1cqw rgba(0,0,0,.6)}
.cal-gar{position:absolute;left:1cqw;right:1cqw;top:2.6cqw;height:3cqw;z-index:3;display:flex;justify-content:space-between;pointer-events:none}
.cal-gar::before{content:"";position:absolute;left:0;right:0;top:0;height:2.4cqw;border-bottom:.25cqw solid rgba(20,20,30,.7);border-radius:0 0 50% 50%/0 0 100% 100%}
.cal-gar b{width:1.25cqw;height:1.25cqw;border-radius:50%;margin-top:calc(1.3cqw + var(--y,0cqw));background:#FFD38A;box-shadow:0 0 1.6cqw #FFC46E;animation:calBlink 2.4s ease-in-out infinite;animation-delay:var(--d,0s)}
.cal-gar b:nth-child(3n){background:#F59A6E;box-shadow:0 0 1.6cqw #F59A6E}
.cal-gar b:nth-child(4n){background:#B9B2FF;box-shadow:0 0 1.6cqw #8F7BFF}
@keyframes calBlink{50%{opacity:.35;transform:scale(.8)}}
.cal-fac{position:relative;padding:3.2cqw 2.6cqw 0;
  background:linear-gradient(90deg,rgba(0,0,0,.25),transparent 10%,transparent 90%,rgba(0,0,0,.3)),
  repeating-linear-gradient(180deg,transparent 0 3.5cqw,rgba(255,240,220,.05) 3.5cqw calc(3.5cqw + 1px)),
  linear-gradient(180deg,#3B3A5E 0%,#34345A 60%,#2D2C50 100%)}
.cal-fac::before{content:"";position:absolute;inset:0;background:radial-gradient(60% 40% at 50% 100%,rgba(255,170,110,.18),transparent 70%);pointer-events:none}
.cal-grid{display:grid;grid-template-columns:repeat(6,1fr);row-gap:3.4cqw;column-gap:0;position:relative}
.cal-grid .bal{grid-column:1/-1;height:2.1cqw;margin:-3.2cqw -1.2cqw 0;position:relative;z-index:2;
  background:repeating-linear-gradient(90deg,#11121F 0 .35cqw,transparent .35cqw 1.3cqw);border-top:.5cqw solid #11121F;border-bottom:.5cqw solid #11121F;box-sizing:border-box}

/* ---------- fenêtres ---------- */
.w{all:unset;box-sizing:border-box;position:relative;justify-self:center;width:9.8cqw;height:13.6cqw;cursor:pointer;perspective:40cqw;
  border-radius:.6cqw .6cqw .3cqw .3cqw;outline-offset:.8cqw;-webkit-tap-highlight-color:transparent}
.w::before{content:"";position:absolute;inset:-.9cqw -.9cqw -1.6cqw;border-radius:1cqw 1cqw .4cqw .4cqw;background:linear-gradient(180deg,#EDE5D3,#C8BA9F);z-index:-1;box-shadow:0 .5cqw 1cqw rgba(0,0,0,.4)}
.w::after{content:"";position:absolute;left:-1.6cqw;right:-1.6cqw;bottom:-2.2cqw;height:1cqw;border-radius:.3cqw;background:#E9E1CE;box-shadow:0 .4cqw .8cqw rgba(0,0,0,.4)}
.w-in{position:absolute;inset:0;border-radius:.4cqw;overflow:hidden;background:linear-gradient(180deg,#0B0E22,#14183A);display:grid;place-items:center;transition:background .6s ease,box-shadow .6s ease}
.w-in::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent calc(50% - .25cqw),rgba(20,16,30,.55) calc(50% - .25cqw) calc(50% + .25cqw),transparent calc(50% + .25cqw)),linear-gradient(180deg,transparent 34%,rgba(20,16,30,.55) 34% calc(34% + .5cqw),transparent calc(34% + .5cqw));opacity:.0;transition:opacity .6s}
.w-ic{width:6cqw;height:6cqw;opacity:0;transform:scale(.6);transition:opacity .5s .35s,transform .6s .35s cubic-bezier(.2,1.4,.4,1);color:#6A2812;filter:drop-shadow(0 .2cqw .4cqw rgba(120,40,10,.25))}
.w-ic svg{width:100%;height:100%;display:block}
.w-sh{position:absolute;top:0;bottom:0;width:50%;transition:transform .9s cubic-bezier(.6,.05,.25,1);box-sizing:border-box;
  background:repeating-linear-gradient(180deg,rgba(0,0,0,.28) 0 .3cqw,transparent .3cqw 1.1cqw),linear-gradient(160deg,rgba(255,255,255,.10),transparent 40%),linear-gradient(180deg,#4B4396,#2F2A6B);border:.35cqw solid #201B52}
.w-sh.l{left:0;transform-origin:0 50%;border-radius:.4cqw 0 0 .3cqw}
.w-sh.r{right:0;transform-origin:100% 50%;border-radius:0 .4cqw .3cqw 0}
.w-n{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);min-width:5.8cqw;height:5.8cqw;padding:0 .8cqw;box-sizing:border-box;border-radius:2.9cqw;
  display:grid;place-items:center;font:800 3.5cqw/1 var(--display,"Bricolage Grotesque");color:#2A1B10;letter-spacing:-.02em;
  background:radial-gradient(circle at 35% 30%,#FFF2D6,#F6C98E 55%,#D9955E);box-shadow:0 .4cqw 1cqw rgba(0,0,0,.45),inset 0 -.3cqw .5cqw rgba(140,70,30,.35);transition:opacity .35s,transform .35s;z-index:2}
/* Noël et le réveillon : plaques dorées en étoile */
.w[data-d="24"] .w-n,.w[data-d="25"] .w-n{background:radial-gradient(circle at 35% 30%,#FFFBEA,#F0C35A 55%,#B8862A);color:#2A1B05}
/* fenêtre du jour */
.w.today .w-sh{box-shadow:0 0 0 .4cqw rgba(255,214,160,.0)}
.w.today::before{animation:calToday 1.8s ease-in-out infinite}
@keyframes calToday{50%{box-shadow:0 0 0 .5cqw rgba(255,210,150,.55),0 0 5cqw rgba(255,190,120,.75)}}
.w.today .w-n{animation:calBob 1.8s ease-in-out infinite}
@keyframes calBob{50%{transform:translate(-50%,-50%) scale(1.12)}}
.w.later .w-n{filter:saturate(.8) brightness(.9)}
.w.nope{animation:calNope .45s}
@keyframes calNope{20%,60%{transform:translateX(-1cqw)}40%,80%{transform:translateX(1cqw)}}
/* ouverte : les volets pivotent, la lumière s'allume */
.w.open .w-sh.l{transform:rotateY(-155deg);filter:brightness(.7)}
.w.open .w-sh.r{transform:rotateY(155deg);filter:brightness(.7)}
.w.open .w-n{opacity:0;transform:translate(-50%,-50%) scale(.4)}
.w.open .w-in{background:radial-gradient(circle at 50% 62%,#FFE6B8 0%,#FBB97E 45%,#D9744A 100%);box-shadow:0 0 6cqw rgba(255,180,110,.55)}
.w.open .w-in::before{opacity:1}
.w.open .w-ic{opacity:1;transform:none}
.w.open::before{box-shadow:0 0 6cqw rgba(255,170,100,.35)}
.w:focus-visible{outline:.5cqw solid #FFD9B0}
@media (hover:hover){.w:not(.open):not(.later):hover .w-sh.l{transform:rotateY(-14deg)}.w:not(.open):not(.later):hover .w-sh.r{transform:rotateY(14deg)}}

/* ---------- rez-de-chaussée ---------- */
.cal-rdc{position:relative;display:grid;grid-template-columns:1fr 1.25fr 1fr;align-items:end;gap:3cqw;padding:5.2cqw 1.4cqw 0;margin-top:3.2cqw;
  background:linear-gradient(180deg,rgba(0,0,0,.18),transparent 30%),repeating-linear-gradient(180deg,transparent 0 2.6cqw,rgba(0,0,0,.22) 2.6cqw calc(2.6cqw + 1.5px))}
.cal-rdc::before{content:"";position:absolute;left:-2.6cqw;right:-2.6cqw;top:0;height:1.6cqw;background:linear-gradient(180deg,#EDE5D3,#C8BA9F)}
.cal-shop{height:22cqw;border-radius:1cqw 1cqw 0 0;position:relative;overflow:hidden;border:.7cqw solid #1B1D33;border-bottom:0;
  background:radial-gradient(90% 70% at 50% 100%,#FFD9A0,#F59A6E 55%,#7A3E2A);box-shadow:0 0 6cqw rgba(255,170,100,.35)}
.cal-shop::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 48%,#1B1D33 48% 52%,transparent 52%)}
.cal-shop i{position:absolute;bottom:0;left:50%;width:0;height:0;border-left:4cqw solid transparent;border-right:4cqw solid transparent;border-bottom:11cqw solid #13311F;transform:translateX(-50%)}
.cal-shop i::after{content:"";position:absolute;left:-1.1cqw;top:-1cqw;width:2.2cqw;height:2.2cqw;background:#F0C35A;clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);filter:drop-shadow(0 0 1cqw #F0C35A)}
.cal-shop.r i{display:none}
.cal-shop.r b{position:absolute;inset:auto 0 3cqw;text-align:center;font:800 3cqw/1.2 var(--display);color:#3A1A0E;letter-spacing:.04em}
.cal-awn{position:absolute;left:-1cqw;right:-1cqw;top:-3.2cqw;height:3.6cqw;border-radius:.6cqw .6cqw 1.4cqw 1.4cqw;background:repeating-linear-gradient(90deg,#3C329A 0 3cqw,#F1EADB 3cqw 6cqw);z-index:2;box-shadow:0 .8cqw 1cqw -.4cqw rgba(0,0,0,.6)}
/* la porte du 31 */
.door{all:unset;box-sizing:border-box;position:relative;height:31cqw;cursor:pointer;perspective:60cqw;border-radius:13cqw 13cqw 0 0;-webkit-tap-highlight-color:transparent}
.door::before{content:"";position:absolute;inset:-1.4cqw -1.4cqw 0;border-radius:14.4cqw 14.4cqw 0 0;background:linear-gradient(180deg,#EDE5D3,#BFAF92);z-index:-1}
.door .d-in{position:absolute;inset:0;border-radius:13cqw 13cqw 0 0;overflow:hidden;background:#090B18;display:grid;place-items:center;transition:background .8s}
.door .d-in span{font:800 6.4cqw/1 var(--display);letter-spacing:-.03em;color:#2A1B10;opacity:0;transition:opacity .6s .5s}
.door .lf{position:absolute;top:0;bottom:0;width:50%;box-sizing:border-box;transition:transform 1.2s cubic-bezier(.6,.05,.25,1);backface-visibility:hidden;
  background:linear-gradient(180deg,transparent 0 46%,rgba(0,0,0,.25) 46% 47%,transparent 47%),repeating-linear-gradient(90deg,rgba(0,0,0,.18) 0 .3cqw,transparent .3cqw 4.2cqw),linear-gradient(180deg,#2E3A6B,#1E2650);border:.5cqw solid #151B3C}
.door .lf.l{left:0;transform-origin:0 50%;border-radius:13cqw 0 0 0}
.door .lf.r{right:0;transform-origin:100% 50%;border-radius:0 13cqw 0 0}
.door .wr{position:absolute;left:50%;top:7cqw;width:12cqw;height:12cqw;margin-left:-6cqw;border-radius:50%;z-index:2;transition:opacity .4s;
  background:radial-gradient(circle,transparent 45%,#1F5A3A 46%,#2E7A4F 60%,#1F5A3A 72%,transparent 73%);filter:drop-shadow(0 .4cqw .6cqw rgba(0,0,0,.5))}
.door .wr::before{content:"";position:absolute;inset:0;border-radius:50%;background-image:radial-gradient(circle,#F0C35A 0 .6cqw,transparent .7cqw);background-size:4cqw 4cqw;background-position:0 0;
  -webkit-mask:radial-gradient(circle,transparent 46%,#000 47% 71%,transparent 72%);mask:radial-gradient(circle,transparent 46%,#000 47% 71%,transparent 72%)}
.door .wr::after{content:"";position:absolute;left:50%;bottom:-.6cqw;width:5cqw;height:3cqw;margin-left:-2.5cqw;background:#E8564A;clip-path:polygon(0 0,50% 40%,100% 0,85% 100%,50% 60%,15% 100%)}
.door .w-n{top:auto;bottom:6cqw;transform:translateX(-50%);min-width:9cqw;height:7.4cqw;font-size:4.6cqw;border-radius:3.7cqw;background:radial-gradient(circle at 35% 30%,#FFFBEA,#F0C35A 55%,#B8862A)}
.door.today::before{animation:calToday 1.8s ease-in-out infinite}
.door.later .w-n{filter:saturate(.8) brightness(.9)}
.door.open .lf.l{transform:rotateY(-105deg)}
.door.open .lf.r{transform:rotateY(105deg)}
.door.open .wr,.door.open .w-n{opacity:0}
.door.open .d-in{background:radial-gradient(70% 60% at 50% 70%,#FFFBEA,#FFD9A0 40%,#F59A6E 100%);box-shadow:0 0 10cqw rgba(255,210,150,.7)}
.door.open .d-in span{opacity:1}
.door.nope{animation:calNope .45s}
.door:focus-visible{outline:.5cqw solid #FFD9B0;outline-offset:.8cqw}
.cal-lamp{position:absolute;left:1.5cqw;bottom:0;width:3cqw;height:36cqw;z-index:4;pointer-events:none}
.cal-lamp::before{content:"";position:absolute;left:1cqw;bottom:0;width:1cqw;height:30cqw;background:linear-gradient(90deg,#0E0F1C,#2A2C44,#0E0F1C)}
.cal-lamp::after{content:"";position:absolute;left:-1.2cqw;top:0;width:5.4cqw;height:6.4cqw;clip-path:polygon(20% 0,80% 0,100% 30%,85% 100%,15% 100%,0 30%);background:radial-gradient(circle at 50% 60%,#FFF6DE,#FFD38A 50%,#C98A3A);box-shadow:0 0 10cqw 4cqw rgba(255,210,140,.35)}
.cal-lamp i{position:absolute;left:-14cqw;top:-6cqw;width:32cqw;height:32cqw;border-radius:50%;background:radial-gradient(circle,rgba(255,214,150,.30),transparent 65%)}
.cal-street{position:relative;height:11cqw;z-index:2;margin-top:-1px;
  background:radial-gradient(60% 120% at 50% 0%,rgba(255,200,140,.28),transparent 70%),linear-gradient(180deg,#E8EEFF 0%,#C9D3F0 30%,#9AA6D0 100%)}
.cal-street::before{content:"";position:absolute;left:0;right:0;top:-2.4cqw;height:3cqw;background:radial-gradient(4cqw 2cqw at 10% 100%,#EEF2FF 98%,transparent),radial-gradient(6cqw 2.4cqw at 32% 100%,#EEF2FF 98%,transparent),radial-gradient(5cqw 2cqw at 58% 100%,#EEF2FF 98%,transparent),radial-gradient(7cqw 2.6cqw at 84% 100%,#EEF2FF 98%,transparent)}
.cal-prog{position:absolute;left:0;right:0;bottom:2.4cqw;margin:0;text-align:center;font:700 max(12px,3.2cqw)/1.2 var(--body,"Atkinson Hyperlegible");color:#262B4F;letter-spacing:.02em}
.cal-note{text-align:center;color:var(--muted);font-size:15px;margin:14px auto 0;max-width:34em}

/* ---------- la fenêtre ouverte (boîte de dialogue) ---------- */
.cal-dlg{border:0;padding:0;background:transparent;max-width:min(520px,calc(100vw - 32px));width:100%;color:#EEF1F7}
.cal-dlg::backdrop{background:rgba(6,7,20,.72);backdrop-filter:blur(4px)}
.cal-card{position:relative;border-radius:26px;overflow:hidden;background:linear-gradient(180deg,#1C1B3E,#12132A);border:1px solid rgba(255,194,161,.35);box-shadow:0 40px 90px -30px rgba(0,0,0,.9)}
.cal-top{position:relative;padding:26px 26px 22px;background:radial-gradient(90% 120% at 50% 0%,rgba(255,200,140,.32),transparent 70%),linear-gradient(180deg,#2A2560,#1C1B3E)}
.cal-top .ic{width:56px;height:56px;border-radius:18px;display:grid;place-items:center;background:radial-gradient(circle at 50% 40%,#FFE6B8,#F59A6E);color:#3A1A0E;margin-bottom:14px;box-shadow:0 0 30px rgba(255,170,100,.5)}
.cal-top .ic svg{width:32px;height:32px}
.cal-top .k{font:700 12px var(--body);letter-spacing:.16em;text-transform:uppercase;color:#FFB894;margin:0 0 6px}
.cal-top h3{font:800 clamp(24px,6vw,30px)/1.12 var(--display);margin:0;letter-spacing:-.015em;color:#fff;text-wrap:balance}
.cal-body{padding:20px 26px 24px}
.cal-body p{margin:0 0 16px;font-size:17px;line-height:1.6;max-width:none}
.cal-geste{border-radius:16px;padding:14px 16px;background:rgba(245,154,110,.12);border:1px solid rgba(245,154,110,.35);margin:0 0 16px}
.cal-geste b{display:block;font:700 12px var(--body);letter-spacing:.14em;text-transform:uppercase;color:#FFB894;margin-bottom:4px}
.cal-geste span{font-size:16.5px;line-height:1.55}
.cal-act{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.cal-nav{display:flex;justify-content:space-between;gap:10px;padding:14px 20px;border-top:1px solid rgba(255,194,161,.16)}
.cal-nav button{all:unset;cursor:pointer;font:700 15px var(--body);color:#FFE1CF;padding:8px 12px;border-radius:99px}
.cal-nav button:hover{background:rgba(255,255,255,.06)}
.cal-nav button[disabled]{opacity:.3;cursor:default}
.cal-x{all:unset;position:absolute;right:14px;top:14px;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:#fff;background:rgba(0,0,0,.25);font:400 26px/1 var(--body);z-index:2}
.cal-x:hover{background:rgba(0,0,0,.45)}
.cal-dlg[open] .cal-card{animation:calPop .45s cubic-bezier(.2,1.2,.4,1)}
@keyframes calPop{from{transform:translateY(24px) scale(.94);opacity:0}}
@media (prefers-reduced-motion:reduce){.cal *,.cal *::before,.cal *::after,.cal-dlg *{animation:none!important;transition-duration:.01s!important}}

/* ---------- zoom : on entre dans la fenêtre ---------- */
.cal-scene{will-change:transform}
/* ---------- détails d'architecture ---------- */
.cal-ant{position:absolute;left:30%;bottom:100%;width:.35cqw;height:8cqw;background:#1A1D33}
.cal-ant::before,.cal-ant::after{content:"";position:absolute;left:-2.2cqw;width:4.8cqw;height:.35cqw;background:#1A1D33;top:1.2cqw}
.cal-ant::after{top:3.4cqw;left:-1.6cqw;width:3.6cqw}
.cal-grid::before{content:"";position:absolute;inset:-3.2cqw -1.2cqw -1cqw;pointer-events:none;background:linear-gradient(90deg,transparent calc(16.667% - .45cqw),rgba(255,240,220,.06) calc(16.667% - .45cqw) calc(16.667% + .45cqw),transparent calc(16.667% + .45cqw),transparent calc(33.333% - .45cqw),rgba(255,240,220,.06) calc(33.333% - .45cqw) calc(33.333% + .45cqw),transparent calc(33.333% + .45cqw),transparent calc(50.000% - .45cqw),rgba(255,240,220,.06) calc(50.000% - .45cqw) calc(50.000% + .45cqw),transparent calc(50.000% + .45cqw),transparent calc(66.667% - .45cqw),rgba(255,240,220,.06) calc(66.667% - .45cqw) calc(66.667% + .45cqw),transparent calc(66.667% + .45cqw),transparent calc(83.333% - .45cqw),rgba(255,240,220,.06) calc(83.333% - .45cqw) calc(83.333% + .45cqw),transparent calc(83.333% + .45cqw))}
.w-ped{position:absolute;left:-1.6cqw;right:-1.6cqw;top:-4.4cqw;height:3cqw;background:linear-gradient(180deg,#F1EADB,#C9BB9F);clip-path:polygon(50% 0,100% 85%,100% 100%,0 100%,0 85%);filter:drop-shadow(0 .4cqw .4cqw rgba(0,0,0,.4))}
.w-ped.arc{clip-path:none;border-radius:10cqw 10cqw .3cqw .3cqw;height:2.4cqw;top:-3.8cqw}
.w-snow{position:absolute;left:-1.5cqw;right:-1.5cqw;bottom:-1.55cqw;height:.9cqw;border-radius:1cqw 1cqw .2cqw .2cqw;background:linear-gradient(180deg,#FFFFFF,#DCE4FF);z-index:3;pointer-events:none}
.w-pl{position:absolute;right:-1.2cqw;bottom:-1.2cqw;width:3cqw;height:3.2cqw;z-index:4;pointer-events:none;background:radial-gradient(circle at 35% 40%,#3E7A52 0 45%,transparent 47%),radial-gradient(circle at 70% 35%,#2F6644 0 42%,transparent 44%),radial-gradient(circle at 50% 70%,#E8564A 0 12%,transparent 14%);}
.w-pl::after{content:"";position:absolute;left:.6cqw;right:.6cqw;bottom:0;height:1.1cqw;background:#8A5A42;border-radius:0 0 .4cqw .4cqw}
.w-rd{position:absolute;top:0;bottom:0;width:22%;opacity:0;transition:opacity .6s .3s;background:linear-gradient(90deg,rgba(150,40,30,.55),rgba(150,40,30,.15));z-index:1}
.w-rd.l{left:0;border-radius:0 0 40% 0}.w-rd.r{right:0;transform:scaleX(-1);border-radius:0 0 40% 0}
.w.open .w-rd{opacity:1}
.w-ic{position:relative;z-index:2}
.cal-neon{position:absolute;left:50%;top:.9cqw;transform:translateX(-50%);font:800 3.1cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.18em;padding-left:.18em;color:#FFE2CF;text-shadow:0 0 .6cqw #F59A6E,0 0 1.8cqw #F59A6E,0 0 3.6cqw rgba(245,154,110,.8);animation:calNeon 6s infinite;z-index:3;white-space:nowrap}
@keyframes calNeon{0%,18%,22%,62%,64%,100%{opacity:1}20%,63%{opacity:.45}}
.cal-shop .sg{position:absolute;left:8%;right:8%;top:1.2cqw;background:rgba(18,18,34,.82);padding:.8cqw 0;border-radius:.4cqw;font-size:1.7cqw!important;text-align:center;font:800 2cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.12em;color:#F1EADB;z-index:3}
.cal-awn{box-shadow:0 .8cqw 1cqw -.4cqw rgba(0,0,0,.6),inset 0 .5cqw 0 #F4F6FF}
.cal-shop.ferme{background:#22253C;box-shadow:none}
.cal-shop.ferme::before{display:none}
.cal-shop.ferme .rid{position:absolute;inset:0;background:repeating-linear-gradient(180deg,#4A4E6A 0 1.1cqw,#383B55 1.1cqw 1.4cqw)}
.cal-shop.ferme .aff{position:absolute;left:50%;top:45%;transform:translate(-50%,-50%) rotate(-4deg);background:#FFF8EC;color:#B6332A;font:800 2cqw/1.15 var(--display,"Bricolage Grotesque");text-align:center;padding:1.1cqw 1.4cqw;border-radius:.4cqw;box-shadow:0 .6cqw 1.2cqw rgba(0,0,0,.45);white-space:nowrap}
.cal-shop.ferme .sg{color:#8E95B5;text-decoration:line-through;text-decoration-color:#E8564A;text-decoration-thickness:.35cqw}
/* ---------- entrée dans la fenêtre ---------- */
.cal-dlg::backdrop{background:radial-gradient(60% 50% at 50% 45%,rgba(255,200,140,.10),rgba(6,7,20,.82));backdrop-filter:blur(4px)}
.cal-fade{position:absolute;inset:0;z-index:7;pointer-events:none;opacity:0;background:radial-gradient(circle at var(--fx,50%) var(--fy,50%),rgba(255,214,160,.85) 0,rgba(245,154,110,.35) 22%,rgba(18,19,42,.96) 60%)}


/* ---------- le caracal de l'accueil, qui se promène dans la neige ---------- */
.cal-walk{position:absolute;bottom:6.6cqw;left:2%;width:19cqw;z-index:5;pointer-events:none}
.cw-in{transform-origin:50% 50%}
.cal-walk .caracal-svg{display:block;width:100%;height:auto;overflow:visible}
.cal-walk .sil path{fill:#090B1C}
.cal-walk .rim path{fill:#FFB689}
.cal-walk .shadow{fill:#1B2045;opacity:.45;filter:blur(2px)}
/* étoile filante */
.cal-shoot{position:absolute;top:6cqw;left:8%;width:16cqw;height:.35cqw;border-radius:1cqw;z-index:0;opacity:0;background:linear-gradient(90deg,rgba(255,255,255,0),#fff);transform:rotate(-16deg);animation:calShoot 11s ease-in 3s infinite}
@keyframes calShoot{0%{opacity:0;transform:translate(0,0) rotate(-16deg)}2%{opacity:1}8%{opacity:0;transform:translate(46cqw,-13cqw) rotate(-16deg)}100%{opacity:0;transform:translate(46cqw,-13cqw) rotate(-16deg)}}
@media (prefers-reduced-motion:reduce){.cal-shoot{display:none}}

/* ---------- rez-de-chaussée : le point paris fermé, la boutique de cadeaux ouverte ---------- */
.cal-shop.ferme{background:#1E2136;border-color:#14162A}
.cal-shop.ferme .rid{position:absolute;left:0;right:0;top:5.4cqw;bottom:0;background:repeating-linear-gradient(180deg,#535874 0 1.1cqw,#3B3F5A 1.1cqw 1.45cqw);box-shadow:inset 0 .6cqw 1cqw rgba(0,0,0,.45)}
.cal-shop.ferme .neon-off{position:absolute;left:0;right:0;top:1.3cqw;text-align:center;font:800 2.25cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.06em;color:#3E4260;-webkit-text-stroke:.18cqw #6B7090;text-shadow:none;white-space:nowrap}
.cal-shop.ferme .neon-off::after{content:"";position:absolute;left:8%;right:8%;top:50%;height:.45cqw;background:#E8564A;transform:rotate(-3deg);box-shadow:0 0 .8cqw rgba(232,86,74,.8);border-radius:.3cqw}
.cal-shop.ferme .lock{position:absolute;left:50%;bottom:1.2cqw;width:3cqw;height:2.4cqw;margin-left:-1.5cqw;background:#C9A64A;border-radius:.4cqw;box-shadow:0 .3cqw .6cqw rgba(0,0,0,.5)}
.cal-shop.ferme .lock::before{content:"";position:absolute;left:.5cqw;right:.5cqw;top:-1.5cqw;height:1.9cqw;border:.45cqw solid #A9AEC4;border-bottom:0;border-radius:1.2cqw 1.2cqw 0 0}
.cal-shop.ferme .aff{position:absolute;left:50%;top:56%;transform:translate(-50%,-50%) rotate(-5deg);background:#FFF8EC;color:#C02E24;text-align:center;padding:1cqw 1.6cqw 1.2cqw;border-radius:.3cqw;box-shadow:0 .8cqw 1.4cqw rgba(0,0,0,.5);white-space:nowrap;font:700 1.75cqw/1.15 var(--body,"Atkinson Hyperlegible");z-index:2}
.cal-shop.ferme .aff b{display:block;font:800 3.6cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.02em}
.cal-shop.ferme .aff::before,.cal-shop.ferme .aff::after{content:"";position:absolute;top:-.8cqw;width:3.4cqw;height:1.3cqw;background:rgba(255,236,190,.75);transform:rotate(-12deg)}
.cal-shop.ferme .aff::before{left:-1cqw}.cal-shop.ferme .aff::after{right:-1cqw;transform:rotate(14deg)}
.cal-shop.cadeaux::before{display:none}
.cal-shop.cadeaux{background:radial-gradient(90% 75% at 50% 100%,#FFE6B8,#F7A877 55%,#8A3E26)}
.cal-shop .sg2{position:absolute;left:0;right:0;top:1.4cqw;text-align:center;font:800 2.5cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.14em;padding-left:.14em;color:#FFF3D6;text-shadow:0 0 .6cqw #F0C35A,0 0 1.8cqw rgba(240,195,90,.8);z-index:3}
.gift{position:absolute;bottom:0;border-radius:.3cqw .3cqw 0 0;box-shadow:0 -.2cqw .8cqw rgba(0,0,0,.25);
  background:linear-gradient(90deg,transparent 43%,#FFE6A6 43% 57%,transparent 57%),linear-gradient(0deg,transparent 40%,#FFE6A6 40% 54%,transparent 54%),var(--c)}
.gift::before,.gift::after{content:"";position:absolute;top:-1.4cqw;width:2cqw;height:1.6cqw;border:.45cqw solid #FFE6A6;border-radius:50% 50% 50% 0}
.gift::before{left:calc(50% - 2cqw);transform:rotate(-20deg)}.gift::after{left:50%;transform:scaleX(-1) rotate(-20deg)}
.gift.g1{--c:#2B2F6E;left:9%;width:7cqw;height:6.5cqw}
.gift.g2{--c:#F0C35A;left:38%;width:8.5cqw;height:9.5cqw}
.gift.g3{--c:#FFF3DF;right:8%;width:6cqw;height:5cqw}
.cal-lamp{left:-2.4cqw}
.gift{bottom:2.4cqw}
.cal-shop.ferme .lock{bottom:3cqw}

/* nuages qui passent devant la lune */
.cal-cloud{position:absolute;z-index:0;height:5cqw;border-radius:5cqw;opacity:.55;filter:blur(.6cqw);background:radial-gradient(60% 90% at 30% 60%,rgba(170,175,220,.55),transparent 70%),radial-gradient(50% 80% at 70% 50%,rgba(150,155,210,.5),transparent 70%)}
.cal-cloud.c1{top:5cqw;width:30cqw;left:-32cqw;animation:calCloud 70s linear infinite}
.cal-cloud.c2{top:11cqw;width:22cqw;left:-24cqw;opacity:.35;animation:calCloud 95s linear -40s infinite}
@keyframes calCloud{to{transform:translateX(150cqw)}}
/* empreintes du caracal */
.cal-prints{position:absolute;inset:0;z-index:4;pointer-events:none}
.cal-prints i{position:absolute;width:1.3cqw;height:.7cqw;border-radius:50%;background:rgba(80,90,150,.45);animation:calPrint 4.2s ease-out forwards}
@keyframes calPrint{0%{opacity:.9}100%{opacity:0}}
/* à l'arrivée : la guirlande s'allume, le néon grésille puis s'allume */
.cal-gar b{animation:calOn .5s ease-out both,calBlink 2.4s ease-in-out 2.4s infinite}
.cal-gar b:nth-child(odd){animation-delay:calc(var(--i,0) * 1ms),2.4s}
.cal-neon{animation:calNeonOn 2.2s steps(1) both,calNeon 6s 2.2s infinite}
@keyframes calOn{from{opacity:0;transform:scale(.3)}}
@keyframes calNeonOn{0%{opacity:.1}15%{opacity:.9}20%{opacity:.15}35%{opacity:1}42%{opacity:.3}50%,100%{opacity:1}}
@media (prefers-reduced-motion:reduce){.cal-cloud,.cal-prints{display:none}}
/* la porte du 31 : une tête de caracal en or à la place de la couronne */
.door .wr{background:linear-gradient(160deg,#FFF3D0 0%,#F6CF84 35%,#C98F3A 70%,#FFE6A6 100%)!important;-webkit-mask:url(/img/marque.svg) center/contain no-repeat;mask:url(/img/marque.svg) center/contain no-repeat;filter:drop-shadow(0 0 1.2cqw rgba(240,195,90,.55));width:11cqw;height:12cqw;margin-left:-5.5cqw;top:6.5cqw;border-radius:0}
.door .wr::before,.door .wr::after{display:none!important}
.door .brv{position:absolute;left:0;right:0;top:19.2cqw;text-align:center;z-index:2;font:800 2.1cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.32em;padding-left:.32em;background:linear-gradient(180deg,#FFF3D0,#E0A84E);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 .6cqw rgba(240,195,90,.5));transition:opacity .4s}
.door .w-n{bottom:3.6cqw}
.door.open .brv{opacity:0}
.door .d-in span{display:flex;flex-direction:column;align-items:center;gap:.6cqw;line-height:1}
.door .d-in em{font-style:normal;font-size:3.4cqw;color:#7A2E14;letter-spacing:.02em}
/* le compteur de fenêtres passe dans le ciel : la neige reste libre pour le caracal */
.cal-prog{top:3.2cqw!important;bottom:auto!important;left:4cqw!important;right:auto!important;z-index:6;font-size:max(11px,2.6cqw)!important;color:#FFE9DA!important;background:rgba(10,12,34,.6);border:1px solid rgba(255,194,161,.3);padding:1.1cqw 2cqw;border-radius:99px;backdrop-filter:blur(3px)}
.cal-street .cal-prog{position:absolute}
.cal-street{position:static}
.cal-scene>.cal-street{position:relative}

/* ---------- le point paris / casino fermé ---------- */
.cal-shop.ferme .neon-off{height:2.4cqw}
.cal-shop.ferme .neon-off b{position:absolute;left:0;right:0;font:inherit;animation:calSwap 6s steps(1) infinite}
.cal-shop.ferme .neon-off .n2{opacity:0;animation-delay:-3s}
@keyframes calSwap{0%,49%{opacity:1}50%,100%{opacity:0}}
.cal-shop.ferme .neon-ferme{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%) rotate(-4deg);z-index:2;font:800 4.2cqw/1 var(--display,"Bricolage Grotesque");letter-spacing:.06em;color:#FFE4E0;padding:.8cqw 1.6cqw;border:.4cqw solid #FF4A3D;border-radius:1cqw;background:rgba(30,10,14,.7);
  text-shadow:0 0 .5cqw #FF4A3D,0 0 1.6cqw #FF4A3D,0 0 3cqw rgba(255,60,50,.8);box-shadow:0 0 1.4cqw rgba(255,60,50,.8),inset 0 0 1.2cqw rgba(255,60,50,.5);animation:calFerme 1.6s steps(1) infinite}
@keyframes calFerme{0%,70%{opacity:1}72%{opacity:.25}76%{opacity:1}80%{opacity:.3}84%,100%{opacity:1}}
.cal-shop.ferme .aff2{position:absolute;left:50%;top:70%;transform:translateX(-50%) rotate(-4deg);z-index:2;background:#FFF8EC;color:#C02E24;font:800 1.7cqw/1 var(--body,"Atkinson Hyperlegible");padding:.6cqw 1cqw;border-radius:.3cqw;white-space:nowrap;box-shadow:0 .5cqw 1cqw rgba(0,0,0,.45)}
.cal-shop.ferme .aff,.cal-shop.ferme .neon-off::after{display:none}
.cal-shop.ferme .neon-off b::after{content:"";position:absolute;left:12%;right:12%;top:50%;height:.4cqw;background:#E8564A;transform:rotate(-3deg);box-shadow:0 0 .8cqw rgba(232,86,74,.8);border-radius:.3cqw}
/* ---------- volets qui frémissent ---------- */
.w.tease .w-sh.l{transform:rotateY(-24deg)}
.w.tease .w-sh.r{transform:rotateY(24deg)}
.w.tease .w-in{background:radial-gradient(circle at 50% 60%,#FFE6B8,#F59A6E 60%,#7A3A24)}
/* ---------- la machine à sous : tombe du ciel et finit à l'envers dans la neige, dans le coin gauche ---------- */
.cal-slot{position:absolute;left:2.5%;bottom:1.8cqw;width:12.5cqw;z-index:4;transform:translateY(-200cqw);opacity:0;pointer-events:none}
.cal-slot svg{position:relative;z-index:1;display:block;width:100%;height:auto;overflow:visible;transform:rotate(-14deg);filter:drop-shadow(0 0 .9cqw rgba(255,196,90,.55)) drop-shadow(0 .5cqw .7cqw rgba(0,0,0,.45))}
.cal-slot .halo{position:absolute;left:-40%;right:-40%;bottom:-18%;height:60%;border-radius:50%;background:radial-gradient(closest-side,rgba(255,200,110,.55),rgba(255,140,90,.18) 60%,transparent);opacity:0}
.cal-slot .crk{opacity:0}
.cal-slot .bl{fill:#FFE9A8}
.cal-slot.down .bl.a{animation:calBl 1s steps(1) 1.3s infinite}.cal-slot.down .bl.b{animation:calBl 1s steps(1) 1.8s infinite}
@keyframes calBl{0%{fill:#FFF6D0;filter:drop-shadow(0 0 1.5px #FFD35A)}50%{fill:#7A4A2A;filter:none}}
.cal-slot.down .scr{animation:calScr 2.4s ease-in-out 1.2s infinite}
@keyframes calScr{0%,100%{opacity:.25}50%{opacity:.75}}
.cal-slot.down{opacity:1;animation:calSlotY 1.15s cubic-bezier(.55,0,.8,.2) forwards}
.cal-slot.down svg{animation:calSlotR 1.6s cubic-bezier(.3,0,.4,1) forwards}
.cal-slot.down .halo{animation:calHalo 1.2s 1s forwards}
.cal-slot.down .crk{animation:calCrk .01s 1s forwards}
@keyframes calSlotY{0%{transform:translateY(-200cqw)}82%{transform:translateY(0)}88%{transform:translateY(-2.6cqw)}94%{transform:translateY(0)}97%{transform:translateY(-.6cqw)}100%{transform:translateY(0)}}
@keyframes calSlotR{0%{transform:rotate(-14deg)}60%{transform:rotate(150deg)}72%{transform:rotate(182deg)}82%{transform:rotate(160deg)}92%{transform:rotate(170deg)}100%{transform:rotate(166deg)}}
@keyframes calHalo{0%{opacity:0}30%{opacity:1}100%{opacity:.75}}
@keyframes calCrk{to{opacity:1}}
.cal-slot.still{animation:none;transform:none;opacity:1}.cal-slot.still svg{animation:none;transform:rotate(166deg)}.cal-slot.still .crk,.cal-slot.still .halo{opacity:1}
.cal-slot .sp,.cal-slot .co{position:absolute;z-index:2;opacity:0;border-radius:50%}
.cal-slot .sp{width:1cqw;height:1cqw;background:#FFE08A;box-shadow:0 0 1cqw #FFC94A;left:30%;top:55%}
.cal-slot.down .sp.a{animation:calSpark 2.6s 1.05s infinite}
.cal-slot.down .sp.b{animation:calSpark 3.1s 1.6s infinite;left:50%;top:70%}
.cal-slot.down .sp.c{animation:calSpark 2.2s 2.3s infinite;left:20%;top:40%}
@keyframes calSpark{0%,88%{opacity:0;transform:none}90%{opacity:1}100%{opacity:0;transform:translate(1.6cqw,-3cqw) scale(.4)}}
.cal-slot .co{width:1.7cqw;height:1.7cqw;background:radial-gradient(circle at 35% 35%,#FFF1C2,#F0C35A 60%,#B8862A);box-shadow:0 0 .7cqw rgba(255,210,110,.7);bottom:-4%;left:45%}
.cal-slot.down .co{animation:calCoin .9s 1s cubic-bezier(.2,.7,.4,1) forwards}
.cal-slot .co.c1{--x:-3cqw;--y:-.3cqw}.cal-slot .co.c2{--x:-1cqw;--y:.2cqw}.cal-slot .co.c3{--x:3cqw;--y:-.2cqw}.cal-slot .co.c4{--x:5cqw;--y:.3cqw}.cal-slot .co.c5{--x:1.6cqw;--y:.4cqw}
@keyframes calCoin{0%{opacity:1;transform:translate(0,0)}50%{transform:translate(calc(var(--x) * .6),-4cqw)}100%{opacity:1;transform:translate(var(--x),var(--y))}}
.cal-shop.ferme .neon-off b{color:#FFD9A8;text-shadow:0 0 .6cqw rgba(255,180,90,.9);animation:calSwap 6s steps(1) infinite,calBzz 2.3s steps(1) infinite}
.cal-shop.ferme .neon-off .n2{animation-delay:-3s,-1s}
@keyframes calBzz{0%,80%{filter:none}82%{filter:brightness(.35)}86%{filter:none}90%{filter:brightness(.4)}93%,100%{filter:none}}
.cal-feux{position:absolute;inset:0;z-index:5;pointer-events:none;width:100%;height:100%}
.gift.g2{background:linear-gradient(90deg,transparent 43%,#2B2F6E 43% 57%,transparent 57%),linear-gradient(0deg,transparent 40%,#2B2F6E 40% 54%,transparent 54%),var(--c)}
.gift.g2::before,.gift.g2::after{border-color:#2B2F6E}
.gift.g3{background:linear-gradient(90deg,transparent 43%,#E8705A 43% 57%,transparent 57%),linear-gradient(0deg,transparent 40%,#E8705A 40% 54%,transparent 54%),var(--c)}
.gift.g3::before,.gift.g3::after{border-color:#E8705A}
.gift{animation:calGift 4s ease-in-out infinite}.gift.g2{animation-delay:-1.3s}.gift.g3{animation-delay:-2.6s}
@keyframes calGift{0%,86%,100%{transform:none}90%{transform:translateY(-.5cqw) rotate(-2deg)}94%{transform:translateY(0) rotate(1deg)}}
