/* PongPongPhotos — shared stylesheet
   Tokens mirror tailwind.config.ts so the preview and the real app stay aligned. */

:root{
  --paper:#E9E6DF; --paper-light:#F5F3EF; --paper-dark:#D8D4CB;
  --ink:#16130F; --ink-soft:#3A352E; --ink-mute:#6E675C;
  --silver:#A8A29A; --cyan:#1F4E79; --cyan-light:#2E6DA4;
  --success:#3F6B4A; --warning:#8A6A22; --danger:#8C3A2E;
  --gutter:clamp(1.25rem,5vw,5rem);
  --section:clamp(3.5rem,10vh,7rem);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{background:var(--paper);color:var(--ink);font-family:'Inter',system-ui,sans-serif;font-weight:300;line-height:1.6;-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}
:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}
::selection{background:var(--cyan);color:var(--paper-light)}
h1,h2,h3,h4{font-family:'Fraunces',Georgia,serif;font-weight:400;text-wrap:balance}

.label{font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute)}
.label-ink{font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;color:var(--silver)}
.mono{font-family:'IBM Plex Mono',monospace}
.wrap{max-width:96rem;margin:0 auto;padding-inline:var(--gutter)}
.narrow{max-width:60rem;margin:0 auto;padding-inline:var(--gutter)}

.skip{position:absolute;left:1rem;top:1rem;z-index:200;background:var(--ink);color:var(--paper-light);padding:.6rem 1rem;transform:translateY(-6rem);transition:transform .2s;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase}
.skip:focus{transform:none}

.note{background:var(--cyan);color:var(--paper-light);padding:.7rem var(--gutter);font-family:'IBM Plex Mono',monospace;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;text-align:center}

/* ── Header ─────────────────────────────── */
header{position:sticky;top:0;z-index:50;background:rgba(233,230,223,.93);backdrop-filter:blur(12px);border-bottom:1px solid rgba(22,19,15,.1);padding-block:1.1rem}
header.transparent{position:fixed;left:0;right:0;background:transparent;backdrop-filter:none;border-bottom-color:transparent}
header.transparent.scrolled{background:rgba(233,230,223,.93);backdrop-filter:blur(12px);border-bottom-color:rgba(22,19,15,.1)}
.nav{display:flex;align-items:center;justify-content:space-between;gap:1.5rem}
.brand{font-family:'Fraunces',serif;font-size:1.05rem;letter-spacing:-.01em}
.brand b{font-weight:500}
header.transparent .brand{color:var(--paper-light)}
header.transparent.scrolled .brand{color:var(--ink)}
.nav-links{display:none;gap:1.9rem}
@media(min-width:960px){.nav-links{display:flex}}
.nav-links a{font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);transition:color .3s;position:relative;padding-block:.2rem}
.nav-links a:hover{color:var(--ink)}
.nav-links a[aria-current=page]{color:var(--ink)}
.nav-links a[aria-current=page]::after{content:'';position:absolute;left:0;right:0;bottom:-.2rem;height:1px;background:var(--cyan)}
header.transparent .nav-links a{color:rgba(245,243,239,.75)}
header.transparent .nav-links a:hover,header.transparent .nav-links a[aria-current=page]{color:var(--paper-light)}
header.transparent.scrolled .nav-links a{color:var(--ink-mute)}
header.transparent.scrolled .nav-links a:hover,header.transparent.scrolled .nav-links a[aria-current=page]{color:var(--ink)}
.nav-right{display:flex;align-items:center;gap:.6rem}
.menu-btn{display:block;padding:.5rem}
@media(min-width:960px){.menu-btn{display:none}}
.menu-btn span{display:block;width:20px;height:1px;background:currentColor;margin-block:5px}
header.transparent .menu-btn{color:var(--paper-light)}
header.transparent.scrolled .menu-btn{color:var(--ink)}
.mobile-nav{display:none;border-top:1px solid rgba(22,19,15,.1);margin-top:1rem;padding-top:1rem}
.mobile-nav.open{display:block}
.mobile-nav a{display:block;padding:.7rem 0;font-family:'IBM Plex Mono',monospace;font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;border-bottom:1px solid rgba(22,19,15,.07)}

