/* ════════════════════════════════════════════════════════════════════
   MagicBooks · Exclusive Creator — papyrus scroll manuscript
   ════════════════════════════════════════════════════════════════════ */
:root{
  --parch:        #f2e4c2;
  --parch-2:      #ecdcb2;
  --parch-deep:   #e0c994;
  --parch-edge:   #c9ad77;
  --rod:          #7a4f24;
  --rod-light:    #a06d35;
  --rod-dark:     #4f3016;
  --ink:          #4a3214;
  --ink-soft:     #6b4f28;
  --ink-mute:     #927443;
  --gold:         #c08a12;
  --gold-bright:  #e0a81a;
  --gold-soft:    #f3e0a8;
  --seal:         #a82d2d;
  --seal-deep:    #7a1f1f;

  --display:      "Berkshire Swash", serif;
  --serif:        "Cormorant Garamond", serif;
  --hand:         "Caveat", cursive;
  --sans:         "Quicksand", -apple-system, sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body.exclusive-body{
  font-family:var(--serif);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
  cursor:auto;
  background:
    radial-gradient(60% 50% at 50% 0%, #6b4a24 0%, #4a3016 55%, #2e1d0d 100%);
}
a,button{cursor:pointer;font-family:inherit}
input,textarea{font-family:inherit}
img{display:block;max-width:100%}

/* ── quill cursor retired — native cursor is clearer to interact with ── */
#quill{
  display:none;
  position:fixed;top:0;left:0;pointer-events:none;z-index:9999;
  transform:translate(-3px,-40px) rotate(-12deg);
  transition:transform .06s linear;will-change:transform;
}
#quill svg{filter:drop-shadow(0 4px 8px rgba(0,0,0,.4));animation:quillSway 3s ease-in-out infinite}
@keyframes quillSway{0%,100%{transform:rotate(0)}50%{transform:rotate(6deg)}}
#inkSparks{position:fixed;inset:0;pointer-events:none;z-index:9998}
.ink-spark{position:absolute;width:5px;height:5px;border-radius:50%;
  background:radial-gradient(circle,#fef0c4 0%,#c08a12 55%,transparent 80%);
  animation:inkFade 1.1s ease-out forwards}
.ink-spark.sepia{background:radial-gradient(circle,#f0dcb0 0%,#7a4f24 60%,transparent 80%)}
@keyframes inkFade{0%{transform:translate(-50%,-50%) scale(1);opacity:1}
  100%{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(0);opacity:0}}

/* ── top chrome ── */
.ex-top{
  position:fixed;top:20px;left:24px;z-index:60;
  display:flex;align-items:center;gap:14px;
}
.ex-back{
  display:inline-flex;align-items:center;gap:8px;
  color:#f3e0a8;text-decoration:none;
  font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:.06em;
  padding:9px 15px;background:rgba(40,24,10,0.5);
  border:1px solid rgba(224,168,26,0.3);border-radius:999px;
  backdrop-filter:blur(6px);transition:background .2s,border-color .2s;
}
.ex-back:hover{background:rgba(40,24,10,0.72);border-color:rgba(224,168,26,0.55)}
.ex-brand{
  position:fixed;top:16px;left:50%;transform:translateX(-50%);
  z-index:60;height:44px;display:block;
}
.ex-brand img{height:100%;width:auto;max-width:none;flex-shrink:0;filter:drop-shadow(0 2px 5px rgba(0,0,0,.4));transition:transform .25s ease}
.ex-brand:hover img{transform:translateY(-1px) scale(1.03)}

.ex-counter{
  position:fixed;top:20px;right:24px;z-index:60;
  display:inline-flex;align-items:baseline;gap:8px;
  color:#f3e0a8;font-family:var(--display);
  padding:9px 17px;background:rgba(40,24,10,0.5);
  border:1px solid rgba(224,168,26,0.3);border-radius:999px;backdrop-filter:blur(6px);
}
.ex-counter__label{font-family:var(--sans);font-size:11px;letter-spacing:.16em;text-transform:uppercase;opacity:.7}
.ex-counter__num{font-size:17px;color:var(--gold-bright)}
.ex-counter__sep{font-size:12px;opacity:.55;font-style:italic;font-family:var(--serif)}
.ex-counter__total{font-size:17px;opacity:.6}

/* ════════════════════════════════════════════
   THE SCROLL
   ════════════════════════════════════════════ */
.scroll-stage{
  position:fixed;inset:0;
  display:flex;align-items:center;justify-content:center;
  padding:74px 64px;
}
.scroll{
  position:relative;
  width:min(860px,100%);
  height:min(660px,82vh);
  display:flex;flex-direction:column;
  filter:drop-shadow(0 26px 40px rgba(0,0,0,0.5));
}
/* wooden rods top + bottom */
.scroll-rod{
  position:relative;z-index:4;height:34px;flex-shrink:0;
  border-radius:18px;
  background:linear-gradient(180deg,#a06d35 0%,#7a4f24 45%,#4f3016 100%);
  box-shadow:inset 0 2px 3px rgba(255,255,255,0.25),inset 0 -3px 6px rgba(0,0,0,0.4),0 4px 10px rgba(0,0,0,0.35);
}
.scroll-rod::before,.scroll-rod::after{
  content:"";position:absolute;top:50%;width:26px;height:46px;
  transform:translateY(-50%);border-radius:8px;
  background:radial-gradient(circle at 35% 30%,#b9803f,#5e3a1a 75%);
  box-shadow:0 4px 8px rgba(0,0,0,0.4),inset 0 2px 3px rgba(255,255,255,0.2);
}
.scroll-rod::before{left:-16px}
.scroll-rod::after{right:-16px}
.scroll-rod--top{margin-bottom:-8px}
.scroll-rod--bottom{margin-top:-8px}

/* parchment sheet */
.scroll-sheet{
  position:relative;z-index:2;flex:1;
  background:
    radial-gradient(120% 80% at 50% 0%, #f6ead0 0%, #ecdcb2 55%, #e0c994 100%);
  border-left:2px solid var(--parch-edge);
  border-right:2px solid var(--parch-edge);
  overflow:hidden;
  box-shadow:inset 0 0 60px rgba(150,116,67,0.25),inset 0 0 0 1px rgba(255,255,255,0.3);
  transform-origin:center top;
  opacity:1;
}
@media (prefers-reduced-motion: no-preference){
  .scroll-sheet.is-rolling{ animation:unroll .9s cubic-bezier(.45,.05,.25,1); }
}
@keyframes unroll{
  0%{transform:translateY(-12px) scaleY(0.82)}
  100%{transform:translateY(0) scaleY(1)}
}
.scroll-sheet::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='p'><feTurbulence type='fractalNoise' baseFrequency='0.04 0.07' numOctaves='3' seed='7'/><feColorMatrix values='0 0 0 0 0.55 0 0 0 0 0.42 0 0 0 0 0.22 0 0 0 0.18 0'/></filter><rect width='220' height='220' filter='url(%23p)'/></svg>");
  mix-blend-mode:multiply;opacity:0.55;
}
.scroll-sheet::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 40px rgba(120,85,40,0.3);
  background:
    linear-gradient(90deg, rgba(160,120,60,0.18) 0%, transparent 6%, transparent 94%, rgba(160,120,60,0.18) 100%);
}

/* page viewport */
.scroll-pages{position:absolute;inset:0;z-index:1}
.scroll-page{
  position:absolute;inset:0;
  padding:34px clamp(28px,5vw,60px);
  display:flex;flex-direction:column;
  opacity:0;pointer-events:none;
  transform:translateX(40px);
  transition:opacity .5s ease, transform .5s cubic-bezier(.2,.7,.2,1);
  overflow-y:auto;
  scrollbar-width:auto;scrollbar-color:#8f2d4b rgba(150,116,67,0.16);
}
.scroll-page::-webkit-scrollbar{width:11px}
.scroll-page::-webkit-scrollbar-track{background:rgba(150,116,67,0.14);border-radius:7px}
.scroll-page::-webkit-scrollbar-thumb{background:#8f2d4b;border-radius:7px;border:2px solid transparent;background-clip:padding-box}
.scroll-page::-webkit-scrollbar-thumb:hover{background:#7a2540}
.scroll-page.is-active{opacity:1;pointer-events:auto;transform:translateX(0);transition-delay:.15s}
.scroll-page.is-prev{transform:translateX(-40px)}

/* page heading */
.ex-head{text-align:center;flex-shrink:0;margin-bottom:18px}
.ex-eyebrow{
  font-family:var(--sans);font-size:11px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--gold);font-weight:700;
}
.ex-head h2{
  font-family:var(--display);
  font-size:clamp(26px,3.4vw,38px);
  color:var(--ink);line-height:1.1;
  margin-top:6px;
}
.ex-head h2 em{font-style:normal;color:var(--seal)}
.ex-divider{
  width:120px;height:14px;margin:10px auto 0;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 14'><path d='M4,7 Q30,1 60,7 T116,7' stroke='%23c08a12' stroke-width='1.4' fill='none' stroke-linecap='round'/><circle cx='60' cy='7' r='3' fill='%23c08a12'/></svg>") no-repeat center/contain;
}

.ex-body{flex:1;display:flex;flex-direction:column;gap:18px;min-height:0}
/* real flex spacer INSIDE the scrolling column — flexbox ignores padding-bottom
   here, so this guarantees breathing room under the last field (char counters) */
.ex-body::after{content:"";display:block;flex:0 0 44px}

/* field group */
.ex-q{display:flex;flex-direction:column;gap:9px}
.ex-q__label{
  font-family:var(--sans);font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold);font-weight:700;
}
.ex-q__label--hand{font-family:var(--hand);font-size:18px;letter-spacing:0;text-transform:none;color:var(--ink-soft);font-weight:600}
.ex-q__hint{font-family:var(--serif);font-style:italic;font-weight:500;font-size:13px;color:var(--ink-mute);opacity:.85}
.ex-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}

/* count picker */
.ex-count{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.ex-count button{
  background:rgba(255,250,235,0.5);
  border:1.5px solid rgba(150,116,67,0.4);
  border-radius:12px;padding:14px 6px 10px;
  display:flex;flex-direction:column;align-items:center;gap:2px;transition:all .2s;
}
.ex-count button .n{font-family:var(--display);font-size:28px;color:var(--ink);line-height:1}
.ex-count button .t{font-family:var(--sans);font-size:10px;color:var(--ink-mute)}
.ex-count button:hover{border-color:var(--gold);transform:translateY(-2px)}
.ex-count button.is-chosen{background:linear-gradient(135deg,#f3e0a8,#fbf1d2);border-color:var(--gold);box-shadow:0 0 0 2px rgba(192,138,18,0.25)}
.ex-count button.is-chosen .n{color:var(--gold)}

/* generic illustrated cards */
.ex-cards{display:grid;gap:10px}
.ex-cards--4{grid-template-columns:repeat(4,1fr)}
.ex-cards--3{grid-template-columns:repeat(3,1fr)}
.ex-cards--2{grid-template-columns:repeat(2,1fr)}
.ex-card{
  background:rgba(255,250,235,0.55);
  border:1.4px solid rgba(150,116,67,0.4);
  border-radius:12px;padding:6px 6px 8px;
  display:flex;flex-direction:column;align-items:center;gap:5px;transition:all .2s;text-align:center;
}
.ex-card__thumb{width:48px;height:48px;border-radius:50%;overflow:hidden;background:var(--parch-deep);border:1.4px solid rgba(150,116,67,0.35)}
.ex-card__thumb img{width:100%;height:100%;object-fit:cover}
.ex-card__img{width:100%;aspect-ratio:1/1;border-radius:8px;overflow:hidden;background:var(--parch-deep);border:1px solid rgba(150,116,67,0.3)}
.ex-card__img img{width:100%;height:100%;object-fit:cover}
.ex-card__label{font-family:var(--serif);font-style:italic;font-weight:600;font-size:14px;color:var(--ink);line-height:1.1}
.ex-card__sub{font-family:var(--sans);font-size:10px;color:var(--ink-mute)}
.ex-card__note{font-family:var(--serif);font-style:italic;font-size:10px;color:var(--ink-mute)}
.ex-card__icon{font-size:22px;line-height:1}
.ex-card:hover{border-color:var(--gold);transform:translateY(-2px)}
.ex-card.is-chosen{background:linear-gradient(135deg,#f3e0a8,#fbf1d2);border-color:var(--gold);box-shadow:0 0 0 2px rgba(192,138,18,0.25)}
.ex-card.is-chosen .ex-card__thumb,.ex-card.is-chosen .ex-card__img{border-color:var(--gold)}

/* hero rows (page 1) */
.ex-hero-row{
  display:flex;align-items:center;gap:12px;
  background:rgba(255,250,235,0.4);
  border:1px solid rgba(150,116,67,0.3);
  border-radius:14px;padding:8px 10px 8px 14px;margin-bottom:8px;
}
.ex-hero-row__label{flex-shrink:0;width:54px;font-family:var(--display);font-size:13px;color:var(--gold);letter-spacing:.04em}
.ex-hero-row__opts{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;flex:1}
.ex-hero-row__age{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;flex:1;margin-top:6px}
.ex-mini{
  background:rgba(255,250,235,0.6);border:1.3px solid rgba(150,116,67,0.4);
  border-radius:9px;padding:5px 6px;display:flex;flex-direction:column;align-items:center;gap:3px;transition:all .15s;
}
.ex-mini__thumb{width:30px;height:30px;border-radius:50%;overflow:hidden;background:var(--parch-deep)}
.ex-mini__thumb img{width:100%;height:100%;object-fit:cover}
.ex-mini span{font-family:var(--serif);font-style:italic;font-size:12px;color:var(--ink);font-weight:600}
.ex-mini:hover{border-color:var(--gold)}
.ex-mini.is-chosen{background:linear-gradient(135deg,#f3e0a8,#fbf1d2);border-color:var(--gold);box-shadow:0 0 0 2px rgba(192,138,18,0.2)}

/* hero blocks for page 2 (look) */
.ex-hero-block{
  background:rgba(255,250,235,0.45);
  border:1.4px solid rgba(150,116,67,0.35);
  border-radius:16px;padding:16px 16px 14px;margin-bottom:14px;
  display:flex;flex-direction:column;gap:12px;
}
.ex-hero-block__head{display:flex;align-items:baseline;justify-content:space-between;
  border-bottom:1px dashed rgba(150,116,67,0.3);padding-bottom:8px}
.ex-hero-block__num{font-family:var(--display);font-size:15px;color:var(--gold)}
.ex-hero-block__type{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-soft)}
.ex-hero-block__type strong{font-family:var(--display);font-style:normal;color:var(--ink)}

/* inputs */
.ex-input{
  width:100%;border:none;background:transparent;
  font-family:var(--hand);font-size:26px;font-weight:600;color:var(--ink);
  padding:3px 0;border-bottom:1.5px dashed rgba(150,116,67,0.5);outline:none;caret-color:var(--seal);
}
.ex-input::placeholder{font-family:var(--serif);font-style:italic;font-size:16px;color:var(--ink-mute);opacity:.65;font-weight:400}
.ex-input:focus{border-bottom-color:var(--seal)}
.ex-input--sm{font-size:20px}
.ex-textarea{
  width:100%;resize:none;
  font-family:var(--hand);font-size:19px;font-weight:600;color:var(--ink);
  background:rgba(255,250,235,0.45);
  border:1.4px solid rgba(150,116,67,0.4);border-radius:12px;
  padding:10px 12px;outline:none;line-height:1.35;min-height:62px;caret-color:var(--seal);
}
.ex-textarea::placeholder{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-mute);opacity:.7;font-weight:400}
.ex-textarea:focus{border-color:var(--seal)}
.ex-charcount{font-family:var(--sans);font-size:11px;color:var(--ink-mute);text-align:right;margin-top:-2px}
.ex-charcount.is-warn{color:var(--seal)}
.ex-note{font-family:var(--serif);font-style:italic;font-size:13px;color:var(--ink-mute)}

/* swatches */
.ex-swatches{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.ex-swatch{background:transparent;border:none;padding:4px 2px 6px;border-radius:10px;
  display:flex;flex-direction:column;align-items:center;gap:4px;transition:all .2s}
.ex-swatch::before{content:"";width:30px;height:30px;border-radius:50%;
  background:linear-gradient(135deg,var(--c1),var(--c2));
  box-shadow:inset 0 -2px 4px rgba(0,0,0,0.25),inset 0 2px 3px rgba(255,255,255,0.4),0 3px 6px rgba(0,0,0,0.18);transition:transform .2s,box-shadow .2s}
.ex-swatch span{font-family:var(--sans);font-size:10px;color:var(--ink-soft);font-weight:600}
.ex-swatch:hover::before{transform:scale(1.08)}
.ex-swatch.is-chosen::before{transform:scale(1.1);box-shadow:0 0 0 3px var(--gold),inset 0 -2px 4px rgba(0,0,0,0.25),0 3px 6px rgba(150,100,20,0.4)}
.ex-swatch.is-chosen span{color:var(--gold);font-weight:700}

/* world cards */
.ex-worlds{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ex-worlds--8{grid-template-columns:repeat(4,1fr)}
.ex-world{background:rgba(255,250,235,0.55);border:1.4px solid rgba(150,116,67,0.4);
  border-radius:12px;padding:5px 5px 7px;display:flex;flex-direction:column;text-align:center;transition:all .25s;overflow:hidden}
.ex-world__img{aspect-ratio:5/4;border-radius:8px;overflow:hidden;background:var(--parch-deep)}
.ex-world__img img{width:100%;height:100%;object-fit:cover}
.ex-world h4{font-family:var(--serif);font-style:italic;font-weight:600;font-size:13px;color:var(--ink);margin-top:6px;line-height:1.1}
.ex-world:hover{border-color:var(--gold);transform:translateY(-2px)}
.ex-world.is-chosen{border-color:var(--gold);background:linear-gradient(135deg,#f3e0a8,#fbf1d2);box-shadow:0 0 0 2px rgba(192,138,18,0.25)}

/* segmented (time of day) */
.ex-seg{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.ex-seg button{background:rgba(255,250,235,0.6);border:1.4px solid rgba(150,116,67,0.4);
  border-radius:10px;padding:8px 4px;display:flex;flex-direction:column;align-items:center;gap:2px;transition:all .2s}
.ex-seg button .i{font-size:17px;color:var(--gold)}
.ex-seg button span:not(.i){font-family:var(--sans);font-size:11px;color:var(--ink-soft);font-weight:600}
.ex-seg button:hover{border-color:var(--gold);transform:translateY(-1px)}
.ex-seg button.is-chosen{background:linear-gradient(135deg,#f3e0a8,#fbf1d2);border-color:var(--gold);box-shadow:0 0 0 2px rgba(192,138,18,0.22)}

/* flags */
.ex-flags{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.ex-flag{background:rgba(255,250,235,0.6);border:1.4px solid rgba(150,116,67,0.4);
  border-radius:10px;padding:8px 4px;display:flex;flex-direction:column;align-items:center;gap:3px;transition:all .2s}
.ex-flag .fl{font-size:20px;line-height:1}
.ex-flag span:not(.fl){font-family:var(--sans);font-size:10px;color:var(--ink-soft);font-weight:600}
.ex-flag:hover{border-color:var(--gold);transform:translateY(-1px)}
.ex-flag.is-chosen{background:linear-gradient(135deg,#f3e0a8,#fbf1d2);border-color:var(--gold);box-shadow:0 0 0 2px rgba(192,138,18,0.22)}

/* ── footer nav (arrows + dots) ── */
.ex-nav{
  position:relative;z-index:5;flex-shrink:0;
  display:flex;align-items:center;justify-content:space-between;
  padding:10px clamp(28px,5vw,60px) 4px;
}
.ex-arrow{
  display:inline-flex;align-items:center;gap:8px;
  font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.04em;
  padding:11px 20px;border-radius:999px;border:none;transition:all .25s;
}
.ex-arrow--prev{background:transparent;color:var(--ink-soft);border:1.5px solid rgba(150,116,67,0.45)}
.ex-arrow--prev:hover{border-color:var(--gold);color:var(--gold);transform:translateX(-2px)}
.ex-arrow--next{
  background:linear-gradient(135deg,#e6c25a 0%,#c08a12 100%);color:#3a2810;
  box-shadow:0 10px 22px -10px rgba(192,138,18,0.6);
}
.ex-arrow--next:hover:not(:disabled){transform:translateX(2px);box-shadow:0 16px 26px -10px rgba(192,138,18,0.7)}
.ex-arrow:disabled{opacity:.4;cursor:not-allowed}
.ex-dots{display:flex;gap:8px;align-items:center}
.ex-dot{width:9px;height:9px;border-radius:50%;background:rgba(150,116,67,0.4);transition:all .25s;border:none;padding:0}
.ex-dot.is-active{background:var(--seal);width:26px;border-radius:5px}
.ex-dot.is-done{background:var(--gold)}

/* ── page 6: cover ── */
/* size to content (not flex:1) so page 6 scrolls when the cover + CTAs
   are taller than the sheet — otherwise the buy buttons fall below the fold */
.ex-cover-wrap{display:flex;flex-direction:column;align-items:center;gap:14px;justify-content:flex-start;flex:0 0 auto}
.ex-cover{
  position:relative;width:min(216px,52%);aspect-ratio:1024/1536;flex-shrink:0;
  container-type:inline-size;
  background:linear-gradient(160deg,#3a2810,#1d1206);
  border-radius:10px;overflow:hidden;
  border:1px solid rgba(192,138,18,0.5);
  box-shadow:0 20px 40px -16px rgba(0,0,0,0.6),inset 0 0 0 6px rgba(192,138,18,0.18);
}
.ex-cover img{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .8s}
.ex-cover.is-ready img{opacity:1}
.ex-cover__paint{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;gap:10px;padding:0 14px;
  font-family:var(--display);font-size:15px;color:#f3e0a8;
  background:rgba(45,27,10,0.6);
}
.ex-cover.is-ready .ex-cover__paint{display:none}
@keyframes paintPulse{0%,100%{opacity:.6}50%{opacity:1}}
/* Only the message pulses — a pulsing progress bar would read as "stalled". */
.ex-cover__msg{animation:paintPulse 1.4s ease-in-out infinite;line-height:1.35}
.ex-cover__bar{
  width:78%;height:5px;border-radius:99px;overflow:hidden;
  background:rgba(255,240,200,0.18);box-shadow:inset 0 0 0 1px rgba(192,138,18,0.3);
}
.ex-cover__bar span{
  display:block;height:100%;width:0%;border-radius:99px;
  background:linear-gradient(90deg,#c08a12,#f3e0a8);
  transition:width .6s cubic-bezier(.25,.9,.35,1);
}
.ex-cover__pct{font-family:var(--sans);font-size:10px;letter-spacing:.08em;color:rgba(243,224,168,0.75)}
/* Errors reuse this overlay — the bar is meaningless then. */
.ex-cover__paint.is-msg-only .ex-cover__bar,
.ex-cover__paint.is-msg-only .ex-cover__pct{display:none}
.ex-cover__sheen{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(255,240,200,0.35) 50%,transparent 70%);
  transform:translateX(-120%);animation:sheen 2.4s ease-in-out infinite}
.ex-cover.is-ready .ex-cover__sheen{animation:none;opacity:0}
@keyframes sheen{0%{transform:translateX(-120%)}60%,100%{transform:translateX(120%)}}
/* ── cover title: now BAKED into the generated cover art, so the browser
   overlay is hidden (kept in the DOM to avoid touching JS refs) ── */
.ex-cover__title{
  display:none;
  position:absolute;left:0;right:0;top:0;
  padding:16px 14px 30px;text-align:center;z-index:2;
  background:linear-gradient(180deg, rgba(10,6,22,0.60) 0%, rgba(10,6,22,0.18) 62%, transparent 100%);
  /* themed colours are set inline from JS (world + time of day) */
  --tc:#f5d76e; --tc-shadow:#6b4a12; --tc-outline:rgba(0,0,0,0.55);
}
.ex-cover__title .pre{
  display:block;font-family:var(--sans);font-size:9px;letter-spacing:.3em;
  text-transform:uppercase;color:rgba(255,255,255,0.9);margin-bottom:4px;
  text-shadow:0 1px 3px rgba(0,0,0,0.6);
}
.ex-cover__title .nm{
  display:block;line-height:1.08;color:var(--tc);
  font-size:11cqw; /* scales with the cover; JS trims it for longer titles */
  overflow-wrap:break-word;text-wrap:balance;
}
/* Elegant — engraved serif */
.ex-cover__title.title--elegant .nm{
  font-family:'Cinzel',serif;font-weight:700;letter-spacing:.03em;
  text-shadow:0 1px 0 rgba(255,255,255,0.25), 0 2px 7px rgba(0,0,0,0.55);
}
/* Bubble — 3D extruded */
.ex-cover__title.title--bubble .nm{
  font-family:'Fredoka',sans-serif;font-weight:700;letter-spacing:.01em;
  -webkit-text-stroke:3px var(--tc-outline);paint-order:stroke fill;
  text-shadow:0 2px 0 var(--tc-shadow),0 3px 0 var(--tc-shadow),0 4px 0 var(--tc-shadow),0 5px 0 var(--tc-shadow),0 7px 9px rgba(0,0,0,0.45);
}
/* Storybook — flowing script */
.ex-cover__title.title--storybook .nm{
  font-family:'Berkshire Swash',cursive;
  text-shadow:0 2px 6px rgba(0,0,0,0.55),0 1px 0 rgba(255,255,255,0.2);
}
/* Comic — bold outlined caps */
.ex-cover__title.title--comic .nm{
  font-family:'Bangers',cursive;letter-spacing:.05em;text-transform:uppercase;
  -webkit-text-stroke:2px rgba(0,0,0,0.6);paint-order:stroke fill;
  text-shadow:3px 3px 0 var(--tc-shadow),4px 4px 9px rgba(0,0,0,0.4);
}

/* ── title-style picker (step 5) ── */
.ff-elegant{font-family:'Cinzel',serif;font-weight:700}
.ff-bubble{font-family:'Fredoka',sans-serif;font-weight:700}
.ff-storybook{font-family:'Berkshire Swash',cursive}
.ff-comic{font-family:'Bangers',cursive;letter-spacing:.03em}
.ex-fonts{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.ex-font{
  background:#fffdf6;border:1.5px solid rgba(150,116,67,0.3);border-radius:12px;
  padding:12px 6px;min-height:52px;
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:all .2s;overflow:hidden;
}
.ex-font__demo{font-size:19px;color:var(--ink);line-height:1;white-space:nowrap}
.ex-font:hover{border-color:var(--gold);transform:translateY(-1px)}
.ex-font.is-chosen{border-color:var(--gold);background:linear-gradient(135deg,#f3e0a8,#fbf1d2);box-shadow:0 0 0 2px rgba(192,138,18,0.25)}
.ex-cover-note{font-family:var(--serif);font-style:italic;font-size:13px;color:var(--ink-soft);text-align:center;max-width:340px}
.ex-cover-cta{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
.ex-cover-fine{font-family:var(--sans);font-size:11px;color:var(--ink-mute);text-align:center}
/* Now that the gate promises the cover is theirs to download, this is the
   thing that delivers on it — a findable button, not a footnote. Outlined
   rather than gold so it does not compete with the buy button. */
.ex-dl-cover{display:inline-flex;align-items:center;gap:7px;margin:4px auto 0;cursor:pointer;
  font-family:var(--sans);font-size:12.5px;font-weight:700;letter-spacing:.02em;
  color:#9a6a14;background:rgba(255,250,235,0.6);
  border:1.4px solid rgba(150,116,67,0.45);border-radius:99px;padding:8px 18px;
  transition:background .18s,border-color .18s,transform .12s}
.ex-dl-cover[hidden],.ex-btn[hidden]{display:none}
.ex-regen{margin:0 auto}
.ex-dl-cover:hover{color:#c08a12;background:#fffaeb;border-color:var(--gold);transform:translateY(-1px)}
.ex-dl-cover:disabled{opacity:.5;cursor:default}
.ex-email{
  width:min(340px,90%);margin:0 auto;
  font-family:var(--hand);font-size:22px;color:var(--ink);text-align:center;
  background:rgba(255,250,235,0.6);border:1.4px solid rgba(150,116,67,0.45);border-radius:12px;
  padding:8px 14px;outline:none;caret-color:var(--seal);
}
.ex-email::placeholder{font-family:var(--serif);font-style:italic;font-size:15px;color:var(--ink-mute)}
.ex-email:focus{border-color:var(--seal)}
.ex-email-wrap{display:none;flex-direction:column;gap:10px;align-items:center}
.ex-email-wrap.is-shown{display:flex}

/* ── page 6: email gate ── */
.ex-gate-lead{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-soft);
  text-align:center;max-width:400px;margin:0 auto 4px}
/* Recap of their choices, read before they spend their one free cover.
   Capped and scrolled internally: four heroes with free-text answers would
   otherwise push the email field and the button off-screen, and the form has
   to stay reachable without hunting for it. */
/* flex:0 0 auto is load-bearing: .ex-body is a flex column, and overflow:auto
   makes this a scroll container whose automatic min-height becomes 0 — without
   it the box collapses to the height of its header. */
.ex-recap{flex:0 0 auto;max-width:400px;width:100%;margin:0 auto 4px;padding:13px 15px;
  max-height:150px;overflow-y:auto;
  background:rgba(255,250,235,0.5);border:1px solid rgba(150,116,67,0.28);border-radius:12px}
.ex-recap::-webkit-scrollbar{width:7px}
.ex-recap::-webkit-scrollbar-track{background:rgba(150,116,67,0.12);border-radius:5px}
.ex-recap::-webkit-scrollbar-thumb{background:rgba(150,116,67,0.45);border-radius:5px}
/* Sticky so the label stays put while a long recap scrolls under it. */
.ex-recap__head{position:sticky;top:-13px;z-index:1;
  background:linear-gradient(rgba(253,248,235,0.97) 70%,rgba(253,248,235,0));
  margin:-13px -15px 6px;padding:13px 15px 6px;
  font-family:var(--sans);font-size:10.5px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--ink-mute)}
.ex-recap__line{margin:0 0 5px;font-family:var(--serif);font-size:14px;line-height:1.5;color:var(--ink)}
.ex-recap__line b{font-weight:600}
.ex-recap__line i{font-style:normal;color:var(--ink-mute);margin:0 2px}
.ex-recap__hero b{font-family:var(--hand);font-size:17px;font-weight:400}
.ex-recap__bits{font-family:var(--sans);font-size:11px;color:var(--ink-soft)}
.ex-recap__look{display:block;font-family:var(--serif);font-style:italic;font-size:12.5px;
  color:var(--ink-mute);line-height:1.35}
.ex-recap__plot{color:var(--ink-soft)}
.ex-recap__extra{margin:0 0 3px;font-family:var(--serif);font-style:italic;font-size:12.5px;color:var(--ink-mute);line-height:1.4}
.ex-recap__title{margin:6px 0 2px;font-family:var(--display);font-size:15px;color:var(--ink);line-height:1.3}
.ex-recap__style{margin:0;font-family:var(--sans);font-size:10.5px;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ink-mute)}

.ex-consents{display:flex;flex-direction:column;gap:10px;max-width:400px;margin:0 auto}
.ex-check{display:flex;align-items:flex-start;gap:9px;cursor:pointer;
  font-family:var(--sans);font-size:12.5px;line-height:1.45;color:var(--ink-soft)}
.ex-check input{flex:0 0 auto;width:16px;height:16px;margin-top:1px;cursor:pointer;accent-color:var(--seal)}
.ex-check em{font-style:italic;color:var(--ink-mute)}
.ex-check a{color:#9a6a14;text-decoration:underline;text-underline-offset:2px}
.ex-check a:hover{color:#c08a12}
.ex-gate-cta{display:flex;justify-content:center;margin-top:4px}

.ex-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:var(--sans);font-weight:700;font-size:14px;
  padding:12px 22px;border-radius:999px;border:none;transition:all .25s;
}
.ex-btn--gold{background:linear-gradient(135deg,#e6c25a,#c08a12);color:#3a2810;box-shadow:0 12px 24px -10px rgba(192,138,18,0.6)}
.ex-btn--gold:hover{transform:translateY(-2px)}
.ex-btn--ghost{background:transparent;color:var(--ink);border:1.5px solid rgba(150,116,67,0.5)}
.ex-btn--ghost:hover{border-color:var(--gold);color:var(--gold)}
.ex-btn:disabled{opacity:.5}

.ex-q--surprise{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.ex-surprise-hint{font-family:var(--sans);font-size:13px;color:rgba(58,40,16,0.6)}

@media (max-width: 720px){
  html,body{overflow-x:hidden}
  body.exclusive-body{cursor:auto}
  a,button,input,textarea{cursor:auto}
  #quill{display:none}
  .scroll-stage{padding:64px 16px}
  .ex-brand{height:32px;top:14px}
  .ex-back{padding:8px 12px}
  .ex-back span{display:none}
  .ex-counter{padding:8px 13px}
  .ex-counter__label{display:none}
  .ex-row{grid-template-columns:1fr}
  .ex-worlds{grid-template-columns:repeat(2,1fr)}
  .ex-cards--4{grid-template-columns:repeat(2,1fr)}
  .ex-hero-row{flex-direction:column;align-items:stretch}
  .ex-hero-row__label{width:auto}
}
@media (max-width: 460px){
  .ex-fonts{grid-template-columns:repeat(2,1fr)}
}
