/* ============================================================
   星系首页：L～J 的宇宙
   ============================================================ */
#galaxyView{
  overflow:hidden;
  background:
    radial-gradient(46% 34% at 78% 18%, rgba(226,103,143,.14), transparent 70%),
    radial-gradient(40% 32% at 14% 78%, rgba(122,95,208,.16), transparent 70%),
    radial-gradient(30% 24% at 50% 46%, rgba(255,215,130,.07), transparent 70%),
    linear-gradient(180deg,#0b0b23 0%,#14143a 42%,#2d2d5f 100%);
}

#sky{
  position:absolute;inset:0;width:100%;height:100%;
  pointer-events:none;
}

/* ---------- 顶部恋爱计时条 ---------- */
.time-bar{
  position:absolute;left:50%;transform:translateX(-50%);
  top:max(14px, calc(env(safe-area-inset-top) + 10px));
  z-index:5;
  text-align:center;
  padding:8px 22px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.14);
  background:rgba(10,10,35,.35);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
}
.time-days{
  font-size:15px;letter-spacing:.14em;
  color:#ffe9c9;
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
}
.time-days b{color:#ffd27a;font-size:18px;font-weight:600;padding:0 2px}
.time-next{
  margin-top:2px;
  font-size:12px;letter-spacing:.1em;
  color:rgba(255,255,255,.62);
}
.time-next b{color:#ffb7cd;font-weight:500}
@media (max-width:480px){
  .time-bar{padding:6px 16px}
  .time-days{font-size:13px}
  .time-days b{font-size:15px}
  .time-next{font-size:11px}
}

/* ---------- 星系空间 ---------- */
.space{
  position:absolute;inset:0;
  z-index:2;
}

/* 中心恒星（可点击，连点有惊喜） */
.star-core{
  position:absolute;left:50%;top:52%;
  transform:translate(-50%,-50%);
  display:flex;flex-direction:column;align-items:center;gap:6px;
  z-index:60;
  border:0;background:none;padding:0;
  cursor:pointer;-webkit-tap-highlight-color:transparent;
}
.star-core:focus-visible{outline:none}
.star-core:focus-visible .star-body{outline:2px dashed #ffd27a;outline-offset:8px;border-radius:50%}
.star-core.pop .star-body{animation:starPop .45s cubic-bezier(.3,1.4,.5,1)}
@keyframes starPop{
  0%{transform:scale(1)}
  40%{transform:scale(1.09)}
  100%{transform:scale(1)}
}
.star-body{
  width:clamp(120px,30vmin,168px);
  height:clamp(120px,30vmin,168px);
  border-radius:50%;
  display:grid;place-items:center;
  background:radial-gradient(circle at 34% 30%, #fff8e3 0%, #ffe3a3 34%, #ffb4c8 72%, rgba(226,103,143,.55) 100%);
  box-shadow:
    0 0 30px 6px rgba(255,214,140,.42),
    0 0 90px 26px rgba(241,148,180,.30),
    0 0 180px 60px rgba(226,103,143,.16);
  animation:coreGlow 5.5s ease-in-out infinite;
}
@keyframes coreGlow{
  0%,100%{box-shadow:0 0 30px 6px rgba(255,214,140,.42),0 0 90px 26px rgba(241,148,180,.30),0 0 180px 60px rgba(226,103,143,.16)}
  50%{box-shadow:0 0 40px 10px rgba(255,214,140,.55),0 0 120px 34px rgba(241,148,180,.40),0 0 210px 70px rgba(226,103,143,.22)}
}
.star-name{
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
  font-size:clamp(24px,6vmin,34px);
  font-weight:600;letter-spacing:.08em;
  color:#7a2f4d;
  text-shadow:0 1px 0 rgba(255,255,255,.55);
}
.star-sub{
  font-size:12px;letter-spacing:.32em;
  color:rgba(255,240,215,.92);
  margin-top:-2px;
  text-shadow:0 1px 6px rgba(0,0,0,.55);
}

/* 行星 */
.planet{
  position:absolute;left:50%;top:52%;
  background:none;border:0;padding:0;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:8px;
  -webkit-tap-highlight-color:transparent;
  will-change:transform;
}
.planet-body{
  width:clamp(52px,13vmin,76px);
  height:clamp(52px,13vmin,76px);
  border-radius:50%;
  display:grid;place-items:center;
  transition:transform .25s ease, box-shadow .25s ease;
}
.planet-body svg{width:44%;height:44%}
.planet:hover .planet-body{transform:scale(1.14)}
.planet:active .planet-body{transform:scale(.94)}
.planet:focus-visible{outline:none}
.planet:focus-visible .planet-body{outline:2px dashed #ffd27a;outline-offset:5px}

.p-letters .planet-body{
  background:radial-gradient(circle at 32% 28%, #ffe9d2 0%, #f6b8a0 38%, #e2678f 78%, #c2476f 100%);
  box-shadow:0 0 18px 2px rgba(226,103,143,.45), inset -6px -8px 14px rgba(120,30,60,.3);
}
.p-photos .planet-body{
  background:radial-gradient(circle at 32% 28%, #dff3ff 0%, #9fd8f6 38%, #5b9bd9 76%, #3f6fae 100%);
  box-shadow:0 0 18px 2px rgba(120,180,240,.45), inset -6px -8px 14px rgba(20,50,100,.32);
}
.p-games .planet-body{
  background:radial-gradient(circle at 32% 28%, #efe4ff 0%, #cbb2f2 38%, #8e74d3 76%, #63509e 100%);
  box-shadow:0 0 14px 2px rgba(150,120,220,.35), inset -6px -8px 14px rgba(40,25,80,.32);
}

.planet-name{
  font-size:13px;letter-spacing:.22em;
  color:rgba(255,255,255,.82);
  text-shadow:0 1px 6px rgba(0,0,0,.5);
  white-space:nowrap;
}
.planet:hover .planet-name,.planet:focus-visible .planet-name{color:#ffe9c9}
.planet-locked .planet-body{filter:saturate(.45) brightness(.82)}
.planet-locked .planet-name{color:rgba(255,255,255,.45)}
.planet-locked .planet-soon{
  font-size:10.5px;letter-spacing:.12em;
  color:rgba(255,255,255,.58);
}
@media (max-width:480px){
  .planet-name{font-size:11.5px;letter-spacing:.14em}
}

/* 底部文案（每日一句） */
.galaxy-footer{
  position:absolute;left:0;right:0;bottom:max(16px, calc(env(safe-area-inset-bottom) + 12px));
  text-align:center;
  font-size:12.5px;letter-spacing:.12em;
  color:rgba(255,255,255,.5);
  z-index:4;
  padding:0 24px;
  transition:color .6s;
}

/* 密语 toast（彩蛋） */
.secret-toast{
  position:absolute;left:50%;bottom:18%;
  transform:translate(-50%,12px);
  max-width:min(78vw,420px);
  padding:14px 26px;
  border-radius:999px;
  border:1px solid rgba(255,214,122,.5);
  background:rgba(20,16,40,.72);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  box-shadow:0 8px 40px rgba(255,214,122,.15);
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
  font-size:15px;letter-spacing:.08em;line-height:1.7;
  color:#ffe9c9;
  opacity:0;pointer-events:none;
  transition:opacity .6s ease, transform .6s ease;
  z-index:20;
  text-align:center;
}
.secret-toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- 特殊日子全站换装 ---------- */
.special-day .time-bar{
  border-color:rgba(255,214,122,.55);
  box-shadow:0 0 24px rgba(255,214,122,.22);
  background:rgba(38,28,10,.42);
}
.special-day .time-days{color:#ffe9b0}
.special-day .time-days b{color:#ffd27a}
.special-day .time-next{color:rgba(255,236,200,.85)}
.special-day .time-next b{color:#ffd27a}
.special-day .galaxy-footer{color:rgba(255,214,122,.65)}

/* 无 JS 时的静态兜底布局 */
#galaxyView.no-js .space{
  display:flex;flex-wrap:wrap;gap:26px;
  align-content:center;justify-content:center;
  padding:90px 20px 60px;
}
#galaxyView.no-js .planet,
#galaxyView.no-js .star-core{position:static;transform:none}
#galaxyView.no-js .orbit-ring{display:none}

/* ---------- 时间情绪模式 ---------- */
body.mood-night #galaxyView{
  background:
    radial-gradient(46% 34% at 78% 18%, rgba(226,103,143,.07), transparent 70%),
    radial-gradient(40% 32% at 14% 78%, rgba(122,95,208,.09), transparent 70%),
    linear-gradient(180deg,#06061a 0%,#0d0d2a 45%,#1d1d40 100%);
}
body.mood-dawn #galaxyView{
  background:
    radial-gradient(50% 36% at 50% 8%, rgba(255,190,140,.14), transparent 70%),
    radial-gradient(40% 32% at 14% 78%, rgba(226,103,143,.10), transparent 70%),
    linear-gradient(180deg,#1a1230 0%,#2c2048 45%,#41305c 100%);
}
body.mood-dusk #galaxyView{
  background:
    radial-gradient(46% 34% at 78% 18%, rgba(160,110,220,.14), transparent 70%),
    radial-gradient(40% 32% at 14% 78%, rgba(226,103,143,.12), transparent 70%),
    linear-gradient(180deg,#0d0d26 0%,#1a1a42 45%,#33305e 100%);
}

/* ---------- 黑胶播放器 ---------- */
.vinyl-btn{
  position:fixed;right:max(16px, env(safe-area-inset-right));
  bottom:max(18px, calc(env(safe-area-inset-bottom) + 14px));
  width:58px;height:58px;border-radius:50%;
  border:1px solid rgba(255,255,255,.18);
  background:radial-gradient(circle at 34% 30%, #3a3a6e, #14142e 72%);
  box-shadow:0 6px 20px rgba(0,0,0,.45), inset 0 0 0 6px rgba(255,255,255,.04);
  cursor:pointer;z-index:12;display:grid;place-items:center;
  -webkit-tap-highlight-color:transparent;
  transition:transform .2s;
  touch-action:none;user-select:none;-webkit-user-select:none;
}
.vinyl-btn.dragging{transition:none;transform:scale(1.08);box-shadow:0 12px 32px rgba(0,0,0,.55), inset 0 0 0 6px rgba(255,255,255,.08)}
.vinyl-btn:active{transform:scale(.94)}
.vinyl-btn:focus-visible{outline:2px dashed #ffd27a;outline-offset:4px}
.vinyl-btn .disc{
  width:36px;height:36px;border-radius:50%;position:relative;
  background:repeating-radial-gradient(circle at 50% 50%, #101024 0 2px, #1c1c3a 2px 4px);
}
.vinyl-btn .disc::after{
  content:"";position:absolute;left:50%;top:50%;
  width:13px;height:13px;transform:translate(-50%,-50%);
  border-radius:50%;
  background:radial-gradient(circle at 35% 30%, #ffe3a3, #d9a441 75%);
}
.vinyl-btn.playing .disc{animation:vinylSpin 3.4s linear infinite}
@keyframes vinylSpin{to{transform:rotate(360deg)}}

.vinyl-panel{
  position:fixed;right:max(14px, env(safe-area-inset-right));
  bottom:calc(max(18px, env(safe-area-inset-bottom) + 14px) + 68px);
  width:min(330px, 86vw);
  max-height:min(48dvh, 430px);overflow-y:auto;
  border-radius:16px;border:1px solid rgba(255,255,255,.14);
  background:rgba(16,16,40,.93);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  box-shadow:0 18px 50px rgba(0,0,0,.5);
  padding:14px 14px 10px;z-index:15;
}
.vp-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.vp-head b{
  font-size:14px;letter-spacing:.1em;color:#ffe9c9;
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
}
.vp-close{
  width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.2);
  background:none;color:rgba(255,255,255,.7);font-size:16px;cursor:pointer;
  display:grid;place-items:center;line-height:1;
}
.vp-close:hover{background:rgba(255,255,255,.1)}
.vp-list{list-style:none}
.vp-song{
  width:100%;display:flex;align-items:center;gap:10px;
  padding:10px;border-radius:10px;border:0;background:none;
  color:#e8e6f5;cursor:pointer;text-align:left;
  transition:background .2s;-webkit-tap-highlight-color:transparent;
}
.vp-song:hover{background:rgba(255,255,255,.07)}
.vp-song:focus-visible{outline:2px dashed #ffd27a;outline-offset:2px}
.vp-song.active{background:rgba(255,214,122,.12)}
.vp-idx{font-size:11px;color:rgba(255,255,255,.4);letter-spacing:.08em;flex:none}
.vp-meta{flex:1;min-width:0}
.vp-meta b{display:block;font-size:13.5px;font-weight:500;letter-spacing:.03em}
.vp-meta i{display:block;font-style:normal;font-size:11px;color:rgba(255,255,255,.45);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-eq{display:none;gap:2px;align-items:flex-end;height:14px;flex:none}
.vp-eq i{width:3px;background:#ffd27a;border-radius:2px;animation:eq .9s ease-in-out infinite}
.vp-eq i:nth-child(2){animation-delay:.15s}
.vp-eq i:nth-child(3){animation-delay:.3s}
.vp-song.active .vp-eq{display:flex}
@keyframes eq{0%,100%{height:4px}50%{height:14px}}
.vp-tip{margin-top:8px;text-align:center;font-size:10.5px;color:rgba(255,255,255,.3);letter-spacing:.1em}

/* ---------- 流星许愿 ---------- */
.wish-overlay{
  position:fixed;inset:0;z-index:60;
  display:flex;align-items:center;justify-content:center;
  background:rgba(6,6,20,.6);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  opacity:0;pointer-events:none;transition:opacity .3s ease;
}
.wish-overlay.show{opacity:1;pointer-events:auto}
.wish-card{
  width:min(86vw, 360px);
  border-radius:18px;padding:24px 22px 18px;
  background:rgba(22,20,48,.95);
  border:1px solid rgba(255,214,122,.5);
  box-shadow:0 18px 60px rgba(0,0,0,.55);
  text-align:center;
}
.wish-card .w-icon{font-size:34px}
.wish-card h3{
  margin:8px 0 6px;font-size:17px;color:#ffe9c9;letter-spacing:.08em;
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
}
.wish-card .w-hint{margin:0 0 14px;font-size:12px;color:rgba(255,255,255,.55);line-height:1.8}
.wish-card textarea{
  width:100%;height:76px;resize:none;border-radius:12px;
  border:1px solid rgba(255,255,255,.2);
  background:rgba(255,255,255,.06);
  color:#f3ecff;font-size:14px;line-height:1.7;
  padding:10px 12px;font-family:inherit;letter-spacing:.03em;
}
.wish-card textarea:focus{outline:none;border-color:rgba(255,214,122,.6)}
.wish-card textarea::placeholder{color:rgba(255,255,255,.3)}
.wish-card .w-row{display:flex;gap:10px;justify-content:center;margin-top:14px}
.wish-card button{
  padding:10px 22px;border-radius:999px;font-size:13.5px;cursor:pointer;
  letter-spacing:.06em;-webkit-tap-highlight-color:transparent;
}
.wish-card .w-cancel{
  border:1px solid rgba(255,255,255,.25);background:none;color:rgba(255,255,255,.75);
}
.wish-card .w-cancel:hover{background:rgba(255,255,255,.08)}
.wish-card .w-go{
  border:0;background:linear-gradient(90deg,#ffd27a,#f194b4);
  color:#5a2f45;font-weight:600;
}
.wish-card .w-go:hover{filter:brightness(1.06)}

/* ---------- 流星雨邀请横幅 ---------- */
.wish-invite{
  position:absolute;left:50%;
  top:calc(max(14px, calc(env(safe-area-inset-top) + 10px)) + 76px);
  transform:translate(-50%,-8px);
  display:flex;align-items:center;gap:8px;
  padding:8px 10px 8px 16px;border-radius:999px;
  border:1px solid rgba(255,214,122,.5);
  background:rgba(18,16,40,.85);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  box-shadow:0 8px 30px rgba(0,0,0,.35);
  opacity:0;pointer-events:none;
  transition:opacity .4s ease, transform .4s ease;
  z-index:14;white-space:nowrap;
}
.wish-invite.show{opacity:1;pointer-events:auto;transform:translate(-50%,0)}
.wish-invite .wi-text{font-size:13px;letter-spacing:.04em;color:#ffe9c9}
.wish-invite button{
  border-radius:999px;padding:7px 14px;font-size:12.5px;cursor:pointer;
  -webkit-tap-highlight-color:transparent;letter-spacing:.04em;
}
.wish-invite .wi-yes{
  border:0;background:linear-gradient(90deg,#ffd27a,#f194b4);
  color:#5a2f45;font-weight:600;
}
.wish-invite .wi-yes:hover{filter:brightness(1.06)}
.wish-invite .wi-no{
  border:1px solid rgba(255,255,255,.25);background:none;color:rgba(255,255,255,.7);
}
.wish-invite .wi-no:hover{background:rgba(255,255,255,.08)}
@media (max-width:480px){
  .wish-invite{padding:7px 8px 7px 13px;gap:6px}
  .wish-invite .wi-text{font-size:12px}
  .wish-invite button{padding:6px 11px;font-size:11.5px}
}

/* ---------- 小屏（手机浏览器与 APP）：星体比例适配 ---------- */
@media (max-width:560px){
  .star-body{
    width:clamp(84px,23vmin,108px);
    height:clamp(84px,23vmin,108px);
  }
  .star-name{font-size:clamp(18px,4.6vmin,24px)}
  .star-sub{font-size:10.5px;letter-spacing:.24em}
  .planet-body{
    width:clamp(44px,11.5vmin,60px);
    height:clamp(44px,11.5vmin,60px);
  }
  .time-bar{top:max(10px, calc(env(safe-area-inset-top) + 6px))}
}

/* ---------- 信号塔 ---------- */
.signal-btn{
  position:absolute;z-index:90;
  left:50%;top:72%;
  transform:translateX(-50%);
  display:flex;align-items:center;gap:7px;
  padding:9px 22px;border-radius:999px;
  border:1px solid rgba(255,214,122,.5);
  background:rgba(24,20,48,.75);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  color:#ffe9c9;font-size:13.5px;letter-spacing:.08em;
  cursor:pointer;opacity:0;pointer-events:none;
  -webkit-tap-highlight-color:transparent;
  transition:opacity .3s, transform .2s, filter .2s;
}
.signal-btn.ready{opacity:1;pointer-events:auto}
.signal-btn:hover{transform:translateX(-50%) translateY(-2px);filter:brightness(1.15)}
.signal-btn:active{transform:translateX(-50%) scale(.96)}
.signal-btn:disabled{opacity:.55;cursor:default;filter:none}
.signal-btn:focus-visible{outline:2px dashed #ffd27a;outline-offset:3px}

/* 足迹星行星配色 */
.p-places .planet-body{
  background:radial-gradient(circle at 32% 28%, #e2fff0 0%, #8fe0bd 38%, #4aa885 76%, #2c7a5e 100%);
  box-shadow:0 0 18px 2px rgba(120,220,170,.45), inset -6px -8px 14px rgba(15,60,45,.35);
}
