:root{--night:#101c38;--gold:#d8b66a;--ivory:#fff6e8;--red:#8d2636}*{box-sizing:border-box}body{margin:0;color:var(--ivory);font-family:Nunito,system-ui,sans-serif;background:radial-gradient(ellipse at 55% 22%,#354a77 0%,#17284a 43%,#0b1429 100%);min-height:100dvh;overflow-x:hidden}button,input,textarea,select{font:inherit}button{cursor:pointer}header{position:relative;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px max(16px,env(safe-area-inset-right));flex-wrap:wrap}.brand{font-family:'Great Vibes',cursive;color:var(--gold);font-size:29px}header button{border:1px solid #d8b66a77;background:#15284a99;color:var(--ivory);border-radius:30px;padding:9px 12px;font-size:12px}.scene{position:relative;min-height:calc(100dvh - 80px);padding:35px 20px 75px;text-align:center;overflow:hidden}.hidden{display:none!important}.welcome-content{position:relative;z-index:2;max-width:780px;margin:4vh auto 0}.eyebrow{letter-spacing:2px;text-transform:uppercase;font-size:12px;color:#f2d999}h1,h2{font-family:'Great Vibes',cursive;font-weight:400;color:#f3d99a;text-shadow:0 0 28px #caa44c55}h1{font-size:clamp(57px,10vw,100px);line-height:1.06;margin:22px 0}h2{font-size:clamp(43px,8vw,66px);margin:20px auto}.welcome-content>p{max-width:520px;margin:18px auto;line-height:1.7}.sleigh{position:relative;display:flex;align-items:center;justify-content:center;gap:6px;width:min(96%,650px);margin:32px auto 8px;background:none;border:0;color:white;font-size:clamp(38px,8vw,75px);filter:drop-shadow(0 10px 17px #e2b65c55);animation:float 3.8s ease-in-out infinite}.sleigh:active{transform:scale(1.06)}.rope{font-size:18px;color:var(--gold)}.trail{position:absolute;bottom:-12px;right:10%;font-size:20px;color:#ffe7a6}.hint{color:#ffe5a0;font-size:14px}.signature{font-family:'Great Vibes',cursive;font-size:29px;color:#ffe2a3}.moon{position:absolute;right:11%;top:6%;width:85px;height:85px;background:#fff3c9;border-radius:50%;box-shadow:0 0 60px #ffe7a4a8}.stars{position:absolute;inset:7% 0 auto;color:#f8e2b2;letter-spacing:10vw;opacity:.7}.horizon{position:absolute;bottom:-80px;left:-10%;width:120%;height:170px;background:#e4eef5;border-radius:50% 50% 0 0;box-shadow:0 -10px 45px #b2d5e650}.village{display:flex;justify-content:center;align-items:end;gap:12px;font-size:clamp(40px,8vw,85px);filter:drop-shadow(0 0 20px #f6c77870)}.subtitle{max-width:620px;margin:0 auto 20px;line-height:1.6}.days{max-width:950px;margin:26px auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.day{position:relative;min-height:116px;border:1px solid #f5d99199;border-radius:22px;background:linear-gradient(145deg,#a43c4c,#5b182b);box-shadow:0 10px 24px #0004,inset 0 0 15px #fff2;color:white;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:transform .2s,box-shadow .2s}.day:nth-child(3n){background:linear-gradient(145deg,#1d6670,#103f4b)}.day:nth-child(4n){background:linear-gradient(145deg,#b89754,#665027)}.day:hover{transform:translateY(-4px);box-shadow:0 12px 25px #d8b66a55}.day .ornament{font-size:30px}.day strong{font-size:25px}.day small{font-size:11px}.day.locked{filter:saturate(.65);opacity:.75}.day.locked:after{content:'🔒';position:absolute;top:7px;right:9px;font-size:13px}.overlay{position:fixed;inset:0;z-index:20;background:#060c1fdc;display:grid;place-items:center;padding:16px;backdrop-filter:blur(8px)}.letter{position:relative;max-height:90dvh;overflow:auto;width:min(100%,570px);padding:35px 24px;background:linear-gradient(155deg,#fffaf0,#ead8b7);color:#4a2c30;border:7px double #b99b60;border-radius:18px;box-shadow:0 20px 80px #0008}.letter h2{color:#8d2636;text-shadow:none}.letter p{line-height:1.7}.letter .eyebrow{color:#936d34}.close{position:absolute;right:12px;top:10px;background:transparent;border:0;font-size:24px}.primary{background:#8d2636;color:white;border:0;border-radius:28px;padding:13px 24px;margin-top:20px}.hidden-admin-link{position:absolute;bottom:0;left:0;opacity:0;font-size:1px}#snow{position:fixed;inset:0;pointer-events:none;z-index:3;overflow:hidden}.flake{position:absolute;top:-20px;color:#fff;opacity:.7;animation:fall linear infinite}@keyframes fall{to{transform:translate3d(35px,110vh,0)}}@keyframes float{50%{transform:translateY(-13px) rotate(-1deg)}}.zoomout{animation:zoom .65s ease forwards}@keyframes zoom{to{opacity:0;transform:scale(1.13)}}body.reduced *,body.reduced *:before,body.reduced *:after{animation:none!important;transition:none!important}@media(max-width:600px){.days{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.day{min-height:106px;border-radius:16px}.sleigh{gap:0}.rope{font-size:10px}.brand{font-size:25px}.scene{padding-left:12px;padding-right:12px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}

/* Édition féerique 2026 : illustration SVG, décor de village et confort mobile */
:root{--night:#0d1d2c;--gold:#e6c47e;--red:#8c2431}
body{background:radial-gradient(ellipse at 55% 22%,#334a61 0%,#172b3c 45%,#091724 100%)}
header{background:linear-gradient(180deg,#081522c9,transparent);padding:18px clamp(14px,4vw,50px)}
header button{backdrop-filter:blur(12px);background:#071b2ca8}
#welcome{isolation:isolate;background:radial-gradient(circle at 80% 14%,#fff0b71a,transparent 28%),linear-gradient(180deg,#10273d,#132a38 70%,#203c41)}
.welcome-content{margin:1vh auto 0;max-width:850px}
.welcome-content h1{font-size:clamp(56px,8.5vw,108px);margin:12px auto 18px}
.welcome-content>p{position:relative;z-index:3}
.sleigh{display:block;width:min(100%,780px);margin:8px auto 10px;padding:0 6px;animation:sleighFly 5s ease-in-out infinite;filter:drop-shadow(0 13px 14px #0007)}
.sleigh:focus-visible{outline:3px solid #fff0ae;border-radius:16px}
.sleigh-art{width:100%;height:auto;display:block;overflow:visible}
.sleigh-label{display:inline-block;color:#fff1cc;font-size:clamp(12px,2.6vw,16px);letter-spacing:.08em;border:1px solid #e6c47e88;background:#152b38b8;padding:10px 18px;border-radius:99px;box-shadow:0 8px 30px #0005}
.sleigh:hover .sleigh-label{background:#70402f}
@keyframes sleighFly{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-15px) rotate(.7deg)}}
.moon{width:clamp(75px,9vw,130px);height:clamp(75px,9vw,130px);top:7%;right:9%;background:radial-gradient(circle at 32% 30%,#fff9dc,#e5c994);box-shadow:0 0 75px #fce7a577}
.forest{position:absolute;z-index:0;left:0;right:0;bottom:0;height:27%;opacity:.6;background:repeating-conic-gradient(from 145deg at 50% 0%,transparent 0 48deg,#0b2832 49deg 95deg,transparent 96deg 140deg) 0 100%/90px 190px repeat-x;pointer-events:none}
.winter-town{position:absolute;z-index:1;bottom:0;left:0;right:0;height:155px;display:flex;justify-content:space-around;align-items:flex-end;pointer-events:none;opacity:.92}
.house{position:relative;display:block;width:clamp(68px,12vw,130px);height:clamp(58px,10vw,100px);background:#203744;border:2px solid #6c6658;border-radius:4px;box-shadow:inset 0 -15px 20px #091723}
.house:before{content:'';position:absolute;left:-14%;top:-38%;width:128%;height:55%;background:#f0eee3;clip-path:polygon(50% 0,100% 100%,0 100%);filter:drop-shadow(0 3px 2px #0006)}
.house:after{content:'';position:absolute;top:25%;left:24%;width:20%;height:30%;background:#ffce73;box-shadow:35px 0 #ffce73,0 0 22px #ffc56a,35px 0 22px #ffc56a;border:3px solid #6b4a31}
.house-b{transform:scale(.72);transform-origin:bottom}.house-c{transform:scale(1.1);transform-origin:bottom}.house-d{transform:scale(.84);transform-origin:bottom}
.horizon{z-index:2;bottom:-125px;height:170px;background:#f4f5e9;box-shadow:0 -9px 38px #c3dfdb66}
#calendar{background:radial-gradient(circle at 50% 0%,#31483f 0%,#102a2b 45%,#0a1923 100%)}
#calendar h2{margin-top:10px}
.village{font-size:36px;color:#e6c47e;letter-spacing:8px;filter:drop-shadow(0 0 15px #eac77977)}
.days{gap:clamp(9px,2vw,18px)}
.day{border-radius:18px;overflow:hidden;min-height:135px;background:linear-gradient(140deg,#9d2d3b,#531d2b);border:1px solid #f3d58b88}
.day:before{content:'';position:absolute;inset:6px;border:1px solid #f7dba055;border-radius:12px;pointer-events:none}
.day:nth-child(3n){background:linear-gradient(140deg,#266458,#123b3c)}
.day:nth-child(4n){background:linear-gradient(140deg,#a98346,#5b4225)}
.day strong{font-family:Georgia,serif;font-size:clamp(28px,3vw,38px);font-weight:400}
.day small{padding:0 4px}
.day .ornament{font-size:25px;filter:drop-shadow(0 2px 3px #0006)}
.day.locked{opacity:.8;filter:saturate(.72)}
.letter{animation:letterEnter .35s ease-out}
@keyframes letterEnter{from{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:none}}
@media(max-width:600px){.welcome-content{margin:0 auto}.welcome-content h1{font-size:clamp(49px,12vw,72px)}.welcome-content>p{margin:12px auto}.sleigh{margin:6px auto}.sleigh-label{font-size:12px}.winter-town{height:100px}.horizon{bottom:-145px}.days{grid-template-columns:repeat(3,minmax(0,1fr))}.day{min-height:112px}.scene{padding-top:18px}}
@media(prefers-reduced-motion:reduce){.sleigh{animation:none}.letter{animation:none}}

/* V3 : traîneau réaliste intégré sans modifier le calendrier ni l'administration */
.sleigh-photo{display:block;width:100%;height:auto;object-fit:contain;pointer-events:none;user-select:none;-webkit-user-drag:none;filter:drop-shadow(0 6px 17px rgba(246,191,97,.24))}
.sleigh{width:min(100%,780px);overflow:visible}
@media(max-width:600px){.sleigh{width:calc(100% + 16px);margin-left:-8px;padding:0}.sleigh-photo{width:100%}}


/* V4 — envol cinématique, poussière d'étoiles et arrivée au village */
.flight-transition{position:fixed;inset:0;z-index:30;overflow:hidden;pointer-events:none;visibility:hidden;opacity:0;background:radial-gradient(ellipse at 70% 25%,#344e68 0%,#0b1d30 60%,#07111e 100%);transition:opacity .28s ease,visibility 0s linear .28s}
.flight-transition.active{visibility:visible;opacity:1;transition:opacity .28s ease}
.flight-transition.arriving{opacity:0;transition:opacity .8s ease}
.flight-transition:before{content:"";position:absolute;inset:-50%;background:radial-gradient(circle at 50% 45%,#f8d48a33,transparent 28%);transform:scale(.6);opacity:0}
.flight-transition.active:before{animation:flightSky 2.2s ease-in forwards}
.flight-sleigh{position:absolute;z-index:3;width:min(85vw,760px);height:auto;left:50%;top:40%;transform:translate(-50%,-50%) scale(.78) rotate(-5deg);filter:drop-shadow(0 0 28px #f6c66a80);opacity:0}
.flight-transition.active .flight-sleigh{animation:flightJourney 2.25s cubic-bezier(.24,.54,.28,1) forwards}
.flight-glow{position:absolute;z-index:2;left:10%;top:53%;width:65%;height:10px;border-radius:100%;transform:rotate(-15deg) scaleX(.2);transform-origin:right center;opacity:0;background:linear-gradient(90deg,transparent,#ffdf9b55,#ffe6a8);filter:blur(6px);box-shadow:0 0 24px 8px #e8b86d66}
.flight-transition.active .flight-glow{animation:glowTrail 1.7s ease-out .2s both}
.flight-stars{position:absolute;inset:0;opacity:0;background-image:radial-gradient(circle,#fff4c9 1.5px,transparent 2.5px),radial-gradient(circle,#f6c776 1px,transparent 2px),radial-gradient(circle,#fff 1px,transparent 2px);background-size:76px 91px,119px 87px,143px 127px;background-position:0 0,40px 32px,18px 55px}
.flight-transition.active .flight-stars{animation:starRush 2.4s ease-in forwards}
.flight-village{position:absolute;inset:auto 0 -20% 0;height:50%;display:flex;align-items:end;justify-content:space-evenly;transform:scale(.55);opacity:0;background:linear-gradient(0deg,#eaf0eb 0 14%,transparent 14%)}
.flight-village>span:first-child{position:absolute;top:3%;right:23%;font-size:55px;color:#ffe6a3;text-shadow:0 0 30px #ffe6a3}
.flight-roof{width:22%;height:46%;background:linear-gradient(#29414b,#172a38);position:relative;box-shadow:inset 0 0 25px #0b1523}
.flight-roof:before{content:"";position:absolute;bottom:100%;left:-13%;width:126%;height:40%;background:#e9efe7;clip-path:polygon(50% 0,100% 100%,0 100%)}
.flight-roof:after{content:"";position:absolute;left:20%;top:30%;width:20%;height:20%;background:#ffce73;box-shadow:45px 0 #ffce73,0 0 18px #ffc56a}
.flight-transition.active .flight-village{animation:villageApproach 2.25s ease-in forwards}
@keyframes flightJourney{0%{opacity:0;transform:translate(-75%,10%) scale(.45) rotate(-8deg)}15%{opacity:1}42%{transform:translate(-45%,-55%) scale(.9) rotate(-5deg)}72%{opacity:1;transform:translate(-30%,-90%) scale(1.12) rotate(-9deg)}100%{opacity:0;transform:translate(75%,-170%) scale(.25) rotate(-14deg)}}
@keyframes starRush{0%{opacity:0;transform:scale(1)}30%{opacity:.9}100%{opacity:1;transform:scale(2.8)}}
@keyframes glowTrail{0%{opacity:0;transform:rotate(-15deg) scaleX(.2)}40%{opacity:1}100%{opacity:0;transform:rotate(-15deg) scaleX(1.3)}}
@keyframes villageApproach{0%,25%{opacity:0;transform:scale(.45) translateY(20%)}60%{opacity:.65}100%{opacity:1;transform:scale(1.9) translateY(-6%)}}
@keyframes flightSky{0%{opacity:0;transform:scale(.6)}60%{opacity:1}100%{opacity:.35;transform:scale(1.6)}}
@media(prefers-reduced-motion:reduce){.flight-transition{display:none!important}}
body.reduced .flight-transition{display:none!important}

/* V5: véritable scène WebGL 3D, responsive */
.sleigh{animation:none!important;filter:none!important;display:block}
.sleigh-3d{display:block;position:relative;width:100%;height:clamp(240px,40vw,385px);isolation:isolate;overflow:visible}
.sleigh-3d canvas{width:100%;height:100%;display:block;touch-action:pan-y;filter:drop-shadow(0 12px 20px #0006)}
.sleigh-3d .fallback-photo{height:100%;object-fit:contain}
.sleigh-label{position:relative;z-index:2}
body.three-flight .sleigh-3d{position:fixed!important;z-index:35!important;inset:16vh 0 auto 0!important;width:100vw!important;height:65vh!important;pointer-events:none;animation:threeFlight 2.65s ease-in-out forwards}
body.three-flight .sleigh-3d canvas{filter:drop-shadow(0 12px 32px #d5a55780)}
.flight-transition .flight-glow{z-index:2}
@keyframes threeFlight{0%{transform:translate3d(0,15vh,0) scale(.75);opacity:0}15%{opacity:1}55%{transform:translate3d(-7vw,-2vh,0) scale(1.08);opacity:1}100%{transform:translate3d(20vw,-23vh,0) scale(.18);opacity:0}}
@media(max-width:600px){.sleigh-3d{height:245px}body.three-flight .sleigh-3d{height:52vh;top:20vh!important}}
@media(prefers-reduced-motion:reduce){body.three-flight .sleigh-3d{animation:none}}


/* V8 : sapin lumineux et 24 vrais petits paquets cadeaux, CSS 3D */
#calendar{background:radial-gradient(ellipse at 50% 34%,#23453c 0%,#0e282a 52%,#071520 100%);padding-bottom:90px}
#calendar:before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 10% 16%,#ffdc9a15,transparent 24%),radial-gradient(circle at 88% 26%,#ffdb8b13,transparent 22%)}
#calendar h2,#calendar .subtitle,#calendar #notice,#calendar>.signature{position:relative;z-index:2}
.christmas-room{position:relative;max-width:960px;margin:14px auto 0;padding:0 10px 30px;isolation:isolate}
.room-glow{position:absolute;inset:20px 4% 0;z-index:-1;background:radial-gradient(ellipse at 50% 42%,#e1b35b30 0%,#e1b35b08 40%,transparent 68%)}
.christmas-tree{position:relative;width:min(76vw,365px);height:clamp(290px,49vw,445px);margin:0 auto -8px;filter:drop-shadow(0 12px 20px #0008)}
.tree-star{position:absolute;z-index:9;top:-9px;left:50%;transform:translateX(-50%);font-size:55px;color:#ffe7a2;text-shadow:0 0 10px #fff4c9,0 0 28px #ffbf54,0 0 52px #ffb74d;animation:treeStar 3s ease-in-out infinite}
.tree-tier{position:absolute;left:50%;transform:translateX(-50%);clip-path:polygon(50% 0%,96% 82%,100% 93%,85% 89%,77% 97%,65% 91%,50% 100%,36% 92%,23% 98%,13% 90%,0 94%,5% 80%);background:repeating-linear-gradient(162deg,transparent 0 10px,#d2f0bd0b 11px 14px,transparent 16px 23px),linear-gradient(95deg,#062a20 0%,#176044 31%,#236f49 48%,#0c4937 75%,#031d1b 100%);box-shadow:inset 0 -18px 20px #001a17;filter:drop-shadow(0 7px 2px #0006)}
.tier-one{top:35px;width:49%;height:39%;z-index:4}.tier-two{top:94px;width:69%;height:44%;z-index:3}.tier-three{top:163px;width:88%;height:47%;z-index:2}.tier-four{top:235px;width:100%;height:44%;z-index:1}
.tree-trunk{position:absolute;z-index:0;bottom:2px;left:46%;width:8%;height:20%;background:linear-gradient(90deg,#30170e,#76502a,#2c170e)}
.tree-garland{position:absolute;left:50%;z-index:6;border-bottom:4px solid #eac477;border-radius:0 0 50% 50%;filter:drop-shadow(0 0 6px #ffca5a);transform:translateX(-50%) rotate(-3deg)}
.garland-one{top:36%;width:43%;height:13%}.garland-two{top:55%;width:63%;height:14%;transform:translateX(-50%) rotate(4deg)}.garland-three{top:75%;width:85%;height:12%}
.tree-lights,.tree-baubles{position:absolute;z-index:7;inset:15% 5% 5%;pointer-events:none}
.tree-lights{background-image:radial-gradient(circle,#fff9cd 0 2px,#ffc65d 3px,transparent 8px),radial-gradient(circle,#ffe8ad 0 2px,#ffb33e 3px,transparent 8px),radial-gradient(circle,#fff 0 2px,#ffde91 3px,transparent 9px);background-size:58px 72px,71px 67px,83px 93px;background-position:8px 13px,28px 35px,48px 6px;clip-path:polygon(50% 0,100% 100%,0 100%);animation:treeLights 2.8s ease-in-out infinite alternate}
.tree-baubles{background-image:radial-gradient(circle at 30% 28%,#fff6d6 0 2px,#d93e43 4px,#7c0e22 8px,transparent 9px),radial-gradient(circle at 30% 28%,#fff6d6 0 2px,#e3c27d 4px,#9d6d2b 8px,transparent 9px);background-size:80px 105px,95px 90px;background-position:17px 22px,51px 56px;clip-path:polygon(50% 0,100% 100%,0 100%)}
.tree-skirt{width:min(92%,470px);height:36px;border-radius:50%;margin:-22px auto 0;background:radial-gradient(ellipse,#e6d1a3 0%,#a78c6b 55%,#6d3a36 76%,transparent 77%);box-shadow:0 8px 35px #0008}
#calendar .days{position:relative;z-index:8;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:15px 12px;max-width:850px;margin:-1px auto 10px;padding:12px 8px 18px;perspective:900px}
#calendar .day.gift{position:relative;min-width:0;min-height:118px;padding:5px 0 7px;border:0;border-radius:0;background:transparent!important;box-shadow:none!important;filter:none;opacity:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:2px;transition:transform .25s ease;transform-style:preserve-3d}
#calendar .day.gift:hover,#calendar .day.gift:focus-visible{transform:translateY(-8px) rotate(-2deg);outline:none}
#calendar .day.gift:focus-visible .gift-box{outline:2px solid #fff2bd;outline-offset:5px}
#calendar .day.gift.locked:after{content:none}
.gift-box{position:relative;display:block;width:clamp(55px,8vw,94px);height:clamp(54px,7.5vw,82px);border-radius:4px 4px 7px 7px;background:linear-gradient(110deg,#640b1c 0%,#b91e32 14%,#e23d49 39%,#c22136 70%,#6b0d21 100%);box-shadow:inset -7px 0 10px #43081855,inset 3px 0 7px #fff4,0 12px 14px #0009,0 0 20px #e3ae4b18;transform:rotateY(-9deg) rotateX(5deg)}
.gift-box:before{content:"";position:absolute;top:0;right:-8px;width:8px;height:100%;background:linear-gradient(#871025,#3e0817);clip-path:polygon(0 0,100% 8%,100% 93%,0 100%)}
.gift-top{position:absolute;z-index:4;left:-4%;top:-8px;width:108%;height:17px;border-radius:3px;background:linear-gradient(180deg,#f05d61,#c9233b 65%,#6d0d20);box-shadow:0 4px 5px #41091666}
.gift-ribbon-v{position:absolute;z-index:5;top:-8px;bottom:0;left:42%;width:16%;background:linear-gradient(90deg,#95611e,#ffe4a0 35%,#d7a54b 70%,#87591d);box-shadow:0 0 3px #ffe9ac77}
.gift-ribbon-h{position:absolute;z-index:5;top:37%;left:0;right:0;height:14%;background:linear-gradient(#b37c28,#ffe4a0 38%,#b77b28 90%)}
.gift-bow{position:absolute;z-index:7;left:50%;top:-23px;width:44px;height:25px;transform:translateX(-50%)}
.gift-bow i{position:absolute;top:4px;width:24px;height:17px;border:5px solid #e9bd63;border-radius:85% 18% 80% 15%;background:#7b3b1622;box-shadow:0 0 5px #ffe0a466}
.gift-bow i:first-child{left:0;transform:rotate(25deg)}.gift-bow i:last-child{right:0;transform:scaleX(-1) rotate(25deg)}
.gift-number{position:absolute;z-index:10;top:40%;left:50%;transform:translate(-50%,-50%);font-weight:800;font-size:clamp(17px,2.8vw,27px);color:#fff7df;text-shadow:0 2px 5px #3a0615,0 0 8px #410a19;pointer-events:none}
.gift-status{font-size:10px;letter-spacing:.4px;color:#f6dcab;font-weight:800;text-shadow:0 1px 3px #000;white-space:nowrap}
.day.gift.locked .gift-box{filter:brightness(.82)}
.day.gift:not(.locked) .gift-box{animation:giftGlow 3.2s ease-in-out infinite alternate}
@keyframes treeStar{50%{opacity:.75;filter:brightness(1.3);transform:translateX(-50%) scale(1.07)}}
@keyframes treeLights{to{opacity:.58;filter:brightness(1.5)}}
@keyframes giftGlow{to{box-shadow:0 12px 18px #0009,0 0 25px #ffd67b75}}
@media(max-width:640px){#calendar .days{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 4px;padding:15px 0}#calendar .day.gift{min-height:102px}.christmas-tree{width:min(87vw,330px);height:375px}.tier-one{top:34px}.tier-two{top:88px}.tier-three{top:150px}.tier-four{top:212px}.gift-box{width:clamp(58px,17vw,79px);height:clamp(53px,15vw,70px)}.gift-number{font-size:21px}.gift-bow{transform:translateX(-50%) scale(.85)}#calendar h2{font-size:clamp(40px,10vw,56px)}}
@media(max-width:360px){#calendar .days{gap:8px 1px}.gift-box{width:57px;height:54px}.gift-status{font-size:9px}}
@media(prefers-reduced-motion:reduce){.tree-star,.tree-lights,.day.gift:not(.locked) .gift-box{animation:none!important}}
body.reduced .tree-star,body.reduced .tree-lights,body.reduced .day.gift .gift-box{animation:none!important}

/* V9 : profondeur du village et scintillements discrets du sapin */
#calendar{background:linear-gradient(180deg,#071524 0%,#0c2030 32%,#12252c 74%,#081723 100%);overflow:hidden}
#calendar::after{content:"";position:absolute;z-index:0;top:110px;left:0;right:0;height:min(70vw,480px);background:linear-gradient(180deg,#06152b55 0%,transparent 38%,#10232b15 72%,#0a1b25 100%),url('village-noel.webp') center 49%/cover no-repeat;pointer-events:none;opacity:.95}
#calendar .village,#calendar h2,#calendar .subtitle,#calendar #notice,#calendar>.signature{position:relative;z-index:3}
.christmas-room{z-index:2;max-width:960px;min-height:600px;padding-top:25px;background:linear-gradient(180deg,transparent 0%,#07172222 36%,#0b1b25aa 66%,#0b1b25ee 100%);border-radius:25px}
.christmas-room::before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;height:480px;background:radial-gradient(ellipse at 50% 57%,#ffdb7540,transparent 56%);pointer-events:none}
.christmas-room::after{content:"";position:absolute;z-index:-1;left:0;right:0;bottom:0;height:52%;background:linear-gradient(180deg,transparent,#e5e6e014 75%,#faf2e01a);clip-path:polygon(0 12%,12% 10%,22% 13%,40% 8%,57% 11%,75% 7%,90% 12%,100% 9%,100% 100%,0 100%);pointer-events:none}
.christmas-tree{filter:drop-shadow(0 15px 22px #000a) drop-shadow(0 0 24px #ffd37a24)}
.tree-tier{background:repeating-linear-gradient(168deg,transparent 0 4px,#d9f0d51c 5px 6px,transparent 8px 12px),repeating-linear-gradient(21deg,#0a3529 0 7px,#2d6848 8px 12px,#0c3a2b 13px 17px),linear-gradient(100deg,#042b20,#26704c 44%,#052b24);filter:drop-shadow(0 4px 3px #001a16aa)}
.tree-lights{animation:treeLightsSoft 5.4s ease-in-out infinite alternate;opacity:.84}
.tree-sparkles{position:absolute;z-index:8;inset:11% 7% 3%;pointer-events:none;clip-path:polygon(50% 0,100% 100%,0 100%)}
.tree-sparkles span{position:absolute;width:5px;height:5px;border-radius:50%;background:#fff7d4;box-shadow:0 0 5px 2px #ffe49b,0 0 13px 4px #ffce6780;animation:twinkleTree var(--duration,4.2s) ease-in-out var(--delay,0s) infinite;opacity:.15}
@keyframes twinkleTree{0%,100%{opacity:.12;transform:scale(.65)}42%{opacity:.65;transform:scale(1.15)}55%{opacity:.2;transform:scale(.75)}}
@keyframes treeLightsSoft{0%{opacity:.65;filter:brightness(.92)}100%{opacity:.95;filter:brightness(1.15)}}
@media(max-width:640px){#calendar::after{top:155px;height:360px;background-position:center top;background-size:auto 360px}.christmas-room{padding-top:30px;background:linear-gradient(180deg,#07172211 0%,#0b1b2566 35%,#0b1b25e8 69%)}.christmas-room::before{height:410px}}
@media(prefers-reduced-motion:reduce){.tree-sparkles span,.tree-lights{animation:none!important}}
body.reduced .tree-sparkles span,body.reduced .tree-lights{animation:none!important}

/* V10 : décor photographique plein écran, sans double sapin, cadeaux en premier plan */
#calendar{min-height:100dvh;padding:18px clamp(12px,3vw,34px) 65px;background:#081321 url('village-noel.webp') center center / cover no-repeat;isolation:isolate;overflow:hidden}
#calendar::after{display:none!important}
#calendar::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:linear-gradient(180deg,rgba(3,12,25,.66) 0%,rgba(3,12,25,.17) 17%,rgba(3,12,25,.02) 43%,rgba(3,12,25,.58) 65%,rgba(3,12,25,.92) 100%);}
#calendar .village{display:none}
#calendar h2{position:relative;z-index:2;font-size:clamp(40px,6vw,76px);line-height:1.15;max-width:1100px;margin:6px auto 4px;text-shadow:0 3px 14px #091526,0 0 30px #091526}
#calendar .subtitle{position:relative;z-index:2;max-width:760px;margin:0 auto;color:#fff5e7;font-size:clamp(12px,1.6vw,17px);text-shadow:0 2px 8px #071322,0 0 14px #071322}
#calendar #notice{position:relative;z-index:5;min-height:20px;color:#fff0bd;text-shadow:0 2px 6px #000}
#calendar .christmas-room{position:relative;z-index:2;max-width:1050px;margin:0 auto;padding:0 12px 8px;background:none;isolation:isolate}
#calendar .christmas-tree,#calendar .tree-skirt,#calendar .room-glow{display:none!important}
#calendar .christmas-room::before{display:none!important}
#calendar .days{margin:clamp(230px,41vh,480px) auto 0;max-width:940px;grid-template-columns:repeat(6,minmax(0,1fr));gap:20px 10px;padding:24px 14px 26px;border-radius:24px;background:linear-gradient(180deg,rgba(12,17,25,.24),rgba(14,12,20,.74));box-shadow:0 15px 65px #050a14aa;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
#calendar .day.gift{min-height:110px;filter:none;opacity:1}
#calendar .day.gift .gift-box{width:clamp(64px,8vw,112px);height:clamp(58px,7.2vw,96px);transform:perspective(500px) rotateY(-9deg) rotateX(4deg);border-radius:3px 4px 7px 5px;background:linear-gradient(110deg,#480811 0%,#850d1b 9%,#c21b2a 27%,#f04d50 43%,#b51328 65%,#670915 100%);box-shadow:inset 4px 0 9px #ffac9a3d,inset -8px 0 13px #2d0615aa,0 7px 3px -3px #080506dd,0 14px 22px #000b;overflow:visible}
#calendar .gift-box::before{right:-10px;width:10px;background:linear-gradient(90deg,#760c1b,#32040c);clip-path:polygon(0 0,100% 8%,100% 95%,0 100%)}
#calendar .gift-box::after{content:"";position:absolute;left:2px;right:1px;top:2px;bottom:1px;z-index:1;pointer-events:none;opacity:.26;background:repeating-linear-gradient(35deg,transparent 0 3px,#ffdcba13 4px 5px,transparent 6px 11px)}
#calendar .gift-top{height:17px;top:-10px;left:-4px;width:calc(100% + 10px);background:linear-gradient(180deg,#fa7371 0%,#d62636 45%,#8b0e20 100%);box-shadow:0 4px 5px #26040e99}
#calendar .gift-ribbon-v{z-index:6;background:linear-gradient(90deg,#7d4812 0%,#c78b2b 15%,#fff1ae 36%,#e6b855 58%,#98601c 100%);box-shadow:1px 0 4px #2b160d77}
#calendar .gift-ribbon-h{z-index:6;background:linear-gradient(180deg,#80501b,#fce7a2 35%,#c48b2d 78%,#754314)}
#calendar .gift-bow{z-index:9;filter:drop-shadow(0 3px 2px #230b0a99)}
#calendar .gift-bow i{border-color:#efc56e;background:linear-gradient(145deg,#f7e5b0,#986019 70%);box-shadow:inset 0 1px 2px #fff9c3}
#calendar .gift-number{z-index:11;top:61%;left:29%;font-size:clamp(16px,2.2vw,25px);padding:2px 7px;border:1px solid #d8b56c;border-radius:4px;color:#44240d;background:linear-gradient(145deg,#fff2ce,#d8b67d);box-shadow:0 2px 4px #27090c77;text-shadow:none;transform:translate(-50%,-50%) rotate(-4deg)}
#calendar .gift-status{color:#fff1cb;text-shadow:0 2px 5px #000}
#calendar .day.gift.locked .gift-box{filter:brightness(.92)}
#calendar .day.gift:not(.locked) .gift-box{animation:giftGlow 4.8s ease-in-out infinite alternate}
#calendar>.signature{z-index:2;text-shadow:0 2px 10px #000}
@media(max-width:640px){#calendar{background-position:center top;background-size:auto 100dvh;background-attachment:scroll;padding-top:16px}#calendar h2{font-size:clamp(36px,9vw,53px);margin-top:2px}#calendar .subtitle{font-size:12px;line-height:1.4}#calendar .days{margin-top:clamp(230px,39vh,420px);grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 3px;padding:20px 5px 16px;border-radius:18px}#calendar .day.gift{min-height:95px}#calendar .day.gift .gift-box{width:clamp(55px,17vw,77px);height:clamp(52px,15vw,70px)}#calendar .gift-number{font-size:17px;padding:1px 5px}#calendar .gift-bow{transform:translateX(-50%) scale(.78)}}
@media(min-width:641px){#calendar{background-attachment:fixed}}
@media(prefers-reduced-motion:reduce){#calendar .day.gift .gift-box{animation:none!important}}

/* V13 — accueil photographique immersif, sans modifier le calendrier V12 */
#welcome.cinematic-welcome{min-height:calc(100svh - 70px);background:linear-gradient(180deg,rgba(3,12,27,.54) 0%,rgba(3,12,27,.28) 29%,rgba(3,12,27,.12) 55%,rgba(3,12,27,.76) 100%),url("accueil-noel-cinema.webp") center center/cover no-repeat;padding:clamp(22px,4vh,54px) 18px 38px;display:flex;align-items:center;justify-content:center}
#welcome.cinematic-welcome .moon,#welcome.cinematic-welcome .stars,#welcome.cinematic-welcome .horizon,#welcome.cinematic-welcome .forest,#welcome.cinematic-welcome .winter-town{display:none!important}
#welcome.cinematic-welcome .welcome-content{width:min(100%,790px);max-width:790px;margin:0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100svh - 145px);gap:clamp(5px,1.5vh,16px);text-shadow:0 2px 18px #061020,0 2px 5px #061020}
#welcome.cinematic-welcome h1{font-size:clamp(49px,7vw,90px);margin:0;line-height:1.08;color:#ffe7a9;text-shadow:0 3px 20px #000,0 0 34px #0009}
#welcome.cinematic-welcome .welcome-content>p{margin:0 auto;line-height:1.45;max-width:560px;font-size:clamp(13px,1.8vw,18px)}
#welcome.cinematic-welcome .welcome-content .eyebrow{font-size:clamp(10px,1.4vw,14px);color:#ffe8b4}
#welcome.cinematic-welcome .sleigh{width:auto;max-width:100%;margin:clamp(12px,4vh,48px) auto 0;padding:0;display:block;filter:none!important}
#welcome.cinematic-welcome .sleigh-3d{display:none!important}
#welcome.cinematic-welcome .sleigh-label{display:block;font-size:clamp(13px,2vw,17px);padding:14px 24px;border:1px solid #ffe6a8;background:rgba(12,27,39,.82);box-shadow:0 10px 36px #0009;backdrop-filter:blur(7px);text-shadow:none}
#welcome.cinematic-welcome .sleigh:hover .sleigh-label{background:rgba(106,37,34,.92);transform:translateY(-2px)}
#welcome.cinematic-welcome .hint{color:#ffe9ad}
#welcome.cinematic-welcome .signature{font-size:clamp(27px,4vw,38px)}
@media(max-width:650px){#welcome.cinematic-welcome{background-position:38% center;padding:20px 12px 30px}#welcome.cinematic-welcome .welcome-content{justify-content:space-between;min-height:calc(100svh - 140px);gap:10px}#welcome.cinematic-welcome h1{font-size:clamp(48px,11vw,66px)}#welcome.cinematic-welcome .sleigh{margin:10px auto}#welcome.cinematic-welcome .welcome-content>p{font-size:14px}#welcome.cinematic-welcome .signature{font-size:28px}}

/* V14 : réalisme de l'accueil, vitrages givrés uniquement sur les zones de texte / clic.
   Le paysage et le Père Noël restent nets et visibles à travers les panneaux. */
#welcome.cinematic-v14{isolation:isolate;background-image:linear-gradient(180deg,rgba(2,9,22,.28) 0%,rgba(2,9,22,.05) 35%,rgba(3,12,24,.1) 62%,rgba(2,10,24,.48) 100%),url("accueil-noel-cinema.webp");background-position:center center;background-size:cover}
#welcome.cinematic-v14::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse at 53% 35%,transparent 24%,rgba(2,9,22,.16) 100%)}
#welcome.cinematic-v14 .welcome-content{z-index:1;justify-content:space-between;gap:12px}
#welcome.cinematic-v14 .intro-glass{width:min(100%,670px);padding:clamp(12px,2.6vw,23px) clamp(14px,3vw,30px);border:1px solid rgba(255,233,190,.22);border-radius:26px;background:linear-gradient(135deg,rgba(7,22,40,.51),rgba(7,22,40,.25));backdrop-filter:blur(7px) saturate(1.12);-webkit-backdrop-filter:blur(7px) saturate(1.12);box-shadow:0 14px 45px rgba(2,8,18,.22),inset 0 1px rgba(255,255,255,.16)}
#welcome.cinematic-v14 .intro-glass>p{max-width:540px;margin:8px auto;line-height:1.45;font-size:clamp(13px,1.8vw,18px)}
#welcome.cinematic-v14 .intro-glass .eyebrow{font-size:clamp(10px,1.4vw,14px);letter-spacing:2px}
#welcome.cinematic-v14 h1{font-size:clamp(43px,6vw,77px);margin:8px auto 12px;line-height:1.07}
#welcome.cinematic-v14 .outro-glass{max-width:590px;width:100%;padding:12px 18px;border-radius:22px;border:1px solid rgba(255,233,190,.2);background:rgba(7,21,37,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 10px 35px #07111f44}
#welcome.cinematic-v14 .outro-glass p{margin:5px auto;line-height:1.3;font-size:clamp(12px,1.7vw,16px)}
#welcome.cinematic-v14 .outro-glass .signature{font-size:clamp(27px,4vw,37px)}
#welcome.cinematic-v14 .sleigh{animation:none;margin:10px auto;filter:none}
#welcome.cinematic-v14 .sleigh-label{border-radius:999px;border:1px solid rgba(255,225,166,.68);background:linear-gradient(135deg,rgba(15,31,47,.52),rgba(23,35,48,.35));backdrop-filter:blur(13px) saturate(1.4);-webkit-backdrop-filter:blur(13px) saturate(1.4);box-shadow:0 12px 35px rgba(0,0,0,.26),inset 0 1px rgba(255,255,255,.2);transition:background .3s,transform .3s,box-shadow .3s}
#welcome.cinematic-v14 .sleigh:is(:hover,:focus-visible) .sleigh-label{background:rgba(45,37,42,.57);transform:translateY(-3px);box-shadow:0 18px 42px #0007,0 0 24px #eac78355}
#welcome.cinematic-v14 .sleigh:focus-visible{outline:2px solid #ffe5ac;outline-offset:5px;border-radius:999px}
/* Les cases restent nettes et lisibles ; seule leur surface translucide est floutée. */
#calendar .days{backdrop-filter:blur(9px) saturate(1.15);-webkit-backdrop-filter:blur(9px) saturate(1.15);background:linear-gradient(180deg,rgba(10,20,30,.18),rgba(9,15,25,.65));border:1px solid rgba(255,238,205,.13)}
#calendar .day.gift:focus-visible .gift-box,#calendar .day.gift:hover .gift-box{box-shadow:inset 4px 0 9px #ffac9a3d,inset -8px 0 13px #2d0615aa,0 14px 26px #000b,0 0 19px rgba(255,226,155,.36)}
@media(max-width:650px){#welcome.cinematic-v14{background-position:39% center}#welcome.cinematic-v14 .intro-glass{padding:12px 13px;border-radius:20px}#welcome.cinematic-v14 h1{font-size:clamp(40px,10vw,56px)}#welcome.cinematic-v14 .intro-glass>p{font-size:13px}#welcome.cinematic-v14 .outro-glass{padding:9px 12px}#welcome.cinematic-v14 .outro-glass p{font-size:12px}#welcome.cinematic-v14 .sleigh-label{padding:12px 18px;font-size:13px}}
@media(prefers-reduced-transparency:reduce){#welcome.cinematic-v14 .intro-glass,#welcome.cinematic-v14 .outro-glass,#welcome.cinematic-v14 .sleigh-label{background:rgba(7,20,35,.82)}}

/* V15 — papeterie de Noël raffinée et secrets interactifs */
#welcome.cinematic-v14 .intro-glass{background:linear-gradient(140deg,rgba(6,19,35,.57),rgba(7,22,40,.32));border-color:rgba(249,222,164,.36);box-shadow:0 15px 45px #0004,inset 0 1px #fff3}
#welcome.cinematic-v14 .intro-glass .eyebrow{font-family:'Cormorant Garamond',serif;font-size:clamp(14px,2vw,19px);letter-spacing:.14em;text-transform:uppercase;color:#ffe3a3}
#welcome.cinematic-v14 .intro-glass>p:not(.eyebrow){font-family:'Cormorant Garamond',serif;font-size:clamp(18px,2.3vw,25px);font-weight:600;line-height:1.3;color:#fff5e5;text-shadow:0 2px 7px #0009}
#welcome.cinematic-v14 .outro-glass{border-color:rgba(255,227,170,.35);background:linear-gradient(120deg,rgba(8,25,43,.57),rgba(8,25,43,.28))}
#welcome.cinematic-v14 .outro-glass .hint{font-family:'Cormorant Garamond',serif;font-size:clamp(17px,2.2vw,23px);font-weight:700;color:#ffe7b1}
#welcome.cinematic-v14 .outro-glass p:not(.signature){font-family:'Cormorant Garamond',serif;font-size:clamp(16px,2vw,21px);font-weight:600}
#welcome.cinematic-v14 .sleigh-label{font-family:'Cormorant Garamond',serif;font-size:clamp(17px,2.4vw,23px);font-weight:700;letter-spacing:.025em}
#calendar h2{font-family:'Great Vibes',cursive;line-height:1.15;color:#ffe1a0;text-shadow:0 3px 12px #000c}
#calendar .subtitle{font-family:'Cormorant Garamond',serif;font-size:clamp(21px,3vw,30px);font-weight:700;color:#ffe8b7;text-shadow:0 3px 9px #000c;line-height:1.2}
#calendar .subtitle-detail{display:block;font-family:Nunito,sans-serif;font-size:clamp(12px,1.5vw,15px);font-weight:600;color:#fff6e7;margin:9px auto 0;max-width:650px;line-height:1.5}
.secret-garland{position:relative;z-index:5;display:flex;flex-wrap:wrap;gap:9px;justify-content:center;align-items:center;margin:14px auto 4px;max-width:720px}
.secret-note{cursor:pointer;position:relative;z-index:6;border:1px solid rgba(255,226,163,.58);border-radius:999px;padding:7px 14px;color:#ffebbc;background:rgba(9,26,43,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-family:'Cormorant Garamond',serif;font-size:clamp(15px,1.8vw,20px);font-weight:700;box-shadow:0 3px 14px #0005;transition:transform .2s,background .2s}
.secret-note:is(:hover,:focus-visible){transform:translateY(-2px);background:rgba(85,35,35,.72);outline-color:#ffe4a4}
#welcome .secret-note{margin-top:6px;font-size:clamp(13px,1.6vw,17px);padding:5px 14px}
.secret-toast{position:fixed;z-index:200;bottom:max(24px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:min(92vw,540px);padding:21px 45px 21px 22px;border-radius:22px;border:1px solid #ffe1a1a8;background:linear-gradient(140deg,rgba(28,42,58,.96),rgba(74,34,39,.97));color:#fff3d8;box-shadow:0 12px 50px #0009;font-family:'Cormorant Garamond',serif;font-size:clamp(22px,3vw,28px);font-weight:700;text-align:center;line-height:1.3;backdrop-filter:blur(18px)}
.secret-toast.hidden{display:none}
#secret-close{position:absolute;right:10px;top:7px;background:transparent;border:0;color:#fff1d1;font-size:27px;cursor:pointer}
@media(max-width:650px){#welcome.cinematic-v14 .intro-glass>p:not(.eyebrow){font-size:17px}#welcome.cinematic-v14 .outro-glass .hint{font-size:16px}#welcome.cinematic-v14 .outro-glass p:not(.signature){font-size:15px}#calendar .subtitle{font-size:23px}#calendar .subtitle-detail{font-size:12px} .secret-garland{gap:6px;margin:10px auto 2px}.secret-garland .secret-note{font-size:13px;padding:6px 10px}}
@media(prefers-reduced-motion:reduce){.secret-note{transition:none}}

/* V16 : transition cinématographique entre deux vrais décors, sans silhouettes artificielles. */
.flight-transition.winter-dissolve{position:fixed;inset:0;z-index:40;overflow:hidden;pointer-events:none;visibility:hidden;opacity:0;background:#101c2a;transition:opacity .32s ease,visibility 0s linear .32s;isolation:isolate}
.flight-transition.winter-dissolve.active{visibility:visible;opacity:1;transition:opacity .32s ease}
.flight-transition.winter-dissolve.arriving{opacity:0;transition:opacity 1.15s cubic-bezier(.22,.61,.36,1)}
.winter-dissolve .dissolve-landscape{position:absolute;inset:-4%;background-position:center;background-size:cover;will-change:transform,filter,opacity;transform:scale(1.025)}
.winter-dissolve .dissolve-start{background-image:url('accueil-noel-cinema.webp');background-position:45% center;opacity:1}
.winter-dissolve .dissolve-end{background-image:url('village-noel.webp');background-position:center;opacity:0;filter:blur(14px);transform:scale(1.13)}
.winter-dissolve.active .dissolve-start{animation:v16OldScene 2.35s ease-in-out both}
.winter-dissolve.active .dissolve-end{animation:v16NewScene 2.35s ease-in-out both}
.winter-dissolve .dissolve-shade{position:absolute;inset:0;background:linear-gradient(180deg,#08152a12,#08152a22 70%,#08152a38);z-index:2}
.winter-dissolve .transition-snow{position:absolute;inset:0;overflow:hidden;z-index:3;filter:drop-shadow(0 0 2px #fff8)}
.winter-dissolve .transition-flake{position:absolute;top:-10vh;left:var(--x);width:var(--size);height:var(--size);border-radius:50%;background:#fff;opacity:0;box-shadow:0 0 7px 1px #e9f6ff9c;filter:blur(.6px)}
.winter-dissolve.active .transition-flake{animation:v16Snow var(--dur) linear var(--delay) infinite}
@keyframes v16OldScene{0%{opacity:1;filter:blur(0);transform:scale(1.025)}43%{opacity:1;filter:blur(3px);transform:scale(1.075)}76%,100%{opacity:0;filter:blur(17px);transform:scale(1.14)}}
@keyframes v16NewScene{0%,25%{opacity:0;filter:blur(18px);transform:scale(1.14)}65%{opacity:.92;filter:blur(5px);transform:scale(1.075)}100%{opacity:1;filter:blur(0);transform:scale(1.035)}}
@keyframes v16Snow{0%{opacity:0;transform:translate3d(0,-10vh,0)}12%{opacity:var(--opacity)}88%{opacity:var(--opacity)}100%{opacity:0;transform:translate3d(var(--drift),var(--fall),0)}}
@media(prefers-reduced-motion:reduce){.flight-transition.winter-dissolve{display:none!important}}
body.reduced .flight-transition.winter-dissolve{display:none!important}


/* V17 : magie discrète et progressive, en conservant le décor photographique V16 */
#calendar{position:relative}
#calendar .village-lights,#calendar .village-haze{position:absolute;inset:0;z-index:0;pointer-events:none}
#calendar .village-lights{background:radial-gradient(circle at 18% 42%,#ffd47a42 0 1px,transparent 17px),radial-gradient(circle at 78% 37%,#ffce7545 0 2px,transparent 24px),radial-gradient(circle at 56% 29%,#ffe1a54d 0 2px,transparent 18px),radial-gradient(circle at 41% 46%,#ffd07d3a 0 1px,transparent 19px);animation:villageBreathe 7.8s ease-in-out infinite alternate;mix-blend-mode:screen}
#calendar .village-haze{background:radial-gradient(ellipse at 52% 50%,#ffe0a00d,transparent 56%);animation:villageHaze 11s ease-in-out infinite alternate}
@keyframes villageBreathe{from{opacity:.24}to{opacity:.66}}
@keyframes villageHaze{from{opacity:.2;transform:translateX(-1%)}to{opacity:.6;transform:translateX(1%)}}
#calendar .day.gift .gift-box{transform-style:preserve-3d;transition:transform .7s cubic-bezier(.2,.8,.2,1),filter .5s}
#calendar .day.gift .gift-top{transform-origin:15% 85%;transition:transform .7s cubic-bezier(.22,.8,.25,1),opacity .5s}
#calendar .day.gift .gift-bow{transition:transform .8s ease,opacity .55s}
#calendar .day.gift .gift-ribbon-v,#calendar .day.gift .gift-ribbon-h{transition:opacity .4s ease,transform .8s ease}
#calendar .day.gift .gift-inner-light{position:absolute;z-index:8;inset:-10px;border-radius:50%;opacity:0;pointer-events:none;background:radial-gradient(ellipse,#fff5c6c9 0%,#ffe5a46b 25%,transparent 68%);filter:blur(6px)}
#calendar .day.gift.unwrapping .gift-top{transform:translate3d(0,-34px,32px) rotate(-16deg)}
#calendar .day.gift.unwrapping .gift-bow{transform:translate(-50%,-24px) rotate(22deg) scale(1.15);opacity:0}
#calendar .day.gift.unwrapping .gift-ribbon-v{transform:scaleX(.5) rotate(14deg);opacity:0}
#calendar .day.gift.unwrapping .gift-ribbon-h{transform:scaleY(.2);opacity:0}
#calendar .day.gift.unwrapping .gift-inner-light{animation:giftRevealLight 1.1s ease-out forwards}
#calendar .day.gift.unwrapping .gift-box{animation:unwrapBox 1s ease-out both}
@keyframes giftRevealLight{25%{opacity:1;transform:scale(1.25)}100%{opacity:0;transform:scale(1.85)}}
@keyframes unwrapBox{35%{transform:translateY(-12px) rotate(-3deg) scale(1.06)}100%{transform:translateY(0) scale(1)}}
#calendar .day.gift.opened .gift-box{filter:brightness(.88) saturate(.88)}
#calendar .day.gift.opened .gift-status{color:#ffe3a2;font-weight:700}
#calendar .day.gift .opened-star{position:absolute;z-index:15;top:0;right:9%;color:#ffe6a2;font-size:22px;text-shadow:0 0 14px #ffd26e;opacity:0;transform:scale(.5);transition:opacity .4s,transform .4s}
#calendar .day.gift.opened .opened-star{opacity:1;transform:scale(1)}
#calendar .day.gift:disabled{cursor:wait}
/* Lettre façon papier précieux, avec cachet et ouverture douce. */
#modal{z-index:110}
#modal .letter{border:1px solid #e6c991;border-radius:12px;padding:45px clamp(22px,5vw,45px) 28px;background:linear-gradient(145deg,#fff9e9 0%,#f7e9cc 52%,#e9d5b1 100%);box-shadow:0 24px 80px #000b,inset 0 0 0 7px #fff8e380,inset 0 0 0 9px #ae814333;max-height:90dvh}
#modal .letter:before{content:"";position:absolute;inset:15px;border:1px solid #b98e4b55;pointer-events:none}
#modal .letter h2{font-family:'Great Vibes',cursive;font-size:clamp(40px,7vw,60px);line-height:1.1;margin:10px auto;color:#8c2731}
#modal .letter #modal-romance{font-family:'Cormorant Garamond',serif;font-size:clamp(21px,3vw,27px);font-weight:600;line-height:1.4;white-space:pre-wrap}
#modal .letter #modal-message{font-family:'Cormorant Garamond',serif;font-size:clamp(20px,3vw,25px);font-weight:600}
.letter-wax{display:grid;place-items:center;width:57px;height:57px;margin:0 auto 8px;border-radius:50%;background:radial-gradient(circle at 30% 25%,#d64a4e,#851e2e 75%);color:#ffdd9d;border:3px double #e9b974;box-shadow:0 4px 8px #55202c77;font-family:'Cormorant Garamond',serif;font-weight:700}
.letter-sparkle{text-align:center;color:#b88a45;letter-spacing:16px;font-size:16px}
.letter-signature{font-family:'Great Vibes',cursive;font-size:30px;color:#8c2731;margin:14px auto 0}
#modal .letter.letter-reveal{animation:letterUnfold .85s cubic-bezier(.17,.75,.23,1) both;transform-origin:center 20%}
@keyframes letterUnfold{from{opacity:0;transform:perspective(900px) rotateX(-16deg) translateY(35px) scale(.94);filter:blur(7px)}to{opacity:1;transform:none;filter:none}}
/* Boule à neige indépendante des dates et des contenus privés. */
.snow-globe-wrap{position:relative;z-index:5;display:flex;justify-content:center;margin:20px auto 0}
.snow-globe{border:0;background:none;color:#ffe9ba;display:flex;flex-direction:column;align-items:center;gap:0;padding:8px 16px;filter:drop-shadow(0 10px 12px #0008)}
.globe-glass{position:relative;display:grid;place-items:center;width:115px;height:115px;border-radius:50%;overflow:hidden;border:2px solid #fff8dbbb;background:radial-gradient(circle at 27% 18%,#fff9e4a6,transparent 28%),linear-gradient(150deg,#b9d8e899,#133e5cae);box-shadow:inset 6px 7px 12px #fff8,inset -8px -10px 20px #09223c88,0 0 18px #ffe6b744}
.globe-glass:after{content:"";position:absolute;bottom:6px;left:5%;width:90%;height:27px;background:linear-gradient(#f8f5e7,#bfd2d9);border-radius:50%}
.globe-village{z-index:1;font-size:33px;color:#ffe3a1;text-shadow:0 0 12px #ffcd6a}
.globe-snow{position:absolute;z-index:2;top:8px;color:white;font-size:21px;letter-spacing:6px;text-shadow:0 0 5px #fff;animation:globeFall 5s linear infinite}
.globe-base{display:block;margin-top:-2px;min-width:170px;padding:10px 12px 7px;border-radius:8px 8px 22px 22px;border:1px solid #f4d08c;background:linear-gradient(120deg,#5c1c2b,#a63743 50%,#5a1929);font-family:'Cormorant Garamond',serif;font-size:17px;font-weight:700}
.snow-globe.shaking .globe-glass{animation:globeShake .8s ease-in-out}
@keyframes globeFall{to{transform:translateY(62px) rotate(40deg)}}
@keyframes globeShake{20%,60%{transform:rotate(-9deg)}40%,80%{transform:rotate(9deg)}}
/* Final du 24 : carte distincte, uniquement après la réponse serveur. */
.finale{position:fixed;inset:0;z-index:220;display:grid;place-items:center;padding:18px;background:radial-gradient(circle at 50% 38%,#793d3cbb,#051020ee 70%);backdrop-filter:blur(14px);overflow:hidden}
.finale.hidden{display:none}
.finale-card{position:relative;z-index:2;width:min(100%,580px);max-height:90dvh;overflow:auto;padding:clamp(30px,6vw,55px) 24px;text-align:center;border:1px solid #ffe6a4aa;border-radius:26px;background:linear-gradient(155deg,#142b40f2,#492833ed);box-shadow:0 0 90px #ffdf7b44,0 30px 70px #000a;animation:finaleAppear 1s ease-out both}
.finale-eyebrow{font-family:'Cormorant Garamond',serif;letter-spacing:.2em;color:#ffdf9d;font-size:19px}
.finale-card h2{font-family:'Great Vibes',cursive;color:#ffe4a0;font-size:clamp(46px,8vw,70px);font-weight:400;line-height:1.1;margin:10px 0 18px}
.finale-card>p:not(.finale-eyebrow):not(.finale-signature){font-family:'Cormorant Garamond',serif;font-size:clamp(22px,3vw,28px);line-height:1.4}
.finale-signature{font-family:'Great Vibes',cursive;font-size:38px;color:#ffe0a4}
.finale-close{position:absolute;right:14px;top:12px;color:white;background:none;border:0;font-size:24px}
.finale-sparks{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.finale-sparks span{position:absolute;color:#ffe4a4;font-size:clamp(14px,2vw,25px);text-shadow:0 0 16px #ffcc68;animation:finaleSnow linear forwards}
@keyframes finaleAppear{from{opacity:0;transform:scale(.86);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes finaleSnow{to{transform:translate3d(35px,110vh,0) rotate(180deg);opacity:0}}
@media(max-width:650px){#modal .letter{padding:37px 20px 25px}.globe-glass{width:94px;height:94px}.globe-base{font-size:15px;min-width:150px}#calendar .day.gift .opened-star{right:0;font-size:17px}}
@media(prefers-reduced-motion:reduce){.village-lights,.village-haze,.globe-snow,.snow-globe.shaking .globe-glass,.finale-card,.finale-sparks span,#modal .letter.letter-reveal{animation:none!important}}
body.reduced .village-lights,body.reduced .village-haze,body.reduced .globe-snow,body.reduced .finale-sparks span{animation:none!important}

/* V18 : cadrage mobile du village, conçu pour les 24 cadeaux interactifs. */
@media(max-width:650px){
 #calendar{background-image:linear-gradient(180deg,rgba(5,14,27,.48) 0%,rgba(5,14,27,.12) 25%,rgba(5,14,27,.16) 42%,rgba(5,14,27,.50) 68%,rgba(5,14,27,.88) 100%),url("village-mobile.webp")!important;background-size:100% 100%,cover!important;background-position:center top!important;background-repeat:no-repeat!important;}
 #calendar h2{font-size:clamp(36px,9vw,48px);line-height:1.05;text-shadow:0 2px 12px #000,0 0 28px #071322}
 #calendar .subtitle{padding:5px 8px;border-radius:12px;background:rgba(7,18,31,.36);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
 #calendar .christmas-room{min-height:unset!important}
 #calendar .days{margin-top:clamp(180px,29vh,300px)!important;background:linear-gradient(180deg,rgba(10,20,29,.16),rgba(8,13,23,.64))!important;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);}
 #calendar .secret-garland{position:relative;z-index:4}
}


/* V19 — iPhone portrait ET paysage : cadrage adapté à chaque orientation. */
html{overflow-x:clip;-webkit-text-size-adjust:100%}
header{padding-top:max(10px,env(safe-area-inset-top));padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));gap:6px}
#calendar{padding-bottom:max(30px,env(safe-area-inset-bottom));background-attachment:scroll!important}
#calendar .days{width:100%;box-sizing:border-box}
#calendar .day.gift{min-width:0;touch-action:manipulation}
#calendar .day.gift .gift-box{max-width:100%}
#calendar .secret-garland{display:flex;justify-content:center;flex-wrap:wrap}
#calendar .snow-globe-wrap{position:relative;z-index:3}
#welcome.cinematic-v14{background-attachment:scroll!important}
@media (orientation:portrait) and (max-width:650px){
 #calendar{background-image:linear-gradient(180deg,#071321a6 0%,#07132136 24%,#0713213b 46%,#071321dd 100%),url('village-mobile.webp')!important;background-position:center top!important;background-size:100% 100%,100% auto!important}
 #calendar .days{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:12px 3px!important;margin-top:clamp(90px,17svh,205px)!important;padding:15px 4px!important}
 #calendar .day.gift{min-height:clamp(74px,20vw,104px)!important}
 #calendar .day.gift .gift-box{width:clamp(48px,17vw,78px)!important;height:clamp(45px,15vw,72px)!important}
 #calendar h2{font-size:clamp(34px,8.5vw,49px)!important}
 #calendar .subtitle{font-size:clamp(17px,4.8vw,24px)!important}
 #welcome.cinematic-v14{background-position:39% center!important}
}
@media (orientation:landscape) and (max-height:600px){
 header{padding-top:max(5px,env(safe-area-inset-top));padding-bottom:5px;justify-content:center}
 header .brand{font-size:clamp(20px,3vw,26px);margin-right:auto}
 header button{padding:6px 10px;font-size:11px}
 .scene{min-height:calc(100svh - 48px);padding-top:8px}
 #welcome.cinematic-v14{min-height:calc(100svh - 48px);background-position:center 47%!important;padding:8px max(14px,env(safe-area-inset-left)) 14px!important}
 #welcome.cinematic-v14 .welcome-content{width:min(100%,960px);max-width:none;min-height:unset!important;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) minmax(0,1fr);align-items:center;gap:8px;margin:0 auto}
 #welcome.cinematic-v14 .intro-glass,#welcome.cinematic-v14 .outro-glass{width:100%;padding:10px 9px;border-radius:14px}
 #welcome.cinematic-v14 h1{font-size:clamp(28px,4.4vw,47px)!important;line-height:1.05;margin:5px 0}
 #welcome.cinematic-v14 .eyebrow{font-size:9px;letter-spacing:.04em}
 #welcome.cinematic-v14 .intro-glass>p:not(.eyebrow){font-size:clamp(10px,1.4vw,13px);line-height:1.35}
 #welcome.cinematic-v14 .sleigh{width:100%;margin:0 auto}
 #welcome.cinematic-v14 .sleigh-3d{height:clamp(115px,36svh,220px)}
 #welcome.cinematic-v14 .sleigh-label{font-size:11px;padding:8px 10px}
 #welcome.cinematic-v14 .outro-glass p{font-size:11px!important;line-height:1.35;margin:5px auto}
 #welcome.cinematic-v14 .outro-glass .signature{font-size:19px!important}
 #welcome.cinematic-v14 .outro-glass .secret-note{font-size:11px;padding:5px 8px}
 #calendar{background-image:linear-gradient(180deg,#071321c7,#0713213b 40%,#071321df),url('village-noel.webp')!important;background-position:center top!important;background-size:100% 100%,cover!important;padding:7px max(12px,env(safe-area-inset-right)) 28px max(12px,env(safe-area-inset-left))!important}
 #calendar h2{font-size:clamp(27px,4.6vw,42px)!important;line-height:1.04;margin:0 auto 2px}
 #calendar .subtitle{font-size:clamp(15px,2.4vw,21px)!important;line-height:1.1;margin:0 auto 3px;padding:2px 7px}
 #calendar .subtitle-detail{font-size:10px;line-height:1.15;margin-top:2px}
 #calendar .secret-garland{margin:3px auto;gap:5px}
 #calendar .secret-note{font-size:11px!important;padding:3px 8px!important}
 #calendar #notice{min-height:0;margin:2px auto;font-size:11px}
 #calendar .christmas-room{padding:0 4px!important}
 #calendar .days{grid-template-columns:repeat(6,minmax(0,1fr))!important;gap:8px 5px!important;margin-top:clamp(15px,7svh,42px)!important;padding:12px 7px!important;border-radius:15px}
 #calendar .day.gift{min-height:clamp(60px,13svh,95px)!important}
 #calendar .day.gift .gift-box{width:clamp(52px,8.4vw,84px)!important;height:clamp(48px,7.5vw,75px)!important}
 #calendar .gift-number{font-size:clamp(13px,2vw,18px)!important}
 #calendar .snow-globe-wrap{margin-top:12px}
 #calendar .globe-glass{width:70px;height:70px}
 #modal .letter{max-height:calc(100svh - 20px);padding:20px 25px}
 .finale-card{max-height:calc(100svh - 20px);overflow:auto;padding:15px}
}
@media (orientation:landscape) and (max-height:390px){
 #welcome.cinematic-v14 .intro-glass>p:not(.eyebrow),#welcome.cinematic-v14 .outro-glass .hint{font-size:10px!important}
 #welcome.cinematic-v14 .sleigh-3d{height:105px}
 #calendar .days{margin-top:12px!important}
}
@media (prefers-reduced-motion:reduce){#calendar .village-lights,#calendar .village-haze{animation:none!important}}

/* V20 — étoile filante secrète et album de deux photos */
#calendar{position:relative;isolation:isolate}
/* V21 : étoile filante lumineuse, grande cible tactile, pause au milieu de l’écran. */
.shooting-star{position:fixed;z-index:100;top:35dvh;left:50vw;width:clamp(112px,25vw,158px);height:clamp(112px,25vw,158px);border:0;border-radius:50%;background:transparent;color:#fff9dd;cursor:pointer;touch-action:manipulation;opacity:0;pointer-events:none;transform:translate3d(70vw,-20vh,0) scale(.85);-webkit-tap-highlight-color:transparent;isolation:isolate}
.shooting-star .star-core{position:absolute;z-index:2;left:50%;top:45%;transform:translate(-50%,-50%);font-size:clamp(60px,14vw,85px);line-height:1;color:#fff9e7;text-shadow:0 0 5px #fff,0 0 15px #fff3b1,0 0 30px #ffc04e,0 0 58px #ffb346;animation:star-twinkle 1.5s ease-in-out infinite alternate}
.shooting-star .star-tail{position:absolute;z-index:1;left:55%;top:40%;width:clamp(140px,32vw,280px);height:18px;transform:translateY(-50%) rotate(-18deg);transform-origin:left center;border-radius:100%;background:linear-gradient(90deg,#fffce9 0%,#ffe4a7 14%,#ffd68b99 42%,#ffd68b00 100%);filter:blur(3px);box-shadow:0 0 16px #ffe6a5a8;pointer-events:none}
.shooting-star .star-hint{position:absolute;z-index:3;left:50%;bottom:2px;transform:translateX(-50%);white-space:nowrap;background:rgba(19,27,50,.82);border:1px solid #ffe3a9a8;border-radius:22px;padding:7px 11px;color:#fff6da;font:700 13px Nunito,system-ui,sans-serif;letter-spacing:.01em;box-shadow:0 0 18px #ffd27b77;opacity:0;transition:opacity .35s}
.shooting-star.flying{pointer-events:auto;animation:marine-star-flight 12.5s linear both}
.shooting-star.flying .star-hint{animation:star-label 12.5s linear both}
@keyframes marine-star-flight{0%{opacity:0;transform:translate3d(70vw,-22vh,0) scale(.75)}9%{opacity:1}27%{opacity:1;transform:translate3d(0,0,0) scale(1.08)}73%{opacity:1;transform:translate3d(0,0,0) scale(1.08)}91%{opacity:1}100%{opacity:0;transform:translate3d(-75vw,20vh,0) scale(.8)}}
@keyframes star-label{0%,20%,80%,100%{opacity:0}29%,73%{opacity:1}}
@keyframes star-twinkle{from{filter:brightness(1);transform:translate(-50%,-50%) scale(.94)}to{filter:brightness(1.2);transform:translate(-50%,-50%) scale(1.08)}}
@media(max-width:650px){.shooting-star{top:32dvh;left:50vw;width:132px;height:132px}.shooting-star .star-core{font-size:72px}.shooting-star .star-tail{width:170px}.shooting-star .star-hint{font-size:12px}}
@media(orientation:landscape) and (max-height:540px){.shooting-star{top:37dvh;width:118px;height:118px}.shooting-star .star-core{font-size:65px}.shooting-star .star-hint{bottom:-5px}}
.easter-overlay{position:fixed;z-index:1500;inset:0;display:flex;align-items:center;justify-content:center;padding:max(18px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:rgba(8,15,34,.8);backdrop-filter:blur(13px);-webkit-backdrop-filter:blur(13px);overflow-y:auto}
.easter-overlay.hidden{display:none!important}
.easter-card{position:relative;box-sizing:border-box;width:min(100%,430px);max-height:calc(100dvh - 38px);overflow-y:auto;border:1px solid rgba(255,219,146,.75);border-radius:22px;background:linear-gradient(155deg,#fff9ed,#f5e6d0);padding:20px 20px 23px;box-shadow:0 18px 65px #0008,0 0 35px #fbd69433;text-align:center;color:#533022;animation:easter-arrive .55s ease both}
@keyframes easter-arrive{from{opacity:0;transform:translateY(15px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
.easter-close{position:absolute;right:12px;top:9px;border:0;background:transparent;color:#583923;font-size:30px;cursor:pointer;padding:3px 10px;z-index:2}
.easter-eyebrow{font-size:12px;letter-spacing:.07em;color:#966329;margin:0 26px 6px}
.easter-card h2{font-family:'Great Vibes',cursive;font-size:clamp(30px,5vw,39px);font-weight:400;margin:4px 0 10px;color:#8b472e}
.easter-card img{display:block;width:auto;max-width:100%;height:auto;max-height:min(45dvh,450px);object-fit:contain;margin:0 auto 13px;border-radius:13px;border:3px solid #fff;box-shadow:0 5px 19px #4a2c2630}
#easter-message{font-family:'Cormorant Garamond',serif;font-weight:600;font-size:clamp(20px,3vw,25px);line-height:1.25;margin:8px 0 14px;color:#553326}
.easter-back{border:0;border-radius:22px;background:#7e2935;color:#fff8e9;padding:11px 20px;font-family:'Nunito',sans-serif;font-weight:700;cursor:pointer}
@media (orientation:landscape) and (max-height:540px){.easter-card{width:min(94vw,720px);padding:12px 16px}.easter-card img{float:left;max-width:42%;max-height:62dvh;margin:0 16px 6px 0}.easter-card h2{font-size:29px}.easter-card #easter-message{font-size:20px}.easter-card::after{content:"";display:block;clear:both}}
@media (prefers-reduced-motion:reduce){.shooting-star.flying{animation:none;opacity:1;left:50vw;top:35dvh;transform:translateX(-50%)}.shooting-star.flying .star-hint{animation:none;opacity:1}.easter-card{animation:none}}
body.reduced .shooting-star.flying{animation:none;opacity:1;left:50vw;top:35dvh;transform:translateX(-50%)}.shooting-star.flying .star-hint{animation:none;opacity:1}

/* V22 : progression visuelle, contrôles accessibles et décor mobile */
#calendar{--christmas-progress:0;--tilt-x:0px;--tilt-y:0px}
#calendar::before{content:'';position:absolute;inset:-18px;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 55% 35%,rgba(255,195,87,.17),transparent 58%);opacity:calc(.16 + var(--christmas-progress)*.8);transform:translate(var(--tilt-x),var(--tilt-y));transition:opacity 1s ease}
#calendar>.village-progress{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.progress-glow{position:absolute;top:11%;left:0;right:0;height:45%;background:radial-gradient(ellipse at center,rgba(255,203,103,.38),transparent 68%);opacity:var(--christmas-progress);filter:blur(18px);transform:translate(var(--tilt-x),var(--tilt-y));transition:opacity 1.5s ease}
#calendar>.village,#calendar>h2,#calendar>.subtitle,#calendar>.countdown,#calendar>.memory-actions{position:relative;z-index:2}
.countdown{display:table;margin:7px auto 12px;padding:6px 16px;border-radius:25px;border:1px solid #f4d99b88;background:#12243bbd;color:#ffedbf;font-weight:700;font-size:clamp(12px,2.8vw,15px)}
.memory-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:8px auto}
.memory-actions button{min-height:42px;border-radius:22px;border:1px solid #e8c98999;background:#142b42e0;color:#ffeac3;padding:8px 12px;font-size:12px;font-weight:700;touch-action:manipulation}
.memory-actions button:focus-visible,.day.gift:focus-visible{outline:3px solid #fff3c6;outline-offset:3px}
.memory-card{width:min(100%,680px)}.memory-intro{font-size:14px}.memory-list{text-align:left;display:grid;gap:12px;margin:16px 0;max-height:53dvh;overflow:auto;padding:4px}
.memory-list h3{font-family:'Cormorant Garamond',serif;color:#80432c;margin:6px 0;font-size:24px}
.memory-entry{background:#fffaf0;border:1px solid #cda56d;border-radius:14px;padding:12px;color:#573728}
.memory-entry h4{font-size:15px;margin:0 0 6px}.memory-entry p{font-size:15px;line-height:1.5;margin:5px 0}.memory-photo img{width:100%;max-height:270px;object-fit:contain;border-radius:9px}
.letter[data-letter-style=postcard]{border-style:solid;border-width:4px;background:repeating-linear-gradient(45deg,#f9f1df 0 14px,#fff9ee 14px 28px)}
.letter[data-letter-style=envelope]{border-radius:6px 6px 24px 24px;background:linear-gradient(150deg,#f9ebd6,#fffaf0 45%,#f2dfc1)}
.letter[data-letter-style=parchment]{background:radial-gradient(ellipse at 40% 30%,#fffaf0,#e8d3ae)}
#calendar .day.gift{touch-action:manipulation}#calendar .day.gift .gift-status{min-height:14px}
@media(orientation:portrait) and (max-width:650px){#calendar .days{gap:15px 4px!important}#calendar .day.gift{min-height:92px!important}#calendar .gift-status{font-size:10px!important}.memory-actions button{font-size:11px}}
@media(orientation:landscape) and (max-height:540px){.memory-actions{gap:5px}.memory-actions button{min-height:36px;padding:5px 10px}.memory-list{max-height:46dvh}#calendar .days{gap:11px 5px!important}}
@media(prefers-reduced-motion:reduce){#calendar::before,.progress-glow{transform:none!important;transition:none!important}}

/* V23 — Correction explicite de l'orientation iPhone (Safari).
   Portrait = image verticale + 4 colonnes ; paysage = panorama + 6 colonnes.
   Utilise le ratio réel du viewport pour éviter les bascules liées aux barres Safari. */
@media screen and (max-aspect-ratio: 1/1) and (max-width: 750px) {
 #calendar{background-image:linear-gradient(180deg,rgba(7,19,33,.48),rgba(7,19,33,.13) 35%,rgba(7,19,33,.78)),url('village-mobile.webp')!important;background-position:center top!important;background-size:100% 100%,cover!important;background-repeat:no-repeat!important}
 #calendar .days{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:12px 4px!important;margin-top:clamp(90px,17svh,205px)!important}
 #welcome.cinematic-v14 .welcome-content{display:block!important}
}
@media screen and (min-aspect-ratio: 1/1) and (max-height: 650px) {
 #calendar{background-image:linear-gradient(180deg,rgba(7,19,33,.55),rgba(7,19,33,.18) 40%,rgba(7,19,33,.83)),url('village-noel.webp')!important;background-position:center top!important;background-size:100% 100%,cover!important;background-repeat:no-repeat!important}
 #calendar .days{grid-template-columns:repeat(6,minmax(0,1fr))!important;gap:8px 5px!important;margin-top:clamp(15px,7svh,42px)!important}
}


/* V24 — boule à neige miniature avec verre, profondeur et village sculpté */
#calendar .snow-globe{cursor:pointer;touch-action:manipulation;min-width:190px;min-height:170px;position:relative}
#calendar .globe-glass{width:clamp(125px,19vw,164px);height:clamp(125px,19vw,164px);isolation:isolate;overflow:hidden;border:2px solid rgba(250,252,255,.82);background:radial-gradient(ellipse at 27% 19%,rgba(255,255,255,.6),transparent 27%),linear-gradient(180deg,#1b496b 0%,#6194ad 55%,#d8e4df 100%);box-shadow:inset 9px 4px 16px #fff9,inset -16px -11px 23px #071f3e88,0 10px 24px #0009,0 0 24px #fff4}
#calendar .globe-glass::before{content:'';position:absolute;z-index:12;inset:5% 8% 17% 8%;border-radius:50%;border-left:5px solid rgba(255,255,255,.28);transform:rotate(18deg);pointer-events:none}
#calendar .globe-glass::after{content:'';position:absolute;z-index:13;left:16%;top:7%;width:30%;height:50%;border-radius:50%;background:linear-gradient(110deg,rgba(255,255,255,.55),transparent 80%);filter:blur(5px);transform:rotate(29deg);pointer-events:none}
#calendar .globe-sky{position:absolute;inset:0;background:radial-gradient(circle at 68% 25%,#fff3bb 0 5%,#ffeab150 8%,transparent 35%)}
#calendar .globe-mountain{position:absolute;bottom:26%;left:-20%;width:140%;height:48%;background:linear-gradient(145deg,#d5e8ed,#8ea9b7);clip-path:polygon(0 100%,25% 36%,37% 58%,61% 7%,85% 67%,100% 45%,100% 100%);opacity:.7}
#calendar .globe-cabin{position:absolute;z-index:4;left:37%;bottom:20%;width:32%;height:26%;border-radius:2px;background:linear-gradient(90deg,#5c2e29,#a45b37 55%,#4d2524);box-shadow:0 0 17px #ffb34844}
#calendar .globe-cabin::before{content:'';position:absolute;left:-16%;top:-35%;width:132%;height:48%;background:#e7eced;clip-path:polygon(50% 0,100% 100%,0 100%);filter:drop-shadow(0 2px 2px #213a49)}
#calendar .globe-cabin i{position:absolute;top:31%;left:38%;width:27%;height:34%;background:#ffd678;box-shadow:0 0 13px 6px #ffcb6e88}
#calendar .globe-pine{position:absolute;z-index:5;bottom:19%;width:27%;height:48%;background:linear-gradient(90deg,#103d37,#3d6b57,#133d37);clip-path:polygon(50% 0,78% 35%,66% 35%,92% 70%,75% 70%,100% 100%,0 100%,25% 70%,8% 70%,34% 35%,22% 35%);filter:drop-shadow(0 2px 1px #fff)}
#calendar .pine-left{left:12%}#calendar .pine-right{right:8%;transform:scale(.8);transform-origin:bottom}
#calendar .globe-ground{position:absolute;z-index:6;bottom:0;left:-5%;width:110%;height:27%;background:linear-gradient(#f9fcff,#b8cdd6);border-radius:50% 50% 0 0}
#calendar .globe-snow{position:absolute;z-index:10;inset:-35% 0 0;top:-35%;width:100%;height:130%;background-image:radial-gradient(circle,#fff 1.7px,transparent 2.5px),radial-gradient(circle,#fff9 1px,transparent 2px),radial-gradient(circle,#fff 1.2px,transparent 2px);background-size:31px 38px,23px 29px,44px 41px;background-position:3px 2px,12px 9px,23px 4px;animation:v24Snow 7s linear infinite;pointer-events:none}
#calendar .globe-reflection{position:absolute;z-index:14;inset:0;border-radius:50%;box-shadow:inset -11px -14px 15px #08294255,inset 7px 8px 12px #fff5;pointer-events:none}
#calendar .globe-base{margin-top:-5px;z-index:2;min-width:185px;padding:12px 12px 9px;border-radius:8px 8px 23px 23px;background:linear-gradient(90deg,#391e18,#80513a 23%,#b17a50 50%,#68402f 80%,#352019);border:2px solid #d4ac73;box-shadow:inset 0 3px 3px #f9e0aa66,0 9px 14px #0007;color:#fff0cf}
#calendar .snow-globe.shaking .globe-snow{animation:v24Snow 1.2s linear infinite}
@keyframes v24Snow{to{transform:translate3d(9px,32%,0) rotate(5deg)}}
@media(prefers-reduced-motion:reduce){#calendar .globe-snow{animation:none!important}}

/* V25 — album de souvenirs, interface mobile épurée et final personnalisé */
.extras-toggle{display:block;margin:12px auto;padding:10px 20px;border:1px solid rgba(255,222,165,.7);border-radius:30px;background:rgba(28,35,54,.55);color:#ffe9b9;backdrop-filter:blur(8px);font:inherit;cursor:pointer;min-height:44px}
.extras-panel[hidden],.album[hidden]{display:none!important}
.extras-panel{margin:0 auto 14px;max-width:720px;animation:albumEnter .35s ease both}
.album{max-width:540px;margin:16px auto 24px;padding:14px;background:linear-gradient(135deg,#fff7e9,#f3dfc3);border:7px double #c4a16c;border-radius:12px;color:#563723;box-shadow:0 12px 40px #0005}
.album-page{min-height:180px;text-align:center}
.album-page img{display:block;max-width:100%;max-height:46vh;object-fit:contain;margin:0 auto 14px;border:6px solid #fffaf1;box-shadow:0 5px 18px #543b2e45;border-radius:4px}
.album-page h3{font-family:Georgia,serif;color:#734829;margin:10px 0}
.album-page p{font-family:Georgia,serif;line-height:1.55;white-space:pre-wrap;color:#523a2d;margin:8px 8px 18px}
.album-controls{display:flex;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #cdb38e;padding-top:12px}
.album-controls button{min-height:44px;padding:8px 12px;border:1px solid #a78757;border-radius:20px;background:#fff9eb;color:#583c26;cursor:pointer}
.album-controls button:disabled{opacity:.35;cursor:default}
.album-controls span{font-size:.9rem;white-space:nowrap;color:#684c32}
.album-turn{animation:albumEnter .38s ease both}
@keyframes albumEnter{from{opacity:.3;transform:perspective(600px) rotateY(-9deg) translateX(8px)}to{opacity:1;transform:none}}
.finale-memories{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:16px auto;max-width:420px}
.finale-memories img{height:92px;max-width:23%;aspect-ratio:3/4;object-fit:cover;border:3px solid #fff5dd;border-radius:5px;transform:rotate(-2deg);box-shadow:0 4px 14px #0005}
.finale-memories img:nth-child(even){transform:rotate(3deg)}
.finale-postscript{font-family:Georgia,serif;font-style:italic;line-height:1.5}
@media(max-width:650px){.memory-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.memory-actions button{min-height:44px}.album{padding:8px;border-width:4px}.album-page img{max-height:40dvh}.album-controls button{font-size:.8rem}.finale-memories img{height:68px}}
@media(max-height:470px) and (orientation:landscape){.album-page img{max-height:33dvh}.finale-memories img{height:50px}}
@media(prefers-reduced-motion:reduce){.album-turn,.extras-panel{animation:none}}

/* V26 — titre princesse */
.princess-emoji{display:inline-block;font-family:system-ui,sans-serif;font-size:.62em;vertical-align:.12em;white-space:nowrap;text-shadow:0 2px 12px rgba(255,220,160,.45)}

.gift-extra-text{white-space:pre-wrap;line-height:1.65;margin:18px 0}.gift-extra-image{display:block;max-width:100%;max-height:420px;object-fit:contain;margin:18px auto;border-radius:14px;box-shadow:0 6px 24px #25152644;background:#fff;padding:8px}

/* V28 — Quiz romantique du 22 décembre */
#quiz-slot[hidden]{display:none!important}#quiz-slot{margin:26px auto 22px;padding:clamp(14px,4vw,26px);border:1px solid #d4a966;border-radius:20px;background:linear-gradient(145deg,#4c1425,#240b1a);color:#fff0d4;box-shadow:0 12px 28px #260d1a33;text-align:center;max-width:560px}#quiz-slot .quiz-heading{font-family:Georgia,serif;font-size:clamp(23px,5vw,30px);color:#f6d89c;margin:0 0 14px}#quiz-slot .quiz-note{font-size:16px;line-height:1.6;color:#fff0dc}#quiz-slot .quiz-count{font:600 12px system-ui;color:#f0c991}#quiz-slot .quiz-track{height:7px;background:#ffffff29;border-radius:10px;overflow:hidden;margin:16px 0}#quiz-slot .quiz-fill{display:block;height:100%;background:linear-gradient(90deg,#bb8d4c,#ffe3a5);transition:width .3s}#quiz-slot .quiz-question{font:normal clamp(20px,4.8vw,26px)/1.3 Georgia,serif;margin:18px 0;color:#fff2dc}#quiz-slot .quiz-options{display:grid;gap:10px}#quiz-slot .quiz-choice{font:500 15px/1.45 system-ui;text-align:left;min-height:52px;padding:12px 14px;color:#fff0dc;background:#ffffff0e;border:1px solid #ae845c;border-radius:12px;cursor:pointer;touch-action:manipulation}#quiz-slot .quiz-choice.correct{background:#215940;border-color:#a2e1bb}#quiz-slot .quiz-choice.incorrect{background:#833142;border-color:#f0b1b8}#quiz-slot .quiz-choice:disabled{cursor:default}#quiz-slot .quiz-feedback{color:#f5d5a1;line-height:1.5}#quiz-slot .quiz-action{font:700 15px system-ui;width:100%;min-height:48px;margin-top:14px;padding:12px 18px;border-radius:30px;border:1px solid #f8d79c;background:linear-gradient(#f2d69f,#b88948);color:#32151d;cursor:pointer}#quiz-slot .quiz-result{font:normal 52px Georgia,serif;color:#f5d38d}#quiz-slot button:focus-visible{outline:3px solid #fff;outline-offset:3px}

/* V30 — encadrés d'accueil plus transparents et commandes du calendrier harmonisées */
#welcome.cinematic-v14 .intro-glass{background:linear-gradient(145deg,rgba(6,19,35,.22),rgba(7,22,40,.10));border-color:rgba(255,227,170,.30);box-shadow:0 10px 32px rgba(0,0,0,.13),inset 0 1px rgba(255,255,255,.12);backdrop-filter:blur(5px) saturate(1.08);-webkit-backdrop-filter:blur(5px) saturate(1.08)}
#welcome.cinematic-v14 .outro-glass{background:linear-gradient(135deg,rgba(8,25,43,.20),rgba(8,25,43,.08));border-color:rgba(255,227,170,.27);box-shadow:0 10px 30px rgba(0,0,0,.12);backdrop-filter:blur(5px) saturate(1.08);-webkit-backdrop-filter:blur(5px) saturate(1.08)}
#welcome.cinematic-v14 .intro-glass h1,#welcome.cinematic-v14 .intro-glass p,#welcome.cinematic-v14 .outro-glass p{text-shadow:0 2px 10px rgba(0,0,0,.85)}
#calendar .memory-actions{position:relative;z-index:5;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:min(100%,470px);margin:14px auto 9px;align-items:stretch}
#calendar .memory-actions button,#calendar .extras-toggle{box-sizing:border-box;display:flex;align-items:center;justify-content:center;text-align:center;min-height:48px;margin:0;padding:11px 14px;border:1px solid rgba(249,216,157,.55);border-radius:16px;background:linear-gradient(145deg,rgba(51,38,44,.74),rgba(20,42,51,.72));color:#ffeac2;box-shadow:0 5px 15px rgba(0,0,0,.19),inset 0 1px rgba(255,255,255,.10);backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);font-family:Nunito,system-ui,sans-serif;font-size:clamp(12px,2.6vw,14px);font-weight:800;letter-spacing:.01em;line-height:1.25;transition:transform .2s ease,border-color .2s ease,background .2s ease}
#calendar .extras-toggle{position:relative;z-index:5;width:min(100%,470px);margin:0 auto 16px;min-height:46px}
#calendar .memory-actions button:is(:hover,:focus-visible),#calendar .extras-toggle:is(:hover,:focus-visible){transform:translateY(-2px);border-color:#ffe5b1;background:linear-gradient(145deg,rgba(82,49,53,.84),rgba(28,58,63,.83));outline-offset:3px}
#calendar .memory-actions button:active,#calendar .extras-toggle:active{transform:scale(.98)}
@media(max-width:420px){#calendar .memory-actions{gap:8px;width:min(100%,350px)}#calendar .memory-actions button{font-size:12px;padding:10px 8px;min-height:52px}#calendar .extras-toggle{width:min(100%,350px)}#welcome.cinematic-v14 .intro-glass,#welcome.cinematic-v14 .outro-glass{backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}}
@media(prefers-reduced-transparency:reduce){#welcome.cinematic-v14 .intro-glass,#welcome.cinematic-v14 .outro-glass{background:rgba(8,23,39,.85)}}

/* V31 — Les 24 cadeaux sont l'élément central de la deuxième page. */
#calendar .memory-actions{display:flex!important;justify-content:center;flex-wrap:wrap;gap:6px!important;width:min(100%,500px)!important;margin:5px auto 3px!important}
#calendar .memory-actions button,#calendar .extras-toggle{width:auto!important;min-height:34px!important;padding:6px 11px!important;border-radius:999px!important;background:rgba(14,28,40,.30)!important;border:1px solid rgba(249,221,169,.28)!important;box-shadow:none!important;color:rgba(255,238,208,.88)!important;font-size:11px!important;font-weight:600!important;letter-spacing:.01em;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
#calendar .extras-toggle{display:flex!important;margin:3px auto 5px!important}
#calendar .memory-actions button:is(:hover,:focus-visible),#calendar .extras-toggle:is(:hover,:focus-visible){background:rgba(25,42,53,.66)!important;border-color:rgba(255,231,186,.68)!important}
#calendar .days{margin-top:4px!important;align-content:space-evenly!important;justify-items:center!important;box-sizing:border-box!important}
#calendar .christmas-room{padding:0!important;margin:0 auto!important;width:100%!important}
@media (orientation:portrait) and (max-width:650px){
 #calendar{padding:5px 7px max(18px,env(safe-area-inset-bottom))!important}
 #calendar h2{font-size:clamp(25px,7vw,35px)!important;margin:0!important}
 #calendar .subtitle{font-size:clamp(12px,3.5vw,16px)!important;padding:2px 5px!important;margin:2px auto!important}
 #calendar .subtitle-detail{font-size:10px!important}
 #calendar .memory-actions{margin:3px auto 2px!important;gap:4px!important}
 #calendar .memory-actions button,#calendar .extras-toggle{font-size:10px!important;min-height:29px!important;padding:5px 9px!important}
 #calendar .extras-toggle{margin:2px auto 4px!important}
 #calendar #countdown,#calendar #notice{margin:2px auto!important;min-height:0!important}
 #calendar .days{grid-template-columns:repeat(4,minmax(0,1fr))!important;grid-template-rows:repeat(6,minmax(0,1fr))!important;gap:clamp(2px,.65svh,7px) 3px!important;height:75svh!important;min-height:540px!important;margin-top:3px!important;padding:8px 3px!important;border-radius:14px!important;background:linear-gradient(180deg,rgba(10,20,29,.09),rgba(8,13,23,.30))!important;backdrop-filter:blur(1px)!important;-webkit-backdrop-filter:blur(1px)!important}
 #calendar .day.gift{min-height:0!important;height:100%!important;width:100%!important;padding:0!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important}
 #calendar .day.gift .gift-box{width:min(20vw,88px)!important;height:min(17.5vw,80px)!important;flex-shrink:0!important}
 #calendar .gift-status{font-size:9px!important;min-height:11px!important}
 #calendar .snow-globe-wrap{margin-top:10px!important}
}
@media (orientation:landscape) and (max-height:540px){#calendar .days{margin-top:4px!important}#calendar .memory-actions button,#calendar .extras-toggle{min-height:30px!important}}
@media(prefers-reduced-motion:reduce){#calendar .memory-actions button,#calendar .extras-toggle{transition:none!important}}

/* V32 — orientation réelle de l'écran : ne jamais inverser les décors.
   Les règles ci-dessous sont en fin de feuille pour remplacer les anciens breakpoints. */
@media screen and (orientation:portrait) {
  #calendar {background-image:linear-gradient(180deg,rgba(7,19,33,.48),rgba(7,19,33,.13) 35%,rgba(7,19,33,.78)),url("village-mobile.webp")!important;background-size:100% 100%,cover!important;background-position:center top!important;background-repeat:no-repeat!important;}
  #calendar .days {grid-template-columns:repeat(4,minmax(0,1fr))!important;}
  .winter-dissolve .dissolve-end {background-image:url("village-mobile.webp")!important;background-position:center top!important;}
}
@media screen and (orientation:landscape) {
  #calendar {background-image:linear-gradient(180deg,rgba(7,19,33,.55),rgba(7,19,33,.18) 40%,rgba(7,19,33,.83)),url("village-noel.webp")!important;background-size:100% 100%,cover!important;background-position:center center!important;background-repeat:no-repeat!important;}
  #calendar .days {grid-template-columns:repeat(6,minmax(0,1fr))!important;grid-template-rows:auto!important;height:auto!important;min-height:0!important;}
  .winter-dissolve .dissolve-end {background-image:url("village-noel.webp")!important;background-position:center!important;}
}

/* V33: effects are decorative and never cover the gift grid or intercept touches */
#magic-touch{position:fixed;inset:0;z-index:9999;pointer-events:none;overflow:hidden;contain:layout paint}
.magic-particle{position:absolute;left:var(--x);top:var(--y);width:5px;height:5px;border-radius:50%;background:#ffe5a1;box-shadow:0 0 8px 3px #ffc46caa;animation:magic-particle .8s ease-out forwards;transform:translate(-50%,-50%)}
@keyframes magic-particle{to{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(.2)}}
.fairy-lights{position:fixed;top:0;left:0;right:0;height:12px;z-index:5;pointer-events:none;opacity:.75;background:repeating-linear-gradient(90deg,transparent 0 34px,#e6b76d 35px 38px,transparent 40px 76px);filter:drop-shadow(0 0 5px #f9d790);animation:fairy-breathe 4.2s ease-in-out infinite alternate}
@keyframes fairy-breathe{to{opacity:.38;filter:drop-shadow(0 0 2px #f9d790)}}
#days .day.unwrapping .gift-top{transform:translateY(-24px) rotate(-9deg)!important;transition:transform .7s ease-out!important}
#days .day.unwrapping .gift-ribbon-v,#days .day.unwrapping .gift-ribbon-h,#days .day.unwrapping .gift-bow{opacity:0;transition:opacity .55s ease!important}
#days .day.unwrapping .gift-inner-light{opacity:1!important;filter:drop-shadow(0 0 20px #ffdf86)!important}
.letter-typing{white-space:pre-wrap}.letter-typing::after{content:'✦';display:inline-block;color:#b88a44;animation:typing-blink .7s step-end infinite}
@keyframes typing-blink{50%{opacity:0}}
.magic-sleigh-trail{position:absolute;inset:0;pointer-events:none;overflow:hidden}.magic-sleigh-trail span{position:absolute;color:#fce2a1;opacity:0;animation:magic-trail 2.8s ease-in-out infinite;animation-delay:var(--delay);left:var(--left);top:var(--top);text-shadow:0 0 10px #ffe7b0}
@keyframes magic-trail{15%{opacity:.85}100%{opacity:0;transform:translate(-55px,24px) scale(.3)}}
@media(prefers-reduced-motion:reduce){.fairy-lights,.magic-particle,.magic-sleigh-trail span,.letter-typing::after{animation:none!important}.magic-particle,.magic-sleigh-trail{display:none!important}}
body.reduced .fairy-lights{animation:none}body.reduced .magic-particle,body.reduced .magic-sleigh-trail{display:none!important}

/* V34 — énigmes intégrées aux lettres, sans changer la grille des 24 cadeaux */
.treasure-v34{margin:18px 0;padding:16px 14px;border:1px solid rgba(182,135,63,.45);border-radius:18px;background:linear-gradient(135deg,rgba(255,249,228,.80),rgba(247,230,193,.48));color:#542b28;text-align:center;box-shadow:0 8px 30px rgba(88,49,30,.08)}
.treasure-v34[hidden],.treasure-v34 [hidden]{display:none!important}.treasure-kicker{letter-spacing:.13em;font-size:.78rem;color:#93652f}.treasure-v34 h3{font-family:'Cormorant Garamond',serif;font-size:1.55rem;margin:7px 0}.treasure-v34 p{line-height:1.6}.treasure-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:12px 0}.treasure-actions button{border:1px solid #b68b55;background:rgba(255,255,255,.55);border-radius:999px;padding:10px 12px;color:#643c2b;font:inherit;font-size:.86rem}.treasure-v34 #treasure-love{font-style:italic;color:#8c3340}.treasure-v34 #treasure-hint-text{font-size:.9rem;color:#6f4d3d}@media(prefers-reduced-motion:reduce){.treasure-v34 *{animation:none!important;transition:none!important}}

/* V35 — Final cinématique du 24 décembre. N'altère pas la grille de cadeaux. */
.finale-v35{background:radial-gradient(ellipse at 50% 22%,#702a44c9,#081021f5 73%);isolation:isolate}
.finale-v35-sky{position:absolute;inset:0;overflow:hidden;pointer-events:none;background:radial-gradient(circle at 50% 10%,#f9d8a51c,transparent 50%)}
.finale-v35-moon{position:absolute;top:7%;right:12%;width:clamp(70px,13vw,160px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 38% 38%,#fff9e5,#f9d69c 70%,#c78d55);box-shadow:0 0 80px #ffe7a977}
.finale-v35-sleigh{position:absolute;top:12%;left:-20%;font-size:clamp(24px,5vw,55px);filter:drop-shadow(0 0 14px #ffdf8e);animation:v35Sleigh 8s ease-in-out both}
@keyframes v35Sleigh{to{transform:translateX(140vw) translateY(-12vh) scale(1.4)}}
.finale-v35-card{width:min(100%,680px);padding:clamp(22px,4vw,42px) clamp(17px,4vw,36px);background:linear-gradient(150deg,#18263af5,#4b1b32f2 72%,#291b2cf4);border:2px solid #f6d18f;box-shadow:0 0 90px #f6c76d55,0 25px 90px #000b}
.finale-v35-seal{margin:4px auto 10px;width:74px;height:74px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 25% 20%,#b52d43,#620f25);border:3px double #f4d68c;color:#ffe3a0;font-family:Georgia,serif;font-size:18px;box-shadow:0 5px 20px #0008,0 0 35px #f5d28755}
.finale-v35-card h2{font-size:clamp(43px,8vw,76px)}
.finale-v35-lead{color:#fce8c7;font-style:italic}
.finale-v35-story{display:grid;gap:7px;max-width:520px;margin:18px auto}
.finale-v35-chapter{opacity:0;transform:translateY(12px);transition:opacity 1.1s,transform 1.1s;font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(18px,2.8vw,24px);line-height:1.3;color:#fff0d7;margin:0}
.finale-v35-chapter.visible{opacity:1;transform:none}
.finale-v35-letter{opacity:0;transform:translateY(20px) scale(.97);transition:opacity 1.6s,transform 1.6s;margin:22px auto 14px;padding:20px 17px;border-radius:8px;background:linear-gradient(130deg,#f8e9c7,#fff6e4,#ecd6a8);border:2px solid #c69a50;color:#532534;box-shadow:0 12px 30px #0008}
.finale-v35.v35-letter-visible .finale-v35-letter{opacity:1;transform:none}
.finale-v35-letter #finale-v35-letter-text{font-family:Georgia,serif;font-size:clamp(15px,2.1vw,19px);line-height:1.65;min-height:24px;color:#522b2f}
.finale-v35-letter .finale-signature{color:#832c3c;font-size:clamp(25px,5vw,36px)}
.finale-v35-fireworks{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.finale-v35-fireworks i{position:absolute;left:var(--x);top:var(--y);width:5px;height:5px;border-radius:50%;background:#ffe4a0;box-shadow:0 0 12px 3px #ffd16c;opacity:0;animation:v35Firework 1.5s ease-out var(--delay) both}
@keyframes v35Firework{0%{opacity:0;transform:rotate(var(--angle)) translateX(0)}25%{opacity:1}100%{opacity:0;transform:rotate(var(--angle)) translateX(95px)}}
.finale-v35-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:18px 0 0}
.finale-v35-actions button,.finale-v35-from-gift{cursor:pointer;min-height:44px;border-radius:999px;padding:10px 17px;border:1px solid #f5d18f;color:#ffe8b9;background:#57243d}
.finale-v35-from-gift{display:block;margin:18px auto 4px;background:#62293b;color:#ffe8b9}
.finale-v35-from-gift[hidden]{display:none}
.finale-underlay{visibility:hidden}
@media(max-width:600px){.finale-v35-card{max-height:94dvh;padding:24px 14px}.finale-v35-memories img,.finale-memories img{height:70px}.finale-v35-story{gap:9px}.finale-v35-actions{flex-direction:column}.finale-v35-actions button{width:100%}}
@media(prefers-reduced-motion:reduce){.finale-v35-sleigh,.finale-v35-fireworks i{animation:none!important}.finale-v35-chapter,.finale-v35-letter{transition:none!important}}
body.reduced .finale-v35-sleigh,body.reduced .finale-v35-fireworks i{animation:none!important}body.reduced .finale-v35-chapter,body.reduced .finale-v35-letter{transition:none!important}

/* V36 : confort tactile, cadeaux prioritaires et animations accessibles */
@media(max-width:600px){.day{touch-action:manipulation}.finale-v35-card{overscroll-behavior:contain}.finale-v35-fireworks{pointer-events:none}.finale-v35-story{contain:layout style}.treasure-actions{display:flex;flex-wrap:wrap;gap:8px}}
@media(prefers-reduced-motion:reduce){.unwrapping .gift-top,.unwrapping .gift-bow,.letter-reveal{animation:none!important;transition:none!important}}
button:focus-visible{outline:3px solid #ffe1a0;outline-offset:3px}
.treasure-actions button:disabled{opacity:.6;cursor:default}
.finale-v36-skip{font-size:.9rem}

/* V37: extras appear only after server-authorized opening. */
.v37-extra{margin:16px 0;padding:16px;border:1px solid #cfa96a;border-radius:16px;background:rgba(255,248,229,.85);color:#66353c;text-align:center}
.v37-extra[hidden],.v37-extra [hidden]{display:none!important}.v37-extra h3{font-family:Georgia,serif;margin:0 0 8px;color:#793746}.v37-extra p{line-height:1.55}.v37-extra audio{display:block;width:100%;margin-top:8px}
@media(max-width:600px){.v37-extra{padding:12px}.day{touch-action:manipulation}}
@media(prefers-reduced-motion:reduce){.day.unwrapping *{animation:none!important;transition:none!important}}