/* ── Buttons ────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.85rem 1.6rem;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;transition:background .3s,color .3s,border-color .3s;text-align:center}
.btn-primary{background:var(--ink);color:var(--paper-light)}
.btn-primary:hover{background:var(--cyan)}
.btn-secondary{border:1px solid rgba(22,19,15,.25);color:var(--ink)}
.btn-secondary:hover{background:var(--ink);color:var(--paper-light);border-color:var(--ink)}
.btn-onink{background:var(--paper-light);color:var(--ink)}
.btn-onink:hover{background:var(--cyan-light);color:var(--paper-light)}
.btn-outline-ink{border:1px solid rgba(245,243,239,.4);color:var(--paper-light)}
.btn-outline-ink:hover{background:var(--paper-light);color:var(--ink)}
.btn-sm{padding:.55rem 1rem;font-size:.625rem}
.btn:disabled,.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed}
header .btn{padding:.65rem 1.2rem}
header.transparent .btn-secondary{border-color:rgba(245,243,239,.4);color:var(--paper-light)}
header.transparent .btn-secondary:hover{background:var(--paper-light);color:var(--ink)}
header.transparent.scrolled .btn-secondary{border-color:rgba(22,19,15,.25);color:var(--ink)}
header.transparent.scrolled .btn-secondary:hover{background:var(--ink);color:var(--paper-light)}

/* ── Page furniture ─────────────────────── */
section{padding-block:var(--section)}
.page-head{padding-block:clamp(3rem,9vh,6rem) clamp(2rem,5vh,3.5rem);border-bottom:1px solid rgba(22,19,15,.15)}
.page-head h1{font-size:clamp(2.4rem,7vw,5.5rem);line-height:.92;letter-spacing:-.03em}
.page-head .label{margin-bottom:1.25rem;display:flex;align-items:center;gap:1rem}
.page-head .label::after{content:'';height:1px;flex:1;max-width:7rem;background:rgba(22,19,15,.2)}
.page-head p{max-width:52ch;margin-top:1.5rem;color:var(--ink-soft)}
.rule{display:flex;align-items:center;gap:1rem;border-top:1px solid rgba(22,19,15,.15);padding-top:1rem;margin-bottom:2.5rem}
.rule .line{flex:1;height:1px;background:rgba(22,19,15,.12)}
.lede{font-family:'Fraunces',serif;font-size:clamp(1.4rem,3vw,2.4rem);line-height:1.22;letter-spacing:-.02em;max-width:26ch}
.prose{max-width:56ch;color:var(--ink-soft)}
.prose p+p{margin-top:1rem}

/* ── Contact sheet (signature) ──────────── */
.sheet{display:grid;gap:1px;background:rgba(22,19,15,.15);grid-template-columns:repeat(2,1fr)}
@media(min-width:640px){.sheet{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1024px){.sheet{grid-template-columns:repeat(4,1fr)}}
.sheet.dense{grid-template-columns:repeat(3,1fr)}
@media(min-width:640px){.sheet.dense{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1024px){.sheet.dense{grid-template-columns:repeat(6,1fr)}}
.frame{position:relative;overflow:hidden;background:var(--ink);aspect-ratio:4/5;display:block}
.frame img{width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.16,1,.3,1),filter .8s}
.frame:hover img,.frame:focus-visible img{transform:scale(1.04);filter:contrast(1.07)}
.frame-no{position:absolute;top:.6rem;left:.7rem;z-index:3;opacity:.65}
.select{position:absolute;inset:7px;border:2px solid var(--cyan-light);border-radius:2px;opacity:0;transform:scale(1.05) rotate(-.5deg);transition:opacity .4s cubic-bezier(.16,1,.3,1),transform .4s cubic-bezier(.16,1,.3,1);pointer-events:none}
.frame:hover .select,.frame:focus-visible .select{opacity:1;transform:scale(1) rotate(-.5deg)}
.frame-cap{position:absolute;inset-inline:0;bottom:0;z-index:3;padding:2rem .8rem .8rem;background:linear-gradient(to top,rgba(22,19,15,.9),transparent);opacity:0;transform:translateY(.5rem);transition:opacity .45s,transform .45s cubic-bezier(.16,1,.3,1)}
.frame:hover .frame-cap,.frame:focus-visible .frame-cap{opacity:1;transform:none}
.frame-cap strong{display:block;font-family:'Fraunces',serif;font-weight:400;font-size:.95rem;color:var(--paper-light)}

/* heart toggle for private galleries */
.fav{position:absolute;top:.5rem;right:.5rem;z-index:4;width:2rem;height:2rem;display:grid;place-items:center;color:rgba(245,243,239,.75);transition:color .3s,transform .3s}
.fav:hover{color:var(--paper-light);transform:scale(1.12)}
.fav[aria-pressed=true]{color:var(--cyan-light)}
.fav svg{width:1.05rem;height:1.05rem;fill:none;stroke:currentColor;stroke-width:1.5}
.fav[aria-pressed=true] svg{fill:currentColor}

/* ── Filters ────────────────────────────── */
.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}
.filters button{padding:.5rem 1rem;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;border:1px solid rgba(22,19,15,.2);color:var(--ink-mute);transition:all .3s}
.filters button:hover{border-color:var(--ink);color:var(--ink)}
.filters button[aria-pressed=true]{background:var(--ink);color:var(--paper-light);border-color:var(--ink)}

