/* ====================  SOFT MAGAZINE-PASTEL COLLAGE THEME  ==================== */
:root{
  --paper1:#f7e8ec;     /* soft pink */
  --paper2:#efe2ee;     /* lilac-cream */
  --card:#fffdfa;       /* paper white */
  --ink:#43303a;        /* warm plum-ink text */
  --rose:#c74a6c;       /* magazine rose (accent) */
  --rose-deep:#a8345a;
  --blue:#566894;       /* dusty blue */
  --mustard:#cf9a3e;    /* mustard */
  --grid:#ecd6de;       /* faint grid line */
  --tape:rgba(232,196,206,.6);   /* pink washi tape */
  --tape2:rgba(206,214,196,.6);  /* sage washi tape */
  --shadow:rgba(90,50,65,.28);
}

*{box-sizing:border-box;margin:0;padding:0}

body{
  font-family:'DM Sans', system-ui, sans-serif;
  color:var(--ink);
  min-height:100vh;
  background:
    linear-gradient(160deg, var(--paper1), var(--paper2));
  background-attachment:fixed;
  overflow-x:hidden;
}
/* faint graph-paper grid over the whole page */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background-image:
    linear-gradient(var(--grid) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid) 1px, transparent 1px);
  background-size:48px 48px;
  opacity:.7;
}

/* drifting music doodles (notes, stars, vinyls) */
.shapes{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}
.shapes span{
  position:absolute;bottom:-60px;line-height:1;
  animation:rise linear infinite;
}
@keyframes rise{
  to{transform:translateY(-118vh) rotate(140deg);opacity:0}
}

