:root{
  --bg:#f6f7fb; --card:#fff; --text:#1a2333; --muted:#5b6577; --soft-muted:#7a8296;
  --border:#e4e7ef; --line:#eef0f6; --input-bg:#fff; --input-border:#d4d9e6;
  --chip:#e8ebf4; --soft:#fbfcff; --shadow:rgba(20,30,60,.05); --footer:#9aa2b4;
}
body.dark{
  --bg:#10141f; --card:#1a2130; --text:#e8ecf5; --muted:#9aa4b8; --soft-muted:#8590a6;
  --border:#2a3245; --line:#232b3d; --input-bg:#121826; --input-border:#39425a;
  --chip:#262f44; --soft:#151b2a; --shadow:rgba(0,0,0,.3); --footer:#5d6880;
}
body.warm{
  --bg:#faf7f1; --card:#fdfbf7; --text:#23303a; --muted:#7a7264; --soft-muted:#8a8275;
  --border:#e7e0d3; --line:#efe9dd; --input-bg:#fdfbf7; --input-border:#d8d1c4;
  --chip:#efe9dd; --soft:#f5f1e8; --shadow:rgba(60,50,30,.06); --footer:#a39a89;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.5}
h1,h2,h3{line-height:1.2}
a{color:var(--accent)}
main{max-width:980px;margin:0 auto;padding:24px 20px 60px}

.store-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;background:var(--card);border-bottom:3px solid var(--accent);flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:14px}
.brand h1{margin:0;font-size:22px}
.tagline{margin:2px 0 0;color:var(--muted);font-size:13px}
.logo{width:52px;height:52px;border-radius:10px;object-fit:contain}
.logo-fallback{display:flex;align-items:center;justify-content:center;background:var(--accent);color:#fff;font-size:26px;font-weight:700}
.store-header nav a{margin-left:14px;text-decoration:none;color:var(--muted);font-weight:600;font-size:14px}
.store-header nav a.active{color:var(--accent)}

.card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:22px;margin:18px 0;box-shadow:0 1px 3px var(--shadow)}
/* The step in play. A page of identical panels gives no sense of where you are,
   and every step past the first only appears once the one before it is done. */
.card.step-now{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
/* One pulse when a step arrives, or when a button points at one already on
   screen — which is what made "Start your card" look like a dead button. */
@keyframes step-flash{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 55%,transparent)}
  100%{box-shadow:0 0 0 14px transparent}
}
.step-flash{animation:step-flash .9s ease-out 2}
@media (prefers-reduced-motion:reduce){.step-flash{animation:none}}
.card h2{margin-top:0;font-size:19px}
.muted{color:var(--muted);font-size:14px}
.small{font-size:12.5px;color:var(--soft-muted)}