/* ── Services list ──────────────────────── */
.svc-list{border-top:1px solid rgba(22,19,15,.15)}
.svc{display:grid;gap:.6rem;grid-template-columns:1fr;padding-block:2rem;border-bottom:1px solid rgba(22,19,15,.15);transition:padding-left .5s cubic-bezier(.16,1,.3,1),background .4s}
@media(min-width:820px){.svc{grid-template-columns:3rem 1fr 1.3fr auto;align-items:baseline;gap:2rem}}
.svc:hover{padding-left:1rem;background:rgba(245,243,239,.6)}
.svc h3{font-size:clamp(1.35rem,2.4vw,1.9rem);letter-spacing:-.02em}
.svc p{color:var(--ink-mute);font-size:.92rem;max-width:46ch}
.svc .from{font-family:'IBM Plex Mono',monospace;font-size:.85rem;white-space:nowrap}
.svc .from small{display:block;font-size:.625rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:.15rem}

/* ── Pricing tiers ──────────────────────── */
.tiers{display:grid;gap:1px;background:rgba(22,19,15,.15);border:1px solid rgba(22,19,15,.15)}
@media(min-width:900px){.tiers{grid-template-columns:repeat(3,1fr)}}
.tier{background:var(--paper);padding:2.5rem 2rem;display:flex;flex-direction:column}
.tier.feature{background:var(--ink);color:var(--paper-light)}
.tier.feature .label{color:var(--silver)}
.tier h3{font-size:1.55rem;margin-top:.7rem}
.tier .price{font-family:'Fraunces',serif;font-size:2.6rem;letter-spacing:-.03em;margin-block:1.1rem .2rem;line-height:1}
.tier .price sup{font-size:.95rem;vertical-align:super;opacity:.6}
.tier ul{margin:1.6rem 0;display:grid;gap:.65rem;flex:1}
.tier li{font-size:.88rem;padding-left:1.3rem;position:relative;color:var(--ink-soft)}
.tier.feature li{color:rgba(245,243,239,.8)}
.tier li::before{content:'';position:absolute;left:0;top:.62em;width:.5rem;height:1px;background:var(--cyan)}
.tier.feature li::before{background:var(--cyan-light)}

/* ── Forms ──────────────────────────────── */
.field{margin-bottom:1.4rem}
.field label{display:block;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:.5rem}
.field input,.field textarea,.field select{width:100%;border:1px solid rgba(22,19,15,.2);background:var(--paper-light);padding:.85rem 1rem;font-family:inherit;font-size:.95rem;color:var(--ink)}
.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--cyan);outline:none}
.field input::placeholder,.field textarea::placeholder{color:var(--silver)}
.field .hint{font-size:.78rem;color:var(--ink-mute);margin-top:.4rem}
.field-row{display:grid;gap:1.4rem;grid-template-columns:1fr}
@media(min-width:640px){.field-row{grid-template-columns:1fr 1fr}}

/* ── Booking wizard ─────────────────────── */
.steps-bar{display:flex;flex-wrap:wrap;gap:.4rem;border-top:1px solid rgba(22,19,15,.15);border-bottom:1px solid rgba(22,19,15,.15);padding-block:1rem;margin-bottom:2.5rem}
.steps-bar li{display:flex;align-items:center;gap:.5rem;font-family:'IBM Plex Mono',monospace;font-size:.625rem;letter-spacing:.14em;text-transform:uppercase;color:var(--silver);padding-right:.6rem}
.steps-bar li b{width:1.35rem;height:1.35rem;display:grid;place-items:center;border:1px solid currentColor;border-radius:50%;font-weight:400;font-size:.6rem}
.steps-bar li.done{color:var(--ink-mute)}
.steps-bar li.current{color:var(--cyan)}
.steps-bar li.current b{background:var(--cyan);color:var(--paper-light);border-color:var(--cyan)}

