@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600&family=DM+Sans:wght@300;400;500;600&family=Playfair+Display:ital,wght@0,500;0,600;1,500;1,600&family=Parisienne&display=swap');

:root {
  --bg: #0d0b10;
  --paper: #fff8f1;
  --muted: rgba(255,248,241,.68);
  --faint: rgba(255,248,241,.34);
  --accent: #d78a73;
  --accent2: #f0c9a9;
  --line: rgba(255,248,241,.16);
  --display: 'Cormorant Garamond', Georgia, serif;
  --sans: 'DM Sans', system-ui, sans-serif;
  --script: 'Parisienne', cursive;
  --ease: cubic-bezier(.22,1,.36,1);
}

* { box-sizing: border-box; }
html, body { margin:0; width:100%; min-height:100%; background:var(--bg); color:var(--paper); }
body { font-family:var(--sans); -webkit-font-smoothing:antialiased; }
button,input { font:inherit; }
button { -webkit-tap-highlight-color:transparent; }
.app { position:relative; min-height:100dvh; overflow:hidden; }
.hidden { display:none !important; }

/* ---------- THEMES ---------- */
.screen { --t1:#e8a38d; --t2:#8d5870; --wash:rgba(232,163,141,.14); }
.theme-dawn { --t1:#f2b29b; --t2:#7c5a87; --wash:rgba(242,178,155,.18); background:radial-gradient(circle at 20% 15%, rgba(242,178,155,.25), transparent 36%), radial-gradient(circle at 85% 80%, rgba(124,90,135,.22), transparent 38%), #171018; }
.theme-sea { --t1:#75c8cf; --t2:#4265a6; --wash:rgba(117,200,207,.17); background:radial-gradient(circle at 80% 10%, rgba(117,200,207,.28), transparent 35%), linear-gradient(145deg,#071b28,#162b4b 55%,#0c101e); }
.theme-travel { --t1:#f1bb73; --t2:#c36e61; --wash:rgba(241,187,115,.16); background:linear-gradient(145deg,#211714,#553a2e 55%,#211116); }
.theme-blush { --t1:#ff9ab6; --t2:#9c5d88; --wash:rgba(255,154,182,.15); background:radial-gradient(circle at 15% 20%,rgba(255,154,182,.25),transparent 34%),radial-gradient(circle at 90% 75%,rgba(156,93,136,.25),transparent 38%),#180e18; }
.theme-saffron { --t1:#f3bf68; --t2:#b66d55; --wash:rgba(243,191,104,.17); background:linear-gradient(140deg,#1b1110,#4a2b20 45%,#211216); }
.theme-garden { --t1:#a8d58e; --t2:#8e6da7; --wash:rgba(168,213,142,.13); background:radial-gradient(circle at 80% 10%,rgba(168,213,142,.18),transparent 35%),#101613; }
.theme-violet { --t1:#c8a1ff; --t2:#ee8bc4; --wash:rgba(200,161,255,.14); background:radial-gradient(circle at 20% 15%,rgba(200,161,255,.22),transparent 35%),radial-gradient(circle at 90% 85%,rgba(238,139,196,.2),transparent 38%),#120d19; }
.theme-playful { --t1:#ffd166; --t2:#ff7f8e; --wash:rgba(255,209,102,.16); background:linear-gradient(135deg,#21151a,#4c2732 52%,#201a11); }
.theme-midnight { --t1:#b8b7ff; --t2:#6d78ca; --wash:rgba(184,183,255,.13); background:radial-gradient(circle at 50% 25%,rgba(109,120,202,.22),transparent 42%),#090b19; }
.theme-berry { --t1:#ff9fbe; --t2:#9f456d; --wash:rgba(255,159,190,.14); background:linear-gradient(145deg,#190b16,#4b1931 55%,#170c19); }
.theme-ocean { --t1:#80d4ed; --t2:#4d8fd2; --wash:rgba(128,212,237,.15); background:linear-gradient(160deg,#07151e,#103d58 55%,#10172b); }
.theme-rose-gold { --t1:#efb08d; --t2:#d77d8e; --wash:rgba(239,176,141,.16); background:radial-gradient(circle at 15% 10%,rgba(239,176,141,.23),transparent 35%),#1a0f14; }
.theme-dark-romantic { --t1:#e9a4ba; --t2:#8b4f77; --wash:rgba(233,164,186,.12); background:radial-gradient(circle at 50% 10%,rgba(139,79,119,.24),transparent 42%),#0d0910; }
.theme-gold { --t1:#e8c77d; --t2:#b78b43; --wash:rgba(232,199,125,.17); background:radial-gradient(circle at 50% 50%,rgba(232,199,125,.18),transparent 42%),#100e0a; }

.screen { position:relative; min-height:100dvh; width:100%; padding:clamp(24px,5vw,56px); display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; overflow:auto; isolation:isolate; animation:screenIn .75s var(--ease) both; }
.screen::before { content:""; position:absolute; inset:0; background:radial-gradient(circle at 50% 110%,var(--wash),transparent 40%); pointer-events:none; z-index:-1; }
.screen-exit { animation:screenOut .35s var(--ease) both; }
@keyframes screenIn { from{opacity:0;transform:scale(.985)} to{opacity:1;transform:scale(1)} }
@keyframes screenOut { from{opacity:1} to{opacity:0} }

/* ---------- TYPE ---------- */
.eyebrow,.chapter-number,.journey-progress,.tiny-note,.set-meta,.set-dots { font-family:var(--sans); text-transform:uppercase; letter-spacing:.18em; font-size:10px; color:var(--faint); }
.eyebrow { color:var(--t1); margin-bottom:20px; }
.title,.chapter-title { font-family:var(--display); font-weight:500; line-height:.96; letter-spacing:-.02em; }
.title { font-size:clamp(48px,12vw,86px); max-width:800px; margin:0 0 22px; }
.subtext { font-family:var(--display); font-style:italic; font-size:clamp(19px,4.8vw,25px); line-height:1.4; max-width:600px; color:var(--muted); }
.chapter-head { width:min(900px,100%); margin-bottom:clamp(18px,4vh,34px); }
.chapter-title { font-size:clamp(40px,9vw,72px); margin:8px 0 10px; color:var(--t1); }
.chapter-opening { margin:0 auto; max-width:680px; color:var(--muted); font-family:var(--display); font-size:clamp(18px,4vw,23px); line-height:1.35; font-style:italic; }

/* ---------- LOGIN / INTRO ---------- */
.login-screen,.intro-screen { text-align:center; }
.intro-orbit { width:180px; height:180px; border:1px solid rgba(255,255,255,.1); border-radius:50%; position:absolute; opacity:.5; animation:orbit 14s linear infinite; }
.intro-orbit::after { content:""; position:absolute; width:7px; height:7px; border-radius:50%; background:var(--t1); top:7px; left:50%; box-shadow:0 0 30px var(--t1); }
@keyframes orbit { to{transform:rotate(360deg)} }
.hero-btn { position:relative; z-index:2; }
.tiny-note { margin-top:42px; }
.login-form { width:min(330px,100%); display:flex; flex-direction:column; gap:16px; margin-top:34px; }
.login-form input { width:100%; background:rgba(255,255,255,.035); border:0; border-bottom:1px solid var(--line); color:var(--paper); padding:13px 5px; outline:none; }
.login-form input:focus { border-color:var(--t1); }
.login-form input::placeholder { color:var(--faint); }
.login-error { min-height:18px; color:#ff9caa; font-size:12px; }

/* ---------- BUTTONS ---------- */
.btn-continue,.next-control,.back-control { cursor:pointer; border:0; background:none; color:var(--paper); }
.btn-continue { margin-top:34px; padding:12px 0; font-family:var(--sans); font-size:12px; text-transform:uppercase; letter-spacing:.16em; border-bottom:1px solid var(--t1); transition:all .25s var(--ease); }
.btn-continue span,.next-control span { color:var(--t1); margin-left:10px; font-size:17px; }
.btn-continue:hover { letter-spacing:.22em; }

/* ---------- GALLERY ---------- */
.gallery-screen { justify-content:flex-start; padding-top:clamp(24px,6vh,62px); padding-bottom:42px; }
.gallery-stage { width:min(1050px,100%); display:flex; flex-direction:column; align-items:center; }
.set-meta { width:100%; display:flex; align-items:center; gap:12px; margin:2px 0 12px; }
.set-meta .set-rule { height:1px; flex:1; background:var(--line); }
.photo-mosaic { width:100%; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
.photo-tile { position:relative; min-height:clamp(180px,30vh,360px); margin:0; overflow:hidden; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.09); }
.photo-tile:nth-child(1) { min-height:clamp(260px,42vh,470px); }
.photo-tile:nth-child(4) { min-height:clamp(210px,34vh,400px); }
.photo-mosaic.single { grid-template-columns:1fr; }
.photo-mosaic.single .photo-tile { min-height:min(62vh,620px); }
.photo-mosaic.three { grid-template-columns:1.2fr .8fr; }
.photo-mosaic.three .photo-tile:first-child { grid-row:span 2; min-height:min(58vh,600px); }
.photo-tile img,.photo-tile video { width:100%; height:100%; min-height:inherit; display:block; object-fit:cover; opacity:0; transform:scale(1.035); transition:opacity .8s var(--ease),transform 1.2s var(--ease); }
.photo-tile.ready img,.photo-tile.ready video { opacity:1; transform:scale(1); }
.photo-tile figcaption { position:absolute; left:0; right:0; bottom:0; padding:38px 14px 13px; text-align:left; font-family:var(--display); font-size:clamp(14px,3.2vw,19px); line-height:1.08; color:white; background:linear-gradient(transparent,rgba(0,0,0,.72)); opacity:0; transform:translateY(6px); transition:.45s var(--ease); }
.photo-tile.ready figcaption { opacity:1; transform:none; }
.tile-number { position:absolute; top:11px; right:12px; font-family:var(--sans); font-size:9px; letter-spacing:.12em; color:rgba(255,255,255,.75); opacity:.9; }
.tile-shimmer { position:absolute; inset:0; background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.1) 45%,transparent 65%); background-size:200% 100%; animation:shimmer 1.4s infinite; }
@keyframes shimmer { to{background-position:-200% 0} }
.photo-tile.ready .tile-shimmer { display:none; }
.media-error { display:flex; height:100%; min-height:inherit; align-items:center; justify-content:center; color:var(--muted); font-size:12px; }
.set-caption { width:min(700px,100%); display:flex; gap:12px; align-items:flex-start; margin-top:20px; text-align:left; }
.caption-mark { color:var(--t1); font-size:14px; padding-top:3px; }
.set-caption p { margin:0; font-family:var(--display); font-size:clamp(17px,4vw,23px); font-style:italic; line-height:1.25; color:var(--muted); }
.journey-controls { width:min(700px,100%); display:flex; justify-content:space-between; align-items:center; margin-top:20px; }
.back-control,.next-control { font-size:11px; text-transform:uppercase; letter-spacing:.12em; color:var(--muted); padding:10px 0; }
.next-control { color:var(--paper); border-bottom:1px solid var(--t1); }
.back-control:disabled { opacity:.25; cursor:default; }
.set-dots { color:var(--faint); }
.progress-line { width:min(700px,100%); height:1px; background:var(--line); margin-top:18px; }
.progress-line span { display:block; height:100%; background:var(--t1); transition:width .7s var(--ease); }
.journey-progress { margin-top:9px; }

/* ---------- LOCKED ---------- */
.locked-screen { justify-content:center; }
.lock-ring { width:105px; height:105px; border:1px solid var(--t1); border-radius:50%; display:grid; place-items:center; margin-bottom:28px; box-shadow:0 0 70px var(--wash); animation:breath 3.2s ease-in-out infinite; }
.lock-ring span { color:var(--t1); font-size:22px; }
@keyframes breath { 50%{transform:scale(1.04);box-shadow:0 0 90px var(--wash)} }
.locked-copy { white-space:pre-line; max-width:500px; }

/* ---------- MESSAGES ---------- */
.message-screen { text-align:center; }
.message-copy { width:min(720px,100%); margin-top:12px; }
.message-line { font-family:var(--display); font-size:clamp(20px,4.6vw,29px); line-height:1.27; color:var(--muted); margin:0 0 14px; }
.message-line.lead { color:var(--t1); font-size:clamp(28px,7vw,48px); font-weight:600; }
.body-text { white-space:pre-line; text-align:left; margin:28px auto 0; padding:22px 0; border-top:1px solid var(--line); border-bottom:1px solid var(--line); font-family:var(--display); font-size:clamp(18px,4.2vw,23px); line-height:1.55; color:var(--paper); }
.message-small { font-family:var(--display); font-size:clamp(18px,4.2vw,23px); color:var(--muted); margin:12px 0; }
.closing-line { margin:28px 0 0; color:var(--t1); font-family:var(--script); font-size:clamp(28px,7vw,42px); }

/* ---------- FINAL ---------- */
.final-screen { overflow:hidden; }
.final-glow { position:absolute; width:50vmin; height:50vmin; border-radius:50%; background:radial-gradient(circle,var(--wash),transparent 68%); filter:blur(4px); animation:finalPulse 4s ease-in-out infinite; }
@keyframes finalPulse { 50%{transform:scale(1.12);opacity:.8} }
.final-lines { position:relative; min-height:110px; z-index:2; }
.final-line { font-family:var(--display); font-style:italic; font-size:clamp(22px,5.5vw,32px); color:var(--muted); margin:0; }
.final-reveal { position:relative; z-index:2; opacity:0; margin-top:28px; font-family:var(--script); font-size:clamp(55px,14vw,110px); color:var(--t1); line-height:.9; text-shadow:0 0 45px var(--wash); }
.final-reveal.show { animation:reveal 1.5s var(--ease) forwards; }
.final-signature { position:relative; z-index:2; opacity:0; margin-top:25px; font-family:var(--display); font-size:22px; color:var(--muted); }
.final-signature.show { animation:fadeUp .8s var(--ease) .5s forwards; }
@keyframes reveal { from{opacity:0;transform:scale(.92);filter:blur(7px)} to{opacity:1;transform:scale(1);filter:blur(0)} }
@keyframes fadeUp { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }

.loading-veil { position:fixed; inset:0; background:rgba(5,4,7,.58); backdrop-filter:blur(5px); opacity:0; pointer-events:none; transition:opacity .25s; z-index:99; }
.loading-veil.show { opacity:1; pointer-events:auto; }

@media (min-width:800px) {
  .photo-mosaic { grid-template-columns:1.05fr .95fr 1.05fr; }
  .photo-tile:nth-child(1) { grid-row:span 2; min-height:520px; }
  .photo-tile:nth-child(2),.photo-tile:nth-child(3),.photo-tile:nth-child(4) { min-height:255px; }
  .photo-mosaic.three { grid-template-columns:1.2fr .8fr; }
}

@media (max-width:600px) {
  .screen { padding-left:18px; padding-right:18px; }
  .gallery-screen { padding-top:24px; }
  .photo-mosaic { gap:7px; }
  .photo-tile { min-height:25vh; }
  .photo-tile:nth-child(1) { min-height:34vh; }
  .photo-tile:nth-child(4) { min-height:25vh; }
  .photo-mosaic.single .photo-tile { min-height:55vh; }
  .photo-mosaic.three { grid-template-columns:1fr 1fr; }
  .photo-mosaic.three .photo-tile:first-child { grid-column:span 2; grid-row:auto; min-height:40vh; }
  .photo-tile figcaption { opacity:1; transform:none; font-size:14px; padding-top:42px; }
  .chapter-title { font-size:45px; }
}

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

/* =========================================================
   V4 CREATIVE PASS — chapter title pages + richer typography
   ========================================================= */
.chapter-intro-screen { overflow:auto; }
.chapter-intro-inner { width:min(760px,100%); padding:8vh 0; }
.chapter-intro-screen .chapter-number { color:var(--t1); }
.intro-kicker { font-family:var(--sans); text-transform:uppercase; letter-spacing:.22em; font-size:10px; color:var(--t1); margin-top:18px; }
.chapter-intro-screen .chapter-title { font-size:clamp(58px,13vw,104px); margin:18px auto 20px; max-width:760px; }
.chapter-intro-rule { width:76px; height:2px; background:linear-gradient(90deg,var(--t1),var(--t2)); margin:22px auto 28px; border-radius:99px; }
.chapter-intro-copy { width:min(650px,100%); margin:auto; }
.intro-line { font-family:var(--display); font-size:clamp(20px,4.7vw,28px); line-height:1.3; color:var(--muted); margin:0 auto 15px; }
.intro-line.lead { color:var(--paper); font-size:clamp(27px,6vw,42px); }
.chapter-intro-screen .btn-continue { margin-top:30px; }
.quiet-back { display:block; margin:22px auto 0; border:0; background:none; color:var(--faint); cursor:pointer; font-family:var(--sans); font-size:11px; letter-spacing:.14em; text-transform:uppercase; }
.quiet-back:hover { color:var(--paper); }

/* Give chapter title pages subtly different personalities. */
.theme-sea .chapter-title,.theme-ocean .chapter-title { font-family:'Playfair Display',Georgia,serif; font-style:italic; }
.theme-travel .chapter-title { font-family:'DM Sans',system-ui,sans-serif; font-weight:600; letter-spacing:-.055em; }
.theme-blush .chapter-title,.theme-rose-gold .chapter-title { font-family:'Playfair Display',Georgia,serif; }
.theme-saffron .chapter-title { font-family:'Cormorant Garamond',Georgia,serif; font-weight:600; }
.theme-garden .chapter-title { font-family:'Cormorant Garamond',Georgia,serif; font-style:italic; }
.theme-violet .chapter-title { font-family:'Playfair Display',Georgia,serif; font-style:italic; }
.theme-playful .chapter-title { font-family:'DM Sans',system-ui,sans-serif; font-weight:600; letter-spacing:-.05em; }
.theme-midnight .chapter-title,.theme-dark-romantic .chapter-title { font-family:'Cormorant Garamond',Georgia,serif; font-style:italic; }
.theme-gold .chapter-title { font-family:'Playfair Display',Georgia,serif; }

/* More playful colour movement without turning the page into a neon template. */
.theme-dawn { background:radial-gradient(circle at 15% 15%,rgba(255,187,145,.34),transparent 30%),radial-gradient(circle at 85% 80%,rgba(180,116,255,.26),transparent 34%),linear-gradient(145deg,#24151a,#151022 62%,#0f0c16); }
.theme-sea { background:radial-gradient(circle at 12% 15%,rgba(95,224,218,.30),transparent 28%),radial-gradient(circle at 88% 85%,rgba(89,126,255,.30),transparent 34%),linear-gradient(145deg,#071b28,#193c59 58%,#101021); }
.theme-travel { background:radial-gradient(circle at 80% 15%,rgba(255,180,91,.32),transparent 30%),radial-gradient(circle at 10% 85%,rgba(206,104,113,.24),transparent 34%),linear-gradient(145deg,#2a1713,#5b3a2b 58%,#241116); }
.theme-blush { background:radial-gradient(circle at 10% 10%,rgba(255,155,192,.36),transparent 29%),radial-gradient(circle at 90% 90%,rgba(180,99,255,.27),transparent 34%),linear-gradient(145deg,#210f1b,#38142b 52%,#160d19); }
.theme-saffron { background:radial-gradient(circle at 88% 12%,rgba(255,201,94,.34),transparent 28%),radial-gradient(circle at 12% 88%,rgba(230,101,90,.24),transparent 34%),linear-gradient(145deg,#29130e,#513020 55%,#1d1014); }
.theme-garden { background:radial-gradient(circle at 80% 10%,rgba(154,224,121,.29),transparent 28%),radial-gradient(circle at 15% 88%,rgba(93,174,170,.20),transparent 34%),linear-gradient(145deg,#101b15,#17332b 55%,#11131a); }
.theme-violet { background:radial-gradient(circle at 18% 14%,rgba(174,133,255,.32),transparent 30%),radial-gradient(circle at 88% 85%,rgba(255,119,190,.28),transparent 35%),linear-gradient(145deg,#170d22,#321641 55%,#120d1d); }
.theme-playful { background:radial-gradient(circle at 15% 15%,rgba(255,221,94,.32),transparent 27%),radial-gradient(circle at 85% 80%,rgba(255,104,153,.28),transparent 32%),linear-gradient(135deg,#29151b,#5a2734 53%,#251c10); }
.theme-midnight { background:radial-gradient(circle at 50% 15%,rgba(107,122,255,.28),transparent 32%),radial-gradient(circle at 85% 85%,rgba(199,96,255,.20),transparent 32%),#090b1a; }
.theme-berry { background:radial-gradient(circle at 15% 12%,rgba(255,118,176,.30),transparent 30%),radial-gradient(circle at 88% 88%,rgba(139,85,255,.22),transparent 34%),linear-gradient(145deg,#1c0b18,#551a3a 55%,#160b19); }
.theme-ocean { background:radial-gradient(circle at 15% 12%,rgba(80,226,240,.28),transparent 29%),radial-gradient(circle at 88% 88%,rgba(92,113,255,.27),transparent 35%),linear-gradient(160deg,#06161e,#124d67 55%,#11162d); }
.theme-rose-gold { background:radial-gradient(circle at 15% 10%,rgba(255,180,130,.34),transparent 30%),radial-gradient(circle at 88% 88%,rgba(255,112,150,.24),transparent 34%),linear-gradient(145deg,#251016,#49202c 55%,#171018); }
.theme-dark-romantic { background:radial-gradient(circle at 50% 8%,rgba(255,94,150,.18),transparent 32%),radial-gradient(circle at 20% 90%,rgba(114,79,255,.16),transparent 34%),#0e0911; }
.theme-gold { background:radial-gradient(circle at 50% 50%,rgba(238,200,113,.22),transparent 40%),radial-gradient(circle at 85% 15%,rgba(255,147,83,.12),transparent 28%),#100d09; }

/* Gallery: all source ratios become consistent art-directed tiles. */
.gallery-screen { padding-top:clamp(20px,4vh,42px); }
.gallery-head { width:min(980px,100%); text-align:center; margin-bottom:20px; }
.gallery-head .chapter-title { font-size:clamp(42px,9vw,70px); }
.photo-mosaic { width:min(980px,100%); display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.photo-tile { aspect-ratio:4/5; min-height:0 !important; border:1px solid rgba(255,255,255,.12); border-radius:16px; overflow:hidden; position:relative; background:rgba(255,255,255,.055); box-shadow:0 18px 45px rgba(0,0,0,.18); }
.photo-tile:nth-child(1),.photo-tile:nth-child(4),.photo-tile:nth-child(2),.photo-tile:nth-child(3) { min-height:0; grid-row:auto; }
.photo-tile img,.photo-tile video { width:100%; height:100%; min-height:0; object-fit:cover; display:block; opacity:0; transform:scale(1.06); transition:opacity .75s var(--ease),transform 1.15s var(--ease); }
.photo-tile.ready img,.photo-tile.ready video { opacity:1; transform:scale(1); }
.photo-tile::after { content:""; position:absolute; inset:0; pointer-events:none; background:linear-gradient(180deg,rgba(0,0,0,.04),transparent 60%,rgba(0,0,0,.18)); }
.photo-tile .tile-number { top:10px; right:11px; z-index:2; font-family:var(--sans); font-size:9px; letter-spacing:.16em; color:rgba(255,255,255,.82); }
.photo-tile figcaption { display:none !important; }
.photo-mosaic.count-1 { grid-template-columns:minmax(0,650px); justify-content:center; }
.photo-mosaic.count-1 .photo-tile { aspect-ratio:4/5; }
.photo-mosaic.count-3 { grid-template-columns:repeat(2,minmax(0,1fr)); }
.photo-mosaic.count-3 .photo-tile:first-child { grid-column:span 2; aspect-ratio:16/10; }
.set-caption { width:min(760px,100%); margin-top:22px; display:flex; gap:13px; align-items:flex-start; text-align:left; }
.set-caption p { margin:0; font-family:var(--display); font-style:italic; font-size:clamp(19px,4.5vw,27px); line-height:1.24; color:var(--paper); }
.caption-mark { color:var(--t1); }
.journey-controls { width:min(760px,100%); margin-top:22px; }
.next-control { padding:12px 2px; border-bottom:1px solid var(--t1); }
.back-control { padding:12px 2px; }

/* Messages get a slightly more editorial rhythm. */
.message-wrap { width:min(760px,100%); padding:8vh 0; }
.message-line { font-family:var(--display); }
.message-line.lead { font-family:'Playfair Display',Georgia,serif; font-style:italic; }
.body-text { border-color:rgba(255,255,255,.18); }

@media (max-width:600px) {
  .screen { padding-left:16px; padding-right:16px; }
  .chapter-intro-inner { padding:8vh 0 6vh; }
  .chapter-intro-screen .chapter-title { font-size:clamp(52px,15vw,78px); }
  .photo-mosaic { gap:8px; }
  .photo-tile { border-radius:12px; }
  .photo-mosaic.count-3 .photo-tile:first-child { aspect-ratio:16/10; }
  .set-caption { margin-top:18px; }
}

/* =========================================================
   V5 — PLAYFUL EDITORIAL PASS
   ========================================================= */
:root{--cream:#fff8ef;--ink:#171018;--soft:#eadfd9;--line:rgba(255,255,255,.2);--sans:'DM Sans',system-ui,sans-serif;--display:'Cormorant Garamond',Georgia,serif;--script:'Parisienne',cursive}
body{font-family:var(--sans);overflow-x:hidden}
.screen{min-height:100svh;position:relative;isolation:isolate;overflow:auto}
.screen::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.24;background-image:radial-gradient(rgba(255,255,255,.22) .7px,transparent .7px);background-size:18px 18px;mask-image:linear-gradient(to bottom,rgba(0,0,0,.7),transparent 85%);z-index:-1}
.chapter-decor{position:absolute;top:6vh;right:8vw;font-size:30px;opacity:.7;animation:floaty 4s ease-in-out infinite}
.spark-field,.final-sparkles{letter-spacing:.8em;opacity:.45;font-size:12px;margin-bottom:26px}
.intro-screen,.login-screen{text-align:center;padding:12vh 22px 8vh;display:flex;flex-direction:column;justify-content:center;align-items:center}
.title{font-family:'Playfair Display',serif;font-size:clamp(58px,15vw,110px);line-height:.88;letter-spacing:-.055em;max-width:850px}
.subtext{max-width:560px;font-size:16px;line-height:1.7;color:rgba(255,255,255,.7)}
.eyebrow,.intro-kicker,.chapter-number{font-family:var(--sans);text-transform:uppercase;letter-spacing:.22em;font-size:10px}
.btn-continue,.next-control,.back-control{font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase}
.btn-continue{border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.08);backdrop-filter:blur(14px);color:white;padding:15px 21px;border-radius:999px;cursor:pointer;transition:.25s ease;box-shadow:0 10px 30px rgba(0,0,0,.14)}
.btn-continue:hover{transform:translateY(-2px);background:rgba(255,255,255,.14);box-shadow:0 16px 40px rgba(0,0,0,.2)}
.hero-btn{margin-top:26px}
.tiny-note{margin-top:28px;font-size:10px;letter-spacing:.2em;text-transform:uppercase;opacity:.45}
.chapter-intro-screen,.first-chapter,.message-screen{padding:7vh max(20px,5vw) 6vh;display:flex;align-items:center;justify-content:center;text-align:center}
.chapter-intro-inner{max-width:800px}
.chapter-intro-screen .chapter-title,.first-chapter .chapter-title,.message-screen .chapter-title{font-size:clamp(54px,12vw,100px);line-height:.9;letter-spacing:-.045em;margin:18px 0}
.chapter-intro-rule{width:90px;height:1px;background:linear-gradient(90deg,transparent,var(--t1),transparent);margin:24px auto 30px}
.intro-line{font-family:var(--display);font-size:clamp(20px,4.6vw,30px);line-height:1.25;color:rgba(255,255,255,.72);max-width:720px;margin:0 auto 14px}
.intro-line.lead{font-size:clamp(29px,6.5vw,48px);color:#fff}
.tiny-surprise{margin:14px 0 2px;border:0;background:none;color:rgba(255,255,255,.6);cursor:pointer;font-size:11px;letter-spacing:.12em}
.quiet-back{color:rgba(255,255,255,.55);font-size:10px;letter-spacing:.18em;text-transform:uppercase}
.first-chapter{display:block;text-align:left}
.first-chapter>.chapter-number{max-width:1100px;margin:0 auto 22px}
.first-grid{max-width:1100px;margin:auto;display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(25px,6vw,80px);align-items:center}
.first-copy{padding:2vh 0}.first-copy .chapter-title{max-width:600px}.first-copy .chapter-intro-rule{margin-left:0}.first-copy .intro-line{margin-left:0}.first-surprise-note{font-family:var(--script);font-size:27px;color:rgba(255,255,255,.8);margin-top:28px}
.first-photo{aspect-ratio:4/5;border-radius:24px;overflow:hidden;position:relative;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);box-shadow:0 30px 90px rgba(0,0,0,.35);transform:rotate(1deg)}
.first-photo img{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transform:scale(1.05);transition:1s ease}.first-photo.ready img{opacity:1;transform:scale(1)}
.first-photo figcaption{position:absolute;bottom:0;left:0;right:0;padding:40px 18px 18px;color:#fff;font-family:var(--display);font-style:italic;font-size:17px;background:linear-gradient(transparent,rgba(0,0,0,.65))}
.first-actions{max-width:1100px;margin:32px auto 0;display:flex;align-items:center;gap:18px}.first-actions .quiet-back{margin:0}
.gallery-screen{padding:28px max(16px,4vw) 40px}
.gallery-head{max-width:1050px;margin:0 auto 20px;position:relative}.gallery-head .chapter-title{font-size:clamp(40px,8vw,72px);line-height:.95}.chapter-back-float{position:absolute;left:0;top:0;border:0;background:none;color:rgba(255,255,255,.62);font-size:11px;letter-spacing:.12em;cursor:pointer}
.gallery-stage{max-width:1050px;margin:auto}.photo-mosaic{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.photo-tile{aspect-ratio:4/5;border-radius:20px;overflow:hidden;position:relative;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);box-shadow:0 24px 55px rgba(0,0,0,.22)}
.photo-tile:nth-child(1){grid-column:span 2;grid-row:span 2;aspect-ratio:1/1}.photo-tile:nth-child(2),.photo-tile:nth-child(3){aspect-ratio:4/5}.photo-tile:nth-child(4){aspect-ratio:4/5}
.photo-tile img,.photo-tile video{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transform:scale(1.02);transition:opacity .28s ease,transform .4s ease}
.photo-tile.ready img,.photo-tile.ready video{opacity:1;transform:scale(1)}
.tile-number{position:absolute;right:12px;top:10px;color:rgba(255,255,255,.78);font-size:9px;letter-spacing:.15em}.tile-shimmer{position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.12) 50%,transparent 75%);animation:shimmer .9s infinite}
.photo-tile:not(.loading) .tile-shimmer{display:none}
.set-caption{max-width:820px;margin:24px auto 0;display:flex;gap:13px;align-items:flex-start;text-align:left}.set-caption p{font-family:var(--display);font-size:clamp(21px,4.4vw,30px);font-style:italic;line-height:1.15;margin:0;color:#fff}.caption-mark{color:var(--t1);font-size:18px;padding-top:4px}
.set-meta,.journey-progress{display:flex;justify-content:center;gap:10px;align-items:center;font-size:9px;letter-spacing:.17em;text-transform:uppercase;color:rgba(255,255,255,.55);margin:8px 0 15px}.set-rule{width:45px;height:1px;background:rgba(255,255,255,.3)}
.journey-controls{max-width:820px;margin:22px auto 0;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:18px}.back-control,.next-control{border:0;background:none;color:#fff;cursor:pointer;font-size:10px;padding:12px 0}.next-control{border-bottom:1px solid var(--t1)}.set-dots{text-align:center;font-size:9px;letter-spacing:.16em;text-transform:uppercase;opacity:.55}.progress-line{max-width:820px;height:2px;background:rgba(255,255,255,.12);margin:15px auto 0;overflow:hidden}.progress-line span{display:block;height:100%;background:var(--t1);transition:width .35s ease}.journey-progress{margin-top:9px}
.lock-ring{width:86px;height:86px;border:1px solid rgba(255,255,255,.25);border-radius:50%;display:grid;place-items:center;margin:20px auto;font-size:24px;animation:floaty 4s ease-in-out infinite}
.message-wrap{max-width:800px;width:100%}.message-copy{max-width:720px;margin:auto}.message-line{font-family:var(--display);font-size:clamp(24px,5vw,38px);line-height:1.2}.message-line.lead{font-family:'Playfair Display',serif;font-style:italic}.body-text{white-space:pre-line;border-top:1px solid rgba(255,255,255,.18);border-bottom:1px solid rgba(255,255,255,.18);padding:28px 0;margin:28px 0;font-family:var(--display);font-size:20px;line-height:1.55;color:rgba(255,255,255,.78)}.message-small{font-family:var(--display);font-size:20px;color:rgba(255,255,255,.7)}.closing-line{font-family:var(--script);font-size:32px}.message-actions{margin-top:26px}.message-actions .quiet-back{margin-top:15px}
.birthday-stage{margin:22px auto 35px}.cake{font-size:74px;cursor:pointer;display:inline-block;filter:drop-shadow(0 16px 25px rgba(0,0,0,.2));transition:.25s}.cake:hover{transform:translateY(-4px) rotate(-2deg)}.birthday-note{font-size:11px;letter-spacing:.08em;text-transform:uppercase;opacity:.7;margin-top:5px}
.birthday-letter{max-height:0;overflow:hidden;opacity:0;transform:translateY(-16px);transition:max-height 1s ease,opacity .5s ease,transform .8s ease}.birthday-letter.show{max-height:2000px;opacity:1;transform:none}
.final-screen{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px}.final-glow{position:absolute;width:70vmin;height:70vmin;border-radius:50%;background:radial-gradient(circle,rgba(255,215,120,.18),transparent 68%);filter:blur(3px);z-index:-1}.final-lines{max-width:700px}.final-line{font-family:var(--display);font-size:clamp(25px,6vw,46px);margin:12px 0;opacity:0;animation:fadeUp 1s ease var(--d) forwards}.final-secret{margin-top:35px;border:0;border-bottom:1px solid rgba(255,255,255,.35);background:none;color:rgba(255,255,255,.7);padding:10px 4px;cursor:pointer;letter-spacing:.1em}.final-secret.gone{opacity:0;pointer-events:none}.final-reveal{font-family:var(--script);font-size:clamp(58px,14vw,120px);line-height:.85;color:#f2d18b;opacity:0;transform:scale(.85);filter:blur(8px);transition:1.2s cubic-bezier(.2,.8,.2,1);margin-top:30px}.final-reveal.show{opacity:1;transform:scale(1);filter:none}.final-signature{font-family:var(--display);font-size:23px;color:#f7e4b4;opacity:0;transform:translateY(10px);transition:.8s ease .45s}.final-signature.show{opacity:1;transform:translateY(0)}
.toast-pop{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);background:rgba(15,10,18,.88);border:1px solid rgba(255,255,255,.18);border-radius:999px;padding:12px 17px;color:#fff;font-size:12px;opacity:0;transition:.25s;z-index:100}.toast-pop.show{opacity:1;transform:translate(-50%,0)}
.confetti-bit{position:fixed;top:45%;left:50%;font-size:20px;z-index:110;pointer-events:none;animation:confettiFly 1.6s ease-out forwards}
@keyframes shimmer{to{transform:translateX(100%)}}@keyframes floaty{50%{transform:translateY(-6px) rotate(2deg)}}@keyframes confettiFly{to{transform:translate(var(--x),calc(-180px - 40px*var(--n))) rotate(var(--r));opacity:0}}

/* Playful chapter personalities */
.theme-dawn{background:radial-gradient(circle at 10% 15%,#ffbb8d55,transparent 27%),radial-gradient(circle at 85% 82%,#aa7bff44,transparent 32%),linear-gradient(140deg,#24151a,#19122a 58%,#0d101b)}
.theme-sea{background:radial-gradient(circle at 12% 18%,#56e0d666,transparent 28%),radial-gradient(circle at 88% 80%,#6f91ff55,transparent 35%),linear-gradient(145deg,#071c2a,#1a5365 55%,#101225)}
.theme-travel{background:radial-gradient(circle at 80% 12%,#ffc36b66,transparent 30%),radial-gradient(circle at 12% 88%,#e77f8d44,transparent 33%),linear-gradient(145deg,#2b1612,#6a4430 58%,#24131b)}
.theme-blush{background:radial-gradient(circle at 8% 10%,#ff9fc566,transparent 30%),radial-gradient(circle at 92% 88%,#b76cff44,transparent 35%),linear-gradient(145deg,#2a101d,#541a40 55%,#170c18)}
.theme-saffron{background:radial-gradient(circle at 90% 10%,#ffd36b66,transparent 29%),radial-gradient(circle at 10% 90%,#ff806044,transparent 35%),linear-gradient(145deg,#32150e,#704026 58%,#1f1013)}
.theme-garden{background:radial-gradient(circle at 82% 8%,#a5e88a55,transparent 28%),radial-gradient(circle at 12% 90%,#67c8b044,transparent 35%),linear-gradient(145deg,#101b16,#214638 58%,#11151a)}
.theme-violet{background:radial-gradient(circle at 18% 12%,#b18aff66,transparent 30%),radial-gradient(circle at 88% 88%,#ff78c955,transparent 35%),linear-gradient(145deg,#1b0d28,#4c1d58 55%,#130d1e)}
.theme-playful{background:radial-gradient(circle at 14% 12%,#ffe06c66,transparent 27%),radial-gradient(circle at 88% 84%,#ff6f9c55,transparent 34%),linear-gradient(145deg,#30151b,#682d43 55%,#252014)}
.theme-midnight{background:radial-gradient(circle at 50% 10%,#7c89ff55,transparent 32%),radial-gradient(circle at 85% 85%,#e080ff33,transparent 34%),linear-gradient(145deg,#080a1c,#181438 58%,#10091b)}
.theme-berry{background:radial-gradient(circle at 12% 10%,#ff76b455,transparent 30%),radial-gradient(circle at 90% 88%,#a77dff44,transparent 35%),linear-gradient(145deg,#220b1b,#681b46 56%,#160b1a)}
.theme-ocean{background:radial-gradient(circle at 15% 10%,#65ecf255,transparent 30%),radial-gradient(circle at 88% 88%,#8092ff55,transparent 35%),linear-gradient(145deg,#061820,#155c75 55%,#10152c)}
.theme-rose-gold{background:radial-gradient(circle at 12% 10%,#ffbf8b66,transparent 30%),radial-gradient(circle at 88% 88%,#ff7e9f55,transparent 34%),linear-gradient(145deg,#291016,#572333 55%,#181017)}
.theme-dark-romantic{background:radial-gradient(circle at 50% 8%,#ff609944,transparent 30%),radial-gradient(circle at 15% 90%,#806aff33,transparent 35%),linear-gradient(145deg,#110812,#281127 58%,#0b0911)}
.theme-gold{background:radial-gradient(circle at 50% 50%,#f3ce7544,transparent 40%),radial-gradient(circle at 85% 15%,#ff996633,transparent 28%),linear-gradient(145deg,#100c08,#20150c 58%,#090807)}

@media(max-width:760px){.first-grid{grid-template-columns:1fr}.first-copy{text-align:center}.first-copy .chapter-intro-rule{margin-left:auto}.first-copy .intro-line{margin-left:auto}.first-photo{max-width:520px;margin:auto}.first-actions{justify-content:center}.photo-mosaic{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.photo-tile:nth-child(1){grid-column:span 2;aspect-ratio:16/10}.photo-tile:nth-child(2),.photo-tile:nth-child(3),.photo-tile:nth-child(4){aspect-ratio:4/5}.gallery-head{padding-top:32px}.chapter-back-float{left:0;transform:none;top:0;font-size:16px;padding:6px}.journey-controls{grid-template-columns:auto 1fr auto}.set-dots{display:none}.next-control{text-align:right}.back-control{text-align:left}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* =========================================================
   V6 — OYESHI / INTERACTIVE LOVE-EDITORIAL PASS
   ========================================================= */
:root{--display:'Cormorant Garamond',Georgia,serif;--sans:'DM Sans',system-ui,sans-serif;--script:'Parisienne',cursive}
body{font-family:var(--sans)}
.name-seal,.name-monogram,.final-name,.mini-name,.first-top{font-family:var(--sans);letter-spacing:.22em;text-transform:uppercase}
.name-seal{font-size:10px;opacity:.75;margin-bottom:20px}.name-seal span{color:#ffd6df;font-size:16px;margin-left:8px}
.name-monogram{display:flex;justify-content:center;gap:2px;margin-bottom:24px}.name-monogram span{display:grid;place-items:center;width:38px;height:38px;border:1px solid rgba(255,255,255,.35);border-radius:50%;font-size:11px}.name-whisper{font-family:var(--display);font-style:italic;font-size:18px;max-width:420px;margin:20px auto 28px;color:rgba(255,248,239,.68)}
.chapter-intro-screen,.first-chapter,.gallery-screen,.message-screen,.envelope-screen{overflow:auto}
.chapter-orbit{position:absolute;top:24px;left:24px;border:1px solid rgba(255,255,255,.18);padding:7px 11px;border-radius:999px;font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.6)}
.floating-icon{position:absolute;right:8vw;top:12vh;font-size:42px;filter:drop-shadow(0 12px 30px rgba(0,0,0,.22));animation:floaty 4s ease-in-out infinite}
.chapter-intro-inner{max-width:780px}.intro-kicker{font-weight:500}.chapter-title{letter-spacing:-.045em}.chapter-intro-copy{max-width:680px}.intro-line{color:rgba(255,248,239,.68)}
.privacy-badge{display:inline-flex;gap:8px;align-items:center;margin:16px 0 5px;padding:8px 12px;border:1px solid rgba(255,255,255,.16);border-radius:999px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,248,239,.65)}
.privacy-badge span{font-size:15px;color:#ffc7d8}.secret-chip{border:0;background:transparent;color:rgba(255,248,239,.65);font-size:11px;text-transform:uppercase;letter-spacing:.13em;margin:20px 0 2px;cursor:pointer}.secret-chip:hover{color:#fff}
.first-chapter{padding:28px clamp(18px,4vw,56px) 36px;display:flex;flex-direction:column;justify-content:center}.first-top{display:flex;justify-content:space-between;font-size:9px;color:rgba(255,255,255,.55);margin-bottom:30px}.first-grid{width:min(1080px,100%);margin:auto;display:grid;grid-template-columns:1fr .85fr;gap:clamp(26px,6vw,80px);align-items:center}.first-copy{max-width:650px}.first-photo{margin:0;aspect-ratio:4/5;border-radius:28px;overflow:hidden;position:relative;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.2);box-shadow:0 30px 90px rgba(0,0,0,.3);transform:rotate(1.2deg)}.first-photo img{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transform:scale(1.05);transition:1s ease}.first-photo.ready img{opacity:1;transform:scale(1)}.first-photo::after{content:"";position:absolute;inset:10px;border:1px solid rgba(255,255,255,.22);border-radius:20px;pointer-events:none}.first-caption{width:min(1080px,100%);margin:22px auto 0;font-family:var(--display);font-style:italic;font-size:18px;color:rgba(255,248,239,.6);text-align:center}.first-caption span{color:#fff0c9}.first-surprise-note{font-family:var(--script);font-size:28px;color:#ffd5df;margin:25px 0 0}.first-actions{display:flex;flex-direction:column;align-items:center;margin-top:24px}
.gallery-head{position:relative;padding-top:22px}.gallery-head .chapter-title{font-size:clamp(44px,9vw,76px);margin-bottom:3px}.mini-name{font-size:8px;color:rgba(255,255,255,.4)}.chapter-back-float{position:absolute;left:0;top:0;border:0;background:transparent;color:rgba(255,255,255,.6);font-size:10px;letter-spacing:.12em;text-transform:uppercase;cursor:pointer}.gallery-stage{width:min(1000px,100%);margin:auto}.photo-mosaic{gap:14px}.photo-tile{border-radius:20px;box-shadow:0 22px 55px rgba(0,0,0,.24);background:rgba(255,255,255,.07)}.photo-tile:nth-child(1){transform:rotate(-.45deg)}.photo-tile:nth-child(2){transform:rotate(.55deg)}.photo-tile:nth-child(3){transform:rotate(.35deg)}.photo-tile:nth-child(4){transform:rotate(-.3deg)}.photo-tile:hover{transform:translateY(-4px) rotate(0);transition:transform .3s ease}.photo-tile img,.photo-tile video{object-position:center}.set-caption{margin:26px auto 0;text-align:center;justify-content:center;max-width:820px}.set-caption p{font-size:clamp(22px,4.7vw,31px)}.caption-mark{font-size:23px;margin-top:4px}.journey-controls{margin:26px auto 0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:18px}.journey-controls button{background:none;border:0;color:#fff;cursor:pointer}.back-control{text-align:left}.next-control{text-align:right;border-bottom:1px solid currentColor;padding-bottom:8px;font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;font-size:10px}.set-dots{font-size:10px;letter-spacing:.16em;color:rgba(255,255,255,.45)}.progress-line{height:2px;background:rgba(255,255,255,.1);margin:18px auto 0;max-width:700px}.progress-line span{display:block;height:100%;background:currentColor;transition:width .4s ease}
.folder-missing{text-align:center;padding:10vh 20px}.missing-icon{font-size:42px}.folder-missing h2{font-family:var(--display);font-size:38px}.folder-missing p{color:rgba(255,255,255,.62)}code{font-family:monospace}
.message-wrap{max-width:780px}.message-line.lead{font-size:clamp(34px,7vw,58px)}.body-text{white-space:pre-line;background:rgba(255,255,255,.04);padding:22px;border-radius:18px;margin-top:25px;line-height:1.75}
.birthday-stage{text-align:center;margin:25px 0}.cake{font-size:82px;display:inline-flex;position:relative;cursor:pointer;filter:drop-shadow(0 20px 35px rgba(255,160,160,.25));transition:.3s}.cake:hover{transform:translateY(-5px) rotate(-2deg)}.cake span{position:absolute;top:-10px;left:50%;font-size:17px;color:#ffe7a8}.birthday-note{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.55);margin-top:6px}
.envelope-screen{display:flex;align-items:center;justify-content:center;text-align:center}.envelope-wrap{width:min(720px,100%);padding:50px 0}.envelope-tease{font-family:var(--display);font-style:italic;font-size:22px;color:rgba(255,248,239,.65)}.envelope{position:relative;width:min(330px,82vw);height:215px;margin:35px auto 12px;border:0;background:linear-gradient(145deg,#e8c9bc,#b97578);border-radius:8px;box-shadow:0 30px 80px rgba(0,0,0,.35);cursor:pointer;overflow:visible;transition:.55s cubic-bezier(.2,.8,.2,1)}.envelope:before{content:"";position:absolute;inset:0;background:linear-gradient(145deg,transparent 49%,rgba(105,49,65,.32) 50%,transparent 51%),linear-gradient(35deg,transparent 49%,rgba(105,49,65,.25) 50%,transparent 51%);border-radius:8px}.env-label{position:absolute;left:0;right:0;bottom:40px;color:#55243a;font-family:var(--display);font-size:27px;font-style:italic}.wax{position:absolute;z-index:5;left:50%;top:50%;transform:translate(-50%,-50%);width:50px;height:50px;border-radius:50%;display:grid;place-items:center;background:#7d274d;color:#ffd9e4;border:3px solid #d99aaa;box-shadow:0 7px 18px rgba(0,0,0,.22);font-size:23px}.envelope.opened{transform:translateY(25px) scale(.96);opacity:.55}.tap-hint{font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.45)}.letter{max-height:0;overflow:hidden;opacity:0;transform:translateY(-25px);transition:max-height 1s ease,opacity .5s ease,transform .8s ease}.letter.show{max-height:800px;opacity:1;transform:none}.letter-paper{margin:18px auto 0;max-width:620px;background:#fff7e8;color:#38252a;padding:34px 28px;text-align:left;box-shadow:0 25px 80px rgba(0,0,0,.35);font-family:var(--display);font-size:21px;line-height:1.45;position:relative}.letter-paper:before{content:"";position:absolute;inset:12px;border:1px solid rgba(99,61,49,.2);pointer-events:none}.letter-name{font-family:var(--script);font-size:36px;margin-bottom:15px}.letter-final{font-style:italic}.letter .message-actions{margin-top:25px}
.final-screen{text-align:center;justify-content:center;align-items:center}.final-name{position:absolute;top:30px;left:50%;transform:translateX(-50%);font-size:9px;color:rgba(255,233,184,.55)}.final-lines{max-width:760px}.final-line{font-family:var(--display);font-style:italic;font-size:clamp(28px,6vw,48px);opacity:0;animation:finalIn 1s ease forwards;animation-delay:var(--d)}.final-secret{margin-top:28px;background:transparent;border:1px solid rgba(238,200,113,.4);color:#f3db9e;border-radius:999px;padding:13px 20px;font-size:10px;letter-spacing:.13em;text-transform:uppercase;cursor:pointer;transition:.3s}.final-secret:hover{background:rgba(238,200,113,.1);transform:translateY(-2px)}.final-secret.gone{opacity:0;pointer-events:none}.final-reveal{font-family:var(--script);font-size:clamp(64px,15vw,150px);line-height:.85;color:#ffe3a0;text-shadow:0 0 40px rgba(255,215,120,.18);opacity:0;transform:scale(.8);transition:1s cubic-bezier(.2,.8,.2,1)}.final-reveal.show{opacity:1;transform:scale(1)}.final-signature{font-family:var(--display);font-size:25px;color:#f8dfaa;opacity:0;transition:1s .5s}.final-signature.show{opacity:1}.final-after{margin-top:20px;color:rgba(255,248,239,.55);font-family:var(--display);font-style:italic;opacity:0;transition:1s 1s}.final-after.show{opacity:1}
@keyframes finalIn{to{opacity:1;transform:none}}@keyframes floaty{0%,100%{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-8px) rotate(4deg)}}
.toast-pop{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);opacity:0;z-index:99;background:rgba(24,15,24,.9);border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(12px);padding:12px 16px;border-radius:999px;color:#fff;font-size:11px;transition:.25s}.toast-pop.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:700px){.first-grid{grid-template-columns:1fr}.first-photo{width:min(340px,80vw);margin:0 auto}.first-copy{text-align:center}.first-chapter .chapter-intro-rule{margin-left:auto;margin-right:auto}.first-surprise-note{margin-bottom:0}.floating-icon{right:6vw;top:8vh}.chapter-orbit{left:16px}.journey-controls{gap:8px}.set-dots{font-size:8px}.photo-tile{border-radius:13px}.letter-paper{font-size:19px;padding:28px 22px}}

/* ================= V7 POLISH ================= */
.intro-note{font-family:var(--display);font-style:italic;font-size:clamp(17px,4vw,22px);color:rgba(255,248,241,.62);max-width:520px;margin:-4px auto 28px}
.first-chapter{background-image:radial-gradient(circle at 78% 18%,rgba(111,225,224,.18),transparent 26%),radial-gradient(circle at 12% 82%,rgba(111,126,255,.16),transparent 28%)}
.first-copy{position:relative;padding:clamp(18px,4vw,34px);border-left:1px solid rgba(255,255,255,.16)}
.first-copy:before{content:'01 · THE FIRST LITTLE PROOF';position:absolute;left:clamp(18px,4vw,34px);top:-8px;transform:translateY(-100%);font:500 9px var(--sans);letter-spacing:.2em;color:var(--t1)}
.first-photo{box-shadow:0 35px 100px rgba(0,0,0,.38);transform:rotate(1.6deg)}
.first-caption{display:flex;justify-content:center;align-items:center;gap:10px;margin-top:24px}.first-caption .caption-mark{color:var(--t1);font-size:22px}.first-caption span:last-child{color:rgba(255,248,241,.68)}
.media-type-badge{display:inline-flex;align-items:center;gap:7px;margin-top:10px;padding:7px 12px;border:1px solid rgba(255,255,255,.16);border-radius:999px;font:600 9px var(--sans);letter-spacing:.16em;color:var(--t1);background:rgba(255,255,255,.045)}
.media-video-label{position:absolute;left:12px;top:12px;padding:6px 9px;border-radius:999px;background:rgba(8,8,12,.65);backdrop-filter:blur(6px);font:600 9px var(--sans);letter-spacing:.14em;color:#fff;z-index:4}
.photo-tile video{background:#09090c}
.photo-mosaic.count-1 .photo-tile:has(video){aspect-ratio:16/10}
.locked-next{opacity:.45;cursor:not-allowed!important;border-bottom:1px dashed rgba(255,255,255,.2)!important}
.birthday-stage{position:relative;padding:26px 20px 18px;margin:24px auto 30px;max-width:440px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.045);clip-path:polygon(0 10px,10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px))}.birthday-ticket{font:600 9px var(--sans);letter-spacing:.22em;color:var(--t1);margin-bottom:10px}.birthday-stage .cake{border:0;background:none}.birthday-note{max-width:320px;margin:8px auto 0;line-height:1.5}.birthday-confetti-note{font-family:var(--script);font-size:22px;color:var(--t1);margin-top:12px;opacity:.8}.birthday-stage.celebrated{box-shadow:0 0 60px var(--wash)}
.envelope{box-shadow:0 35px 100px rgba(0,0,0,.4)}.envelope:after{content:'OPEN ME';position:absolute;left:50%;bottom:-30px;transform:translateX(-50%);font:600 9px var(--sans);letter-spacing:.2em;color:rgba(255,255,255,.55)}
.final-secret{min-width:min(360px,84vw);padding:16px 22px;display:flex;justify-content:center;align-items:center;gap:15px;border:1px solid rgba(238,200,113,.55);background:linear-gradient(135deg,rgba(238,200,113,.12),rgba(255,255,255,.03));box-shadow:0 10px 40px rgba(232,199,125,.08);font-family:var(--display);font-size:18px;font-style:italic;letter-spacing:0;text-transform:none;border-radius:14px}.final-secret:hover{box-shadow:0 16px 60px rgba(232,199,125,.16);transform:translateY(-3px)}.secret-star{font-family:var(--sans);font-size:13px;color:#f2d18b}.final-secret.gone{display:none}.final-signature{display:none!important}.restart-control{margin-top:30px;opacity:0;pointer-events:none;border:0;background:none;color:rgba(255,248,241,.48);font:500 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;transition:.5s}.restart-control.show{opacity:1;pointer-events:auto}.restart-control:hover{color:#fff}

@media(max-width:700px){.first-copy{border-left:0;border-top:1px solid rgba(255,255,255,.12);padding-top:34px}.first-copy:before{left:50%;transform:translate(-50%,-100%);white-space:nowrap}.first-caption{font-size:16px}.final-secret{min-height:58px}}

/* FINAL MEDIA ART-DIRECTION PASS */
.photo-mosaic { align-items:stretch; }
.photo-tile { aspect-ratio:auto; min-height:0 !important; height:clamp(230px,38vh,440px); background:rgba(0,0,0,.18); }
.photo-tile::before { content:""; position:absolute; inset:0; background:inherit; z-index:0; }
.photo-tile img { position:relative; z-index:1; width:100%; height:100%; object-fit:contain; object-position:center; background:linear-gradient(135deg,rgba(255,255,255,.05),rgba(0,0,0,.16)); }
.photo-tile video { position:relative; z-index:1; width:100%; height:100%; object-fit:contain; background:#09070a; }
.photo-tile::after { z-index:2; }
.photo-tile .tile-number { z-index:3; }
.photo-mosaic.count-1 { grid-template-columns:minmax(0,760px); }
.photo-mosaic.count-1 .photo-tile { height:min(70vh,680px); }
.video-mosaic .photo-tile { height:min(62vh,620px); max-width:860px; width:100%; margin-inline:auto; }
.media-type-badge { margin-top:10px; }
.gallery-icon { font-size:26px; color:var(--t1); opacity:.85; margin:2px 0 5px; }
.special-beat { width:min(720px,100%); margin:4px auto 22px; padding:18px 20px; border:1px solid color-mix(in srgb,var(--t1) 35%,transparent); background:linear-gradient(135deg,rgba(255,255,255,.05),var(--wash)); }
.special-beat span { display:block; font-size:28px; margin-bottom:7px; }
.special-beat strong { display:block; font-family:var(--display); font-size:clamp(23px,5vw,34px); color:var(--paper); }
.special-beat small { display:block; margin-top:4px; font-family:var(--sans); font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--faint); }
.set-caption { text-align:center; justify-content:center; }
.set-caption p { max-width:760px; }
.privacy-badge { letter-spacing:.16em; }
@media (max-width:600px) {
  .photo-mosaic { grid-template-columns:1fr 1fr; }
  .photo-tile { height:clamp(170px,27vh,300px); }
  .photo-mosaic.count-1 .photo-tile { height:min(62vh,560px); }
  .video-mosaic .photo-tile { height:min(56vh,520px); }
}

/* Final restrained gallery presentation: preserve every image's own aspect ratio. */
.photo-mosaic {
  display:flex !important;
  flex-direction:column !important;
  gap:clamp(18px, 3vw, 30px) !important;
  width:100% !important;
  align-items:stretch !important;
}
.photo-tile,
.photo-mosaic.count-1 .photo-tile,
.photo-mosaic.count-3 .photo-tile:first-child {
  width:100% !important;
  height:auto !important;
  min-height:0 !important;
  aspect-ratio:auto !important;
  grid-column:auto !important;
  grid-row:auto !important;
  transform:none !important;
  overflow:hidden;
  background:transparent;
  border:0;
  box-shadow:0 18px 45px rgba(0,0,0,.18);
}
.photo-tile img,
.photo-tile video {
  position:relative !important;
  display:block !important;
  width:100% !important;
  height:auto !important;
  max-height:none !important;
  object-fit:contain !important;
  object-position:center !important;
  background:transparent !important;
}
.photo-tile::after { display:none; }
.photo-tile .tile-number { background:rgba(0,0,0,.28); padding:5px 7px; border-radius:999px; }
.video-mosaic .photo-tile { max-width:none !important; width:100% !important; height:auto !important; margin:0 !important; }
.special-chapter-page {
  min-height:52vh; display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:clamp(42px,9vw,90px) clamp(18px,6vw,60px);
  position:relative; overflow:hidden;
}
.kiss-intro-page { background:radial-gradient(circle at 50% 20%, rgba(214,104,130,.20), transparent 48%), linear-gradient(180deg, rgba(255,255,255,.025), transparent); }
.special-page-icon { font-size:clamp(40px,11vw,72px); margin-bottom:12px; filter:drop-shadow(0 12px 22px rgba(0,0,0,.22)); }
.special-page-kicker { font:600 9px var(--sans); letter-spacing:.22em; text-transform:uppercase; opacity:.55; }
.special-chapter-page h2 { font-family:var(--display); font-size:clamp(42px,10vw,78px); line-height:.95; margin:16px 0 18px; letter-spacing:-.04em; }
.special-page-rule { width:90px; height:1px; background:currentColor; opacity:.28; margin:0 auto 26px; }
.special-chapter-page p { max-width:650px; font-family:var(--display); font-size:clamp(19px,4.5vw,28px); line-height:1.28; opacity:.74; margin:0 auto 12px; }
.special-chapter-page .special-page-emphasis { font-size:clamp(25px,6vw,38px); opacity:1; margin-top:12px; }
.special-page-actions { display:flex; gap:28px; align-items:center; justify-content:center; margin-top:28px; }
.special-page-actions .next-control { font:600 10px var(--sans); letter-spacing:.12em; text-transform:uppercase; padding-bottom:8px; border-bottom:1px solid currentColor; }
.special-page-actions .back-control { font:10px var(--sans); letter-spacing:.12em; text-transform:uppercase; opacity:.62; }
.special-chapter-page .set-dots { margin-top:22px; }
.envelope:after { display:none !important; }
.tap-hint { font-size:11px !important; letter-spacing:.16em !important; opacity:.72 !important; margin-top:8px; }


/* =========================================================
   REQUESTED FINAL POLISH — keep the existing V4 presentation,
   add only small life/interaction details.
   ========================================================= */
.memory-divider{width:100%;height:16px;display:flex;align-items:center;justify-content:center;position:relative;opacity:.62;pointer-events:none}
.memory-divider::before,.memory-divider::after{content:"";height:1px;background:linear-gradient(90deg,transparent,var(--line),transparent);width:42%}
.memory-divider span{font-size:11px;color:var(--t1);padding:0 12px;transform:translateY(-1px)}
.photo-tile{transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.photo-tile.ready:hover{transform:translateY(-2px);box-shadow:0 16px 42px rgba(0,0,0,.18)}
.private-door-art{display:flex;align-items:center;justify-content:center;gap:14px;margin:17px auto 2px;color:var(--t1);font-size:16px}
.private-door-art i{display:block;width:74px;height:1px;background:linear-gradient(90deg,transparent,var(--t1),transparent);opacity:.65}
.private-door-note{font-family:var(--display);font-style:italic;font-size:17px;color:rgba(255,248,239,.62);margin:7px auto 0;max-width:520px}
.privacy-badge{box-shadow:0 8px 30px rgba(0,0,0,.12);background:rgba(255,255,255,.025)}
.birthday-stage{overflow:hidden}
.birthday-crown{font-family:var(--display);letter-spacing:.35em;color:var(--t1);font-size:13px;margin:2px 0 8px}
.birthday-stage .cake{position:relative}
.candle-flame{position:absolute;left:50%;top:2px;transform:translateX(-50%);font-size:10px;color:#ffd58a;opacity:.85;animation:candlePulse 1.2s ease-in-out infinite}
.birthday-tap-pill{display:inline-block;margin-top:4px;padding:7px 11px;border:1px solid rgba(255,255,255,.15);border-radius:999px;font:600 8px var(--sans);letter-spacing:.18em;color:rgba(255,248,239,.72)}
.birthday-surprise{max-width:340px;margin:16px auto 0;padding:14px 16px;border:1px solid rgba(255,255,255,.13);background:rgba(255,255,255,.04);display:grid;gap:5px;opacity:0;transform:translateY(8px);transition:.55s var(--ease);pointer-events:none}
.birthday-surprise strong{font-family:var(--display);font-size:19px;color:var(--paper)}
.birthday-surprise span{font-family:var(--display);font-style:italic;font-size:15px;color:var(--muted)}
.birthday-surprise.show{opacity:1;transform:none}
@keyframes candlePulse{50%{transform:translateX(-50%) scale(1.18);opacity:.55}}
.tap-hint{font-weight:600;color:rgba(255,255,255,.72)!important;text-shadow:0 0 18px rgba(255,255,255,.08)}
.envelope{transition:transform .55s var(--ease),box-shadow .55s var(--ease)}
.envelope:not(.opened){animation:envelopeInvite 2.8s ease-in-out infinite}
@keyframes envelopeInvite{50%{transform:translateY(-4px) rotate(-.5deg);box-shadow:0 40px 110px rgba(0,0,0,.45)}}
.final-secret{position:relative;overflow:hidden}
.final-secret::before{content:"";position:absolute;inset:-2px;background:linear-gradient(100deg,transparent 25%,rgba(255,230,170,.2) 50%,transparent 75%);transform:translateX(-120%);animation:secretShine 3.2s ease-in-out infinite;pointer-events:none}
@keyframes secretShine{55%,100%{transform:translateX(120%)}}
.final-secret span{position:relative;z-index:1}
.restart-control{min-height:44px;padding:10px 14px}
.login-screen::after{content:"♡";position:absolute;right:9vw;top:18vh;color:rgba(255,255,255,.08);font-size:72px;transform:rotate(12deg);pointer-events:none}
.login-screen .name-seal{letter-spacing:.28em}
.login-form{position:relative}
.login-form::before{content:"Your little door is waiting";display:block;margin-bottom:2px;font:italic 16px var(--display);color:rgba(255,248,239,.52)}
.login-form input{transition:border-color .25s,transform .25s,background .25s}
.login-form input:focus{transform:translateY(-1px);background:rgba(255,255,255,.055)}
@media(max-width:600px){.memory-divider{height:14px}.memory-divider span{padding:0 8px}.private-door-note{font-size:16px}.birthday-stage{padding-left:15px;padding-right:15px}.birthday-surprise{margin-left:4px;margin-right:4px}.final-secret{width:min(100%,360px)}}
