:root{--paper: #f1ebd9;--paper-dark: #e3d9bd;--paper-deep: #c9bb96;--ink: #1f1a14;--ink-soft: #3b3128;--ink-faded: #6b5c4c;--ink-pale: #8c7d65;--sepia: #6b4423;--rust: #8c3a1f;--gold: #b08a2e;--shadow: rgba(31, 26, 20, .35)}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;width:100%}body{font-family:Cormorant Garamond,serif;background:#050300;color:var(--paper);overflow-x:hidden;min-height:100vh}img{max-width:100%;display:block}button{font-family:inherit;cursor:pointer;background:none;border:none;color:inherit}.header{position:fixed;top:0;left:0;width:80px;height:100vh;display:flex;align-items:center;justify-content:center;z-index:30;pointer-events:none}.header__inner{transform:rotate(-90deg);white-space:nowrap;text-align:center;pointer-events:auto}.header__title{font-family:Caveat,cursive;font-size:2.4rem;font-weight:700;color:var(--paper);letter-spacing:.05em;cursor:pointer;-webkit-user-select:none;user-select:none;text-shadow:0 2px 8px var(--shadow)}.header__subtitle{font-family:Special Elite,monospace;font-size:.85rem;color:var(--paper-deep);letter-spacing:.15em;margin-top:.4rem}.header__year{font-family:Special Elite,monospace;font-size:.75rem;color:var(--paper-dark);letter-spacing:.3em;margin-top:.3rem}.hint{position:fixed;top:0;right:0;width:80px;height:100vh;display:flex;align-items:center;justify-content:center;z-index:30;pointer-events:none}.hint__inner{transform:rotate(90deg);white-space:nowrap;text-align:center}.hint__line{font-family:Caveat,cursive;font-size:1.3rem;color:var(--paper-deep);letter-spacing:.04em;margin:.2rem 0}.hint__progress{margin-top:1.2rem;font-family:Special Elite,monospace;color:var(--gold)}.hint__progress--books{margin-top:.4rem;opacity:.7}.hint__progress--books .hint__count{font-size:1.2rem}.hint__progress--books .hint__total{font-size:.9rem}.hint__count{font-size:1.6rem;font-weight:700}.hint__total{font-size:1.1rem;color:var(--paper-deep);margin-left:.4rem}.scene{position:relative;width:min(96vw,1500px);aspect-ratio:1546 / 1017;margin:40px auto 60px;overflow:visible}.scene__background{position:absolute;top:0;right:0;bottom:0;left:0;background:url(../textures/scene-fond.jpg) center / cover no-repeat;opacity:1;filter:brightness(.92) contrast(1.02);pointer-events:none;z-index:0;-webkit-mask-image:radial-gradient(ellipse 100% 100% at center,black 70%,transparent 100%);mask-image:radial-gradient(ellipse 100% 100% at center,black 70%,transparent 100%)}.stage{position:absolute;z-index:1;--stage-mouse-x: -200px;--stage-mouse-y: -200px}.stage--pantin{left:33.3%;bottom:0%;height:100%;aspect-ratio:1024 / 1536;width:auto;transform:translate(-50%)}.stage--shelf{left:69.9%;bottom:22.8%;height:35%;aspect-ratio:1268 / 989;width:auto;transform:translate(-50%)}.stage--shelf-revealed{animation:shelf-emerge 2.5s ease-out}@keyframes shelf-emerge{0%{opacity:0;transform:translate(-50%) translateY(8px);filter:blur(4px)}to{opacity:1;transform:translate(-50%) translateY(0);filter:blur(0)}}.revealable-wrap{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.revealable-placeholder{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;object-position:bottom;opacity:0;pointer-events:none}.revealable-image{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;object-position:bottom;pointer-events:none;transition:-webkit-mask-image .8s ease,mask-image .8s ease,filter 1.5s ease}.pantin-image{filter:saturate(1.25) brightness(1.05) contrast(1.05)}.shelf-image{filter:saturate(1.1)}.revealable-image.revealable-image--complete{animation:complete-glow 4s ease-in-out infinite}@keyframes complete-glow{0%,to{filter:saturate(1.35) brightness(1.08) contrast(1.05) drop-shadow(0 0 18px rgba(176,138,46,.35)) drop-shadow(0 0 40px rgba(255,200,120,.15))}50%{filter:saturate(1.4) brightness(1.12) contrast(1.07) drop-shadow(0 0 24px rgba(176,138,46,.5)) drop-shadow(0 0 50px rgba(255,200,120,.2))}}.fragments-overlay,.books-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:6;pointer-events:none}.fragment-lights{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;pointer-events:none}.fragment-light{position:absolute;background-repeat:no-repeat;opacity:0;transition:opacity 1.2s ease;-webkit-mask-image:radial-gradient(ellipse 75% 75% at center,black 30%,rgba(0,0,0,.6) 60%,transparent 95%);mask-image:radial-gradient(ellipse 75% 75% at center,black 30%,rgba(0,0,0,.6) 60%,transparent 95%)}.fragment-light.focused{opacity:.85}.fragment-light.lit{opacity:1}.fragment-zone{position:absolute;cursor:none;pointer-events:auto}.fragment-zone--active{cursor:pointer}body.torch-active,body.torch-active *,.stage,.fragment-zone--active{cursor:none}.torch-glow{position:fixed;width:360px;height:360px;border-radius:50%;pointer-events:none;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(255,230,180,.25) 0%,rgba(255,200,120,.1) 35%,transparent 70%);z-index:50;mix-blend-mode:screen;transition:transform .05s linear}.torch-cursor{position:fixed;width:12px;height:12px;pointer-events:none;transform:translate(-50%,-50%);background:linear-gradient(var(--gold),var(--gold)) center/2px 100% no-repeat,linear-gradient(var(--gold),var(--gold)) center/100% 2px no-repeat;z-index:60;filter:drop-shadow(0 0 4px rgba(176,138,46,.8))}.focus-ring{position:fixed;width:60px;height:60px;pointer-events:none;transform:translate(-50%,-50%);z-index:55;overflow:visible}.focus-ring__bg{stroke:#f1ebd926}.focus-ring__fill{stroke:var(--gold);filter:drop-shadow(0 0 6px rgba(176,138,46,.7));transition:stroke-dashoffset .1s linear}.tooltip{position:fixed;transform:translate(-50%,calc(-100% - 16px));background:var(--paper);color:var(--ink);padding:.5rem .9rem;border-radius:4px;font-family:Special Elite,monospace;font-size:.8rem;letter-spacing:.05em;white-space:nowrap;pointer-events:none;z-index:70;box-shadow:0 4px 16px var(--shadow);display:flex;flex-direction:column;align-items:center;gap:.15rem;animation:tooltip-fade .25s ease-out}.tooltip__id{font-weight:700;color:var(--rust);font-size:.95rem}.tooltip__label{color:var(--ink-soft);font-size:.85rem}.tooltip__hint{color:var(--ink-faded);font-size:.7rem;font-style:italic}@keyframes tooltip-fade{0%{opacity:0;transform:translate(-50%,calc(-100% - 6px))}to{opacity:1;transform:translate(-50%,calc(-100% - 16px))}}.book-zone{position:absolute;background:transparent;border:none;padding:0;cursor:pointer;pointer-events:auto;transition:background .25s ease,box-shadow .25s ease,transform .15s ease;border-radius:2px}.book-zone:hover{background:#ffe6b426;box-shadow:0 0 8px #b08a2e66,inset 0 0 6px #ffe6b433;transform:translateY(-1px)}.book-zone:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.book-zone:active{transform:translateY(0)}.song-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#050300eb;display:flex;align-items:flex-start;justify-content:center;overflow-y:auto;padding:3rem 1.5rem;animation:modal-fade-in .3s ease-out}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}.song-page{position:relative;background-color:var(--paper);color:var(--ink);width:min(720px,100%);padding:4rem 3.5rem 5rem;border-radius:0;box-shadow:none;background-image:url(../textures/papier-vieilli.jpg);background-size:100% 100%;background-position:center;background-repeat:no-repeat;animation:page-rise .4s ease-out}@keyframes page-rise{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.close-btn{position:absolute;top:1rem;right:1rem;width:36px;height:36px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:1rem;display:flex;align-items:center;justify-content:center;transition:background .2s,transform .2s}.close-btn:hover{background:var(--rust);transform:rotate(90deg)}.song-page__header{text-align:center;margin-bottom:2rem;padding-bottom:1.5rem;border-bottom:1px dashed var(--ink-pale)}.song-position{font-family:Special Elite,monospace;font-size:.75rem;letter-spacing:.2em;color:var(--ink-faded);text-transform:uppercase}.song-title{font-family:Caveat,cursive;font-size:3rem;font-weight:700;color:var(--ink);margin:.4rem 0;line-height:1.1}.song-duration{font-family:Special Elite,monospace;font-size:.9rem;color:var(--sepia);letter-spacing:.1em}.song-illustration-wrap{margin:0 auto 2rem;max-width:480px}.song-illustration{width:100%;height:auto;border:none;border-radius:0;box-shadow:none;mix-blend-mode:multiply;filter:saturate(.92) contrast(1.02);-webkit-mask-image:radial-gradient(ellipse 95% 95% at center,black 70%,transparent 100%);mask-image:radial-gradient(ellipse 95% 95% at center,black 70%,transparent 100%)}.song-illustration--placeholder{aspect-ratio:1;background:repeating-linear-gradient(45deg,var(--paper-dark),var(--paper-dark) 10px,var(--paper-deep) 10px,var(--paper-deep) 11px);display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--ink-soft);font-family:Special Elite,monospace;border:1px dashed var(--ink-faded);border-radius:2px;mix-blend-mode:normal;filter:none;-webkit-mask-image:none;mask-image:none}.song-illustration--placeholder span{font-size:3rem;font-weight:700;color:var(--rust);letter-spacing:.05em}.song-illustration--placeholder small{font-size:.75rem;color:var(--ink-faded);margin-top:.6rem;letter-spacing:.15em}.audio-player{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;padding:1rem 1.2rem;background:#f1ebd973;border:1px solid rgba(107,92,76,.3);border-radius:4px}.audio-player audio{flex:1;height:36px;width:100%}.audio-download{display:flex;justify-content:center;margin-bottom:2rem;min-height:48px;align-items:center}.audio-download__status{font-family:Special Elite,monospace;font-size:.78rem;letter-spacing:.08em;color:var(--ink-faded);font-style:italic}.audio-download__status--missing{color:var(--ink-pale)}.download-btn{display:inline-flex;align-items:center;gap:.7rem;padding:.65rem 1.2rem;background:var(--ink);color:var(--paper);text-decoration:none;font-family:Special Elite,monospace;border-radius:3px;transition:background .2s,transform .15s;border:1px solid var(--ink)}.download-btn:hover{background:var(--rust);border-color:var(--rust);transform:translateY(-1px)}.download-btn__icon{font-size:1.1rem;line-height:1}.download-btn__main{font-size:.85rem;letter-spacing:.1em}.download-btn__quality{font-size:.7rem;letter-spacing:.05em;color:var(--paper-deep);padding-left:.7rem;border-left:1px solid rgba(241,235,217,.3);font-style:italic}.author-note{margin:2rem 0;padding:1.2rem 1.4rem;background:#b08a2e1a;border-left:3px solid var(--gold);font-style:italic;font-size:1.05rem;color:var(--ink-soft);line-height:1.6}.lyrics{margin-top:2.5rem;font-family:Cormorant Garamond,serif;font-size:1.1rem;color:var(--ink);line-height:1.7}.lyrics__section{font-family:Special Elite,monospace;font-size:.8rem;color:var(--rust);letter-spacing:.15em;text-transform:uppercase;margin:1.6rem 0 .6rem;padding-bottom:.3rem;border-bottom:1px solid var(--ink-pale)}.lyrics__line{margin:.1rem 0}.intro-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#050300;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.2rem;pointer-events:none;animation:intro-fade-out .8s ease-out 4.7s forwards}@keyframes intro-fade-out{to{opacity:0;visibility:hidden}}.intro-text{font-family:Caveat,cursive;font-size:1.8rem;color:var(--paper);letter-spacing:.04em;text-align:center;opacity:0;transform:translateY(8px)}.intro-text--1{animation:intro-line .9s ease-out .3s forwards}.intro-text--2{animation:intro-line .9s ease-out 1.5s forwards}.intro-text--3{animation:intro-line .9s ease-out 2.5s forwards}.intro-text--4{animation:intro-line .9s ease-out 3.5s forwards;color:var(--gold)}@keyframes intro-line{to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){body,body *{cursor:auto!important}.header,.hint{position:relative;width:100%;height:auto;padding:1rem 0}.header__inner,.hint__inner{transform:none}.header__title{font-size:1.8rem}.header__subtitle,.header__year{margin-top:.2rem}.stage{width:92vw;margin:1rem auto}.fragment-light{opacity:.85}.darkness-layer,.penumbra-layer,.torch-glow,.torch-cursor,.focus-ring,.tooltip{display:none}.bonus-shelf{padding:1.5rem 1rem}.song-page{padding:3rem 2rem 4rem}.song-title{font-size:2.2rem}}.editor-toggle{position:fixed;bottom:20px;right:20px;z-index:9000;background:#000c;color:gold;border:1px solid #ffd700;padding:8px 14px;font-family:Special Elite,monospace;font-size:.85rem;cursor:pointer;border-radius:4px;letter-spacing:.05em}.editor-toggle:hover{background:#321e00e6}.editor-rect__label{position:absolute;top:2px;left:4px;font-family:Special Elite,monospace;font-size:11px;color:#ffea00;background:#000000b3;padding:1px 4px;border-radius:2px;pointer-events:none;-webkit-user-select:none;user-select:none}.editor-rect--selected .editor-rect__label{color:#0f0}.editor-handle{position:absolute;width:12px;height:12px;background:#ffea00;border:1px solid #000;z-index:2}.editor-rect--selected .editor-handle{background:#0f0}.editor-handle--nw{top:-6px;left:-6px;cursor:nwse-resize}.editor-handle--ne{top:-6px;right:-6px;cursor:nesw-resize}.editor-handle--sw{bottom:-6px;left:-6px;cursor:nesw-resize}.editor-handle--se{bottom:-6px;right:-6px;cursor:nwse-resize}.editor-panel{position:fixed;bottom:0;left:0;right:0;background:#140f05f7;color:#f1ebd9;border-top:2px solid #ffd700;padding:12px 20px;z-index:9500;font-family:monospace;font-size:13px;max-height:35vh;display:flex;flex-direction:column;gap:8px}.editor-panel__header{display:flex;align-items:center;gap:12px;font-family:Special Elite,monospace;font-size:.9rem}.editor-panel__header strong{color:gold}.editor-panel__close{margin-left:auto;background:#ffd70033;color:gold;border:1px solid #ffd700;padding:4px 10px;font-family:Special Elite,monospace;font-size:.8rem;border-radius:3px;cursor:pointer}.editor-panel__close:hover{background:#ffd70059}.editor-panel__current{background:#00ff001a;border-left:3px solid #00ff00;padding:6px 10px;font-family:monospace;font-size:13px}.editor-panel__current strong{color:#0f0}.editor-panel__code{flex:1;width:100%;background:#00000080;color:#f1ebd9;border:1px solid rgba(255,215,0,.3);padding:8px;font-family:monospace;font-size:12px;line-height:1.4;resize:none;min-height:120px;border-radius:3px}.editor-panel__hint{font-size:11px;color:#f1ebd999}.editor-panel__hint code{background:#ffd70026;color:#ffea00;padding:1px 5px;border-radius:2px}
