/* ── 照片墙：炫酷瀑布流 + 灯箱 ── */

/* 顶部滚动进度条 */
.g-progress{position:fixed;top:0;left:0;height:3px;width:0;z-index:1200;
  background:linear-gradient(90deg,#ff6b9d,#e64980,#b13bff);box-shadow:0 0 10px rgba(230,73,128,.6);
  transition:width .1s linear}

/* 头部 */
.gallery-hero{position:relative;overflow:hidden;padding:84px clamp(20px,4vw,64px) 60px;text-align:center;
  background:linear-gradient(180deg,#fff5f8 0%,#fff 100%)}
.gallery-orb{position:absolute;border-radius:50%;filter:blur(40px);opacity:.55;pointer-events:none;
  animation:orbFloat 14s ease-in-out infinite}
.gallery-orb-1{width:340px;height:340px;left:-70px;top:-50px;background:radial-gradient(circle,#ffb3d1,#ff6b9d)}
.gallery-orb-2{width:280px;height:280px;right:-50px;top:-10px;background:radial-gradient(circle,#c9b8ff,#b13bff);
  animation-delay:-5s}
.gallery-orb-3{width:240px;height:240px;left:42%;bottom:-90px;background:radial-gradient(circle,#ffe0a3,#ff9e6b);
  animation-delay:-9s}
@keyframes orbFloat{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(24px,-30px) scale(1.08)}}

/* 漂浮爱心 */
.g-hearts{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.g-heart{position:absolute;bottom:-40px;color:#ffb3cd;opacity:.6;animation:gRise linear infinite;
  filter:drop-shadow(0 2px 6px rgba(230,73,128,.3))}
@keyframes gRise{to{transform:translateY(-115vh) rotate(40deg);opacity:0}}

.gallery-hero-inner{position:relative;z-index:1}
.gallery-kicker{letter-spacing:.4em;font-size:.8rem;color:#e64980;font-weight:700;margin-bottom:10px;
  animation:fadeUp .8s both}
.gallery-title{font-size:clamp(2.2rem,6vw,3.6rem);font-weight:800;line-height:1.1;margin:0;
  background:linear-gradient(135deg,#ff6b9d,#e64980 55%,#b13bff);-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:fadeUp .8s .08s both}
.gallery-sub{color:#a98;margin-top:12px;font-size:clamp(.9rem,2vw,1.05rem);animation:fadeUp .8s .16s both}
.gallery-stats{display:flex;gap:36px;justify-content:center;margin-top:26px;animation:fadeUp .8s .24s both}
.g-stat{display:flex;flex-direction:column;align-items:center}
.g-stat b{font-size:1.8rem;color:#e64980;font-weight:800;line-height:1}
.g-stat span{font-size:.8rem;color:#b08a99;margin-top:4px}
@keyframes fadeUp{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

/* 工具栏：筛选 + 视图切换 */
.gallery-body{padding:36px clamp(16px,4vw,64px) 64px;max-width:1340px;margin:0 auto;position:relative}
.gallery-body::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(460px circle at var(--mx,50%) var(--my,40%),rgba(255,107,157,.10),transparent 60%)}
.gallery-body.spot::before{opacity:1}
.gallery-toolbar{display:flex;gap:16px;flex-wrap:wrap;align-items:center;justify-content:center;margin-bottom:30px}
.gallery-filters{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.g-pill{border:1.5px solid var(--pink-line,#ffd3e2);background:#fff;color:#e64980;
  padding:8px 18px;border-radius:999px;cursor:pointer;font-size:.9rem;font-family:inherit;
  transition:transform .15s,background .2s,box-shadow .2s}
.g-pill:hover{transform:translateY(-2px)}
.g-pill.active{background:linear-gradient(135deg,#ff6b9d,#e64980);color:#fff;border-color:transparent;
  box-shadow:0 6px 18px rgba(230,73,128,.32)}
.g-views{display:flex;gap:6px;background:#fff;border:1.5px solid var(--pink-line,#ffd3e2);border-radius:999px;padding:4px}
.g-view{width:34px;height:30px;border:none;background:none;cursor:pointer;border-radius:999px;color:#e64980;font-size:1rem;
  transition:.2s}
.g-view.active{background:linear-gradient(135deg,#ff6b9d,#e64980);color:#fff}

/* 瀑布流：JS 智能分列（最短列优先，平衡高度） */
.gallery-grid{display:flex;gap:16px;align-items:flex-start}
.gallery-grid.is-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:16px}
.g-col{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:16px}
@media (max-width:760px){.gallery-grid{gap:12px}.g-col{gap:12px}}

.g-item{perspective:900px;opacity:0;transform:translateY(26px);transition:opacity .6s ease,transform .6s ease}
.gallery-grid.is-grid .g-item{margin-bottom:0}
.g-item.reveal{opacity:1;transform:none}

.g-item-inner{position:relative;border-radius:16px;overflow:hidden;cursor:pointer;
  background:linear-gradient(135deg,#ffe3ec,#eef0ff);
  box-shadow:0 6px 20px rgba(230,73,128,.10);
  transform-style:preserve-3d;transition:transform .18s ease,box-shadow .25s ease;will-change:transform}
.g-item-inner:hover{box-shadow:0 18px 46px rgba(230,73,128,.30)}
.gallery-grid.is-grid .g-item-inner{aspect-ratio:1/1}

.g-item-inner img{display:block;width:100%;height:auto;
  filter:blur(16px);transform:scale(1.06);transition:filter .7s ease,transform .7s ease}
.gallery-grid.is-grid .g-item-inner img{height:100%;object-fit:cover}
.g-item-inner.loaded img{filter:none;transform:none}
.g-item-inner:hover img{transform:scale(1.08)}

.g-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;
  padding:14px;color:#fff;opacity:0;transition:opacity .3s;
  background:linear-gradient(180deg,transparent 35%,rgba(60,20,40,.82) 100%)}
.g-item-inner:hover .g-overlay{opacity:1}
.g-cap{font-size:.92rem;font-weight:600;line-height:1.4;text-shadow:0 1px 4px rgba(0,0,0,.4);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.g-sub{font-size:.74rem;opacity:.9;margin-top:4px;text-shadow:0 1px 4px rgba(0,0,0,.4)}
.g-like{position:absolute;top:10px;right:10px;background:rgba(255,255,255,.85);border:none;
  border-radius:999px;padding:5px 10px;font-size:.78rem;cursor:pointer;color:#e64980;
  opacity:0;transform:translateY(-4px);transition:.25s}
.g-item-inner:hover .g-like{opacity:1;transform:none}
.g-like.liked{background:#e64980;color:#fff}

.gallery-empty{text-align:center;color:#c9a;padding:60px 20px}
.gallery-empty-emoji{font-size:3rem;margin-bottom:10px}

/* ── 灯箱 ── */
.lightbox{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center}
.lightbox.open{display:flex}
.lb-backdrop{position:absolute;inset:0;background-size:cover;background-position:center;
  filter:blur(26px) saturate(1.25);transform:scale(1.1);animation:lbFade .4s ease both}
.lb-backdrop::after{content:"";position:absolute;inset:0;background:rgba(30,12,22,.5)}
@keyframes lbFade{from{opacity:0}to{opacity:1}}
.lb-stage{position:relative;z-index:2;max-width:min(92vw,1100px);max-height:78vh;
  display:flex;align-items:center;justify-content:center;animation:lbPop .35s cubic-bezier(.2,.8,.2,1) both;touch-action:pan-y}
@keyframes lbPop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.lb-stage img{max-width:100%;max-height:78vh;border-radius:14px;box-shadow:0 30px 80px rgba(0,0,0,.5);
  display:block;background:#fff;animation:kenburns 16s ease-in-out infinite alternate}
.lb-stage img.kb{animation:kenburns 16s ease-in-out infinite alternate}
@keyframes kenburns{from{transform:scale(1)}to{transform:scale(1.08) rotate(.6deg)}}
.lb-btn{position:absolute;z-index:3;border:none;cursor:pointer;color:#fff;background:rgba(255,255,255,.14);
  border-radius:50%;display:flex;align-items:center;justify-content:center;transition:.2s;backdrop-filter:blur(4px)}
.lb-btn:hover{background:rgba(255,255,255,.3)}
.lb-close{top:22px;right:22px;width:46px;height:46px;font-size:1.2rem}
.lb-prev,.lb-next{top:50%;transform:translateY(-50%);width:54px;height:54px;font-size:2rem;line-height:1}
.lb-prev{left:22px}
.lb-next{right:22px}
@media (max-width:600px){.lb-prev{left:8px}.lb-next{right:8px}.lb-prev,.lb-next{width:44px;height:44px;font-size:1.6rem}}
.lb-caption{position:absolute;z-index:3;left:50%;bottom:22px;transform:translateX(-50%);
  width:min(92vw,820px);text-align:center;color:#fff}
.lb-meta{display:flex;gap:14px;justify-content:center;font-size:.82rem;opacity:.9;margin-bottom:6px}
.lb-text{font-size:1rem;font-weight:600;min-height:1.2em;text-shadow:0 1px 6px rgba(0,0,0,.5);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.lb-like{margin-top:12px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);
  color:#fff;border-radius:999px;padding:8px 18px;cursor:pointer;font-size:.9rem;transition:.2s}
.lb-like:hover{background:rgba(255,255,255,.28)}
.lb-like.liked{background:#e64980;border-color:#e64980}

@media (prefers-reduced-motion:reduce){
  .gallery-orb,.g-heart,.lb-stage img,.g-item{animation:none!important;transition:none!important}
  .g-item{opacity:1;transform:none}
}