.opt-grid{display:grid;gap:1px;background:rgba(22,19,15,.15);border:1px solid rgba(22,19,15,.15);margin-bottom:2rem}
@media(min-width:700px){.opt-grid{grid-template-columns:repeat(3,1fr)}}
.opt{background:var(--paper-light);padding:1.5rem;text-align:left;transition:background .3s}
.opt:hover{background:#fff}
.opt[aria-pressed=true]{background:var(--ink);color:var(--paper-light)}
.opt[aria-pressed=true] .label{color:var(--silver)}
.opt h4{font-size:1.15rem;margin-block:.4rem .3rem}
.opt p{font-size:.82rem;color:var(--ink-mute)}
.opt[aria-pressed=true] p{color:rgba(245,243,239,.72)}

.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:rgba(22,19,15,.15);border:1px solid rgba(22,19,15,.15)}
.cal .dow{background:var(--paper);padding:.6rem 0;text-align:center;font-family:'IBM Plex Mono',monospace;font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute)}
.cal button,.cal .empty{background:var(--paper-light);aspect-ratio:1;display:grid;place-items:center;font-family:'IBM Plex Mono',monospace;font-size:.85rem;position:relative;transition:background .25s}
.cal .empty{background:var(--paper)}
.cal button:hover:not(:disabled){background:#fff}
.cal button:disabled{color:var(--paper-dark);background:var(--paper);cursor:not-allowed;text-decoration:line-through}
.cal button[aria-pressed=true]{background:var(--ink);color:var(--paper-light)}
.cal button.has-slots::after{content:'';position:absolute;bottom:.45rem;width:3px;height:3px;border-radius:50%;background:var(--cyan)}
.cal button[aria-pressed=true].has-slots::after{background:var(--paper-light)}
.slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.5rem,1fr));gap:.5rem;margin-top:1.5rem}
.slots button{border:1px solid rgba(22,19,15,.2);padding:.7rem;font-family:'IBM Plex Mono',monospace;font-size:.75rem;transition:all .25s}
.slots button:hover{border-color:var(--ink)}
.slots button[aria-pressed=true]{background:var(--ink);color:var(--paper-light);border-color:var(--ink)}

.summary{background:var(--paper-light);border:1px solid rgba(22,19,15,.15);padding:1.75rem;position:sticky;top:6rem}
.summary dl{display:grid;gap:.7rem;margin-block:1.25rem}
.summary .row{display:flex;justify-content:space-between;gap:1rem;font-size:.88rem}
.summary dt{color:var(--ink-mute)}
.summary dd{text-align:right;font-family:'IBM Plex Mono',monospace;font-size:.82rem}
.summary .total{border-top:1px solid rgba(22,19,15,.15);padding-top:.9rem;margin-top:.3rem;font-size:1rem}
.summary .total dd{font-size:1.05rem}
.summary .due{background:var(--paper);border:1px dashed rgba(31,78,121,.4);padding:.85rem 1rem;margin-top:1rem}

/* ── Portal ─────────────────────────────── */
.portal-shell{display:grid;grid-template-columns:1fr;min-height:100vh}
@media(min-width:1000px){.portal-shell{grid-template-columns:16rem 1fr}}
.portal-side{background:var(--ink);color:var(--silver);padding:2rem 1.5rem;display:flex;flex-direction:column;gap:2rem}
.portal-side .brand{color:var(--paper-light)}
.portal-side nav a{display:flex;align-items:center;justify-content:space-between;padding:.7rem .8rem;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;transition:background .3s,color .3s;margin-bottom:.15rem}
.portal-side nav a:hover{background:rgba(245,243,239,.07);color:var(--paper-light)}
.portal-side nav a[aria-current=page]{background:var(--cyan);color:var(--paper-light)}
.portal-side .pill{background:rgba(245,243,239,.15);padding:.1rem .45rem;font-size:.6rem;border-radius:2px}
.portal-main{padding:clamp(1.5rem,4vw,3rem);background:var(--paper)}

