/* NP Gallery - client-facing gallery. Mobile-first, no dependencies. */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  background:#0e0e10;color:#f2f2f3}
button{font:inherit;cursor:pointer}
img{display:block}

/* Hero: cinematic full-bleed cover with slide-up text on load (Pixieset-style) */
@keyframes heroUp{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
.g-hero-brand{animation:heroUp .9s cubic-bezier(.2,.6,.2,1) both}
.g-hero-inner>*{animation:heroUp .9s cubic-bezier(.2,.6,.2,1) both}
.g-hero-inner>*:nth-child(2){animation-delay:.12s}
.g-hero-inner>*:nth-child(3){animation-delay:.24s}
.g-hero-cta{animation:heroUp .9s .3s cubic-bezier(.2,.6,.2,1) both}
.g-brand,.g-date,.g-meta{animation:heroUp .9s cubic-bezier(.2,.6,.2,1) both}
@media (prefers-reduced-motion:reduce){
  .g-hero *,.g-hero-brand,.g-hero-cta{animation:none!important}
  #lbImg{transition:none!important}
}
/* Hero */
.g-hero{position:relative;min-height:100vh;background:#1a1a1d center/cover no-repeat;
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.g-hero-shade{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(0,0,0,.28) 0%,rgba(0,0,0,.12) 35%,rgba(0,0,0,.12) 65%,rgba(0,0,0,.45) 100%)}
.g-hero-brand{position:absolute;bottom:28px;left:0;right:0;text-align:center;color:#fff;font-size:12px;letter-spacing:4px;text-transform:uppercase;opacity:.95;z-index:2;white-space:nowrap}
.g-hero-inner{position:relative;padding:40px 24px;color:#fff;z-index:2;max-width:900px}
.g-hero-inner h1{color:#fff;text-shadow:0 2px 12px rgba(0,0,0,.5);margin:0 0 12px;font-size:clamp(26px,3vw,40px);font-weight:400;letter-spacing:.14em;text-transform:uppercase;line-height:1.25}
.g-hero-inner .g-date{color:#fff;opacity:.9;font-size:13px;letter-spacing:3px;text-transform:uppercase;margin:0}
.g-hero-cta{position:relative;z-index:2;margin-top:28px}
.g-btn.outline{display:inline-block;padding:13px 36px;border:1px solid rgba(255,255,255,.9);color:#fff;text-decoration:none;font-size:12px;letter-spacing:3px;text-transform:uppercase;border-radius:2px;background:transparent;transition:background .2s}
.g-btn.outline:hover{background:rgba(255,255,255,.15)}
.g-brand{font-size:12px;letter-spacing:3px;text-transform:uppercase;opacity:.75;margin-bottom:8px}
.g-meta{margin:0;opacity:.8;font-size:14px}

/* Toolbar: title + set tabs + actions (scrolls away with the page, Pixieset-style) */
.g-toolbar{background:#fff;border-bottom:1px solid #e8e8e8;display:flex;align-items:center;gap:24px;padding:0 20px;min-height:64px}
/* toolbar tabs - match Pixieset exactly */
.g-tabs{display:flex;gap:24px;overflow-x:auto;scrollbar-width:none;justify-content:flex-start;margin-left:24px;flex:1 1 auto;min-width:0}
.g-tabs::-webkit-scrollbar{display:none}
.g-tab{background:none;border:none;color:#8a8a8a;font-size:10px;font-weight:400;letter-spacing:1.6px;text-transform:uppercase;cursor:pointer;padding:8px 2px;white-space:nowrap;position:relative;text-decoration:none}
.g-tab.on{color:#1a1a1a;font-weight:400}
/* no underline on active tab per user request */
.g-btn{background:#232327;color:#f2f2f3;border:1px solid #3a3a40;border-radius:10px;
  padding:9px 14px;font-size:13px;text-decoration:none;display:inline-block}
.g-btn.primary{background:#f2f2f3;color:#111;border-color:#f2f2f3}
.g-btn.small{padding:6px 10px;font-size:12px}
.g-btn.on{background:#e5484d;border-color:#e5484d;color:#fff}

/* Grid */


.g-cell.hide{display:none}

/* Favorites panel */
.g-panel{position:fixed;top:0;right:0;bottom:0;width:min(340px,88vw);z-index:60;
  background:#17171a;border-left:1px solid #2c2c31;padding:18px;overflow-y:auto;
  box-shadow:-8px 0 30px rgba(0,0,0,.5);color:#f2f2f3}
.g-panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.g-panel-head h2{font-size:12px;margin:0;letter-spacing:2px;text-transform:uppercase;font-weight:600;color:#bbb}
.g-x{background:transparent;border:0;color:#999;font-size:16px}
.g-field{display:block;font-size:13px;color:#bbb;margin-bottom:14px}
.g-field input,.g-row input{width:100%;padding:10px;border-radius:8px;border:1px solid #3a3a40;
  background:#101013;color:#fff;font-size:14px;margin-top:6px}
.g-row{display:flex;gap:8px;margin-bottom:14px}
.g-row input{margin-top:0}
.g-list{display:flex;justify-content:space-between;align-items:center;
  padding:10px 12px;border:1px solid #2c2c31;border-radius:10px;margin-bottom:8px;font-size:14px}
.g-list button{background:transparent;border:0;color:#f2f2f3;text-align:left;padding:0}
.g-list .n{color:#999;font-size:12px;margin-left:8px}
.g-list .add{color:#e5484d;font-size:18px;line-height:1}

/* Lightbox: Pixieset Gamma-style chrome — thin light chevrons, top-left back arrow,
   cross-fade + subtle 1.02x Ken Burns scale over 400ms between photos. */
.g-lightbox{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.94);
  display:flex;align-items:center;justify-content:center}
.g-lightbox[hidden]{display:none}
#lbImg{max-width:100%;max-height:100%;object-fit:contain;
  transition:opacity .4s ease,transform .4s ease;will-change:opacity,transform}
#lbImg.lb-swap{opacity:0;transform:scale(1.02)}
.lb-x{position:absolute;top:14px;left:16px;background:transparent;border:0;
  color:#fff;z-index:2;padding:8px;opacity:.85}
.lb-x:hover{opacity:1}
.lb-x svg{display:block}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);background:transparent;
  border:0;color:#fff;z-index:2;padding:18px 10px;opacity:.75}
.lb-nav:hover{opacity:1}
.lb-nav svg{display:block}
.lb-nav[style*="hidden"]{pointer-events:none}
.lb-prev{left:6px}.lb-next{right:6px}
.lb-bar{position:absolute;bottom:0;left:0;right:0;display:flex;gap:10px;align-items:center;
  justify-content:center;padding:14px;background:linear-gradient(0deg,rgba(0,0,0,.7),transparent)}
.lb-count{color:#bbb;font-size:13px;min-width:60px;text-align:center}
#lbHeart.liked{background:#e5484d;border-color:#e5484d;color:#fff}

/* Modals */
.g-modal{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.6);
  display:flex;align-items:center;justify-content:center;padding:20px}
.g-modal[hidden]{display:none}
.g-modal-box{background:#17171a;border:1px solid #2c2c31;border-radius:14px;
  padding:22px;width:min(360px,100%);color:#f2f2f3}
.g-modal-box h3{margin:0 0 8px;font-size:17px}
.g-col{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.g-muted{color:#999;font-size:13px;margin:0 0 6px}
.g-err{color:#ff8589;font-size:13px}

/* Download chooser (Pixieset-style set/size picker) */
#dlChooseModal .g-modal-box{width:min(480px,100%);max-height:calc(100vh - 40px);overflow-y:auto}
.dl-choose h4{margin:20px 0 6px;font-size:15px;font-weight:600}
.dl-choose h4:first-of-type{margin-top:12px}
.dl-list{display:flex;flex-direction:column}
.dl-check{display:flex;align-items:center;gap:10px;padding:10px 6px;font-size:15px;cursor:pointer;border-bottom:1px solid #26262b}
.dl-list .dl-check:last-child{border-bottom:0}
.dl-check input{width:18px;height:18px;flex:none;accent-color:#f2f2f3;cursor:pointer}
.dl-checkname{flex:1;text-align:left}
.dl-checkcount{color:#999;font-size:13px;flex:none}
.dl-checkmark{width:18px;flex:none;text-align:center;font-size:15px}
.dl-start{width:100%;padding:14px;letter-spacing:.12em;text-transform:uppercase}

/* Password / error page */
.g-error{max-width:420px;margin:15vh auto;padding:24px;text-align:center}
.g-error h1{font-size:20px;margin-bottom:16px}
.g-error form{margin-top:12px}
.g-error label{display:block;text-align:left;font-size:14px;color:#bbb;margin-bottom:12px}
.g-error input{width:100%;padding:11px;border-radius:8px;border:1px solid #3a3a40;
  background:#101013;color:#fff;font-size:15px;margin-top:6px}
.g-error .g-btn{width:100%;margin-top:4px}
/* Infinite-scroll sentinel: invisible tripwire that loads the next page. */
.g-sentinel{height:2px;visibility:hidden}
/* ZIP job progress bar (big galleries). */
.g-track{height:8px;border-radius:99px;background:#2c2c31;overflow:hidden;margin:12px 0}
.g-bar{height:100%;width:0;border-radius:99px;background:#bbb;transition:width .3s}

/* ============ Pixieset-style design themes ============ */
/* color themes */
body.theme-light{--cbg:#ffffff;--cink:#222222;--cacc:#3fb5a8;--csoft:#f6f6f6}
body.theme-gold{--cbg:#faf6ef;--cink:#3d3225;--cacc:#b8912f;--csoft:#f3ecdd}
body.theme-rose{--cbg:#fdf3f3;--cink:#4a2c2c;--cacc:#c4747c;--csoft:#f9e7e7}
body.theme-terracotta{--cbg:#f7f1e8;--cink:#3a2e22;--cacc:#b5651d;--csoft:#efe4d2}
body.theme-sand{--cbg:#f5efe2;--cink:#4a4033;--cacc:#a08c5b;--csoft:#ece2cc}
body.theme-olive{--cbg:#f4f5ec;--cink:#33391f;--cacc:#7a8450;--csoft:#e8ead6}
body.theme-agave{--cbg:#eef5f3;--cink:#1f3a34;--cacc:#4f8f7f;--csoft:#ddebe6}
body.theme-sea{--cbg:#eef3f7;--cink:#1f3242;--cacc:#4a7fa0;--csoft:#dde7ee}
body[class*="theme-"]{background:var(--cbg);color:var(--cink)}
body[class*="theme-"] .g-toolbar{background:#fff;border-bottom:1px solid #eee;display:flex;align-items:center;gap:24px;padding:0 20px;min-height:64px}
body[class*="theme-"] .g-tab{background:none;border:none;color:#888;font-size:10px;font-weight:400;letter-spacing:1.6px;text-transform:uppercase;cursor:pointer;padding:8px 2px;white-space:nowrap;text-decoration:none}
body[class*="theme-"] .g-tab.on{color:#111;font-weight:400}
body[class*="theme-"] .g-btn.primary{background:var(--cacc);border-color:var(--cacc)}
body[class*="theme-"] .g-brand{color:var(--cacc)}
/* typography */
body.font-sans .g-hero h1{font-family:-apple-system,"Segoe UI",sans-serif;font-weight:600;letter-spacing:0}
body.font-serif .g-hero h1{font-family:Georgia,"Times New Roman",serif;font-weight:400}
body.font-modern .g-hero h1{font-family:"Helvetica Neue",Arial,sans-serif;font-weight:400;letter-spacing:.14em}
body.font-timeless .g-hero h1{font-family:Palatino,Georgia,serif;font-weight:300;letter-spacing:.08em}
body.font-bold .g-hero h1{font-family:-apple-system,"Segoe UI",sans-serif;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
body.font-subtle .g-hero h1{font-family:-apple-system,"Segoe UI",sans-serif;font-weight:300;text-transform:uppercase;letter-spacing:.3em}
body.font-modern .g-brand,body.font-subtle .g-brand,body.font-timeless .g-brand{letter-spacing:.3em}
/* cover: left */
.g-hero.cv-left{flex-direction:row;align-items:flex-end;justify-content:flex-start;text-align:left}
.g-hero.cv-left .g-hero-brand{top:32px;bottom:auto;left:40px;right:auto;text-align:left}
.g-hero.cv-left .g-hero-inner{text-align:left;padding-left:6vw}
.g-hero.cv-left .g-hero-cta{position:absolute;bottom:40px;right:40px;margin-top:0}
/* cover: novel */
.g-hero.cv-novel{min-height:70vh;display:flex;flex-direction:row;align-items:stretch;background:none;padding:0}
.cv-novel-text{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:40px 6vw;gap:12px}
.cv-novel-text h1{font-size:clamp(30px,5vw,52px);margin:0}
.cv-novel-img{flex:1;background:center/cover no-repeat;min-height:70vh}
/* cover: vintage */
.g-hero.cv-vintage{background:none;min-height:0;text-align:center;padding:34px 20px 10px;display:block}
.g-hero.cv-vintage .g-brand{margin-bottom:18px}
.cv-vintage-img{max-width:900px;width:92%;max-height:62vh;object-fit:cover;border-radius:4px;margin:0 auto;display:block}
.g-hero.cv-vintage .g-date{letter-spacing:.25em;font-size:12px;margin:22px 0 8px;opacity:.75}
.g-hero.cv-vintage h1{font-size:clamp(28px,5vw,46px);margin:0 0 18px}
.g-hero.cv-vintage .g-btn{margin-bottom:26px}
/* cover: frame */
.g-hero.cv-frame{min-height:72vh;background:#111 center/cover no-repeat;background-image:var(--cvimg);display:flex;align-items:center;justify-content:center}
.cv-frame-box{border:10px solid #fff;outline:1px solid #999;background:rgba(0,0,0,.35);padding:60px 70px;text-align:center;color:#fff;max-width:80%}
.cv-frame-box h1{color:#fff}
/* cover: stripe */
.g-hero.cv-stripe .g-hero-inner{text-align:center}
.g-hero.cv-stripe .g-hero-inner::before,.g-hero.cv-stripe .g-hero-inner::after{content:"";display:block;width:64px;height:2px;background:#fff;margin:14px auto}
/* cover: divider */
.g-hero.cv-divider{background:none;min-height:0;text-align:center;padding:34px 0 0;display:block}
.g-hero.cv-divider h1{margin:6px 0}
.g-hero.cv-divider .g-date{letter-spacing:.25em;font-size:12px;opacity:.75}
.g-hero.cv-divider h1::after{content:"";display:block;width:60px;height:2px;background:var(--cacc);margin:16px auto 22px}
.cv-divider-img{width:100%;max-height:56vh;object-fit:cover;display:block}
/* cover: journal */
.g-hero.cv-journal{background:none;min-height:0;display:flex;flex-direction:row;gap:5vw;align-items:center;justify-content:center;padding:60px 6vw;text-align:left}
.cv-journal-img{width:34%;max-width:380px;aspect-ratio:4/5;object-fit:cover;border-radius:4px}
.cv-journal-text h1{font-size:clamp(28px,4.5vw,44px)}
.g-date{font-size:12px;opacity:.75;margin:0}
/* grid styles */
body.thumbs-large.grid-horizontal .g-cell{flex-basis:340px}

/* favorite note in lightbox */
.lb-note{position:absolute;bottom:64px;left:50%;transform:translateX(-50%);width:min(480px,86vw)}
.lb-note[hidden]{display:none}
.lb-note input{width:100%;padding:10px 14px;border:1px solid rgba(255,255,255,.35);border-radius:20px;background:rgba(0,0,0,.55);color:#fff;font-size:14px;box-sizing:border-box}
.lb-note input::placeholder{color:#bbb}


.g-more-wrap{text-align:center;padding:36px 20px 60px}
.g-viewmore{background:#1a1a1a;color:#fff;border:none;padding:16px 48px;font-size:13px;letter-spacing:3px;text-transform:uppercase;cursor:pointer;border-radius:2px}
.g-viewmore:hover{background:#333}
.g-viewmore[hidden]{display:none}

.g-hover{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:flex-end;gap:18px;padding:24px 16px 14px;background:linear-gradient(180deg,transparent,rgba(0,0,0,.55));opacity:0;transition:opacity .2s;pointer-events:none}
.g-cell:hover .g-hover{opacity:1;pointer-events:auto}
.g-hbtn{background:none;border:none;cursor:pointer;padding:6px;opacity:.92}
.g-hbtn:hover{opacity:1;transform:scale(1.12)}
.g-hbtn.liked svg path{fill:#fff}

.g-tb-left{flex:none;min-width:0;text-decoration:none;color:inherit}
.g-tb-title{font-size:17px;font-weight:700;letter-spacing:2px;text-transform:uppercase;white-space:nowrap;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis}
@media(max-width:640px){
  .g-toolbar{flex-wrap:wrap;gap:8px 12px;padding:10px 12px;min-height:0}
  .g-tabs{order:3;flex:1 1 100%;margin-left:0;gap:18px}
  .g-tb-title{font-size:14px;letter-spacing:1px}
  .g-actions{gap:10px}
}
.g-tb-brand{font-size:11px;font-weight:400;letter-spacing:2.5px;color:#999;text-transform:uppercase;margin-top:3px}
.g-actions{display:flex;gap:16px;align-items:center;margin-left:auto}
.g-icbtn{background:none;border:none;cursor:pointer;color:#999;padding:4px}
.g-icbtn:hover{color:#111}

/* Pixieset-style masonry - images at natural aspect ratio, never cropped */
.g-grid{display:block;columns:2;column-gap:6px;padding:16px 20px 5px;margin:0}
@media(min-width:700px){.g-grid{columns:3;column-gap:6px;padding:16px 20px 5px}}
@media(min-width:1100px){.g-grid{columns:4;column-gap:6px;padding:16px 20px 5px}}
@media(min-width:1600px){.g-grid{columns:5;column-gap:6px;padding:16px 20px 5px}}
.g-grid .g-cell{display:inline-block;vertical-align:top;width:100%;margin:0 0 6px;position:relative;overflow:hidden;background:#f5f5f5;break-inside:avoid;cursor:zoom-in;line-height:0}
.g-grid .g-cell img{width:100%;height:auto;display:block;vertical-align:top;background-repeat:no-repeat;background-size:cover;background-position:center}

/* Row-major masonry (v55): cells are absolutely positioned by JS in DOM
   order, so the visual reading order matches the saved sort order. CSS
   columns fill down column 1 first, which scrambled chronological sorts.
   Scoped behind .js-masonry (added by layoutMasonry only after a
   successful layout) so no-JS still gets the plain column layout. */
body.grid-vertical.js-masonry .g-grid{position:relative;display:block;columns:auto;padding:0;margin:16px 20px 5px}
body.grid-vertical.js-masonry .g-grid .g-cell{position:absolute;left:0;top:0;margin:0}

/* Justified no-crop grid (Zenfolio-style): fixed row height, native aspect ratios,
   flex-grow proportional to aspect => rows fill evenly without cropping. */
body.grid-justified .g-grid{display:flex;flex-wrap:wrap;columns:auto;column-gap:0}
body.grid-justified .g-grid .g-cell{display:block;width:auto;flex:0 1 auto;height:260px;margin:0 6px 6px 0;break-inside:auto}
body.grid-justified .g-grid .g-cell img{height:100%;width:auto;max-width:none}
@media(max-width:700px){body.grid-justified .g-grid .g-cell{height:170px}}

/* Flowing set sections: the gallery runs from the first set to the
   last, each introduced by its name and a download-this-set button. */
.g-setblock{margin:0}
.g-sethead{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:30px 20px 0}
.g-setblock:first-child .g-sethead{padding-top:12px}
.g-setname{font-size:26px;font-weight:600;margin:0;letter-spacing:.02em}
body.font-serif .g-setname{font-family:Georgia,"Times New Roman",serif;font-weight:400}
body.font-modern .g-setname{font-family:"Helvetica Neue",Arial,sans-serif;font-weight:400;letter-spacing:.14em}
body.font-timeless .g-setname{font-family:Palatino,Georgia,serif;font-weight:300;letter-spacing:.08em}
body.font-bold .g-setname{font-weight:800;text-transform:uppercase;letter-spacing:.04em}
body.font-subtle .g-setname{font-weight:300;text-transform:uppercase;letter-spacing:.3em}
.g-setdl{flex:none;background:none;border:1px solid #b99b57;color:#8a6d2f;border-radius:99px;padding:7px 16px;font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer}
.g-setdl:hover{background:#b99b57;color:#fff}
.g-favbar{display:flex;align-items:center;gap:14px;padding:18px 20px 0;font-weight:700}
.g-empty{padding:34px 20px;color:#999}
#dlEmailInput,#favNameInput{width:100%;box-sizing:border-box;padding:11px 13px;border:1px solid #3a3a40;border-radius:8px;font-size:15px;margin-bottom:10px;background:#101013;color:#fff}
#dlEmailInput::placeholder,#favNameInput::placeholder{color:#888}