/* your photos, floating around the background as little taped scraps */
.photo-hearts{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.photo-heart{
  position:absolute;top:0;left:0;will-change:transform;opacity:.92;
  filter:drop-shadow(0 8px 16px var(--shadow));
}
.photo-heart .ph-svg{width:100%;height:100%;display:block;animation:phWobble 6s ease-in-out infinite}
.ph-scrap{position:relative;background:#fff;padding:8%;box-shadow:0 8px 18px var(--shadow)}
.ph-scrap img{width:100%;height:100%;object-fit:cover;display:block}
.ph-tape{position:absolute;top:-5px;left:50%;margin-left:-22px;width:44px;height:14px;
  background:var(--tape);box-shadow:0 1px 2px var(--shadow)}
@keyframes phWobble{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}

/* floating little music notes / sparkles */
.hearts{position:fixed;inset:0;pointer-events:none;z-index:1;overflow:hidden}
.hearts span{
  position:absolute;bottom:-40px;font-size:22px;opacity:.5;
  animation:float linear infinite;
}
@keyframes float{
  to{transform:translateY(-115vh) rotate(180deg);opacity:0}
}

/* stage + pages */
.stage{position:relative;z-index:2;display:flex;justify-content:center;align-items:flex-start;padding:48px 18px 130px;perspective:2200px}
/* a page = a taped paper sheet on the moodboard */
.page{
  display:none;
  width:min(660px,100%);
  background:var(--card);
  border-radius:3px;
  padding:40px 34px 44px;
  box-shadow:0 18px 50px var(--shadow);
  position:relative;
  text-align:center;
  transform:rotate(-.8deg);
  border:1px solid rgba(120,80,95,.12);
}
/* washi tape across the top corners of the sheet */
.page::before,.page::after{
  content:"";position:absolute;top:-14px;width:120px;height:32px;
  background:var(--tape);box-shadow:0 2px 5px var(--shadow);
  background-image:repeating-linear-gradient(90deg, transparent, transparent 5px, rgba(255,255,255,.25) 5px, rgba(255,255,255,.25) 7px);
}
.page::before{left:34px;transform:rotate(-5deg)}
.page::after{right:34px;transform:rotate(4deg);background:var(--tape2)}
.page.active{display:block;transform-origin:right center;backface-visibility:hidden;animation:flipIn .55s ease-out}
/* new page settles in, flipping down from the right edge */
@keyframes flipIn{
  from{opacity:0;transform:rotate(-.8deg) rotateY(42deg)}
  to{opacity:1;transform:rotate(-.8deg) rotateY(0)}
}
/* the page we're leaving literally turns away to the left */
.page.turn-out{
  transform-origin:left center;backface-visibility:hidden;z-index:6;
  box-shadow:30px 0 50px rgba(90,50,65,.4), 0 18px 50px var(--shadow);
  animation:pageTurn .5s ease-in forwards;
}
@keyframes pageTurn{
  to{transform:rotateY(-115deg);opacity:.2;filter:brightness(.55)}
}

/* hand-written sticker label */
.washi{
  display:inline-block;
  background:#fff;
  padding:5px 16px;border-radius:2px;
  font-family:'Caveat',cursive;font-weight:700;
  font-size:1.3rem;letter-spacing:.01em;
  color:var(--rose);
  border:1px dashed rgba(199,74,108,.5);
  box-shadow:0 3px 8px var(--shadow);
  transform:rotate(-2deg);
  margin-bottom:18px;
}

/* photo -> taped magazine cutout */
.polaroid{
  display:inline-block;background:#fff;padding:9px 9px 11px;
  border-radius:2px;
  box-shadow:0 12px 26px var(--shadow);
  position:relative;margin:8px auto 18px;
  max-width:100%;transform:rotate(1.4deg);
}
.polaroid img{
  display:block;width:440px;max-width:82vw;height:330px;object-fit:cover;
  background:#e7d6dd;
}
/* big memory / cover / finale photos: show the WHOLE photo, never crop faces */
.polaroid.big img{
  width:auto;height:auto;
  max-width:min(500px,84vw);max-height:62vh;
  object-fit:contain;
}
.polaroid img:not([src]),.polaroid img[src=""]{visibility:hidden}
.polaroid .tape{position:absolute;width:84px;height:24px;background:var(--tape);box-shadow:0 1px 3px var(--shadow);
  background-image:repeating-linear-gradient(90deg, transparent, transparent 5px, rgba(255,255,255,.25) 5px, rgba(255,255,255,.25) 7px)}
.tape-tl{top:-10px;left:18px;transform:rotate(-8deg)}
.tape-br{bottom:22px;right:14px;transform:rotate(6deg);background:var(--tape2)}

/* cover */
.cover-title{
  font-family:'Anton',sans-serif;font-weight:400;font-size:4rem;line-height:.95;
  letter-spacing:.01em;text-transform:uppercase;margin:12px 0 8px;color:var(--ink);
}
.cover-title::first-line{color:var(--rose)}
.cover-sub{font-family:'Caveat',cursive;font-size:1.6rem;margin:4px 0 24px;color:var(--blue)}

/* memory pages */
.mem-title{
  font-family:'Anton',sans-serif;font-weight:400;font-size:2.5rem;line-height:1.02;
  text-transform:uppercase;letter-spacing:.01em;color:var(--ink);margin:6px 0 12px;
}
.mem-caption{font-family:'Caveat',cursive;font-size:1.6rem;color:var(--rose);margin-bottom:12px}
.mem-text{font-family:'DM Sans',sans-serif;font-size:1.18rem;line-height:1.65;max-width:540px;margin:0 auto 22px;color:var(--ink)}

/* ===========  QUESTION PAGES — full-screen bouncing playground  =========== */
.page.qpage{
  background:transparent;box-shadow:none;border:none;transform:none;
  width:100%;max-width:none;padding:14px 10px 0;min-height:88vh;
}
.page.qpage.active{display:flex;flex-direction:column}
.q-head{
  text-align:center;position:relative;z-index:5;flex:0 0 auto;
  max-width:800px;margin:10px auto 0;padding:22px 30px 18px;
  background:var(--card);border:1px solid rgba(120,80,95,.12);border-radius:3px;
  box-shadow:0 16px 40px var(--shadow);transform:rotate(-.6deg);
}
.q-head::before,.q-head::after{
  content:"";position:absolute;top:-13px;width:110px;height:30px;background:var(--tape);
  box-shadow:0 2px 5px var(--shadow);
  background-image:repeating-linear-gradient(90deg, transparent, transparent 5px, rgba(255,255,255,.25) 5px, rgba(255,255,255,.25) 7px);
}
.q-head::before{left:30px;transform:rotate(-5deg)}
.q-head::after{right:30px;transform:rotate(4deg);background:var(--tape2)}
.q-head .washi{margin-bottom:12px}
.q-text{
  font-family:'Anton',sans-serif;font-weight:400;font-size:2.3rem;line-height:1.1;
  text-transform:uppercase;letter-spacing:.005em;
  margin:4px auto 4px;max-width:680px;color:var(--ink);
}
.reaction{
  min-height:30px;margin:8px auto 0;font-family:'Caveat',cursive;font-weight:700;
  font-size:1.7rem;color:var(--rose);
}
.reaction.good{color:var(--blue)}

/* slideshow page — framed like a taped film photo */
.slideshow{position:relative;width:min(520px,84vw);margin:14px auto 16px;transform:rotate(-1deg)}
.slides{
  position:relative;width:100%;aspect-ratio:1/1;border-radius:2px;overflow:hidden;
  background:#2a2026;border:8px solid #fff;
  box-shadow:0 16px 36px var(--shadow);
}
.slide{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .7s ease}
.slide.on{opacity:1}
.sl-arrow{
  position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  width:44px;height:44px;border-radius:50%;border:none;
  background:rgba(67,48,58,.7);color:#fff;font-size:1.7rem;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:background .2s;
}
.sl-arrow:hover{background:var(--rose)}
.sl-arrow.prev{left:12px}
.sl-arrow.next{right:12px}
.sl-dots{display:flex;gap:9px;justify-content:center;flex-wrap:wrap;margin:8px 0 6px}
.sl-dots i{
  width:10px;height:10px;border-radius:50%;cursor:pointer;transition:.3s;
  background:rgba(199,74,108,.3);border:1px solid rgba(199,74,108,.5);
}
.sl-dots i.on{background:var(--rose);transform:scale(1.3)}

/* the arena the answers bounce inside */
.arena{position:relative;flex:1 1 auto;width:100%;min-height:62vh;overflow:hidden}

/* two clue photos shown inside a question's header */
.q-photos{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin:12px 0 6px}
.q-photos .polaroid{margin:0;transform:rotate(-2deg)}
.q-photos .polaroid:nth-child(2){transform:rotate(2deg)}
.q-photos .polaroid img{width:240px;height:180px;max-width:40vw}
/* a single clue photo shows larger & uncropped */
.q-photos .polaroid:only-child{transform:rotate(-1.5deg)}
.q-photos .polaroid:only-child img{width:min(460px,82vw);height:auto;max-height:48vh}
@media(max-width:560px){ .q-photos .polaroid img{width:150px;height:112px} }

/* small photo tucked into the corner of a question page */
.q-corner{position:absolute;right:16px;bottom:16px;z-index:2;pointer-events:none}
.q-corner .polaroid{margin:0;transform:rotate(4deg);padding:8px 8px 10px}
.q-corner .polaroid img{width:200px;height:150px;max-width:42vw}
@media(max-width:480px){ .q-corner .polaroid img{width:120px;height:90px} }

/* a bouncing answer = a little taped paper tag */
.bubble{
  position:absolute;left:0;top:0;
  font-family:'DM Sans',sans-serif;font-weight:500;font-size:1.12rem;cursor:pointer;
  background:#fff;color:var(--ink);
  border:1px solid rgba(120,80,95,.18);
  padding:12px 20px;border-radius:2px;max-width:62vw;white-space:nowrap;
  box-shadow:0 9px 20px var(--shadow);
  transform:rotate(var(--rot,0deg));
  transition:opacity .4s, box-shadow .3s, background .3s, border-color .3s;
  user-select:none;
}
/* a strip of washi tape on each tag */
.bubble::before{
  content:"";position:absolute;top:-9px;left:50%;margin-left:-26px;width:52px;height:18px;
  background:var(--tape);box-shadow:0 1px 3px var(--shadow);
  background-image:repeating-linear-gradient(90deg, transparent, transparent 4px, rgba(255,255,255,.3) 4px, rgba(255,255,255,.3) 6px);
}
.bubble:hover{background:#fff7fa;border-color:var(--rose)}
.bubble.shake{animation:shake .4s;background:#fbe2ee;border-color:var(--rose)}
.bubble.dim{opacity:.25}
.bubble.chosen{box-shadow:0 0 0 3px var(--rose), 0 12px 28px var(--shadow)}
@keyframes shake{0%,100%{transform:rotate(var(--rot,0deg)) translateX(0)}
  25%{transform:rotate(var(--rot,0deg)) translateX(-7px)}
  75%{transform:rotate(var(--rot,0deg)) translateX(7px)}}

/* the correct answer becomes a heart balloon and inflates */
.bubble.heart-mode{
  background:transparent!important;border:none!important;box-shadow:none;
  padding:0;border-radius:0;max-width:none;white-space:normal;
  display:flex;align-items:center;justify-content:center;text-align:center;
  width:120px;height:120px;color:#fff;font-weight:bold;z-index:60;
  transition:width .55s cubic-bezier(.34,1.7,.5,1), height .55s cubic-bezier(.34,1.7,.5,1);
  animation:balloonBob 3s ease-in-out infinite;
  filter:drop-shadow(0 12px 14px rgba(196,29,84,.35));
}
.bubble.heart-mode .heart-svg{position:absolute;inset:0;width:100%;height:100%;z-index:1;overflow:visible}
.bubble.heart-mode .lbl{
  position:relative;z-index:2;font-family:'Caveat',cursive;
  padding:0 14%;line-height:1.05;transform:translateY(-6%);
  text-shadow:0 2px 6px rgba(120,0,40,.4);
}
@keyframes balloonBob{
  0%,100%{transform:rotate(-2.5deg) translateY(0)}
  50%{transform:rotate(2.5deg) translateY(-8px)}
}

/* ...until it takes over the screen — a big breathing heart she must catch */
.bubble.heart-mode.takeover{
  position:fixed;inset:0;margin:auto;z-index:9999;
  width:min(78vmin,560px);height:min(78vmin,560px);
  animation:heartIn .5s cubic-bezier(.2,1.4,.4,1), bigBeat 1.8s ease-in-out infinite .5s;
}
.bubble.heart-mode.takeover .lbl{font-size:clamp(2rem,7vw,4.2rem)}
@keyframes heartIn{from{transform:scale(.3);opacity:.3}to{transform:scale(1);opacity:1}}
@keyframes bigBeat{0%,100%{transform:scale(1)}25%{transform:scale(1.06)}40%{transform:scale(1)}60%{transform:scale(1.04)}}

/* buttons — like a stamped ticket */
.btn{
  font-family:'DM Sans',sans-serif;font-weight:500;font-size:1.05rem;letter-spacing:.12em;
  text-transform:uppercase;cursor:pointer;
  background:var(--ink);color:#fff7fa;border:none;padding:14px 32px;border-radius:2px;
  margin-top:18px;box-shadow:0 9px 22px var(--shadow);transition:transform .14s, background .25s;
}
.btn:hover{transform:translateY(-2px);background:var(--rose)}
.btn.next{background:var(--rose)}
.btn.next:hover{background:var(--rose-deep)}
.btn.hidden{display:none}

/* finale */
.finale-title{font-family:'Anton',sans-serif;font-weight:400;text-transform:uppercase;font-size:3rem;line-height:1;color:var(--ink);margin:8px 0 14px}
.finale-msg{font-family:'DM Sans',sans-serif;font-size:1.2rem;line-height:1.65;max-width:520px;margin:0 auto 22px;color:var(--ink)}
.signoff{font-family:'Caveat',cursive;font-weight:700;font-size:1.9rem;white-space:pre-line;color:var(--rose);margin-bottom:10px}

/* progress dots — hidden by request */
.progress{display:none}

/* floating music toggle */
.music-toggle{
  position:fixed;right:18px;bottom:18px;z-index:40;
  width:52px;height:52px;border-radius:50%;cursor:pointer;
  background:var(--card);border:1px solid rgba(199,74,108,.4);
  box-shadow:0 8px 20px var(--shadow);
  font-size:1.4rem;line-height:1;display:flex;align-items:center;justify-content:center;
  transition:transform .15s, background .2s;
}
.music-toggle:hover{transform:scale(1.08);background:#fff7fa}
.music-toggle.on{background:var(--rose);border-color:var(--rose);animation:spin 5s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media(max-width:480px){
  .cover-title{font-size:2.9rem}
  .q-text{font-size:1.9rem}
  .mem-title{font-size:2rem}
  .page{padding:30px 20px 34px}
}
