:root{color-scheme:dark;--ink:#f3efe6;--soft:#d2d7e4;--muted:#9ba9c1;--night:#0c1630;--navy:#101e3a;--gold:#ffe0a0;--line:rgba(235,239,247,.17);--panel:#182641;--ease:cubic-bezier(.2,.75,.2,1)}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:radial-gradient(ellipse at 55% 18%,#1b2c4c 0%,#0c1630 60%,#081121 100%);color:var(--ink);font-family:Inter,"Avenir Next",Avenir,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;line-height:1.55;min-height:100vh}
body::before{content:"";position:fixed;inset:0;opacity:.15;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 220 220' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.25' filter='url(%23n)'/%3E%3C/svg%3E");z-index:3}
button,input,textarea{font:inherit}
button{cursor:pointer}
button:focus-visible,a:focus-visible,[role="button"]:focus-visible{outline:3px solid var(--gold);outline-offset:4px}
a{color:inherit;text-decoration:none}
.skip-link{position:absolute;top:-80px;left:16px;background:var(--gold);color:#141d2e;padding:10px 15px;z-index:15}.skip-link:focus{top:16px}
.app-shell{max-width:1500px;margin:auto;overflow:hidden;position:relative}
.site-header{padding:28px clamp(24px,5vw,76px);display:flex;align-items:center;justify-content:space-between;gap:20px;position:relative;z-index:2}
.brand{display:flex;align-items:center;gap:12px;font-weight:800;letter-spacing:.21em;font-size:13px;line-height:1.28}.brand-title small{display:block;color:#f4d99e;letter-spacing:.26em;font-size:10px;margin-top:2px}.brand-mark{width:40px;height:40px;display:grid;place-items:center;border:1px solid #c7b58f8a;border-radius:50%;font-size:29px;color:var(--gold);font-family:Georgia,serif}
.header-actions{display:flex;align-items:center;gap:24px}.season-tag,.progress-kicker,.eyebrow,.section-strap,.dialog-eyebrow{font-weight:750;letter-spacing:.22em;font-size:10px}.season-tag{color:#b9bacc}.icon-button{width:36px;height:36px;border:1px solid var(--line);border-radius:50%;background:rgba(255,255,255,.045);color:#e7d5b1;display:grid;place-items:center}.icon-button svg{width:18px;height:18px}.sound-wave{display:none}.sound-button[aria-pressed="true"] .sound-wave{display:block}.sound-button[aria-pressed="true"] .sound-slash{display:none}.icon-button:hover{background:rgba(255,255,255,.13)}.text-button{border:0;background:transparent;color:#f3ead8;padding:7px 0;font-size:12px;letter-spacing:.035em;border-bottom:1px solid rgba(255,255,255,.34)}.text-button span{margin-left:7px;color:var(--gold)}
.hero{padding:50px clamp(24px,8vw,120px) 28px;display:grid;grid-template-columns:minmax(0,1fr) 205px;gap:9vw;align-items:end;position:relative}.hero::before{content:"✦";position:absolute;color:#f8dfaa;left:65%;top:14px;opacity:.7;font-size:20px}.hero-copy{max-width:685px}.eyebrow{color:var(--gold);display:flex;align-items:center;gap:10px}.eyebrow-star{font-size:20px;font-weight:300}.hero h1{font-family:Georgia,"Times New Roman",serif;font-size:clamp(38px,5.8vw,76px);line-height:1.08;font-weight:400;letter-spacing:-.035em;margin:20px 0 18px;max-width:800px}.hero h1 em{font-weight:400;color:var(--gold);font-style:italic}.hero-copy p{font-size:14px;color:var(--soft);max-width:535px;line-height:1.85;margin:0 0 24px}.primary-link{display:inline-flex;gap:36px;align-items:center;background:#e7c88d;color:#192641;font-size:12px;font-weight:800;letter-spacing:.02em;padding:13px 19px;border-radius:3px;box-shadow:0 8px 24px #0002;transition:transform .2s,background .2s}.primary-link:hover{transform:translateY(-3px);background:#f6dba4}.primary-link span{font-size:19px;font-weight:400}
.progress-panel{border:1px solid var(--line);border-top:2px solid #f0d69a;background:linear-gradient(145deg,rgba(69,86,121,.21),rgba(18,30,54,.26));padding:22px 24px 16px;max-width:230px;margin-bottom:6px}.progress-kicker{color:#f1d49a}.progress-line{display:flex;align-items:baseline;gap:10px;margin-top:5px}.progress-line strong{font-family:Georgia,serif;font-size:56px;font-weight:400;letter-spacing:-.06em;line-height:1.2}.progress-line span{font-size:18px;color:#8496b7}.progress-track{margin:8px 0 11px;height:3px;background:#46516c;width:100%;overflow:hidden}.progress-fill{width:0;height:100%;background:#ffe3a3;transition:width .5s var(--ease)}.progress-caption{font-size:11px;color:#bdc5d2;min-height:36px;line-height:1.5}.progress-stars{display:flex;gap:8px;color:#6c7c98;font-size:20px;margin-top:2px}.progress-stars .on{color:#ffe0a0;text-shadow:0 0 17px #f5d48b}
.village-section{padding:4px clamp(14px,3.8vw,55px) 0}.section-strap{display:flex;justify-content:center;align-items:center;gap:15px;margin:20px 0 14px;color:#d6bc8d}.small-line{height:1px;background:rgba(213,190,141,.4);width:47px}
.scene-frame{position:relative;overflow:hidden;border:1px solid rgba(210,218,232,.2);border-radius:7px;box-shadow:0 25px 100px #02081766;isolation:isolate;background:#1b3151}.village-art{display:block;width:100%;height:auto;position:relative;z-index:1}.scene-moonshine{position:absolute;width:35%;aspect-ratio:1;right:6%;top:-9%;background:radial-gradient(circle,rgba(242,220,153,.13),transparent 61%);pointer-events:none}.sky-stars{animation:twinkle 4s ease-in-out infinite alternate}.aurora{animation:aurora 12s ease-in-out infinite alternate}.building,.world-tree{cursor:pointer;transform-box:fill-box;transform-origin:center bottom;transition:filter .25s ease,transform .28s var(--ease)}.interactive-building:hover,.interactive-building:focus{transform:translateY(-7px);filter:brightness(1.13) drop-shadow(0 6px 11px rgba(255,220,160,.25))}.interactive-building:focus{outline:none;filter:brightness(1.22) drop-shadow(0 0 17px #ffe0a0)}.building .window{transition:fill .65s}.done-emblem{opacity:0;transform:translateY(6px);transform-box:fill-box;transform-origin:center;transition:opacity .3s,transform .3s;pointer-events:none}.solved-wishes [data-emblem="wishes"],.solved-snow [data-emblem="snow"],.solved-gifts [data-emblem="gifts"],.world-complete [data-emblem="tree"]{opacity:1;transform:translateY(0)}.solved-wishes .wishes-window,.solved-snow .snow-window,.solved-gifts .gifts-window{fill:#ffe5a7}.solved-wishes .wishes-halo,.solved-snow .snow-halo,.solved-gifts .gifts-halo{opacity:.8}.tree-ornaments{fill:#5d7a7d;transition:fill 1s}.tree-star{transition:fill 1s,filter 1s}.tree-aura,.tree-star-halo{transition:opacity 1s}.tree-star-halo{opacity:0}.world-complete .tree-aura{opacity:.42}.world-complete .tree-star-halo{opacity:1}.world-complete .tree-star{fill:#ffe6a6;filter:drop-shadow(0 0 12px #ffd58b)}.world-complete .tree-ornaments{fill:#ffcc75;filter:drop-shadow(0 0 7px #ffce82)}.world-complete .world-tree{filter:drop-shadow(0 0 18px #ffdd8755)}
#snow-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}.scene-overlay{position:absolute;inset:0;pointer-events:none;z-index:2;background:linear-gradient(0deg,rgba(19,37,55,.28),transparent 30%)}.location-chip{position:absolute;z-index:4;bottom:10%;display:flex;gap:7px;align-items:center;white-space:nowrap;background:#14233edb;border:1px solid rgba(236,221,182,.34);padding:9px 12px;color:#f5ead5;border-radius:30px;font-size:clamp(9px,1.03vw,13px);font-weight:650;box-shadow:0 6px 20px #07142d55;pointer-events:none}.chip-symbol{color:#ffda91;font-size:16px;line-height:1}.chip-arrow{color:#ffe1a2;padding-left:4px}.chip-wishes{left:8.5%}.chip-snow{left:33%}.chip-tree{left:57%;bottom:7.5%}.chip-gifts{right:5.5%}.scene-legend{display:flex;align-items:center;justify-content:space-between;gap:15px;margin:13px 5px 0;color:#97a9c5;font-size:11px}.scene-legend span:first-child{color:#d3d8de}.legend-dot{width:6px;height:6px;border-radius:50%;display:inline-block;background:#e7d2a2;margin-right:9px;box-shadow:0 0 10px #ecd597}.scene-finale{display:none;position:absolute;left:50%;top:12%;transform:translateX(-50%);z-index:5;color:#17253f;background:#f6e0a8;padding:12px 25px;box-shadow:0 10px 50px rgba(255,212,120,.37);font-weight:750;font-family:Georgia,serif;font-size:clamp(12px,1.6vw,21px);text-align:center;white-space:nowrap;border-radius:3px}.scene-finale span{margin:0 9px}.world-complete .scene-finale{display:block;animation:banner .6s var(--ease) both}
.story-footer{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:32px clamp(25px,5vw,76px) 36px;font-size:11px;color:#879ab7}.story-footer>span:first-child{font-size:9px;font-weight:750;letter-spacing:.19em;color:#baae96}.story-footer>span:first-child span{color:#e5a48e}.reset-button{background:none;border:0;border-bottom:1px solid #75859c;color:#d1d2d8;padding:5px 0;font-size:11px}
.story-dialog{width:min(92vw,560px);max-height:min(90vh,800px);overflow:auto;position:fixed;border:1px solid #798ca5;border-radius:10px;background:radial-gradient(ellipse at 80% 0%,#2b4061 0%,#172641 55%,#101d35 100%);padding:clamp(25px,5vw,47px);color:var(--ink);box-shadow:0 30px 100px #0208149c}.story-dialog::backdrop{background:rgba(5,12,27,.79);backdrop-filter:blur(8px)}.dialog-close{position:absolute;top:12px;right:16px;border:1px solid #6b7e944d;color:#e5e7ed;background:rgba(255,255,255,.05);font-size:26px;width:36px;height:36px;display:grid;place-items:center;border-radius:50%;line-height:1}.dialog-close:hover{background:#586d8b}.dialog-eyebrow{color:#f5d594;display:block;margin-bottom:13px}.story-dialog h2{font-family:Georgia,"Times New Roman",serif;font-size:clamp(32px,5.7vw,47px);font-weight:400;line-height:1.13;letter-spacing:-.03em;margin:5px 0 16px}.story-dialog h2 em{color:#ffe2a0;font-style:italic}.story-dialog p{color:#d7dce7;line-height:1.8;font-size:14px;margin:0 0 18px}.dialog-icon{display:grid;place-items:center;font-size:32px;border:1px solid #d6c9a263;color:#ffe1a8;background:#ffffff0a;width:65px;height:65px;border-radius:50%;margin-bottom:19px}.dialog-primary,.dialog-secondary{border:0;border-radius:4px;padding:14px 20px;font-size:12px;font-weight:750;letter-spacing:.03em}.dialog-primary{background:#f2d398;color:#21314a}.dialog-primary:hover{background:#ffe4aa}.dialog-secondary{color:#e2e5ed;border:1px solid #76839d;background:transparent}.dialog-secondary:hover{background:#fff1}.dialog-primary span{margin-left:16px}.dialog-input{width:100%;border:1px solid #667b98;border-radius:5px;outline:none;padding:12px 14px;color:white;background:#0e1930;resize:vertical;min-height:105px;max-height:230px;font-size:14px;margin:5px 0 12px}.dialog-input:focus{border-color:var(--gold);box-shadow:0 0 0 2px #ffe0a033}.dialog-label{display:block;color:#e3e3e7;font-size:12px;font-weight:700;margin-top:16px}.dialog-hint{font-size:11px;color:#abb6c8!important;margin-top:8px!important}.dialog-error{font-size:12px!important;color:#ffd7a6!important;min-height:20px;margin:0 0 5px!important}.completion-note{margin:15px 0;border:1px solid #d8c18455;background:rgba(252,224,166,.08);padding:15px 17px;border-radius:6px;color:#f3deb2;font-family:Georgia,serif;font-size:18px;line-height:1.6;overflow-wrap:anywhere}.completion-note b{font-family:system-ui,sans-serif;font-size:12px;letter-spacing:.06em;color:#efd9a7}.dialog-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:17px}.help-icons{display:flex;justify-content:space-around;color:#ffe0a0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:29px;margin:26px 0;padding:14px 0}.mission-success{display:flex;align-items:center;gap:12px;color:#f6dfa5;margin:0 0 17px;font-size:12px;font-weight:700;letter-spacing:.06em}.mission-success span{font-size:26px}.mini-card{background:rgba(255,255,255,.045);border:1px solid var(--line);border-radius:7px;padding:16px 20px;margin:17px 0;color:#e7ebf5;font-family:Georgia,serif;font-size:20px;line-height:1.5}
.catch-stage{height:250px;border:1px solid #7085a38c;border-radius:9px;background:radial-gradient(circle at 30% 15%,#536f96aa,transparent 55%),linear-gradient(160deg,#233d61,#0f1e3b);position:relative;overflow:hidden;margin:16px 0}.catch-stage::after{content:"";position:absolute;left:-5%;right:-5%;bottom:-13px;height:55px;background:#cbd9e3;border-radius:50% 50% 0 0;opacity:.75}.flake{position:absolute;display:grid;place-items:center;width:48px;height:48px;border:1px solid #c9e1ef6e;border-radius:50%;background:#e0eaf414;color:#e6f5ff;box-shadow:0 0 20px #cde8f037;font-size:26px;transition:transform .2s,opacity .2s,background .2s;animation:flake-glow 3s ease-in-out infinite alternate}.flake:nth-child(even){animation-delay:-1.4s}.flake:hover,.flake:focus-visible{transform:scale(1.15);background:#dfedff4d}.flake.caught{opacity:0;pointer-events:none;transform:scale(.3)}.flake-counter{font-weight:700;color:#ffe2a3;font-size:13px}.gift-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:22px 0}.gift-option{background:#ecf0f010;border:1px solid #94a2b263;color:var(--ink);border-radius:8px;padding:20px 8px;min-height:115px;display:grid;justify-items:center;gap:11px;font-weight:700;font-size:11px}.gift-option span{font-size:42px;transition:transform .2s}.gift-option:hover{background:#ecf0f023;border-color:#e2d4a1}.gift-option:hover span{transform:translateY(-6px) rotate(-5deg)}.gift-option:focus-visible{outline:3px solid #ffe0a0}.gift-option.selected{border-color:#ffe0a0;background:#ffe0a019}.finale-stars{font-family:Georgia,serif;text-align:center;font-size:41px;color:#ffe3aa;letter-spacing:.2em;text-shadow:0 0 21px #ffdb8c;margin:3px 0 14px;animation:twinkle 1.7s ease-in-out infinite alternate}.greeting-card{background:linear-gradient(140deg,#304d64,#162b49);border:1px solid #cebd916e;padding:23px;margin:18px 0;border-radius:5px;box-shadow:inset 0 0 0 4px #192942;border-top:3px solid #f4d99e;text-align:center}.greeting-card small{color:#f4d99e;letter-spacing:.2em;font-size:10px;font-weight:750}.greeting-card p{font-family:Georgia,serif;font-size:21px;color:#fff0d3;line-height:1.5;margin:13px 0}.greeting-card span{color:#c4d0e2;font-size:12px}.toast{position:fixed;left:50%;bottom:25px;transform:translate(-50%,30px);opacity:0;background:#f2d89f;color:#1e2c41;padding:12px 18px;border-radius:6px;font-size:13px;font-weight:750;transition:opacity .25s,transform .25s;z-index:20;pointer-events:none;max-width:calc(100vw - 30px);text-align:center}.toast.show{opacity:1;transform:translate(-50%,0)}
@keyframes twinkle{from{opacity:.5}to{opacity:1}}@keyframes aurora{from{transform:translate(-20px,5px);opacity:.55}to{transform:translate(30px,-7px);opacity:1}}@keyframes flake-glow{from{box-shadow:0 0 10px #cde8f020}to{box-shadow:0 0 24px #cde8f07a}}@keyframes banner{from{opacity:0;transform:translate(-50%,-15px)}to{opacity:1;transform:translate(-50%,0)}}
@media(max-width:900px){.hero{grid-template-columns:minmax(0,1fr) 180px;gap:25px;padding:35px 45px 30px}.progress-panel{padding:17px}.hero h1{font-size:clamp(37px,5.5vw,55px)}.location-chip{padding:6px 8px}.chip-symbol{font-size:13px}.scene-legend{font-size:10px}}
@media(max-width:680px){.site-header{padding:19px 20px;gap:9px}.brand{font-size:10px;letter-spacing:.1em;gap:9px}.brand-title small{letter-spacing:.14em;font-size:9px}.brand-mark{width:35px;height:35px;font-size:25px}.header-actions{gap:10px}.season-tag{display:none}.text-button{font-size:11px}.hero{padding:31px 24px 23px;grid-template-columns:1fr;gap:26px}.hero h1{font-size:clamp(40px,9vw,58px);max-width:550px}.hero-copy p{font-size:13px;line-height:1.75}.progress-panel{max-width:none;display:grid;grid-template-columns:101px 1fr;grid-template-rows:auto auto auto auto;column-gap:12px;padding:14px 17px 12px;align-items:center}.progress-kicker{grid-column:1/-1}.progress-line{grid-column:1;grid-row:2/5;align-self:center;margin:0;gap:5px;white-space:nowrap}.progress-line strong{font-size:41px}.progress-line span{font-size:13px}.progress-track{grid-column:2;grid-row:2;margin:8px 0}.progress-caption{grid-column:2;grid-row:3;min-height:0}.progress-stars{grid-column:2;grid-row:4;font-size:15px;position:static;right:auto;margin:3px 0 0}.section-strap{font-size:9px;letter-spacing:.1em;margin:8px 0 12px}.small-line{width:25px}.village-section{padding:0 9px}.scene-frame{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scrollbar-color:#bfb9a4 #263a55;scrollbar-width:thin}.village-art{width:820px;max-width:none;height:auto;scroll-snap-align:center}#snow-canvas{width:820px;height:424px}.scene-overlay{width:820px}.location-chip{font-size:10px;bottom:9%;padding:7px 10px}.chip-wishes{left:66px}.chip-snow{left:274px}.chip-tree{left:467px;bottom:7%}.chip-gifts{left:674px;right:auto}.scene-finale{font-size:13px;left:410px;top:12%}.scene-legend{align-items:flex-start;font-size:10px;flex-wrap:wrap;margin:10px 12px 0}.scene-legend span:nth-child(2){font-style:italic}.scene-legend::after{content:"↔ Fais glisser pour explorer le village";color:#e6c88e;width:100%;font-weight:700}.story-footer{padding:27px 20px;display:flex;flex-wrap:wrap;gap:14px}.story-footer>span:nth-child(2){order:3;flex-basis:100%}.story-dialog{padding:33px 24px 25px}.dialog-close{top:9px;right:9px}.gift-option{min-height:95px;padding:12px 6px}.gift-option span{font-size:36px}}
@media(max-width:390px){.brand{letter-spacing:.05em}.text-button{font-size:10px}.scene-frame .village-art{width:740px}.scene-frame #snow-canvas,.scene-frame .scene-overlay{width:740px;height:382px}.chip-wishes{left:59px}.chip-snow{left:248px}.chip-tree{left:420px}.chip-gifts{left:603px}.scene-finale{left:370px}.location-chip{font-size:9px}.chip-symbol{font-size:11px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* Sprint 01: one panorama, clipped light zones and a permanent SVG fallback. */
.countdown{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:8px clamp(24px,8vw,120px) 26px;border-block:1px solid var(--line);padding:16px 0;color:var(--soft);font-size:13px}
#countdown-values{display:flex;gap:24px;text-align:center}#countdown-values b{display:block;font:27px Georgia,serif;color:var(--gold);font-variant-numeric:tabular-nums}#countdown-values small{font-size:10px}
.volume-label{font-size:11px;display:grid;gap:3px}.volume-label input{width:70px;accent-color:var(--gold);min-height:24px}
.cinema,.cinema-hotspots{display:none}
.scene-frame.cinema-ready{aspect-ratio:1672/941;overflow:hidden}
.cinema-ready .village-art,.cinema-ready .location-chip{display:none}
.cinema-ready .cinema{display:block;position:absolute;inset:0;z-index:1}
.cinema img{width:100%;height:100%;object-fit:cover;filter:brightness(.29) saturate(.55);transition:filter 1s}
.light-zone{position:absolute;inset:0;background:url('assets/village-cinematique-finale.webp') center/100% 100%;opacity:0;transition:opacity 1s;pointer-events:none}
.light-wishes{clip-path:polygon(0 22%,26% 22%,28% 64%,0 68%)}
.light-snow{clip-path:polygon(27% 24%,44% 24%,45% 60%,28% 60%)}
.light-gifts{clip-path:polygon(75% 26%,100% 26%,100% 63%,74% 63%)}
.light-tree{clip-path:polygon(45% 8%,72% 8%,75% 67%,44% 67%)}
.solved-wishes .light-wishes,.solved-snow .light-snow,.solved-gifts .light-gifts,.world-complete .light-tree{opacity:1}
.world-complete .cinema img{filter:brightness(1) saturate(1)}
.cinema-ready .cinema-hotspots{display:block;position:absolute;inset:0;z-index:4;pointer-events:none}
.spot{position:absolute;pointer-events:auto;background:#08132ded;color:#ffdfa6;border:1px solid #ffdfa6;border-radius:5px;padding:12px;min-height:44px;font-size:12px;box-shadow:0 3px 16px #0008}
.spot-wishes{left:5%;top:61%}.spot-snow{left:28%;top:55%}.spot-gifts{right:3%;top:60%}.spot-tree{left:52%;top:68%}
.cinema-ready #snow-canvas,.cinema-ready .scene-overlay{width:100%;height:100%}.cinema-ready .scene-finale{left:50%;top:3%;font-size:14px}
.scene-legend::after{display:none}
.progress-stars .on{animation:collect .5s ease-out}@keyframes collect{from{transform:scale(1.8)}to{transform:scale(1)}}
@media(max-width:680px){.header-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px}.site-header{align-items:flex-start}.volume-label{font-size:10px}.volume-label input{width:58px}.countdown{margin:0 24px 24px;display:block}.countdown>span{display:block;margin-bottom:10px}#countdown-values{justify-content:space-between;gap:12px}.cinema-ready .cinema-hotspots{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:60% 10px 12px}.scene-frame.cinema-ready{aspect-ratio:auto}.cinema-ready .cinema{bottom:auto;height:auto;aspect-ratio:1672/941}.spot{position:static;font-size:11px;padding:10px 6px}.cinema-ready .scene-finale{font-size:11px;white-space:normal;width:86%;padding:7px}.scene-legend::after{display:none}.cinema-ready #snow-canvas{height:65%}}
@media(prefers-reduced-motion:reduce){#snow-canvas{display:none}.light-zone,.cinema img{transition:none}}
/* Feathered masks keep the snow and sky continuous around each restored light. */
.light-wishes{clip-path:none;mask-image:radial-gradient(ellipse 19% 27% at 13% 45%,#000 43%,transparent 100%)}
.light-snow{clip-path:none;mask-image:radial-gradient(ellipse 13% 22% at 36% 44%,#000 40%,transparent 100%)}
.light-gifts{clip-path:none;mask-image:radial-gradient(ellipse 18% 23% at 88% 46%,#000 42%,transparent 100%)}
.light-tree{clip-path:none;mask-image:radial-gradient(ellipse 19% 39% at 58% 38%,#000 40%,transparent 100%)}


/* Sprint 02 — Phase A: localized sleep, restored windows and reflected light. */
.primary-link { border:0; text-align:left; min-height:44px; }
.cinema img { filter:brightness(.67) saturate(.35); }
.sleep-zone { position:absolute; inset:0; background:#030d22; opacity:.95; transition:opacity .7s; }
.sleep-wishes { mask-image:radial-gradient(ellipse 18% 25% at 13% 44%,#000 45%,transparent 100%); }
.sleep-snow { mask-image:radial-gradient(ellipse 13% 21% at 36% 43%,#000 45%,transparent 100%); }
.sleep-gifts { mask-image:radial-gradient(ellipse 17% 22% at 88% 46%,#000 45%,transparent 100%); }
.sleep-tree { mask-image:radial-gradient(ellipse 19% 36% at 58% 37%,#000 55%,transparent 100%); }
.solved-wishes .sleep-wishes,.solved-snow .sleep-snow,.solved-gifts .sleep-gifts,.world-complete .sleep-zone { opacity:0; }
.light-reflections { position:absolute; inset:0; pointer-events:none; background:radial-gradient(ellipse 12% 7% at 14% 63%,var(--post-reflection,transparent),transparent),radial-gradient(ellipse 10% 5% at 36% 59%,var(--snow-reflection,transparent),transparent),radial-gradient(ellipse 13% 7% at 87% 62%,var(--gift-reflection,transparent),transparent); }
.solved-wishes { --post-reflection:#ffc97855; }.solved-snow { --snow-reflection:#aee9ef55; }.solved-gifts { --gift-reflection:#ffd48b55; }
.spot.next-chapter { border-color:#fff0cc; box-shadow:0 0 0 2px #f4d79a55,0 3px 16px #0008; }
.spot.next-chapter::after { content:' · À toi'; color:#fff4d6; }
.icon-button,.dialog-close { min-width:44px; min-height:44px; }
#mission-title:focus { outline:none; }
@media(max-width:680px) {
 .site-header { padding:12px 16px; align-items:center; }
 .brand-mark { display:none; }.header-actions { gap:8px; }
 .hero { padding:12px 18px 8px; gap:12px; }
 .hero::before,.hero .eyebrow { display:none; }
 .hero h1 { font-size:32px; line-height:1.08; margin:0 0 10px; }
 .hero-copy p { font-size:14px; line-height:1.45; margin:0 0 12px; }
 .hero .primary-link { padding:11px 14px; }
 .progress-panel { display:flex; gap:9px; padding:7px 10px; border:0; background:none; margin:0; border-bottom:1px solid var(--line); }
 .progress-kicker,.progress-track,.progress-stars { display:none; }
 .progress-line strong { font-size:25px; }.progress-line span { font-size:12px; }
 .progress-caption { font-size:12px; }
 .countdown { margin:18px; padding:12px 0; }
 .countdown>span { margin:0; }.countdown { display:flex; flex-wrap:wrap; }
 #countdown-values { flex:1; min-width:200px; }#countdown-values b { font-size:23px; }
 .section-strap { margin:8px 0; }.scene-legend { margin-top:8px; }
 .cinema-ready .cinema { aspect-ratio:1672/1050; }
 .cinema img { object-fit:fill; }
 .cinema-ready .cinema-hotspots { padding-top:65%; }
 .spot { font-size:12px; }
 .scene-frame .scene-overlay { width:100%; }
 .story-footer { padding:16px 18px; }
}
@media(prefers-reduced-motion:reduce) { .sleep-zone { transition:none; } }


/* Phase B: typographic characters share the village materials and palette. */
.character-name { font:24px Georgia,serif; color:var(--gold); border-bottom:1px solid var(--line); padding-bottom:10px; margin-bottom:16px; }
.character-name small { display:block; font:12px system-ui,sans-serif; color:var(--soft); margin-top:3px; }
.story-choices { border:0; border-top:1px solid var(--line); margin:16px 0 12px; padding:10px 0 0; display:grid; gap:8px; }
.story-choices legend { font-size:13px; color:var(--ink); padding:0 8px 0 0; }
.story-choices label { display:flex; align-items:center; gap:12px; min-height:44px; padding:9px 12px; border:1px solid #7186a5; border-radius:4px; font-size:13px; color:var(--ink); background:#10203a; cursor:pointer; }
.story-choices label:has(:checked) { border-color:var(--gold); background:#3d3c3b; }
.story-choices label:focus-within { outline:3px solid var(--gold); outline-offset:3px; }
.story-choices input { accent-color:var(--gold); width:18px; height:18px; flex-shrink:0; }
.character-reply { border-left:2px solid var(--gold); padding:4px 0 4px 14px; font-style:italic; }
.story-dialog .dialog-icon { display:none; }
.story-dialog #mission-return { margin-top:14px; }
@media(max-width:680px) { .story-dialog h2 { font-size:31px; }.story-dialog { max-height:92dvh; padding:30px 22px 22px; }.story-dialog p { font-size:14px; line-height:1.55; }.character-name { margin-bottom:10px; }.catch-stage { height:230px; } }


/* Phase C: three restrained palettes, one scene and the same progression. */
:root,[data-theme="warm"] { --gold:#ffe0a0; --sky-glow:#1b2c4c; --window-filter:none; --aurora-tint:#dfc18d; }
[data-theme="aurora"] { --gold:#b8eee2; --sky-glow:#193c49; --window-filter:hue-rotate(12deg) saturate(.85); --aurora-tint:#44c9b3; }
[data-theme="golden"] { --gold:#f4d79a; --sky-glow:#373448; --window-filter:sepia(.15); --aurora-tint:#e3bd69; }
body { background:radial-gradient(ellipse at 55% 18%,var(--sky-glow),#0c1630 60%,#081121); }
.world-controls { padding:0 clamp(14px,3.8vw,55px); display:flex; align-items:center; justify-content:space-between; gap:16px; }
.world-controls label { display:flex; align-items:center; gap:12px; font-size:12px; color:var(--soft); }
.world-controls select { background:#10203a; color:var(--ink); border:1px solid #7c90ab; border-radius:4px; padding:10px; min-height:44px; max-width:100%; font-size:13px; }
.world-controls p { color:var(--soft); font:italic 15px Georgia,serif; margin:8px 0; }
select:focus-visible { outline:3px solid var(--gold); outline-offset:3px; }
.primary-link,.dialog-primary { background:var(--gold); color:#14243b; }
.spot { color:var(--gold); border-color:var(--gold); }
.spot.next-chapter { box-shadow:0 0 0 2px var(--gold),0 3px 16px #0008; }
.light-zone { filter:var(--window-filter); }
.cinema::after { content:''; position:absolute; inset:0; pointer-events:none; opacity:0; transition:opacity 1s; background:radial-gradient(ellipse 28% 15% at 68% 16%,var(--aurora-tint),transparent); mix-blend-mode:screen; }
.world-complete .cinema::after { opacity:.23; }
@media(max-width:680px) {
 .world-controls { padding:0 18px; flex-wrap:wrap; gap:0; }.world-controls label { width:100%; justify-content:space-between; }
 .world-controls p { font-size:13px; margin:5px 0; }
 .world-controls select { width:178px; }
 /* Keep the original camera and proportions; access remains below the panorama. */
 .cinema-ready .cinema { aspect-ratio:1672/941; }
 .cinema-ready .cinema-hotspots { padding-top:57%; }
}


/* Phase D: gift accents belong to the reveal, independent of ambient theme. */
.finale-story { border-left:3px solid var(--finale-accent,#f4d79a); padding-left:15px; }
.finale-story p { margin-bottom:12px; }
.santa-next { font-style:italic; }
.world-complete .light-tree { filter:var(--window-filter) drop-shadow(0 0 3px var(--finale-accent)); }
.world-complete .scene-finale { border-bottom:3px solid var(--finale-accent); }

/* Sprint 03 B: approved A.1 plates, without a global photo tint or overlay. */
.scene-frame,.scene-frame.cinema-ready { aspect-ratio:1672/941; overflow:hidden; }
.photo-scene,.photo-markers { display:none; position:absolute; inset:0; }
.cinema-ready .photo-scene,.cinema-ready .photo-markers { display:block; }
#photo-village { display:block; width:100%; height:100%; }
.cinema-ready .scene-overlay,.cinema-ready .scene-moonshine { display:none; }
.photo-markers { z-index:4; pointer-events:none; }
.photo-markers button { position:absolute; transform:translate(-50%,-50%); width:44px; height:44px; border-radius:50%; border:1px solid #ffe0a0; color:#ffe0a0; background:#08132d; font-weight:750; pointer-events:auto; }
.photo-markers button[hidden] { display:none; }
.photo-markers button:focus { outline:3px solid var(--gold); outline-offset:4px; }
.scene-destinations { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-top:14px; }
.scene-destinations .spot { position:static; min-height:48px; padding:10px 6px; text-align:center; }
.camera-controls { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:12px 0; font-size:12px; color:var(--soft); }
.camera-controls button { min-height:44px; border:1px solid #7c90ab; border-radius:4px; background:#10203a; color:var(--ink); padding:8px 12px; }
.camera-controls [aria-pressed="true"] { border-color:var(--gold); text-decoration:underline; text-underline-offset:5px; }
#scene-media-status { color:var(--soft); font-size:13px; }
@media(max-width:680px) {
 .scene-frame,.scene-frame.cinema-ready { aspect-ratio:auto; height:420px; }
 .scene-destinations { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
 .scene-legend::after { display:none; }
 .scene-frame.cinema-ready .scene-finale { left:50%; top:3%; width:86%; white-space:normal; font-size:11px; padding:7px; }
 .cinema-ready #snow-canvas { width:100%; height:100%; }
 .scene-frame:not(.cinema-ready) { overflow-x:auto; }
}