.cards{display:grid;gap:1px;background:rgba(22,19,15,.15);border:1px solid rgba(22,19,15,.15);margin-bottom:2.5rem}
@media(min-width:700px){.cards{grid-template-columns:repeat(4,1fr)}}
.card{background:var(--paper-light);padding:1.4rem}
.card .val{font-family:'Fraunces',serif;font-size:1.9rem;letter-spacing:-.02em;margin-top:.4rem;line-height:1}
.card .sub{font-size:.78rem;color:var(--ink-mute);margin-top:.35rem}

.panel{border:1px solid rgba(22,19,15,.15);background:var(--paper-light);margin-bottom:2rem}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1.1rem 1.4rem;border-bottom:1px solid rgba(22,19,15,.12);flex-wrap:wrap}
.panel-body{padding:1.4rem}
.list-row{display:grid;gap:.5rem;grid-template-columns:1fr;padding:1.1rem 1.4rem;border-bottom:1px solid rgba(22,19,15,.09);align-items:center}
@media(min-width:760px){.list-row{grid-template-columns:1.4fr 1fr 1fr auto;gap:1.5rem}}
.list-row:last-child{border-bottom:none}
.list-row strong{font-family:'Fraunces',serif;font-weight:400;font-size:1.05rem}

.badge{display:inline-block;padding:.22rem .6rem;font-family:'IBM Plex Mono',monospace;font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;border:1px solid currentColor}
.badge.paid{color:var(--success)}
.badge.due{color:var(--warning)}
.badge.locked{color:var(--danger)}
.badge.ready{color:var(--cyan)}

.locked-note{display:flex;gap:1rem;align-items:flex-start;background:rgba(140,58,46,.06);border:1px solid rgba(140,58,46,.25);padding:1.1rem 1.3rem}
.locked-note svg{flex-shrink:0;width:1.1rem;height:1.1rem;stroke:var(--danger);fill:none;stroke-width:1.5;margin-top:.15rem}

/* ── Quote / CTA / Footer ───────────────── */
.quote{background:var(--ink);color:var(--paper-light)}
.quote blockquote{font-family:'Fraunces',serif;font-size:clamp(1.4rem,3.4vw,2.7rem);line-height:1.24;letter-spacing:-.02em;max-width:21ch}
.quote figcaption{margin-top:1.75rem}
.cta{text-align:center;background:var(--paper-light)}
.cta h2{font-size:clamp(2rem,6vw,4.5rem);line-height:.96;letter-spacing:-.03em}
footer{background:var(--ink);color:var(--silver);padding-block:3.5rem 1.75rem}
.foot-grid{display:grid;gap:2.5rem;grid-template-columns:1fr}
@media(min-width:768px){.foot-grid{grid-template-columns:2fr 1fr 1fr 1fr}}
footer h5{font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.16em;text-transform:uppercase;color:var(--paper-light);margin-bottom:1rem}
footer li{margin-bottom:.5rem;font-size:.9rem}
footer a:hover{color:var(--paper-light)}
footer .brand-lg{font-family:'Fraunces',serif;font-size:1.5rem;color:var(--paper-light);letter-spacing:-.02em}
.foot-base{margin-top:3rem;padding-top:1.4rem;border-top:1px solid rgba(168,162,154,.2);display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;font-family:'IBM Plex Mono',monospace;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase}

.reveal{opacity:0;transform:translateY(1.1rem);transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.reveal.in{opacity:1;transform:none}

/* ── Lightbox ───────────────────────────── */
.lb{position:fixed;inset:0;z-index:100;background:rgba(10,9,7,.97);display:none;align-items:center;justify-content:center;padding:clamp(1rem,4vw,3rem)}
.lb.open{display:flex}
.lb img{max-width:100%;max-height:82vh;object-fit:contain}
.lb-bar{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:1.2rem clamp(1rem,4vw,2rem);color:var(--silver)}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:3rem;height:3rem;display:grid;place-items:center;color:var(--silver);transition:color .3s}
.lb-nav:hover{color:var(--paper-light)}
.lb-nav.prev{left:.5rem}.lb-nav.next{right:.5rem}
.lb-foot{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1.2rem clamp(1rem,4vw,2rem);flex-wrap:wrap}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  .reveal{opacity:1;transform:none}
}