.btn[hidden]{display:none}
.btn{display:inline-block;background:var(--accent);color:#fff;border:none;border-radius:9px;padding:11px 22px;font-size:15px;font-weight:650;cursor:pointer;text-decoration:none}
.pop-badge{display:inline-block;background:var(--accent);color:#fff;font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:2px 9px;border-radius:999px;vertical-align:middle;margin-left:6px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.fld input:disabled{opacity:.45;cursor:not-allowed}
.btn.secondary{background:var(--chip);color:var(--text)}
.btn.sm{padding:6px 12px;font-size:13px}
.btn.danger{background:#c2410c}

.chip{display:inline-block;background:var(--chip);border-radius:999px;padding:4px 13px;font-size:13px;font-weight:600;margin:2px 4px 2px 0}

.drop{border:2px dashed var(--input-border);border-radius:12px;padding:26px;text-align:center;color:var(--muted);background:var(--soft)}

.spinner{width:34px;height:34px;border:4px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 12px}
@keyframes spin{to{transform:rotate(360deg)}}
.center{text-align:center}

table{width:100%;border-collapse:collapse;font-size:14px}
th{text-align:left;color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;padding:8px 10px;border-bottom:2px solid var(--border)}
td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
td.num,th.num{text-align:right}
.scroll-box{max-height:420px;overflow-y:auto;border:1px solid var(--line);border-radius:10px}
.scroll-box table{margin:0}
.scroll-box th{position:sticky;top:0;background:var(--card);z-index:1}

.order-row{display:flex;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.order-row:last-child{border-bottom:none}
.row-move{display:flex;flex-direction:column;gap:4px;flex:none}
.row-move .btn{padding:1px 9px;font-size:14px;line-height:1.5;border:1px solid var(--input-border)}
select,input[type=text],input[type=number],input[type=color],input[type=email],input[type=tel]{padding:8px 10px;border:1.5px solid var(--input-border);border-radius:8px;font-size:14px;background:var(--input-bg);color:var(--text)}
input[type=color]{padding:3px;height:44px;width:72px;cursor:pointer}
input[type=number].price{width:96px}
label.fld{display:block;margin:10px 0;font-size:14px;font-weight:600}
label.fld input,label.fld select{display:block;margin-top:4px;font-weight:400;width:100%;max-width:340px}
label.fld.check input[type=checkbox]{display:inline-block;width:auto;margin:0 7px 0 0;vertical-align:-2px}
form.inline{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
form.inline label{font-size:12.5px;font-weight:650;color:var(--muted);display:block}
form.inline label input{display:block;margin-top:3px}

.total-line{display:flex;justify-content:space-between;font-size:15px;padding:6px 0}
.total-line.grand{font-weight:750;font-size:18px;border-top:2px solid var(--border);margin-top:8px;padding-top:12px}
.total-line.item{align-items:center;gap:12px}
.total-line.item .lbl{flex:1;min-width:0}
.line-thumb{flex:none;display:block;object-fit:cover;border-radius:6px;border:1px solid var(--input-border);background:var(--chip);box-shadow:0 1px 3px rgba(0,0,0,.12)}

.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700}
.badge.ok{background:#dcfce7;color:#15803d}
.badge.pending{background:#fef3c7;color:#b45309}
.badge.sim{background:#e0e7ff;color:#4338ca}

.store-card{display:flex;justify-content:space-between;align-items:center;gap:12px}
.usage{margin-top:6px;max-width:320px}
.usage-bar{height:6px;border-radius:3px;background:color-mix(in srgb,var(--text,#1a2333) 12%,transparent);overflow:hidden;margin-bottom:3px}
.usage-bar span{display:block;height:100%;border-radius:3px}
.site-footer{text-align:center;color:var(--footer);font-size:12.5px;padding:26px 0 34px}
.hero{padding:34px 0 6px}

/* ======================= events: gallery (guest) ======================= */
.store-header.guest{border-bottom-width:3px}
.platform-header{background:#17112b}
.platform-header .wordmark{height:34px;width:auto;display:block}
.platform-header .tagline{color:#c4b5fd;margin:6px 0 0}
.platform-header .brand{flex-direction:column;align-items:flex-start;gap:0}
.gallery-main{max-width:1180px;padding:18px 16px 40px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
.gallery-main.narrow{max-width:560px}
.ghero{position:relative;border-radius:16px;overflow:hidden;margin:6px 0 14px}
.ghero.has-cover{min-height:clamp(220px,30vw,360px);display:flex;align-items:flex-end;background:#111}
.gcover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.85}
.ghero.has-cover::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 35%,rgba(0,0,0,.65))}
.ghero-text{position:relative;z-index:1;padding:4px 2px}
.ghero.has-cover .ghero-text{padding:22px;color:#fff}
.ghero.has-cover .small{color:rgba(255,255,255,.85)}
.ghero h2{font-size:clamp(24px,5vw,34px);margin:0 0 6px}
.gdesc{margin:0 0 4px;font-size:16px}
.gbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}
.ggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
@media(max-width:520px){.ggrid{grid-template-columns:repeat(3,1fr);gap:3px}}
.gtile{position:relative;display:block;aspect-ratio:1;background:var(--chip);border-radius:6px;overflow:hidden}
.gtile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s}
.gtile:hover img{transform:scale(1.03)}
.gtile:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.gfav{display:none;position:absolute;right:6px;bottom:4px;color:#fff;font-size:20px;text-shadow:0 1px 4px rgba(0,0,0,.6)}
.gtile.fav .gfav{display:block}
.gtile[hidden]{display:none}
/* A video tile: its poster frame, a play mark and the length. */
.gplay{position:absolute;left:6px;bottom:6px;background:rgba(0,0,0,.62);color:#fff;font-size:12px;font-weight:600;line-height:1;padding:4px 7px;border-radius:999px;pointer-events:none;font-variant-numeric:tabular-nums}
.gpager{display:flex;gap:12px;align-items:center;justify-content:center;margin:18px 0}
.gsearch-wrap{margin:0 0 14px}
.gsearch{display:flex;gap:8px;max-width:560px}
.gsearch input[type=search]{flex:1;min-width:0;padding:9px 12px;border:1.5px solid var(--input-border);border-radius:999px;font-size:16px;background:var(--input-bg);color:var(--text)}
.gsearch input[type=search]:focus{outline:none;border-color:var(--accent)}
.gsearch .btn{border-radius:999px}
.gsuggest{margin:8px 0 0;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.gsuggest a{padding:3px 10px;border-radius:999px;background:var(--chip);color:var(--text);text-decoration:none}
.gsuggest a:hover{background:var(--soft)}
.gresult{margin:8px 0 0}
.gempty{padding:40px 20px}
.gnote{margin-top:22px}
#favs-btn[aria-pressed="true"]{background:var(--accent);color:#fff}

.favtray{position:fixed;left:50%;bottom:max(14px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:40;display:flex;gap:10px;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:999px;padding:8px 10px 8px 18px;box-shadow:0 8px 28px rgba(0,0,0,.25);max-width:calc(100vw - 24px);flex-wrap:wrap;justify-content:center}
.favtray[hidden]{display:none}
@media(max-width:520px){.favtray{left:10px;right:10px;transform:none;border-radius:14px;justify-content:space-between;padding:8px 10px 8px 14px;flex-wrap:nowrap}.favtray>span,.favtray .btn{white-space:nowrap}}

.lightbox{position:fixed;inset:0;z-index:60;background:rgba(6,8,14,.94);display:grid;grid-template-columns:56px 1fr 56px;grid-template-rows:1fr auto auto;align-items:center}
.lightbox[hidden]{display:none}
body.lb-open{overflow:hidden}
.lb-stage{grid-column:2;grid-row:1;margin:0;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;padding:14px 0 4px}
.lb-stage img{max-width:100%;max-height:calc(100vh - 130px);object-fit:contain;border-radius:4px}
.lb-stage video{max-width:100%;max-height:calc(100vh - 130px);border-radius:4px;background:#000}
.lb-stage img[hidden],.lb-stage video[hidden]{display:none}
.lb-stage figcaption{color:#cbd5e1;margin-top:8px}
.lb-prev,.lb-next,.lb-close{background:none;border:none;color:#fff;font-size:42px;cursor:pointer;opacity:.75;line-height:1}
.lb-prev:hover,.lb-next:hover,.lb-close:hover{opacity:1}
.lb-prev{grid-column:1;grid-row:1}.lb-next{grid-column:3;grid-row:1}
.lb-close{position:absolute;top:8px;right:12px;font-size:28px;z-index:2}
.lb-actions{grid-column:1/-1;grid-row:2;display:flex;gap:8px;justify-content:center;flex-wrap:wrap;padding:10px 12px max(14px,env(safe-area-inset-bottom))}
.lb-actions .btn.secondary{background:rgba(255,255,255,.14);color:#fff}
#lb-fav.on{background:#e11d48;color:#fff}
.lightbox.slideshow .lb-actions,.lightbox.slideshow .lb-prev,.lightbox.slideshow .lb-next{display:none}
.lightbox.slideshow .lb-stage img{max-height:100vh}
@media(max-width:600px){.lightbox{grid-template-columns:0 1fr 0}.lb-prev,.lb-next{display:none}}

.photo-page{margin:0;text-align:center}
.photo-page img{max-width:100%;max-height:78vh;border-radius:8px}
.photo-page video{max-width:100%;max-height:78vh;border-radius:8px;background:#000}

.pin-form{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:10px 0}
.pin-form input{font-size:22px;letter-spacing:.3em;text-align:center;width:180px}

/* upload */
.drop.dragover{border-color:var(--accent)}
.up-summary{font-weight:650}
.up-list{list-style:none;padding:0;margin:12px 0}
.up-list li{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:7px 0;border-bottom:1px solid var(--line);font-size:14px}
.up-list .up-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.up-list .pbar{grid-column:1/-1;height:4px;background:var(--line);border-radius:2px;overflow:hidden;display:block}
.up-list .pbar-fill{display:block;height:100%;width:0;background:var(--accent);transition:width .2s}
.up-list .pbar.done .pbar-fill{background:#15803d}
.up-list li.bad .up-state{color:#b91c1c;font-weight:650}
#up-done[hidden],#up-summary[hidden]{display:none}
#up-done{display:flex;gap:10px;flex-wrap:wrap}

/* ======================= events: store admin ======================= */
.statrow{display:flex;flex-wrap:wrap;gap:12px 28px;margin:6px 0 14px}
.statrow div{display:flex;flex-direction:column}
.statrow b{font-size:24px}
.linkbox{display:flex;gap:16px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.linkbox:last-child{border-bottom:none}
.linkbox.off{align-items:center;justify-content:space-between}
.linkbox .qr{border:1px solid var(--border);border-radius:8px;background:#fff;flex:none}
.linkbox p{margin:4px 0}
.linkfield{width:100%;max-width:560px;font-family:ui-monospace,Menlo,monospace;font-size:12.5px!important}
.linkacts{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}
.agrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.acard{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--soft)}
.acard img{width:100%;aspect-ratio:1;object-fit:cover;display:block;background:var(--chip)}
.acard>a{position:relative;display:block}
.acard.held{border-color:#d97706}
.acard.hidden img{opacity:.35}
.acard-meta{padding:5px 8px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acard-acts{display:flex;gap:4px;flex-wrap:wrap;padding:6px 8px 8px}
.acard-acts .btn{padding:4px 9px;font-size:12px}
input[type=date]{padding:8px 10px;border:1.5px solid var(--input-border);border-radius:8px;font-size:14px;background:var(--input-bg);color:var(--text)}
label.fld input[type=date]{display:block;margin-top:4px}

/* printable 4x6 sign */
.sign-wrap{max-width:none;padding:12px}
.sign{width:4in;height:6in;margin:0 auto;background:#fff;color:#111;border:1px solid #ddd;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:.32in .3in;text-align:center;box-sizing:border-box}
.sign-store{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13pt;color:var(--accent)}
.sign-store img{max-height:.45in;max-width:1.2in}
.sign h1{font-size:20pt;margin:.06in 0;line-height:1.1}
.sign-qr svg{width:2.6in;height:2.6in;display:block}
.sign-line{font-size:13pt;font-weight:700;margin:0}
.sign-url{font-size:8pt;color:#555;margin:0;word-break:break-all}
.sign-pin{font-size:12pt;margin:0}
@media print{.no-print{display:none!important}.sign{border:none}.sign-wrap{padding:0}body{background:#fff}}

/* zips + archived page (phase 1.5) */
.zipbox{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin:0 0 14px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.zipbox[hidden]{display:none}
.zipbox p{margin:0;flex-basis:100%;font-weight:600}
.archived-card{padding:28px 22px}
.archived-cover{width:100%;max-height:300px;object-fit:cover;border-radius:10px;margin-bottom:12px;filter:grayscale(.35)}
.retention-row{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.confirm-banner{background:color-mix(in srgb,var(--accent) 10%,var(--card));border:1.5px solid var(--accent);border-radius:12px;padding:14px 16px;margin:0 0 14px}
.ziplist{list-style:none;padding:0;margin:8px 0}
.ziplist li{padding:6px 0;border-bottom:1px solid var(--line);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.badge.arch{background:#e5e7eb;color:#374151}
body.dark .badge.arch{background:#374151;color:#e5e7eb}

/* ---- this photo on a gift (lightbox) ---- */
.lightbox:has(.lb-gifts:not([hidden])) .lb-stage img{max-height:calc(100vh - 270px)}
.lb-gifts{grid-column:1/-1;grid-row:3;display:flex;gap:10px;justify-content:center;overflow-x:auto;padding:0 12px max(14px,env(safe-area-inset-bottom));scrollbar-width:none}
.lb-gifts[hidden]{display:none}
.lb-gift{flex:0 0 auto;width:112px;color:#e2e8f0;text-decoration:none;font-size:12px;line-height:1.3;text-align:center}
.lb-gift-img{display:block;width:112px;height:112px;border-radius:10px;background:rgba(255,255,255,.08);overflow:hidden;margin-bottom:5px}
.lb-gift-img img{width:100%;height:100%;object-fit:cover;display:block;animation:lbfade .3s}
.lb-gift-img.failed{display:none}
.lb-gift:hover .lb-gift-img{outline:2px solid #fff}
#lb-gifts-btn[aria-expanded=true]{background:#fff;color:#111}
@keyframes lbfade{from{opacity:0}to{opacity:1}}
@media(max-width:600px){.lb-gifts{justify-content:flex-start}.lb-gift,.lb-gift-img{width:92px}.lb-gift-img{height:92px}}

/* ---- take it home: the event as a book, a photo on gifts ---- */
.takehome{margin:0 0 16px}
.takehome>summary{cursor:pointer;list-style:none;display:flex;column-gap:8px;align-items:baseline;padding:4px 2px 10px;user-select:none}
.takehome>summary b{white-space:nowrap}
.takehome>summary .small{flex:1 1 0;min-width:0}
.takehome>summary::-webkit-details-marker{display:none}
.takehome>summary::after{content:"▾";margin-left:auto;color:var(--muted);transition:transform .2s;align-self:center}
.takehome:not([open])>summary::after{transform:rotate(-90deg)}
.takehome-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.takehome-card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:18px;color:inherit;text-decoration:none}
.book-card{display:flex;gap:22px;align-items:center}
.book-card:hover .book3d{transform:rotateY(-12deg)}
.takehome-text{display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.takehome-text .btn{margin-top:6px}
.book3d{flex:0 0 auto;width:118px;height:150px;perspective:600px;transform:rotateY(-24deg);transform-style:preserve-3d;transition:transform .35s;position:relative}
.book3d-cover{position:absolute;inset:0;border-radius:2px 6px 6px 2px;overflow:hidden;background:#222;box-shadow:6px 6px 0 -1px #f4f1ea,6px 6px 0 0 #d6d0c4,10px 10px 18px rgba(0,0,0,.28);display:flex;align-items:flex-end}
.book3d-cover::before{content:"";position:absolute;left:0;top:0;bottom:0;width:9px;background:linear-gradient(90deg,rgba(0,0,0,.35),rgba(255,255,255,.12) 60%,transparent);z-index:2}
.book3d-cover img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.book3d-title{position:relative;z-index:1;width:100%;padding:16px 8px 8px 14px;color:#fff;font:600 11px/1.25 Georgia,serif;background:linear-gradient(transparent,rgba(0,0,0,.6))}
.gifts-card p{margin:0 0 10px}
.gift-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.gift-mock{color:inherit;text-decoration:none;text-align:center}
.gift-mock img{width:100%;height:auto;aspect-ratio:1;object-fit:cover;border-radius:10px;background:var(--soft,#f1efe9);display:block;margin-bottom:5px}
.gift-mock:hover img{outline:2px solid var(--accent)}
@media(max-width:520px){.takehome-cards{grid-template-columns:1fr}.book3d{width:96px;height:122px}}
.err-text{color:#b91c1c}
body.dark .err-text{color:#fca5a5}
