.project-gallery{--pg-accent:var(--purple,#6b3fe0);--pg-line:rgba(27,23,36,0.14);--pg-ink:var(--ink,#1b1724);display:grid;gap:18px}.pg-frame{position:relative;overflow:hidden;border-radius:24px;aspect-ratio:16/9;background:#15121c;touch-action:pan-y;user-select:none}.pg-track{display:flex;height:100%;transition:transform .7s cubic-bezier(.22,1,.36,1);will-change:transform}.pg-slide{position:relative;flex:0 0 100%;height:100%;margin:0;overflow:hidden}.pg-backdrop{position:absolute;inset:-40px;background-size:cover;background-position:50%;filter:blur(36px) saturate(1.2);opacity:.55;transform:scale(1.1)}.pg-slide .pg-img{object-fit:contain;z-index:1}.pg-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.pg-caption{display:flex;align-items:baseline;gap:14px;min-width:0}.pg-count{font-size:13px;font-weight:700;letter-spacing:.08em;color:var(--pg-accent);font-variant-numeric:tabular-nums}.pg-caption p{margin:0;color:var(--pg-ink);animation:pg-fade .5s ease}.pg-controls{display:flex;align-items:center;gap:8px}.pg-btn{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:50%;border:1px solid var(--pg-line);background:#fff;color:var(--pg-ink);cursor:pointer;transition:background-color .15s,color .15s,border-color .15s}.pg-btn:hover{background:var(--pg-accent);border-color:var(--pg-accent);color:#fff}.pg-btn:focus-visible,.pg-dot:focus-visible{outline:2px solid var(--pg-accent);outline-offset:3px}.pg-btn-ghost{border-color:transparent;background:transparent}.pg-dots{display:flex;gap:6px;padding:0 4px}.pg-dot{padding:8px 0;background:none;border:0;cursor:pointer}.pg-dot-track{display:block;width:22px;height:4px;border-radius:4px;background:var(--pg-line);overflow:hidden;transition:width .3s}.pg-dot.is-active .pg-dot-track{width:44px}.pg-dot-fill{display:block;height:100%;width:100%;background:var(--pg-accent);transform-origin:left;animation:pg-progress var(--pg-duration) linear forwards}.pg-dot-fill.is-static,.project-gallery.is-paused .pg-dot-fill{animation-play-state:paused}.pg-dot-fill.is-static{animation:none}@keyframes pg-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes pg-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (max-width:640px){.pg-frame{aspect-ratio:4/5;border-radius:18px}.pg-dot-track{width:14px}.pg-dot.is-active .pg-dot-track{width:30px}}@media (prefers-reduced-motion:reduce){.pg-track{transition:none}.pg-caption p{animation:none}}