*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;background:#06030f;font-family:'Segoe UI',system-ui,-apple-system,sans-serif;color:#fff2d6;user-select:none;-webkit-user-select:none;touch-action:none}
#scene{position:fixed;inset:0;display:block;cursor:crosshair}
#scene.armed{cursor:none}

.topbar{position:fixed;top:0;left:0;right:0;height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 18px;background:linear-gradient(180deg,rgba(10,4,20,.85),rgba(10,4,20,0));z-index:5;pointer-events:none}
.topbar>*{pointer-events:auto}
.brand{font-weight:700;font-size:20px;letter-spacing:.5px;text-shadow:0 0 14px #ffb347;white-space:nowrap}
.stats{display:flex;gap:20px;font-size:13px;opacity:.92;white-space:nowrap}
.stats b{color:#ffd166}
.topbtns{display:flex;gap:8px;flex-shrink:0}
.topbtns button{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.22);color:#fff;border-radius:20px;padding:6px 12px;cursor:pointer;font-size:13px}
.topbtns button:hover{background:rgba(255,255,255,.16)}
#photoBtn{background:linear-gradient(180deg,rgba(255,209,102,.35),rgba(255,159,28,.25));border-color:rgba(255,209,102,.6)}

.photo{position:fixed;inset:0;z-index:20;background:rgba(5,2,14,.82);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:16px;transition:opacity .3s}
.photo.hidden{opacity:0;pointer-events:none}
.photo-card{background:linear-gradient(180deg,#2a1140,#160a24);border:1px solid rgba(255,209,102,.4);border-radius:14px;padding:14px;max-width:min(96vw,980px);max-height:94vh;display:flex;flex-direction:column;gap:10px;box-shadow:0 20px 60px rgba(0,0,0,.6)}
.photo-card img{max-width:100%;max-height:calc(94vh - 140px);border-radius:8px;display:block;margin:0 auto;object-fit:contain}
.photo-quote{font-size:13px;opacity:.8;text-align:center;font-style:italic;margin:0 8px}
.photo-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.photo-actions button{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.22);color:#fff;border-radius:20px;padding:8px 16px;cursor:pointer;font-size:14px}
.photo-actions button:hover{background:rgba(255,255,255,.16)}
.photo-actions button.hidden{display:none}
#photoDownload{background:linear-gradient(180deg,#ffd166,#ff9f1c);color:#3a1a05;border:0;font-weight:700}
.shutter{position:fixed;inset:0;background:#fff;z-index:19;pointer-events:none;opacity:0}
.shutter.flash{animation:shutter .45s ease-out}
@keyframes shutter{0%{opacity:.95}100%{opacity:0}}

.hint{position:fixed;top:66px;left:50%;transform:translateX(-50%);background:rgba(20,8,30,.72);border:1px solid rgba(255,209,102,.35);padding:8px 18px;border-radius:24px;font-size:15px;z-index:5;transition:opacity .3s;pointer-events:none;white-space:nowrap;max-width:92vw;overflow:hidden;text-overflow:ellipsis;backdrop-filter:blur(4px)}

.shelf{position:fixed;left:0;right:0;bottom:0;z-index:6;transition:transform .55s cubic-bezier(.4,0,.2,1);padding:10px 16px 0}
.shelf.hidden{transform:translateY(110%)}
.shelf h2{font-size:12px;letter-spacing:2px;text-transform:uppercase;color:#ffd166;opacity:.85;margin-bottom:6px;text-align:center}
.rack{display:flex;gap:10px;overflow-x:auto;padding:8px 6px 0;justify-content:safe center;scrollbar-width:thin;scrollbar-color:#8a5a2b transparent}
.plank{height:18px;margin-top:-2px;background:linear-gradient(180deg,#8a5a2b,#5a3717 60%,#3a2210);border-top:2px solid #b97a3c;box-shadow:0 -8px 22px rgba(0,0,0,.55);border-radius:3px 3px 0 0}

.card{flex:0 0 110px;height:152px;background:linear-gradient(180deg,rgba(60,30,70,.85),rgba(30,12,40,.95));border:1px solid rgba(255,209,102,.25);border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:8px 6px;cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s;position:relative}
.card:hover{transform:translateY(-6px);box-shadow:0 10px 24px rgba(255,180,80,.25);border-color:#ffd166}
.card.selected{border-color:#ffd166;box-shadow:0 0 0 2px #ffd166,0 10px 24px rgba(255,180,80,.35);transform:translateY(-6px)}
.card svg{width:58px;height:74px;filter:drop-shadow(0 4px 6px rgba(0,0,0,.6))}
.card .name{font-size:12.5px;font-weight:600;text-align:center;line-height:1.15;margin-top:4px}
.card .sub{font-size:10px;opacity:.7;text-align:center;line-height:1.2}
.card .price{position:absolute;top:6px;right:6px;background:#ffd166;color:#3a1a05;font-size:10.5px;font-weight:700;padding:2px 6px;border-radius:10px}
.card .tier{position:absolute;top:7px;left:7px;font-size:9px;letter-spacing:1px;text-transform:uppercase;opacity:.7}

.banner{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:10;background:rgba(5,2,14,.78);backdrop-filter:blur(5px);text-align:center;padding:20px;transition:opacity .6s}
.banner.gone{opacity:0;pointer-events:none}
.banner h1{font-size:clamp(34px,7vw,66px);color:#ffd166;text-shadow:0 0 30px #ff9f1c}
.banner p{max-width:580px;margin:16px 0 26px;line-height:1.55;opacity:.92;font-size:16px}
.banner button{background:linear-gradient(180deg,#ffd166,#ff9f1c);color:#3a1a05;border:0;font-size:18px;font-weight:700;padding:12px 32px;border-radius:30px;cursor:pointer;box-shadow:0 8px 24px rgba(255,159,28,.4)}
.banner button:hover{transform:scale(1.04)}

@media (max-width:1180px){.stats{display:none}}
@media (max-width:700px){.topbtns button{padding:6px 9px;font-size:12px}.card{flex-basis:94px;height:138px}.card svg{width:46px;height:60px}.card .sub{display:none}.hint{font-size:13px}}

/* your-photo backdrop */
.topbtns button.hidden{display:none}
#removePhotoBtn{padding:6px 9px}
.drophint{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;font-size:clamp(20px,4vw,34px);font-weight:700;color:#ffd166;background:rgba(5,2,14,.7);border:4px dashed rgba(255,209,102,.7);margin:14px;border-radius:18px;pointer-events:none}
.drophint.hidden{display:none}

/* drag and drop placement */
.card{cursor:grab;touch-action:pan-x}
.shelf{transition:transform .55s cubic-bezier(.4,0,.2,1),opacity .2s}
.shelf.dragging{opacity:.6}
.shelf.dragging .card{cursor:grabbing}
#scene.dragging{cursor:grabbing}
.dragghost{position:fixed;left:0;top:0;z-index:9;pointer-events:none;width:64px;height:96px;filter:drop-shadow(0 10px 14px rgba(0,0,0,.6));will-change:transform}
.dragghost svg{width:100%;height:100%}
.dragghost.hidden{display:none}

/* phones */
@media (max-width:520px){
  .topbar{padding:0 10px}
  .topbtns{gap:6px}
  .shelf h2{font-size:11px;letter-spacing:1.2px}
  .hint{white-space:normal;text-align:center;border-radius:16px}
}

/* background picker */
.topbar{z-index:7}
.themewrap{display:flex}
.thememenu{position:fixed;top:52px;right:14px;width:280px;max-width:calc(100vw - 20px);max-height:calc(100vh - 64px);overflow-y:auto;touch-action:pan-y;display:flex;flex-direction:column;gap:4px;padding:8px;background:linear-gradient(180deg,rgba(42,17,64,.96),rgba(22,10,36,.96));border:1px solid rgba(255,209,102,.4);border-radius:14px;box-shadow:0 16px 44px rgba(0,0,0,.6)}
.thememenu.hidden{display:none}
.thememenu h3{font-size:11px;letter-spacing:1.4px;text-transform:uppercase;opacity:.7;font-weight:600;padding:4px 6px 2px}
.thememenu p{font-size:11.5px;line-height:1.35;color:#ffd166;padding:0 6px 4px}
.thememenu p.hidden{display:none}
.topbtns .thememenu button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:10px;padding:6px;font-size:13px;color:#fff2d6;cursor:pointer}
.topbtns .thememenu button:hover{background:rgba(255,255,255,.08)}
.topbtns .thememenu button[aria-selected="true"]{border-color:#ffd166;background:rgba(255,209,102,.12)}
.thememenu .sw{flex:0 0 56px;height:40px;border-radius:7px;border:1px solid rgba(255,255,255,.25);display:grid;place-items:center;font-size:17px;font-style:normal}
.thememenu b{display:block;font-weight:600}
.thememenu small{display:block;font-size:11px;opacity:.7;line-height:1.25}
@media (max-width:520px){#themeName,#muteBtn span{display:none}}

/* "Powered by Digitalgrub" credit */
.brandwrap{display:flex;flex-direction:column;line-height:1.1}
.by{margin:2px 0 0 31px;font-size:10.5px;font-weight:600;letter-spacing:.7px;color:rgba(255,209,102,.78);text-decoration:none;white-space:nowrap}
.by:hover,.by:focus-visible{color:#ffd166;text-decoration:underline}
.banner p.powered{margin:24px 0 0;font-size:13px;letter-spacing:.6px;opacity:.9}
.powered a{color:#ffd166;font-weight:700;text-decoration:none;border-bottom:1px solid rgba(255,209,102,.5)}
.powered a:hover,.powered a:focus-visible{border-bottom-color:#ffd166}

/* Phones and narrow tablets: a two-row header. The name and the credit sit on the first row,
   the buttons on the second, so nothing has to be hidden to make room. */
.brandwrap{pointer-events:none}
.brandwrap .by{pointer-events:auto}
@media (max-width:700px){
  .topbar{height:auto;flex-wrap:wrap;justify-content:center;row-gap:6px;padding:7px 10px 10px;background:linear-gradient(180deg,rgba(10,4,20,.92),rgba(10,4,20,.6) 68%,rgba(10,4,20,0))}
  .brandwrap{flex:0 0 100%;flex-direction:row;align-items:baseline;justify-content:center;gap:8px}
  .brand{font-size:17px}
  .by{margin:0}
  .topbtns{flex:0 0 100%;justify-content:center;flex-wrap:wrap;gap:6px}
  .hint{top:84px}
  .thememenu{top:76px;max-height:calc(100vh - 88px)}
}
/* very small phones: tighter buttons so they stay on one row even with a photo loaded */
@media (max-width:350px){.topbtns{gap:4px}.topbtns>button,.themewrap>button{padding:6px 7px;font-size:11.5px}}
