/* ═══════════ 儿童蜡笔画风格 · 全量重写 ═══════════ */
/* 站酷快乐体（ZCOOL KuaiLe, OFL 开源），已按页面文案子集化，仅 20KB。
   注意：改动页面文字后需重新生成子集，否则新字会回退系统字体。 */
@font-face{
  font-family:"站酷快乐体";
  src:url("assets/fonts/zcool-kuaile-subset.woff2") format("woff2");
  font-display:swap;
}
:root{
  /* 纸与底色 */
  --paper:#FFF8EE;
  --paper-warm:#FFF3E0;
  /* 鲜亮蜡笔色 */
  --sky:#87CEEB;
  --sky-light:#B8E0F5;
  --sun:#FFD93D;
  --coral:#FF6B6B;
  --peach:#FFAAA5;
  --grass:#6BCB77;
  --leaf:#4CAF50;
  --purple:#9B72CF;
  --purple-light:#C4A8E0;
  --blue:#7FB5D5;
  --brown:#4A3728;
  --brown-light:#8B7355;
  /* 字体 */
  --font:"站酷快乐体","YouYuan","Yuanti SC","PingFang SC",sans-serif;
  /* 动画 */
  --fps12:0.083s;
  --bounce:cubic-bezier(.34,1.56,.64,1);
}

*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{scroll-snap-type:y proximity;scroll-behavior:auto;}
body{
  font-family:var(--font);
  color:var(--brown);
  background:var(--paper);
  overflow-x:hidden;
  user-select:none;
  -webkit-user-select:none;
  touch-action:pan-y;
}
img{display:block;width:100%;height:100%;object-fit:cover;pointer-events:none;}
button{font-family:var(--font);border:none;background:none;}

/* ═══════════ 纸张纹理层 ═══════════ */
.paper-texture{
  position:fixed;inset:0;z-index:0;pointer-events:none;
  background:url('assets/texture-paper.webp') repeat;
  background-size:400px;
  opacity:.4;
  mix-blend-mode:multiply;
}

/* ═══════════ 章节通用 ═══════════ */
.chapter{
  position:relative;
  min-height:100vh;
  min-height:100dvh;
  scroll-snap-align:start;
  overflow:hidden;
  padding:calc(env(safe-area-inset-top) + 20px) 20px calc(env(safe-area-inset-bottom) + 20px);
  display:flex;flex-direction:column;align-items:center;
  z-index:1;
}
.ch-title{
  font-size:clamp(26px,7vw,38px);
  letter-spacing:.05em;
  margin-top:4dvh;
  text-align:center;
  /* 蜡笔字效果：白边 + 彩色 */
  text-shadow:
    3px 3px 0 #fff,
    -2px -2px 0 #fff,
    2px -2px 0 #fff,
    -2px 2px 0 #fff,
    4px 4px 0 rgba(74,55,40,.1);
  z-index:2;
  line-height:1.3;
}
.ch-sub{
  margin-top:10px;font-size:14px;letter-spacing:.15em;opacity:.7;z-index:2;text-align:center;
}
.hint{
  font-size:13px;letter-spacing:.2em;color:var(--brown);opacity:.5;
  animation:hintBob 1.2s steps(3) infinite;
}
@keyframes hintBob{
  0%,100%{transform:translateY(0);}
  50%{transform:translateY(-5px);}
}

/* ═══════════ 云（蜡笔涂鸦风）═══════════ */
.cloud-crayon{
  position:absolute;
  width:140px;height:auto;
  opacity:.9;
  z-index:1;
  /* 定格动画：12fps 跳帧飘动 */
  animation:cloudJump 24s steps(12) infinite;
}
.cloud-crayon.c2{width:100px;animation-duration:32s;animation-delay:-8s;animation-direction:reverse;}
.cloud-crayon.c3{width:180px;animation-duration:40s;animation-delay:-20s;}
@keyframes cloudJump{
  0%{transform:translateX(-20vw);}
  100%{transform:translateX(120vw);}
}

