*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
    --pink:#ff7eb3;--pink2:#ff5f9e;--purple:#c471ed;--blue:#7b68ee;
    --gold:#d4a853;--gold2:#f0c674;
    --warm:#ffe8cc;--bg:#06020a;
    --text:#fff0f5;--text2:rgba(255,240,245,.6);--text3:rgba(255,240,245,.3);
}
html,body{height:100%;overflow:hidden}
body{font-family:'Noto Serif SC',serif;
    background:var(--bg);
    background-image:
        radial-gradient(ellipse at 20% 40%, rgba(180,40,200,.14) 0%, transparent 50%),
        radial-gradient(ellipse at 80% 20%, rgba(255,80,160,.11) 0%, transparent 45%),
        radial-gradient(ellipse at 50% 85%, rgba(100,40,220,.09) 0%, transparent 50%);
    color:var(--text);user-select:none;-webkit-user-select:none}

#bgCanvas{position:fixed;inset:0;z-index:0;pointer-events:none}

/* Intro */
.intro{position:fixed;inset:0;z-index:9999;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;transition:opacity 1.5s,visibility 1.5s;animation:autoHide 1s 3.5s ease forwards}@keyframes autoHide{to{opacity:0;visibility:hidden;pointer-events:none}}
.intro.hidden{opacity:0;visibility:hidden;pointer-events:none}
.intro-line{width:0;height:1px;background:linear-gradient(90deg,transparent,var(--pink),var(--gold),var(--purple),transparent);animation:lineEx 1.5s .3s ease forwards}
@keyframes lineEx{to{width:min(500px,85vw)}}
.intro-content{text-align:center;opacity:0;animation:iF 1.2s .8s ease forwards}
@keyframes iF{to{opacity:1}}
.intro-pre{font-family:'Cormorant Garamond',serif;font-size:clamp(.65rem,1.3vw,.85rem);color:var(--gold);letter-spacing:.4em;text-transform:uppercase;margin-bottom:14px}
.intro-title{font-size:clamp(1.8rem,5vw,3rem);font-weight:300;letter-spacing:.15em;margin-bottom:10px;background:linear-gradient(135deg,var(--warm),var(--pink),var(--gold),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.intro-sub{font-size:clamp(.65rem,1.2vw,.8rem);color:var(--text3);letter-spacing:.15em}

/* Header */
.header{position:fixed;top:0;right:0;left:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:20px 28px 0;pointer-events:none;opacity:0;animation:hI 1s 4s ease forwards}
@keyframes hI{to{opacity:1}}
.logo{font-family:'Cormorant Garamond',serif;font-size:clamp(1rem,2.2vw,1.4rem);font-weight:300;letter-spacing:.3em;color:var(--gold)}
.layout-indicator{display:flex;align-items:center;gap:12px}
.layout-name{font-size:.75rem;color:var(--text2);letter-spacing:.2em;transition:opacity .4s}
.progress-percent{font-family:'Cormorant Garamond',serif;font-size:.85rem;color:var(--gold);letter-spacing:.05em;opacity:.7}

/* Stage */
.stage{position:fixed;inset:0;z-index:1}

/* Photo Card */
.photo-card{
    position:absolute;cursor:grab;
    will-change:transform,opacity;
}
.photo-card .card-glow{
    position:absolute;inset:-15px;border-radius:22px;z-index:-1;
    background:radial-gradient(ellipse at center,rgba(255,100,170,.1) 0%,rgba(212,168,83,.05) 40%,transparent 70%);
    filter:blur(12px);
    transition:opacity .4s;
    opacity:0;
}
.photo-card:hover .card-glow,
.photo-card.dragging .card-glow{
    opacity:1;
}
.photo-card .card-inner{
    position:relative;border-radius:14px;overflow:hidden;
    background:rgba(255,255,255,.02);border:1px solid rgba(255,126,179,.12);
    box-shadow:0 8px 32px rgba(0,0,0,.5),0 0 20px rgba(255,126,179,.05);
    transition:border-color .3s,box-shadow .3s;
}
.photo-card:hover .card-inner{
    border-color:rgba(212,168,83,.35);
    box-shadow:0 12px 40px rgba(0,0,0,.6),0 0 40px rgba(212,168,83,.12);
}
.photo-card.dragging .card-inner{
    border-color:rgba(212,168,83,.45);
    box-shadow:0 20px 60px rgba(0,0,0,.7),0 0 60px rgba(212,168,83,.18);
}
.photo-card img{width:100%;display:block;pointer-events:none}
.card-caption{padding:10px 14px 12px;background:linear-gradient(to top,rgba(6,2,10,.95),rgba(6,2,10,.6))}
.card-caption h3{font-family:'Cormorant Garamond',serif;font-size:.9rem;color:var(--warm);font-weight:400;letter-spacing:.05em;margin-bottom:2px}
.card-caption p{font-size:.6rem;color:var(--text3);line-height:1.4}

/* Drag ghost trail */
.drag-ghost{position:absolute;border-radius:14px;pointer-events:none;z-index:9998;overflow:hidden;opacity:.3;border:1px solid rgba(255,126,179,.15);transition:opacity .5s}
.drag-ghost img{width:100%;display:block;filter:blur(1px) saturate(.5) brightness(.7)}
.drag-ghost.fading{opacity:0}

/* Detail Overlay */
.detail-overlay{position:fixed;inset:0;z-index:5000;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:all .6s cubic-bezier(.4,0,.2,1)}
.detail-overlay.active{opacity:1;visibility:visible}
.detail-backdrop{position:absolute;inset:0;background:rgba(6,2,10,.92);backdrop-filter:blur(30px)}
.detail-card{position:relative;z-index:5;max-width:460px;width:90vw;border-radius:20px;overflow:hidden;background:linear-gradient(135deg,rgba(20,8,28,.98),rgba(12,4,18,.98));border:1px solid rgba(255,126,179,.1);box-shadow:0 40px 100px rgba(0,0,0,.7),0 0 80px rgba(212,168,83,.05);transform:scale(.9) translateY(30px);transition:transform .6s cubic-bezier(.16,1,.3,1)}
.detail-overlay.active .detail-card{transform:scale(1) translateY(0)}
.detail-close{position:absolute;top:14px;right:14px;z-index:10;width:38px;height:38px;border-radius:50%;border:1px solid rgba(212,168,83,.15);background:rgba(8,6,4,.6);backdrop-filter:blur(10px);color:var(--gold);font-size:1.2rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s}
.detail-close:hover{background:rgba(212,168,83,.1);transform:rotate(90deg)}
.detail-img-wrap{overflow:hidden}
.detail-img{width:100%;display:block}
.detail-info{padding:22px 26px 26px}
.detail-title{font-family:'Cormorant Garamond',serif;font-size:1.4rem;color:var(--warm);font-weight:400;letter-spacing:.05em;margin-bottom:4px}
.detail-date{font-size:.7rem;color:var(--pink);letter-spacing:.15em;display:block;margin-bottom:10px}
.detail-desc{font-size:.85rem;color:var(--text2);line-height:2}

/* Controls */
.controls{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:100;display:flex;align-items:center;gap:8px;background:rgba(6,2,10,.6);backdrop-filter:blur(20px);padding:6px 12px;border-radius:100px;border:1px solid rgba(255,126,179,.08);opacity:0;animation:cI .8s 4.2s ease forwards}
@keyframes cI{to{opacity:1}}
.ctrl-btn{width:38px;height:38px;border-radius:50%;border:1px solid rgba(212,168,83,.1);background:transparent;color:var(--text3);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s}
.ctrl-btn:hover{background:rgba(212,168,83,.08);border-color:rgba(212,168,83,.2);color:var(--gold)}
.ctrl-btn.active{background:rgba(212,168,83,.1);border-color:rgba(212,168,83,.3);color:var(--gold)}
.music-bars{display:flex;align-items:flex-end;gap:2px;height:18px;opacity:0;transition:opacity .3s}
.music-bars.playing{opacity:1}
.music-bars span{display:block;width:2.5px;background:var(--pink);border-radius:2px;height:3px}
.music-bars.playing span{animation:mb .7s ease-in-out infinite}
.music-bars.playing span:nth-child(1){animation-delay:0s}.music-bars.playing span:nth-child(2){animation-delay:.1s}.music-bars.playing span:nth-child(3){animation-delay:.2s}.music-bars.playing span:nth-child(4){animation-delay:.3s}
@keyframes mb{0%,100%{height:3px}50%{height:16px}}

/* Scroll Hint */
.scroll-hint{position:fixed;bottom:120px;left:50%;transform:translateX(-50%);z-index:50;display:flex;align-items:center;gap:8px;color:var(--text3);font-size:.72rem;letter-spacing:.1em;opacity:0;animation:sH 1s 5s ease forwards;pointer-events:none;transition:opacity .5s}
@keyframes sH{to{opacity:.7}}
.scroll-hint.hidden{opacity:0}
.scroll-hint svg{animation:sBounce 2s ease-in-out infinite}
@keyframes sBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}

@media(max-width:768px){
    .controls{bottom:12px;padding:4px 8px}.ctrl-btn{width:34px;height:34px}
    .progress-bar{bottom:55px;width:85vw}
    .scroll-hint{bottom:100px}
    .progress-labels span{font-size:.45rem}
}
::selection{background:rgba(255,126,179,.25);color:white}
