/* ============ 基础 ============ */
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body { width: 100%; height: 100%; overflow: hidden; }
body {
  background: #060d1f;
  display: flex; align-items: center; justify-content: center;
  font-family: -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  -webkit-user-select: none; user-select: none;
}

/* 舞台：9:16 设计稿，JS 设置 --u = 舞台宽/1080 */
.stage {
  position: relative;
  aspect-ratio: 9 / 16;
  width: min(100vw, calc(100vh * 9 / 16));
  overflow: hidden;
  background: #060d1f;
  box-shadow: 0 0 calc(var(--u)*80) rgba(0,0,0,.6);
}
@supports (height: 100dvh) {
  .stage { width: min(100vw, calc(100dvh * 9 / 16)); }
}

.screen {
  position: absolute; inset: 0;
  opacity: 0; visibility: hidden;
  transition: opacity .45s ease, visibility .45s;
}
.screen.active { opacity: 1; visibility: visible; z-index: 2; }

.hidden { display: none !important; }

/* ============ loading ============ */
.screen-loading { background: radial-gradient(120% 90% at 50% 30%, #12264d 0%, #081228 55%, #060d1f 100%); }
.loading-inner {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  color: #e8d9a8;
  transform: translateY(calc(var(--u)*56));
}
.loading-moon-wrap { position: relative; width: calc(var(--u)*300); height: calc(var(--u)*300); }
.loading-ring { position: absolute; inset: 0; width: 100%; height: 100%; transform: rotate(-90deg); }
.ring-bg { fill: none; stroke: rgba(232,217,168,.15); stroke-width: 2; }
.ring-fg {
  fill: none; stroke: #e8c97a; stroke-width: 3; stroke-linecap: round;
  stroke-dasharray: 553; stroke-dashoffset: 553;
  filter: drop-shadow(0 0 6px rgba(232,201,122,.8));
  transition: stroke-dashoffset .15s linear;
}
.loading-moon {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);
  width: 62%; height: 62%; border-radius: 50%;
  background: radial-gradient(circle at 38% 36%, #fdf6dd 0%, #f3dfa2 45%, #d9b96a 78%, #b9984e 100%);
  box-shadow: 0 0 calc(var(--u)*60) rgba(243,223,162,.45);
  animation: moonFloat 3s ease-in-out infinite;
  overflow: hidden;
}
.lm-crater { position: absolute; border-radius: 50%; background: rgba(160,128,66,.28); }
.lm-crater.c1 { width: 22%; height: 22%; left: 22%; top: 30%; }
.lm-crater.c2 { width: 14%; height: 14%; left: 55%; top: 52%; }
.lm-crater.c3 { width: 10%; height: 10%; left: 40%; top: 66%; }
@keyframes moonFloat { 0%,100% { transform: translate(-50%,-50%) scale(1); } 50% { transform: translate(-50%,-52%) scale(1.035); } }
.loading-star { position: absolute; border-radius: 50%; background: #fff; animation: twinkle 1.8s ease-in-out infinite; }
.loading-star.s1 { width: calc(var(--u)*6); height: calc(var(--u)*6); left: -14%; top: 18%; }
.loading-star.s2 { width: calc(var(--u)*4); height: calc(var(--u)*4); right: -10%; top: 34%; animation-delay: .5s; }
.loading-star.s3 { width: calc(var(--u)*5); height: calc(var(--u)*5); left: -8%; bottom: 16%; animation-delay: 1s; }
.loading-star.s4 { width: calc(var(--u)*3); height: calc(var(--u)*3); right: -16%; bottom: 26%; animation-delay: 1.4s; }
@keyframes twinkle { 0%,100% { opacity: .9; } 50% { opacity: .15; } }
.loading-pct {
  margin-top: calc(var(--u)*84); font-size: calc(var(--u)*54); letter-spacing: calc(var(--u)*4);
  color: #f0e2b6; font-weight: 300;
}
.loading-title { margin-top: calc(var(--u)*44); font-size: calc(var(--u)*40); letter-spacing: calc(var(--u)*6); color: rgba(232,217,168,.92); }
.ld-dot { opacity: .7; }
.loading-sub { margin-top: calc(var(--u)*22); font-size: calc(var(--u)*28); letter-spacing: calc(var(--u)*3); color: rgba(232,217,168,.62); }
.loading-foot {
  position: absolute; left: 50%; bottom: calc(var(--u)*120); transform: translateX(-50%);
  width: calc(var(--u)*280); height: 1px;
}
.loading-foot i {
  display: block; width: 100%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(232,217,168,.55), transparent);
}

/* ============ 首页 ============ */
.screen-home { background: #0a1a33; }
.home-bg {
  position: absolute; inset: 0;
  background: url("../assets/img/cover.jpg") center / 100% 100% no-repeat;
}

/* 星空/轨迹/星球/月球一体化动画层（SMIL 自驱动） */
.home-anim {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  pointer-events: none;
}

/* 月亮光晕 */
.moon-glow {
  position: absolute; pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(255,238,190,.20) 0%,
    rgba(255,232,180,.13) 42%,
    rgba(210,200,235,.06) 66%,
    rgba(210,200,235,0) 100%);
}

/* 标题区压暗，保证可读性 */
.home-title::before {
  content: ""; position: absolute; left: 50%; top: calc(var(--u)*-70);
  width: calc(var(--u)*920); height: calc(var(--u)*400);
  transform: translateX(-50%);
  background: radial-gradient(60% 60% at 50% 50%, rgba(5,11,26,.42), rgba(5,11,26,0) 75%);
  pointer-events: none;
}
.home-title {
  position: absolute; left: 0; right: 0; top: calc(var(--u)*228);
  text-align: center; color: #ecd9a4;
  font-family: "Songti SC", "STSong", "Noto Serif SC", "SimSun", serif;
  pointer-events: none;
}
.ht-line { display: flex; align-items: center; justify-content: center; gap: calc(var(--u)*22);
  font-size: calc(var(--u)*74); letter-spacing: calc(var(--u)*8); line-height: 1.7;
  text-shadow: 0 calc(var(--u)*4) calc(var(--u)*20) rgba(0,0,0,.55); }
.ht-orn { width: calc(var(--u)*104); height: calc(var(--u)*18); flex: none; opacity: .9; }
.ht-orn.flip { transform: scaleX(-1); }
.ht-l1 { transform: translateX(calc(var(--u)*-160)); opacity: 0; }
.ht-l2 { transform: translateX(calc(var(--u)*160)); opacity: 0; }
.screen-home.active .ht-l1 { animation: slideInL 1.4s .3s cubic-bezier(.22,.8,.3,1) forwards; }
.screen-home.active .ht-l2 { animation: slideInR 1.4s .55s cubic-bezier(.22,.8,.3,1) forwards; }
@keyframes slideInL { to { transform: translateX(0); opacity: 1; } }
@keyframes slideInR { to { transform: translateX(0); opacity: 1; } }

/* 封面自带按钮为视觉本体：此层是透明热区 + 呼吸/按压光效 */
.home-btn {
  position: absolute; left: calc(var(--u)*253); top: calc(var(--u)*1553);
  width: calc(var(--u)*580); height: calc(var(--u)*150);
  border-radius: calc(var(--u)*75);
  background: transparent; border: none; cursor: pointer; outline: none;
}
.hb-glow {
  position: absolute; inset: calc(var(--u)*8);
  border-radius: calc(var(--u)*68);
  opacity: 0;
  background: radial-gradient(62% 92% at 50% 50%, rgba(255,228,152,.30), rgba(255,228,152,0) 74%);
  box-shadow: 0 0 calc(var(--u)*70) rgba(232,201,122,.0);
  backdrop-filter: brightness(1.28); -webkit-backdrop-filter: brightness(1.28);
  animation: hbBreath 3s ease-in-out infinite;
  transition: opacity .18s ease, box-shadow .18s ease;
}
@keyframes hbBreath { 0%,100% { opacity: .06; } 50% { opacity: .3; } }
.home-btn.pressed .hb-glow { animation: none; opacity: 1;
  box-shadow: 0 0 calc(var(--u)*90) rgba(232,201,122,.6); }

/* ============ 表单页 ============ */
.screen-form { background: #0a1a33; }
.form-bg { position: absolute; inset: 0; background: url("../assets/img/background.jpg") center / 100% 100% no-repeat; }
.form-bg::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(6,13,31,.35) 0%, rgba(6,13,31,.18) 40%, rgba(6,13,31,.5) 100%);
}
.form-scroll {
  position: absolute; inset: 0; z-index: 2;
  overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: calc(var(--u)*110) calc(var(--u)*70) calc(var(--u)*300);
  display: flex; flex-direction: column;
  scrollbar-width: none;
}
.form-scroll::-webkit-scrollbar { display: none; }
.form-head { text-align: center; margin-bottom: calc(var(--u)*56); }
.fh-title {
  font-family: "Songti SC", "STSong", "Noto Serif SC", "SimSun", serif;
  font-size: calc(var(--u)*64); letter-spacing: calc(var(--u)*10); color: #ecd9a4;
  text-shadow: 0 calc(var(--u)*4) calc(var(--u)*18) rgba(0,0,0,.5);
}
.fh-sub { margin-top: calc(var(--u)*20); font-size: calc(var(--u)*34); letter-spacing: calc(var(--u)*4); color: rgba(232,217,168,.72); }

.form-item { margin-bottom: calc(var(--u)*56); }
.fi-label {
  font-size: calc(var(--u)*38); letter-spacing: calc(var(--u)*5); color: rgba(240,226,182,.92);
  margin-bottom: calc(var(--u)*28);
  border-left: calc(var(--u)*5) solid rgba(232,201,122,.75); padding-left: calc(var(--u)*18);
}

/* 收信人横排选项 */
.option-row { display: flex; gap: calc(var(--u)*18); }
.opt-chip {
  flex: 1; display: flex; align-items: center; justify-content: center;
  min-height: calc(var(--u)*130);
  text-align: center;
  border-radius: calc(var(--u)*44);
  border: 1px solid rgba(255,255,255,.35);
  background: rgba(14,30,64,.35);
  color: rgba(255,255,255,.88); font-size: calc(var(--u)*36); letter-spacing: calc(var(--u)*2);
  transition: all .2s ease; cursor: pointer;
}
.opt-chip.selected {
  border-color: #e8c97a; color: #f5e6b8;
  background: rgba(255,240,200,.10);
  box-shadow: 0 0 calc(var(--u)*26) rgba(232,201,122,.35), inset 0 0 calc(var(--u)*18) rgba(232,201,122,.12);
}

/* 祝福语选项：选中态由金框+浅金底表达，不再用右侧圆点 */
.blessing-list { display: flex; flex-direction: column; gap: calc(var(--u)*20); }
.blessing-item {
  position: relative; text-align: left;
  min-height: calc(var(--u)*126);
  padding: calc(var(--u)*34) calc(var(--u)*36) calc(var(--u)*34) calc(var(--u)*32);
  border-radius: calc(var(--u)*22);
  border: 1px solid rgba(255,255,255,.28);
  background: rgba(14,30,64,.32);
  color: rgba(255,255,255,.9); font-size: calc(var(--u)*34); line-height: 1.6;
  transition: all .2s ease; cursor: pointer;
}
.blessing-item.selected { border-color: #e8c97a; background: rgba(255,240,200,.10); color: #f5e6b8;
  box-shadow: 0 0 calc(var(--u)*22) rgba(232,201,122,.3); }
.blessing-item.custom .ci-plus { font-size: calc(var(--u)*36); margin-right: calc(var(--u)*12); }

/* 展开/收起 */
.bless-toggle {
  display: flex; align-items: center; justify-content: center;
  min-height: calc(var(--u)*128);
  font-size: calc(var(--u)*30); letter-spacing: calc(var(--u)*3);
  color: rgba(232,201,122,.9); cursor: pointer;
  border-radius: calc(var(--u)*20);
  transition: color .2s ease;
}
.bless-toggle:active { color: #f5e6b8; }

.custom-wrap { margin-top: calc(var(--u)*24); }
.ghost-input {
  width: 100%; border: none; outline: none; resize: none;
  background: rgba(14,30,64,.32);
  border: 1px solid rgba(255,255,255,.3);
  border-radius: calc(var(--u)*20);
  padding: calc(var(--u)*30) calc(var(--u)*30);
  color: #f7eed6; font-size: calc(var(--u)*34); line-height: 1.6; letter-spacing: calc(var(--u)*1);
  font-family: inherit;
  caret-color: #e8c97a;
  transition: border-color .2s ease, box-shadow .2s ease;
}
.ghost-input:focus { border-color: rgba(232,201,122,.8);
  box-shadow: 0 0 calc(var(--u)*24) rgba(232,201,122,.25); }
.ghost-input::placeholder { color: rgba(255,255,255,.58); }
.ghost-input.underline {
  background: transparent; border: none; border-bottom: 1px solid rgba(255,255,255,.4);
  border-radius: 0; padding: calc(var(--u)*26) calc(var(--u)*6);
  min-height: calc(var(--u)*120);
}
.char-count { text-align: right; margin-top: calc(var(--u)*12); font-size: calc(var(--u)*26); color: rgba(255,255,255,.6); }

/* 上一页选择回显 */
.form-summary {
  display: flex; align-items: center; gap: calc(var(--u)*20);
  margin-bottom: calc(var(--u)*52);
  padding: calc(var(--u)*26) calc(var(--u)*30);
  border-radius: calc(var(--u)*20);
  border: 1px dashed rgba(232,201,122,.4);
  background: rgba(255,240,200,.06);
  cursor: pointer;
}
.fs-label {
  flex: none; font-size: calc(var(--u)*30); color: #f0d894; letter-spacing: calc(var(--u)*2);
}
.fs-text {
  flex: 1; font-size: calc(var(--u)*28); color: rgba(255,255,255,.78);
  overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
}
.fs-edit { flex: none; font-size: calc(var(--u)*28); color: rgba(232,201,122,.9); }

/* 日期选择 */
/* 月相日期条：横向滑动卡片，阳历大字 + 农历小字 */
.date-strip {
  display: flex; gap: calc(var(--u)*16);
  overflow-x: auto; -webkit-overflow-scrolling: touch;
  scroll-snap-type: x proximity;
  padding: calc(var(--u)*8) calc(var(--u)*6);
  margin: 0 calc(var(--u)*-6);
  scrollbar-width: none;
}
.date-strip::-webkit-scrollbar { display: none; }
.dp-day {
  flex: none; scroll-snap-align: center;
  width: calc(var(--u)*168); height: calc(var(--u)*196);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: calc(var(--u)*14);
  border: 1px solid rgba(255,255,255,.16); border-radius: calc(var(--u)*24);
  background: linear-gradient(180deg, rgba(30,52,100,.42), rgba(14,30,64,.32));
  font-family: inherit; color: inherit; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: border-color .2s, background .2s, box-shadow .2s, transform .15s;
}
.dp-day:active:not(.disabled) { transform: scale(.95); }
.dp-day.sel { border-color: rgba(248,225,158,.95); }
.dp-day.disabled { opacity: .32; }
.dp-solar { display: flex; align-items: baseline; font-size: calc(var(--u)*30); color: rgba(255,255,255,.66); }
.dp-solar em { font-style: normal; }
.dp-solar b { font-size: calc(var(--u)*56); font-weight: 600; letter-spacing: calc(var(--u)*1); }
.dp-lunar { font-size: calc(var(--u)*30); color: rgba(224,212,180,.62); letter-spacing: calc(var(--u)*3); }
.dp-ma {
  font-size: calc(var(--u)*28); color: #2a1f08;
  background: linear-gradient(180deg, #f8e5a8, #e2c171);
  padding: calc(var(--u)*4) calc(var(--u)*20);
  border-radius: calc(var(--u)*24);
  letter-spacing: calc(var(--u)*4);
  box-shadow: 0 0 calc(var(--u)*14) rgba(240,208,130,.35);
}
.date-caption {
  margin-top: calc(var(--u)*22); text-align: center;
  font-size: calc(var(--u)*32); color: #f0d890;
  letter-spacing: calc(var(--u)*2);
}
.date-tip { margin-top: calc(var(--u)*14); text-align: center; font-size: calc(var(--u)*28); color: rgba(232,217,168,.7); letter-spacing: calc(var(--u)*1); }

/* 吸底操作区 */
.form-footer {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 3;
  padding: calc(var(--u)*26) calc(var(--u)*70) calc(var(--u)*30);
  padding-bottom: calc(calc(var(--u)*30) + env(safe-area-inset-bottom));
  background: linear-gradient(180deg, rgba(6,13,31,0) 0%, rgba(6,13,31,.66) 38%, rgba(6,13,31,.94) 100%);
  pointer-events: none;
}
.form-footer > * { pointer-events: auto; }

.ghost-btn {
  width: 100%; height: calc(var(--u)*120);
  border-radius: calc(var(--u)*60);
  border: 1px solid rgba(236,217,164,.85);
  background: linear-gradient(180deg, rgba(30,52,94,.9), rgba(14,28,58,.95));
  color: #f0e2b6; font-size: calc(var(--u)*46); letter-spacing: calc(var(--u)*8); text-indent: calc(var(--u)*8);
  cursor: pointer; outline: none;
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  box-shadow: 0 0 calc(var(--u)*36) rgba(232,201,122,.22);
  transition: transform .15s ease, box-shadow .15s ease;
}
.ghost-btn:active { transform: scale(.96); box-shadow: 0 0 calc(var(--u)*70) rgba(232,201,122,.5); }

.back-link {
  margin-top: calc(var(--u)*26); text-align: center;
  font-size: calc(var(--u)*30); color: rgba(232,217,168,.7);
  cursor: pointer; letter-spacing: calc(var(--u)*2);
  min-height: calc(var(--u)*80); display: flex; align-items: center; justify-content: center;
}
.back-link.light { color: rgba(255,255,255,.78); }

/* ============ 海报页 ============ */
.screen-poster { background: #060d1f; }
.screen-poster::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(72% 46% at 50% 32%, rgba(240,214,150,.10), rgba(240,214,150,0) 72%);
  pointer-events: none;
}
.poster-wrap {
  position: absolute; inset: 0; z-index: 2;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: calc(var(--u)*40) 0;
  padding-bottom: calc(calc(var(--u)*24) + env(safe-area-inset-bottom));
}
.poster-img {
  display: block; height: calc(var(--u)*1660); max-width: 94%;
  object-fit: contain; border-radius: calc(var(--u)*8);
  box-shadow: 0 calc(var(--u)*20) calc(var(--u)*80) rgba(0,0,0,.6);
  -webkit-touch-callout: default; -webkit-user-select: auto; user-select: auto;
  -webkit-user-drag: element;
}
.poster-hint {
  margin-top: calc(var(--u)*34);
  display: flex; align-items: center; gap: calc(var(--u)*20);
}
.ph-line { width: calc(var(--u)*90); height: 1px; background: linear-gradient(90deg, transparent, rgba(232,217,168,.6), transparent); }
.ph-text { font-size: calc(var(--u)*30); color: rgba(232,217,168,.88); letter-spacing: calc(var(--u)*3); }
.ph-sub { margin-top: calc(var(--u)*14); font-size: calc(var(--u)*26); color: rgba(232,217,168,.55); letter-spacing: calc(var(--u)*2); }
.screen-poster .back-link { margin-top: calc(var(--u)*22); }

/* ============ toast ============ */
.toast {
  position: absolute; left: 50%; top: 44%; z-index: 99;
  transform: translate(-50%,-50%);
  background: rgba(10,18,40,.9);
  border: 1px solid rgba(232,201,122,.5);
  color: #f5e6b8; font-size: calc(var(--u)*32); letter-spacing: calc(var(--u)*2);
  padding: calc(var(--u)*28) calc(var(--u)*50);
  border-radius: calc(var(--u)*16);
  box-shadow: 0 0 calc(var(--u)*40) rgba(0,0,0,.5), 0 0 calc(var(--u)*30) rgba(232,201,122,.2);
  white-space: nowrap; pointer-events: none;
  animation: toastIn .2s ease;
}
@keyframes toastIn { from { opacity: 0; transform: translate(-50%,-46%); } to { opacity: 1; transform: translate(-50%,-50%); } }

/* ============ 降级动画偏好 ============ */
@media (prefers-reduced-motion: reduce) {
  .loading-moon, .hb-glow, .loading-star { animation: none !important; }
  .screen { transition: none; }
}