/* ═══════════ 太阳（蜡笔风）═══════════ */
.sun-crayon{
  position:absolute;
  width:90px;height:auto;
  z-index:1;
  animation:sunSpin 20s steps(8) infinite;
}
@keyframes sunSpin{
  0%{transform:rotate(0deg);}
  100%{transform:rotate(360deg);}
}

/* ═══════════ 第一章 · 封面 ═══════════ */
.sky-morning{
  background:linear-gradient(180deg,var(--sky-light) 0%,var(--sky) 50%,#C5E8F7 100%);
}
.cover-inner{margin-top:8dvh;text-align:center;z-index:2;}
.cover-date{
  display:inline-block;font-size:13px;letter-spacing:.3em;text-indent:.3em;
  background:#fff;color:var(--brown);padding:8px 20px;
  border-radius:999px;
  border:3px solid var(--sun);
  box-shadow:3px 4px 0 rgba(74,55,40,.15);
  transform:rotate(-2deg);
}
.cover-title{
  margin-top:24px;
  font-size:clamp(40px,12vw,64px);
  line-height:1.4;letter-spacing:.05em;
  /* 彩色蜡笔字 */
  color:var(--coral);
  text-shadow:
    4px 4px 0 #fff,
    -3px -3px 0 #fff,
    3px -3px 0 #fff,
    -3px 3px 0 #fff,
    6px 6px 0 rgba(74,55,40,.12);
}
.cover-title .char{
  display:inline-block;
  animation:charPop 0.4s steps(4) forwards;
  opacity:0;
  transform:scale(0);
}
.cover-title .char:nth-child(1){color:var(--coral);animation-delay:.1s;}
.cover-title .char:nth-child(2){color:var(--sun);animation-delay:.2s;}
.cover-title .char:nth-child(3){color:var(--sky);animation-delay:.3s;}
.cover-title .char:nth-child(4){color:var(--grass);animation-delay:.4s;}
.cover-title .char:nth-child(5){color:var(--purple);animation-delay:.5s;}
.cover-title .char:nth-child(6){color:var(--coral);animation-delay:.6s;}
.cover-title .char:nth-child(7){color:var(--sun);animation-delay:.7s;}
.cover-title .char:nth-child(8){color:var(--sky);animation-delay:.8s;}
.cover-title .char:nth-child(9){color:var(--grass);animation-delay:.9s;}
@keyframes charPop{
  0%{opacity:0;transform:scale(0) rotate(-10deg);}
  50%{opacity:1;transform:scale(1.2) rotate(5deg);}
  100%{opacity:1;transform:scale(1) rotate(0);}
}
.cover-sub{
  margin-top:18px;font-size:15px;letter-spacing:.2em;
  color:var(--brown);opacity:.8;
}

/* 花苞（蜡笔风） */
.bud-wrap{
  position:absolute;bottom:14dvh;left:50%;transform:translateX(-50%);
  width:140px;height:180px;z-index:2;
}
.bud-crayon{
  position:absolute;bottom:0;left:50%;transform:translateX(-50%);
  width:100px;height:auto;
}

/* 蝴蝶（蜡笔 PNG + 15fps 扇翅） */
.hero-butterfly-img{
  position:absolute;left:50%;top:-12px;margin-left:-40px;
  width:80px;height:auto;cursor:pointer;z-index:5;
  animation:bfFlap 0.2s steps(3) infinite;
  pointer-events:auto;
}
.fly-butterfly-img{
  position:absolute;left:0;top:0;width:70px;height:auto;z-index:5;
  opacity:0;transition:opacity .3s;
  animation:bfFlap 0.2s steps(3) infinite;
  pointer-events:none;
}
.sky-noon.awake .fly-butterfly-img{opacity:1;}
@keyframes bfFlap{
  0%,100%{transform:scaleY(1);}
  50%{transform:scaleY(.6);}
}
/* 加速扇翅 */
.hero-butterfly-img.flying-fast{animation-duration:0.12s;}
.tap-hint{
  position:absolute;bottom:calc(6dvh + env(safe-area-inset-bottom));left:0;right:0;text-align:center;z-index:2;
}
.scroll-hint-crayon{
  position:absolute;bottom:calc(2dvh + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  opacity:.5;z-index:2;
  animation:hintBob 1.2s steps(3) infinite;
}

/* ═══════════ 第二章 · 引路 ═══════════ */
.sky-noon{
  background:linear-gradient(180deg,#E8F4F8 0%,#F0F8FA 100%);
}
.flight-path{
  position:absolute;left:50%;transform:translateX(-50%);
  top:14dvh;height:74dvh;width:min(100vw,430px);z-index:1;
}
/* 蜡笔脚印轨迹 */
.path-step{
  position:absolute;width:8px;height:3px;
  background:var(--purple-light);
  border-radius:2px;
  opacity:.5;
  transform:rotate(var(--rot));
}

/* ═══════════ 第三章 · 信笺 ═══════════ */
.sky-letter{
  background:linear-gradient(180deg,#FFF8EE 0%,#FFF0E0 100%);
}
/* 信封（蜡笔图） */
.envelope-crayon{
  position:relative;margin-top:8dvh;
  width:min(85vw,340px);
  z-index:2;cursor:pointer;
}
.env-img{
  width:100%;height:auto;display:block;
  border-radius:12px;
  box-shadow:5px 6px 0 rgba(74,55,40,.15);
}
.env-hint-text{
  text-align:center;margin-top:16px;
  font-size:13px;letter-spacing:.2em;color:var(--brown);opacity:.5;
  animation:hintBob 1.2s steps(3) infinite;
}
/* 信纸弹窗 */
.letter-modal{
  position:fixed;inset:0;z-index:200;
  display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;
  transition:opacity .3s;
}
.letter-modal.show{
  opacity:1;pointer-events:auto;
}
.letter-overlay{
  position:absolute;inset:0;background:rgba(74,55,40,.5);
}
.letter-paper-crayon{
  position:relative;
  width:min(90vw,400px);
  max-height:85dvh;
  overflow-y:auto;
  border-radius:12px;
  box-shadow:10px 12px 0 rgba(74,55,40,.25);
  transform:rotate(-2deg) scale(0.8);
  transition:transform .3s var(--bounce);
}
.letter-modal.show .letter-paper-crayon{
  transform:rotate(-2deg) scale(1);
}
.paper-bg{
  position:absolute;top:0;left:0;width:100%;height:100%;
  object-fit:fill;
  border-radius:12px;
}
.letter-content{
  position:relative;z-index:2;
  padding:40px 32px;
  font-size:15px;line-height:2.0;letter-spacing:.05em;
  color:var(--brown);
}
.letter-content p{margin-bottom:14px;text-indent:2em;}
.letter-content .letter-to{font-weight:bold;text-indent:0;font-size:17px;}
.letter-content .letter-end{text-align:right;font-weight:bold;margin-top:20px;font-size:16px;}
.letter-close{
  text-align:center;font-size:12px;opacity:.4;margin-top:24px;
  border-top:2px dashed var(--sky-light);padding-top:16px;
}



/* ═══════════ 第四章 · 天空相册 ═══════════ */
.sky-photos{
  background:linear-gradient(180deg,#E8F4F8 0%,#FFF8EE 100%);
}
.wall{position:relative;width:100%;max-width:430px;flex:1;margin-top:2dvh;min-height:62dvh;z-index:2;}
.photo-crayon{
  position:absolute;
  left:var(--x);top:var(--y);
  width:min(45vw,170px);
  transform:rotate(var(--r));
  cursor:grab;
  touch-action:none;
  z-index:1;
  transition:transform .2s;
}
.photo-crayon.lift{transform:rotate(var(--r)) scale(1.05);z-index:20;cursor:grabbing;}
.photo-crayon.dragging{transition:none;}
/* 手撕照片边框 */
.photo-frame{
  background:#fff;
  padding:10px 10px 32px;
  border:3px solid var(--brown);
  /* 不规则圆角模拟手撕 */
  border-radius:8px 12px 6px 14px;
  box-shadow:4px 5px 0 rgba(74,55,40,.15);
  position:relative;
}
.photo-frame::after{
  content:"";position:absolute;inset:-6px;
  border:2px dashed var(--purple-light);
  border-radius:12px 8px 14px 6px;
  pointer-events:none;
}
.photo-img{
  width:100%;aspect-ratio:1;object-fit:cover;
  border:2px solid var(--brown);
  border-radius:2px;
}
/* 蜡笔胶带 */
.tape{
  position:absolute;width:60px;height:20px;
  background:var(--tape-color,var(--sun));
  opacity:.8;
  transform:rotate(var(--tape-r,45deg));
  border:2px solid var(--brown);
  border-radius:2px;
}
.tape.tl{top:-8px;left:-15px;--tape-r:-45deg;}
.tape.tr{top:-8px;right:-15px;--tape-r:45deg;}
.photo-caption{
  text-align:center;font-size:13px;margin-top:6px;color:var(--brown);
  font-weight:bold;
}
.caption-icon{
  display:inline;vertical-align:middle;margin-left:4px;
}
/* 背面 */
.photo-back{
  position:absolute;inset:0;
  background:repeating-linear-gradient(transparent,transparent 24px,var(--peach) 24px,var(--peach) 26px);
  background-color:#FFF8EE;
  border:3px solid var(--coral);
  border-radius:8px 12px 6px 14px;
  display:flex;align-items:center;justify-content:center;
  padding:16px;
  opacity:0;transform:rotateY(90deg);
  transition:opacity .3s,transform .3s;
}
.photo-crayon.flipped .photo-back{opacity:1;transform:rotateY(0);}
.photo-crayon.flipped .photo-frame{opacity:0;}
.photo-back p{
  font-size:12px;line-height:2;text-align:center;color:var(--brown);
}

/* ═══════════ 第五章 · 花园 ═══════════ */
.sky-garden{
  background:linear-gradient(180deg,#E8F4F8 0%,#E8F5E9 70%,#C8E6C9 100%);
}
.grass-crayon{
  position:absolute;bottom:0;left:0;right:0;height:15dvh;
  background:var(--grass);
  /* 波浪边缘 */
  clip-path:polygon(0 20%,5% 15%,10% 22%,15% 12%,20% 20%,25% 8%,30% 18%,35% 10%,40% 20%,45% 12%,50% 22%,55% 10%,60% 18%,65% 8%,70% 20%,75% 12%,80% 18%,85% 10%,90% 22%,95% 12%,100% 20%,100% 100%,0 100%);
  z-index:1;
}
.garden{position:absolute;inset:0;z-index:2;}
.flower-crayon{
  position:absolute;width:70px;height:auto;margin-left:-35px;margin-top:-80px;
  pointer-events:none;
  /* 生长动画 */
  animation:flowerGrow 0.5s steps(5) forwards;
}
@keyframes flowerGrow{
  0%{transform:scale(0) rotate(-15deg);}
  60%{transform:scale(1.15) rotate(5deg);}
  100%{transform:scale(1) rotate(0);}
}

/* ═══════════ 第六章 · 星空 ═══════════ */
.sky-night{
  background:linear-gradient(180deg,#2C3E50 0%,#34495E 60%,#3D5A73 100%);
}
.ch-title.light,.ch-sub.light{color:#ECF0F1;text-shadow:3px 3px 0 rgba(0,0,0,.3);}
.stars{position:absolute;inset:0;z-index:1;}
.star-crayon{
  position:absolute;
  /* 四角星 */
  width:8px;height:8px;
  background:var(--sun);
  clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);
  animation:starBlink 1.5s steps(2) infinite;
}
@keyframes starBlink{
  0%,100%{opacity:1;transform:scale(1);}
  50%{opacity:.4;transform:scale(.7);}
}
.wish-zone{
  position:relative;margin-top:20dvh;z-index:2;
  width:140px;height:140px;
  display:flex;align-items:center;justify-content:center;
  touch-action:none;
}
.wish-ring-crayon{
  position:absolute;inset:0;
  border:5px dashed var(--sun);
  border-radius:50%;
  opacity:.5;
  animation:ringSpin 10s steps(10) infinite;
}
@keyframes ringSpin{to{transform:rotate(360deg);}}
.wish-ring-progress{
  position:absolute;inset:0;
  border-radius:50%;
  background:conic-gradient(var(--sun) var(--progress,0%), transparent 0);
  opacity:.8;
  mask:radial-gradient(transparent 55%, black 56%);
  -webkit-mask:radial-gradient(transparent 55%, black 56%);
}
.wish-moon-crayon{
  font-size:48px;
  animation:moonBob 2s steps(4) infinite;
}
@keyframes moonBob{
  0%,100%{transform:translateY(0);}
  50%{transform:translateY(-8px);}
}
.wish-result{
  margin-top:6dvh;text-align:center;z-index:2;
  opacity:0;transform:scale(0);
  transition:opacity .5s,transform .5s var(--bounce);
  pointer-events:none;
}
.wish-result.show{opacity:1;transform:scale(1);}
.wish-big{
  font-size:clamp(26px,7vw,36px);color:var(--sun);
  text-shadow:3px 3px 0 rgba(0,0,0,.3);
  letter-spacing:.05em;
}
.wish-small{
  margin-top:14px;font-size:14px;line-height:2.2;color:#BDC3C7;letter-spacing:.05em;
}
.burst-layer{position:absolute;inset:0;z-index:8;pointer-events:none;}
.burst-item{
  position:absolute;will-change:transform,opacity;
  animation:burstFly 1s steps(8) forwards;
}
@keyframes burstFly{
  0%{transform:translate(0,0) rotate(0) scale(.5);opacity:1;}
  100%{transform:translate(var(--dx),var(--dy)) rotate(var(--rot)) scale(1.2);opacity:0;}
}

/* ═══════════ 音乐按钮 ═══════════ */
.music-btn{
  position:fixed;top:calc(env(safe-area-inset-top) + 16px);right:16px;z-index:70;
  width:52px;height:52px;border-radius:50%;
  background:#fff;border:4px solid var(--sun);
  box-shadow:4px 4px 0 rgba(74,55,40,.15);
  display:flex;align-items:center;justify-content:center;
  transform:rotate(-3deg);
  transition:transform .2s;
}
.music-btn:active{transform:rotate(-3deg) scale(.95);}

/* ═══════════ 入场唤醒 ═══════════ */
.chapter .ch-title,
.chapter .ch-sub,
.chapter .cover-inner,
.chapter .envelope-crayon,
.chapter .photo-crayon{
  opacity:0;
  transform:translateY(30px);
  transition:opacity .4s steps(5),transform .4s steps(5);
}
.chapter.awake .ch-title,
.chapter.awake .ch-sub,
.chapter.awake .cover-inner,
.chapter.awake .envelope-crayon,
.chapter.awake .photo-crayon{
  opacity:1;
  transform:none;
}
.chapter.awake .photo-crayon:nth-child(2){transition-delay:.1s;}
.chapter.awake .photo-crayon:nth-child(3){transition-delay:.2s;}
.chapter.awake .photo-crayon:nth-child(4){transition-delay:.3s;}

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