/* ══════════════════════════════════════════════════════════════
   YUMO · 深海陪伴者
   设计语言：Abyssal Moonlight（深海月夜）
   深、静、私密。所有动效都比常规慢三倍。
   ══════════════════════════════════════════════════════════════ */

/* ── 1. 设计令牌 ───────────────────────────────────────────── */
:root{
  /* 全站不出现滚动条：滚动能力保留，视觉彻底隐去 */
*,*::before,*::after{scrollbar-width:none;-ms-overflow-style:none}
*::-webkit-scrollbar{display:none;width:0;height:0}

/* 水的深度：由表层到无光层 */
  --abyss-000:#010306;
  --abyss-050:#03060B;
  --abyss-100:#060B14;
  --abyss-200:#0A1320;
  --abyss-300:#0F1B2B;
  --abyss-400:#16273A;

  /* 月光：文字与高光 */
  --mist-000:#F4FBFF;
  --mist-050:#E8F2F9;
  --mist-100:#C3D6E4;
  --mist-200:#9AAFC2;
  --mist-300:#738799;
  --mist-400:#4C5D6E;
  --mist-500:#2C3A48;

  /* 潮汐青：强调 */
  --tide-100:#DFF3FA;
  --tide-200:#A8D8E8;
  --tide-300:#79BAD3;
  --tide-400:#4E93AE;
  --tide-500:#2F6B84;

  /* 语义 */
  --fog:#7E93A6;
  --line:rgba(168,216,232,.10);
  --line-soft:rgba(168,216,232,.06);
  --line-strong:rgba(168,216,232,.20);

  --glass:linear-gradient(158deg,rgba(210,236,250,.062),rgba(210,236,250,.018));
  --glass-2:linear-gradient(158deg,rgba(210,236,250,.085),rgba(210,236,250,.028));
  --glass-solid:rgba(9,16,26,.72);

  --glow-tide:0 0 40px rgba(121,186,211,.18);
  --glow-soft:0 8px 40px rgba(0,0,0,.55);

  --r-xs:12px;
  --r-sm:14px;
  --r-md:20px;
  --r-lg:28px;
  --r-pill:9999px;

  /* 动效时长：快=小元素反馈 / 中=常规过渡 / 慢=大面与浮层 */
  --dur-fast:.45s;
  --dur-med:.6s;
  --dur-slow:.7s;

  /* 液态玻璃：三种模糊层级 + 内高光 + 阴影 */
  --blur-scrim:8px;
  --blur-glass:16px;
  --blur-sheet:20px;
  --blur-modal:26px;
  --highlight-inset:inset 0 1px 0 rgba(210,236,250,.07);
  --shadow-lift:0 12px 34px rgba(0,0,0,.45);
  --shadow-modal:0 30px 90px rgba(0,0,0,.6);

  --font-serif:"Songti SC","Noto Serif SC","Source Han Serif SC","STSong",Georgia,"Times New Roman",serif;
  --font-sans:system-ui,-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;

  /* 极其缓慢的呼吸节奏 —— 这是整个空间的心跳 */
  --t-breathe:9s;
  --t-swell:22s;
  --t-drift:38s;
  --t-orbit:120s;
  --ease-soft:cubic-bezier(.22,.61,.36,1);
  --ease-water:cubic-bezier(.16,.84,.44,1);

  --safe-t:env(safe-area-inset-top,0px);
  --safe-b:env(safe-area-inset-bottom,0px);
}

/* ── 2. 重置 ───────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--abyss-000);
  color:var(--mist-100);
  font-family:var(--font-sans);
  font-size:15px;
  line-height:1.75;
  letter-spacing:.005em;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  overflow:hidden;
  overscroll-behavior:none;
}
button,input,textarea{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer;padding:0}
textarea{resize:none}
svg{width:1em;height:1em;display:block}
::selection{background:rgba(121,186,211,.28);color:var(--mist-000)}
h1,h2,h3,h4{margin:0;font-weight:400;font-family:var(--font-serif)}

/* 细而安静的滚动条 */
*::-webkit-scrollbar{width:3px;height:3px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:rgba(168,216,232,.16);border-radius:var(--r-pill)}

/* hidden 必须永远压过组件自己的 display —— 否则全屏遮罩会挡住整页的点击 */
[hidden]{display:none !important}

/* ── 3. 底层：场景 / 暗角 / 颗粒 ───────────────────────────── */
#scene{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block}
#vignette{
  position:fixed;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(120% 78% at 50% 42%,transparent 30%,rgba(1,3,6,.42) 72%,rgba(1,3,6,.88) 100%),
    radial-gradient(62% 46% at 50% 108%,rgba(47,107,132,.16),transparent 70%);
}
#grain{
  position:fixed;inset:-50%;z-index:2;pointer-events:none;opacity:.055;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain-shift 8s steps(6,end) infinite;
}
@keyframes grain-shift{
  0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}
  60%{transform:translate(-2%,-2%)}80%{transform:translate(3%,1%)}100%{transform:translate(0,0)}
}

/* ── 4. 视图系统 ───────────────────────────────────────────── */
.view{
  position:fixed;inset:0;z-index:10;
  display:none;flex-direction:column;
  opacity:0;
}
.view--active{display:flex;animation:view-in .9s var(--ease-water) forwards}
.view--leaving{display:flex;animation:view-out .5s var(--ease-water) forwards;pointer-events:none}
@keyframes view-in{
  from{opacity:0;transform:translateY(14px) scale(.994);filter:blur(6px)}
  to{opacity:1;transform:none;filter:blur(0)}
}
@keyframes view-out{
  from{opacity:1;transform:none;filter:blur(0)}
  to{opacity:0;transform:translateY(8px) scale(.996);filter:blur(5px)}
}
.view--sheet{
  background:linear-gradient(180deg,rgba(3,6,11,.62),rgba(3,6,11,.90) 26%,rgba(3,6,11,.96));
  backdrop-filter:var(--blur-modal) saturate(118%);
  -webkit-backdrop-filter:var(--blur-modal) saturate(118%);
}

/* ── 5. 门槛 ───────────────────────────────────────────────── */
.threshold{
  flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  display:flex;flex-direction:column;align-items:center;
  padding:calc(var(--safe-t) + 2.5vh) 26px calc(var(--safe-b) + 2.5vh);
  text-align:center;max-width:640px;margin:0 auto;width:100%;
  /* 不出现滚动条：滚动能力仍在（给极矮的屏幕兜底），但视觉上完全隐去 */
  scrollbar-width:none;-ms-overflow-style:none;
}
.threshold::-webkit-scrollbar{display:none;width:0;height:0}
.threshold > *{flex:none}
/* 空间够时整块居中；手机太矮时自动从上方开始 */
.threshold > .threshold__sigil{margin-top:auto}
/* 月印 —— 门槛上方的第一件东西 */
.threshold__sigil{
  width:clamp(102px,26vw,146px);aspect-ratio:1;flex:none;
  margin-bottom:clamp(6px,1.4vh,14px);
  animation:rise-in 3s var(--ease-soft) both;
}
.threshold__sigil svg{width:100%;height:100%;display:block;overflow:visible}
.threshold__glow{
  transform-box:view-box;transform-origin:60px 53px;
  animation:sigil-breathe var(--t-breathe) var(--ease-soft) infinite;
}
@keyframes sigil-breathe{
  0%,100%{transform:scale(1);opacity:.7}
  50%{transform:scale(1.13);opacity:1}
}
.threshold__mark{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  margin-bottom:clamp(14px,2.4vh,24px);
  animation:rise-in 2.4s .12s var(--ease-soft) both;
}
.threshold__rule{
  width:min(188px,50vw);height:1px;margin-top:7px;
  background:linear-gradient(90deg,transparent,rgba(168,216,232,.44),transparent);
  animation:rule-in 3.4s .55s var(--ease-soft) both;
}
@keyframes rule-in{
  from{opacity:0;transform:scaleX(.28)}
  to{opacity:1;transform:none}
}
.brand{
  font-family:var(--font-serif);font-size:clamp(38px,11vw,60px);line-height:1;
  letter-spacing:.42em;text-indent:.42em;color:var(--mist-000);
  text-shadow:0 0 34px rgba(168,216,232,.34),0 0 90px rgba(78,147,174,.22);
}
.brand--sm{font-size:24px;letter-spacing:.34em;text-indent:.34em}
.brand-sub{
  font-size:10.5px;letter-spacing:.34em;text-transform:uppercase;
  color:var(--mist-300);font-family:var(--font-sans);
}
.threshold__line{
  font-family:var(--font-serif);
  font-size:clamp(23px,6.4vw,34px);
  line-height:1.92;letter-spacing:.10em;
  color:var(--mist-050);
  margin:0 0 18px;
  animation:rise-in 2.4s .3s var(--ease-soft) both;
}
.threshold__line-1{display:block;color:var(--mist-100)}
.threshold__line-2{
  display:block;color:var(--tide-100);
  text-shadow:0 0 30px rgba(168,216,232,.42),0 0 86px rgba(78,147,174,.24);
}
.threshold__sub{
  font-size:13px;line-height:2.05;letter-spacing:.05em;
  color:var(--mist-300);max-width:29em;margin:0 0 clamp(18px,3.2vh,30px);
  animation:rise-in 2.4s .6s var(--ease-soft) both;
}
@keyframes rise-in{
  from{opacity:0;transform:translateY(18px);filter:blur(8px)}
  to{opacity:1;transform:none;filter:blur(0)}
}

/* 沉入按钮：一枚会呼吸的水环 */
.sink-btn{
  position:relative;width:clamp(110px,29vw,132px);height:clamp(110px,29vw,132px);border-radius:50%;
  display:grid;place-items:center;
  animation:rise-in 2.4s .9s var(--ease-soft) both;
}
.sink-btn__ring{
  position:absolute;inset:0;border-radius:50%;
  border:1px solid var(--line-strong);
  box-shadow:inset 0 0 36px rgba(121,186,211,.10),var(--glow-tide);
  animation:sink-pulse var(--t-breathe) var(--ease-soft) infinite;
}
.sink-btn__ring::after{
  content:"";position:absolute;inset:-16px;border-radius:50%;
  border:1px solid rgba(168,216,232,.06);
  animation:sink-pulse calc(var(--t-breathe) * 1.8) var(--ease-soft) infinite;
}
@keyframes sink-pulse{
  0%,100%{transform:scale(1);opacity:.72}
  50%{transform:scale(1.07);opacity:1}
}
.sink-btn__label{
  position:relative;z-index:1;font-family:var(--font-serif);
  font-size:17px;letter-spacing:.4em;text-indent:.4em;color:var(--mist-050);
  transition:color var(--dur-slow) var(--ease-soft);
}
.sink-btn:hover .sink-btn__label,.sink-btn:focus-visible .sink-btn__label{color:var(--tide-100)}
.sink-btn:focus-visible{outline:none}
.sink-btn:active{transform:scale(.97)}
.sink-btn,.sink-btn *{transition:transform var(--dur-slow) var(--ease-soft)}


.link-quiet{
  font-size:12.5px;letter-spacing:.14em;color:var(--mist-300);
  transition:color var(--dur-med) var(--ease-soft);text-decoration:none;
}
.link-quiet:hover{color:var(--tide-200)}
.dot-sep{color:var(--mist-500);font-size:11px}

/* ── 6. 深处（主厅） ───────────────────────────────────────── */
.spring__top{
  display:flex;justify-content:space-between;align-items:flex-start;
  padding:calc(var(--safe-t) + 20px) 20px 0;
}
.spring__mark{
  font-family:var(--font-serif);font-size:12.5px;letter-spacing:.42em;text-indent:.42em;
  color:var(--mist-300);padding:9px 0 0 6px;
  animation:rise-in 1.8s var(--ease-soft) both;
}
.orb-btn{
  display:inline-flex;align-items:center;gap:8px;
  padding:9px 16px 9px 13px;border-radius:var(--r-pill);
  border:1px solid var(--line);background:var(--glass);
  backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
  font-size:12px;letter-spacing:.12em;color:var(--mist-200);
  transition:all var(--dur-slow) var(--ease-soft);
}
.orb-btn svg{font-size:15px}
.orb-btn:hover{border-color:var(--line-strong);color:var(--tide-200);background:var(--glass-2)}
.orb-btn--plain{padding:9px;border-radius:50%}
.orb-btn--plain svg{font-size:17px}

.spring__stage{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:clamp(20px,4vh,34px);padding:0 24px;min-height:0;
}

/* 月核 —— Yumo 的化身 */
.core{
  position:relative;width:clamp(150px,40vw,214px);aspect-ratio:1;cursor:pointer;
  display:grid;place-items:center;
  transition:transform 1.4s var(--ease-soft);
}
.core:hover{transform:scale(1.035)}
.core:active{transform:scale(.985)}
.core__sigil{
  position:absolute;inset:0;width:100%;height:100%;
  display:block;overflow:visible;
}
.core__breathe{
  transform-box:view-box;transform-origin:120px 118px;
  animation:core-breathe var(--t-breathe) var(--ease-soft) infinite;
}
@keyframes core-breathe{
  0%,100%{transform:scale(.94);opacity:.66}
  50%{transform:scale(1.07);opacity:1}
}
.core__orbit{
  transform-box:view-box;transform-origin:120px 118px;
  animation:core-spin var(--t-orbit) linear infinite;
}
@keyframes core-spin{to{transform:rotate(360deg)}}
.core__mote{animation:core-mote 6.5s var(--ease-soft) infinite}
.core__mote--b{animation-duration:9.4s;animation-delay:.7s}
.core__mote--c{animation-duration:11.6s;animation-delay:1.4s}
@keyframes core-mote{0%,100%{opacity:.3}50%{opacity:1}}
.core__orb{
  transform-box:view-box;transform-origin:120px 118px;
  animation:core-orb var(--t-breathe) var(--ease-soft) infinite;
}
@keyframes core-orb{0%,100%{transform:scale(1)}50%{transform:scale(1.045)}}
.core__spark{
  transform-box:view-box;transform-origin:120px 118px;
  animation:core-spark 7.2s var(--ease-soft) infinite;
}
@keyframes core-spark{
  0%,100%{transform:scale(.78);opacity:.5}
  50%{transform:scale(1.3);opacity:1}
}
.core__ripples{
  transform-box:view-box;transform-origin:120px 206px;
  animation:core-ripple var(--t-swell) var(--ease-soft) infinite;
}
@keyframes core-ripple{
  0%,100%{transform:scaleX(.9);opacity:.45}
  50%{transform:scaleX(1.09);opacity:1}
}
.core__halo{
  position:absolute;width:100%;aspect-ratio:1;border-radius:50%;
  background:radial-gradient(circle,rgba(121,186,211,.13),transparent 62%);
  animation:core-halo var(--t-swell) var(--ease-soft) infinite;
}
.core__halo--2{
  width:132%;
  background:radial-gradient(circle,rgba(47,107,132,.10),transparent 66%);
  animation:core-halo calc(var(--t-swell) * 1.5) .8s var(--ease-soft) infinite reverse;
}
@keyframes core-halo{
  0%,100%{transform:scale(1);opacity:.6}
  50%{transform:scale(1.08);opacity:1}
}
/* 情绪状态：Yumo 的呼吸与光会变 */
.core[data-mood="tender"] .core__orb{animation-duration:7s;filter:drop-shadow(0 0 24px rgba(168,216,232,.5))}
.core[data-mood="tender"] .core__breathe{animation-duration:10s}
.core[data-mood="heavy"] .core__orb{animation-duration:13s;opacity:.6;filter:saturate(.7) blur(.6px)}
.core[data-mood="heavy"] .core__breathe{animation-duration:15s;opacity:.5}
.core[data-mood="bright"] .core__orb{animation-duration:6s;filter:drop-shadow(0 0 40px rgba(223,243,250,.6))}
.core[data-mood="bright"] .core__spark{animation-duration:4.6s}
.core[data-mood="thinking"] .core__breathe{animation-duration:3.6s}
.core[data-mood="thinking"] .core__orbit{animation-duration:36s}
.core[data-mood="thinking"] .core__spark{animation-duration:2.6s}

.spring__name{
  font-family:var(--font-serif);font-size:21px;letter-spacing:.46em;text-indent:.46em;
  color:var(--mist-050);text-shadow:0 0 26px rgba(168,216,232,.3);
}
.spring__state{
  font-size:12.5px;letter-spacing:.1em;color:var(--mist-300);
  min-height:1.8em;text-align:center;transition:opacity var(--dur-slow) var(--ease-soft);
}

.spring__hints{
  display:flex;gap:14px;padding:0 20px;
}
.hint{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:15px 12px 13px;border-radius:var(--r-md);
  border:1px solid var(--line-soft);background:var(--glass);
  backdrop-filter:var(--blur-glass);-webkit-backdrop-filter:var(--blur-glass);
  transition:all var(--dur-slow) var(--ease-soft);
}
.hint:hover{border-color:var(--line-strong);background:var(--glass-2);transform:translateY(-2px)}
.hint__arrow{font-size:12px;color:var(--tide-300);line-height:1}
.hint__label{font-family:var(--font-serif);font-size:14px;letter-spacing:.22em;color:var(--mist-050)}
.hint__desc{font-size:10.5px;letter-spacing:.08em;color:var(--mist-400)}

.spring__dock{
  display:flex;justify-content:space-around;align-items:center;
  padding:14px 12px calc(var(--safe-b) + 18px);
  border-top:1px solid var(--line-soft);
  background:linear-gradient(180deg,transparent,rgba(3,6,11,.6));
}
.dock__item{
  display:flex;flex-direction:column;align-items:center;gap:6px;
  font-size:10.5px;letter-spacing:.16em;color:var(--mist-400);
  padding:6px 14px;border-radius:var(--r-sm);
  transition:all var(--dur-slow) var(--ease-soft);
}
.dock__item svg{font-size:19px;transition:all var(--dur-slow) var(--ease-soft)}
.dock__item:hover,.dock__item:focus-visible{color:var(--tide-200);outline:none}
.dock__item:hover svg{transform:translateY(-2px);filter:drop-shadow(0 0 10px rgba(121,186,211,.5))}

/* ── 7. 顶部栏 ─────────────────────────────────────────────── */
.bar{
  display:flex;align-items:center;gap:10px;
  padding:calc(var(--safe-t) + 14px) 14px 12px;
  border-bottom:1px solid var(--line-soft);
  background:rgba(3,6,11,.4);
  backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
}
.bar__back{
  width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  color:var(--mist-200);border:1px solid transparent;
  transition:all var(--dur-slow) var(--ease-soft);flex:none;
}
.bar__back svg{font-size:19px}
.bar__back:hover{color:var(--tide-200);border-color:var(--line);background:var(--glass)}
.bar__center{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;min-width:0}
.bar__title{font-family:var(--font-serif);font-size:15.5px;letter-spacing:.26em;text-indent:.26em;color:var(--mist-050)}
.bar__sub{font-size:10.5px;letter-spacing:.1em;color:var(--mist-400);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.bar__action{
  flex:none;display:inline-flex;align-items:center;gap:5px;
  padding:7px 12px;border-radius:var(--r-pill);
  font-size:11px;letter-spacing:.14em;color:var(--mist-300);
  border:1px solid var(--line-soft);transition:all var(--dur-slow) var(--ease-soft);
  min-width:38px;justify-content:center;
}
.bar__action svg{font-size:14px}
.bar__action:hover{color:var(--tide-200);border-color:var(--line-strong)}
.bar__action.is-on{color:var(--abyss-050);background:linear-gradient(140deg,var(--tide-100),var(--tide-300));border-color:transparent;box-shadow:0 0 26px rgba(121,186,211,.34)}
.bar__action--ghost{visibility:hidden;pointer-events:none}

/* ── 8. 对话 ───────────────────────────────────────────────── */
.thread{
  flex:1;overflow-y:auto;overflow-x:hidden;
  padding:26px 16px 18px;
  display:flex;flex-direction:column;gap:18px;
  scroll-behavior:smooth;
}
/* 消息少时贴着底部浮着，多时正常从上方滚出 */
.thread > :first-child{margin-top:auto}
.msg{display:flex;flex-direction:column;max-width:88%;animation:msg-in 1s var(--ease-water) both}
@keyframes msg-in{
  from{opacity:0;transform:translateY(12px);filter:blur(5px)}
  to{opacity:1;transform:none;filter:blur(0)}
}
.msg--me{align-self:flex-end;align-items:flex-end}
.msg--yumo{align-self:flex-start;align-items:flex-start}

.msg__bubble{
  position:relative;padding:13px 17px;border-radius:var(--r-md);
  font-size:14.5px;line-height:1.95;letter-spacing:.02em;
  white-space:pre-wrap;word-break:break-word;
  transition:all .9s var(--ease-soft);
}
.msg--me .msg__bubble{
  background:linear-gradient(150deg,rgba(168,216,232,.13),rgba(168,216,232,.05));
  border:1px solid rgba(168,216,232,.14);
  color:var(--mist-050);
  border-bottom-right-radius:7px;
}
.msg--yumo .msg__bubble{
  background:linear-gradient(150deg,rgba(210,236,250,.052),rgba(210,236,250,.014));
  border:1px solid var(--line-soft);
  color:var(--mist-100);
  border-bottom-left-radius:7px;
  font-family:var(--font-serif);font-size:15px;line-height:2.05;letter-spacing:.03em;
}
.msg--yumo .msg__bubble::before{
  content:"";position:absolute;left:-1px;top:14px;bottom:14px;width:1px;
  background:linear-gradient(180deg,transparent,rgba(168,216,232,.5),transparent);
  border-radius:2px;
}
.msg__meta{
  display:flex;align-items:center;gap:9px;
  font-size:10px;letter-spacing:.1em;color:var(--mist-400);
  margin-top:6px;padding:0 4px;opacity:0;transition:opacity var(--dur-med) var(--ease-soft);
}
.msg:hover .msg__meta{opacity:1}
.msg__act{
  letter-spacing:.1em;font-size:10px;color:var(--mist-400);
  transition:color var(--dur-med) var(--ease-soft);
}
.msg__act:hover{color:var(--tide-200)}

.msg__att{
  margin-top:9px;border-radius:var(--r-sm);overflow:hidden;
  border:1px solid var(--line);max-width:230px;background:var(--abyss-200);
}
.msg__att img{width:100%;display:block;max-height:250px;object-fit:cover}

/* Yumo 正在感受 */
.feeling{display:flex;align-items:center;gap:11px;padding:4px 4px 0}
.feeling__dots{display:flex;gap:5px}
.feeling__dots i{
  width:5px;height:5px;border-radius:50%;background:var(--tide-300);
  animation:feel-wave 1.9s var(--ease-soft) infinite;
}
.feeling__dots i:nth-child(2){animation-delay:.24s}
.feeling__dots i:nth-child(3){animation-delay:.48s}
@keyframes feel-wave{
  0%,70%,100%{transform:translateY(0);opacity:.34}
  35%{transform:translateY(-5px);opacity:1}
}
.feeling__text{font-size:11.5px;letter-spacing:.12em;color:var(--mist-400);font-family:var(--font-serif)}

/* 空态 */
.thread__empty{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:16px;text-align:center;padding:0 30px;color:var(--mist-300);
}
.thread__empty p{font-family:var(--font-serif);font-size:15.5px;line-height:2.2;letter-spacing:.08em;margin:0;color:var(--mist-200)}
.thread__empty small{font-size:11px;letter-spacing:.1em;color:var(--mist-400);line-height:2}
.seed-row{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:6px}
.seed{
  padding:9px 15px;border-radius:var(--r-pill);font-size:12px;letter-spacing:.06em;
  border:1px solid var(--line);background:var(--glass);color:var(--mist-200);
  transition:all var(--dur-slow) var(--ease-soft);
}
.seed:hover{border-color:var(--line-strong);color:var(--tide-200);background:var(--glass-2);transform:translateY(-1px)}

/* ── 9. 输入区 ─────────────────────────────────────────────── */
.composer-wrap{
  padding:10px 14px calc(var(--safe-b) + 12px);
  border-top:1px solid var(--line-soft);
  background:linear-gradient(180deg,rgba(3,6,11,.3),rgba(3,6,11,.86));
  backdrop-filter:var(--blur-modal);-webkit-backdrop-filter:var(--blur-modal);
}
.composer{
  display:flex;align-items:flex-end;gap:8px;
  padding:7px 8px 7px 8px;border-radius:var(--r-lg);
  border:1px solid var(--line);background:var(--glass);
  transition:border-color var(--dur-slow) var(--ease-soft),box-shadow var(--dur-slow) var(--ease-soft);
}
.composer:focus-within{border-color:var(--line-strong);box-shadow:0 0 34px rgba(121,186,211,.10)}
.composer textarea{
  flex:1;min-height:40px;max-height:150px;padding:10px 4px;
  background:none;border:0;outline:none;
  font-size:15px;line-height:1.7;letter-spacing:.02em;
  color:var(--mist-050);font-family:var(--font-sans);
}
.composer textarea::placeholder{color:var(--mist-400)}
.comp-btn{
  width:38px;height:38px;flex:none;border-radius:50%;display:grid;place-items:center;
  color:var(--mist-300);transition:all var(--dur-slow) var(--ease-soft);
}
.comp-btn svg{font-size:19px}
.comp-btn:hover{color:var(--tide-200);background:rgba(168,216,232,.08)}
.comp-btn.is-on{
  color:var(--abyss-050);
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  box-shadow:0 0 26px rgba(121,186,211,.44);
}
.comp-send{
  width:40px;height:40px;flex:none;border-radius:50%;display:grid;place-items:center;
  color:var(--abyss-050);
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  box-shadow:0 0 24px rgba(121,186,211,.3);
  transition:all var(--dur-slow) var(--ease-soft);
}
.comp-send svg{font-size:19px}
.comp-send:hover{transform:scale(1.06);box-shadow:0 0 36px rgba(121,186,211,.5)}
.comp-send:disabled{opacity:.28;background:none;border:1px solid var(--line);color:var(--mist-400);box-shadow:none;transform:none;cursor:default}
.composer-foot{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:8px 6px 0;font-size:10px;letter-spacing:.08em;color:var(--mist-400);
}
/* 窄屏下让提示语先省略，别把右边的 AI 标识和模型标签挤断行 */
.composer-foot>#talk-hint{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mono-chip{
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.04em;white-space:nowrap;
  padding:3px 8px;border-radius:var(--r-pill);
  border:1px solid var(--line-soft);color:var(--mist-400);
}
.mono-chip.is-live{color:var(--tide-300);border-color:rgba(168,216,232,.22)}

/* 常态化的 AI 标识——法规要求对话页稳定可见，不能藏进设置页 */
.foot-right{display:inline-flex;align-items:center;gap:8px;flex:none}
.ai-mark{
  display:inline-flex;align-items:center;gap:5px;cursor:help;white-space:nowrap;
  font-size:9.5px;letter-spacing:.1em;
  padding:3px 8px;border-radius:var(--r-pill);
  border:1px solid var(--line-soft);color:var(--mist-400);
}
.ai-mark i{width:4px;height:4px;border-radius:50%;background:currentColor;opacity:.65;flex:none;display:block}

/* 录音条 */
.rec-bar{
  display:flex;align-items:center;gap:12px;
  padding:12px 18px;margin-bottom:9px;border-radius:var(--r-md);
  border:1px solid rgba(168,216,232,.2);
  background:linear-gradient(140deg,rgba(168,216,232,.10),rgba(168,216,232,.03));
}
.rec-bar__wave{display:flex;align-items:center;gap:3px;height:20px}
.rec-bar__wave i{
  width:2.5px;border-radius:var(--r-pill);background:var(--tide-200);
  animation:rec-eq 1.15s var(--ease-soft) infinite;
}
.rec-bar__wave i:nth-child(1){height:7px;animation-delay:0s}
.rec-bar__wave i:nth-child(2){height:15px;animation-delay:.12s}
.rec-bar__wave i:nth-child(3){height:20px;animation-delay:.24s}
.rec-bar__wave i:nth-child(4){height:12px;animation-delay:.36s}
.rec-bar__wave i:nth-child(5){height:18px;animation-delay:.48s}
.rec-bar__wave i:nth-child(6){height:9px;animation-delay:.6s}
.rec-bar__wave i:nth-child(7){height:14px;animation-delay:.72s}
@keyframes rec-eq{0%,100%{transform:scaleY(.32)}50%{transform:scaleY(1)}}
.rec-bar__text{flex:1;font-size:12px;letter-spacing:.12em;color:var(--tide-100);font-family:var(--font-serif)}
.rec-bar__stop{font-size:11.5px;letter-spacing:.14em;color:var(--mist-200);padding:5px 12px;border-radius:var(--r-pill);border:1px solid var(--line)}
.rec-bar__stop:hover{color:var(--tide-100);border-color:var(--line-strong)}

/* 附件条 */
.attachment-strip{display:flex;gap:9px;padding:0 4px 9px;flex-wrap:wrap}
.att-thumb{position:relative;width:60px;height:60px;border-radius:var(--r-xs);overflow:hidden;border:1px solid var(--line)}
.att-thumb img{width:100%;height:100%;object-fit:cover}
.att-thumb button{
  position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;
  display:grid;place-items:center;font-size:11px;color:var(--mist-050);
  background:rgba(3,6,11,.78);backdrop-filter:var(--blur-scrim);
}

/* ── 10. 滚动区 & 分段控件 ─────────────────────────────────── */
.scroll{flex:1;overflow-y:auto;padding:22px 18px calc(var(--safe-b) + 34px)}
.seg{
  display:flex;gap:4px;padding:12px 14px 0;
}
.seg__i{
  flex:1;padding:9px 4px;border-radius:var(--r-pill);
  font-size:11.5px;letter-spacing:.16em;color:var(--mist-400);
  border:1px solid transparent;transition:all var(--dur-slow) var(--ease-soft);
}
.seg__i:hover{color:var(--mist-200)}
.seg__i.is-on{
  color:var(--mist-050);border-color:var(--line-strong);
  background:var(--glass);box-shadow:0 0 24px rgba(121,186,211,.10);
}

/* ── 11. 通用卡片 ──────────────────────────────────────────── */
.card{
  border:1px solid var(--line-soft);border-radius:var(--r-md);
  background:var(--glass);backdrop-filter:var(--blur-glass);-webkit-backdrop-filter:var(--blur-glass);
  box-shadow:var(--highlight-inset);
  padding:18px;margin-bottom:14px;
  animation:rise-in 1.4s var(--ease-soft) both;
}
.card--plain{background:rgba(210,236,250,.022)}
.card__label{
  font-size:10px;letter-spacing:.28em;color:var(--mist-400);
  text-transform:uppercase;margin-bottom:12px;font-family:var(--font-sans);
}
.card__title{font-family:var(--font-serif);font-size:16px;letter-spacing:.14em;color:var(--mist-050);margin-bottom:9px}
.card p{margin:0;font-size:13.5px;line-height:2.05;color:var(--mist-200)}
.empty-line{font-size:12.5px;letter-spacing:.06em;color:var(--mist-400);line-height:2.1;font-family:var(--font-serif)}

/* 星图：标签云 */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{
  padding:6px 13px;border-radius:var(--r-pill);font-size:12px;letter-spacing:.05em;
  border:1px solid var(--line);background:rgba(168,216,232,.045);color:var(--mist-100);
}
.chip--tide{border-color:rgba(168,216,232,.26);color:var(--tide-100);background:rgba(168,216,232,.09)}
.chip--big{font-family:var(--font-serif);font-size:14px;letter-spacing:.1em}

/* 潮汐曲线 */
.tide-chart{width:100%;height:84px;display:block;margin-top:4px}
.tide-legend{display:flex;justify-content:space-between;font-size:10px;letter-spacing:.1em;color:var(--mist-400);margin-top:8px}

/* 情绪刻度条 */
.scale{display:flex;align-items:center;gap:10px;margin:9px 0}
.scale__track{flex:1;height:3px;border-radius:var(--r-pill);background:rgba(168,216,232,.1);overflow:hidden}
.scale__fill{height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,var(--tide-500),var(--tide-200));transition:width 2s var(--ease-soft)}
.scale__val{font-family:var(--font-mono);font-size:10.5px;color:var(--mist-300);min-width:2.6em;text-align:right}

/* 列表项 */
.row-item{
  display:flex;gap:13px;align-items:flex-start;
  padding:14px 0;border-bottom:1px solid var(--line-soft);
}
.row-item:last-child{border-bottom:0}
.row-item__time{
  flex:none;width:64px;font-family:var(--font-mono);font-size:10px;
  color:var(--mist-400);padding-top:3px;letter-spacing:.02em;
}
.row-item__body{flex:1;min-width:0}
.row-item__body p{font-size:13.5px;line-height:1.95;color:var(--mist-100);margin:0}
.row-item__tag{
  display:inline-block;margin-top:7px;font-size:10px;letter-spacing:.14em;
  padding:2px 9px;border-radius:var(--r-pill);border:1px solid var(--line);
  color:var(--mist-300);
}

/* 回声（金句） */
.echo-card{
  position:relative;padding:24px 20px 18px 30px;margin-bottom:13px;
  border-radius:var(--r-md);border:1px solid var(--line-soft);
  background:linear-gradient(158deg,rgba(168,216,232,.075),rgba(168,216,232,.014));
  animation:rise-in 1.4s var(--ease-soft) both;
}
.echo-card::before{
  content:"「";position:absolute;left:11px;top:9px;
  font-family:var(--font-serif);font-size:24px;color:rgba(168,216,232,.24);line-height:1;
}
.echo-card__text{
  font-family:var(--font-serif);font-size:14.5px;line-height:2.05;letter-spacing:.05em;
  color:var(--mist-050);
}
.echo-card__foot{
  display:flex;justify-content:space-between;align-items:center;
  margin-top:12px;font-size:10px;letter-spacing:.1em;color:var(--mist-400);
}
.echo-card__foot button{font-size:10px;letter-spacing:.1em;color:var(--mist-400)}
.echo-card__foot button:hover{color:var(--tide-200)}

/* ── 12. 声境 ──────────────────────────────────────────────── */

.sound-mix{
  display:flex;flex-wrap:wrap;gap:9px;justify-content:center;
  padding:0 4px 22px;
}
.sound-mix button{
  padding:8px 15px;border-radius:var(--r-pill);font-size:11.5px;letter-spacing:.14em;
  border:1px solid var(--line);background:var(--glass);color:var(--mist-200);
  transition:all var(--dur-slow) var(--ease-soft);
}
.sound-mix button:hover{border-color:var(--line-strong);color:var(--tide-200)}
.sound-mix button.is-on{
  color:var(--abyss-050);border-color:transparent;
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  box-shadow:0 0 24px rgba(121,186,211,.3);
}
.sound-vol{padding:4px 4px 18px;border-bottom:1px solid var(--line-soft)}
.sound-vol__head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}
.sound-vol__head span{font-size:10px;letter-spacing:.24em;color:var(--mist-400)}
.sound-vol__head b{font-family:var(--font-mono);font-weight:400;font-size:11px;color:var(--tide-200)}
.sound-rows{display:flex;flex-direction:column;gap:4px}
.sound-row{
  display:flex;align-items:center;gap:13px;padding:13px 4px;
  border-bottom:1px solid var(--line-soft);
}
.sound-row__ico{
  width:36px;height:36px;flex:none;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--line);color:var(--mist-200);
  transition:all var(--dur-slow) var(--ease-soft);
}
.sound-row__ico svg{font-size:17px}
.sound-row__ico:hover{border-color:var(--line-strong);color:var(--tide-200)}
.sound-row__ico.is-on{
  border-color:rgba(168,216,232,.48);color:var(--tide-100);
  background:rgba(168,216,232,.07);
  box-shadow:0 0 22px rgba(121,186,211,.26),inset 0 0 16px rgba(121,186,211,.12);
}
.sound-row__txt{flex:none;width:118px}
.sound-row__txt b{display:block;font-weight:400;font-family:var(--font-serif);font-size:13.5px;letter-spacing:.14em;color:var(--mist-050)}
.sound-row__txt span{font-size:9.5px;letter-spacing:.06em;color:var(--mist-400)}
.sound-row input[type=range]{
  -webkit-appearance:none;appearance:none;flex:1;height:2px;border-radius:var(--r-pill);
  background:rgba(168,216,232,.14);outline:none;
}
.sound-vol input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;height:2px;border-radius:var(--r-pill);
  background:rgba(168,216,232,.18);outline:none;
}
.sound-row input[type=range]::-webkit-slider-thumb,
.sound-vol input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;width:13px;height:13px;border-radius:50%;
  background:var(--mist-050);box-shadow:0 0 16px rgba(168,216,232,.72);cursor:pointer;
}
.sound-row input[type=range]::-moz-range-thumb,
.sound-vol input[type=range]::-moz-range-thumb{
  width:13px;height:13px;border:0;border-radius:50%;
  background:var(--mist-050);box-shadow:0 0 16px rgba(168,216,232,.72);cursor:pointer;
}
.note-quiet{
  font-size:11px;line-height:2.1;letter-spacing:.06em;color:var(--mist-400);
  margin:22px 4px 0;text-align:center;
}

/* ── 13. 浮念 ──────────────────────────────────────────────── */
.drift-in{
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--glass);padding:14px;margin-bottom:22px;
}
.drift-in textarea{
  width:100%;background:none;border:0;outline:none;
  font-size:14.5px;line-height:2;color:var(--mist-050);
  font-family:var(--font-serif);letter-spacing:.04em;
}
.drift-in textarea::placeholder{color:var(--mist-400);font-family:var(--font-sans);font-size:13.5px}
.drift-in__row{display:flex;justify-content:space-between;align-items:center;margin-top:11px}
.pill-btn{
  padding:8px 20px;border-radius:var(--r-pill);font-size:11.5px;letter-spacing:.2em;
  color:var(--abyss-050);background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  box-shadow:0 0 22px rgba(121,186,211,.26);transition:all var(--dur-slow) var(--ease-soft);
}
.pill-btn:hover{box-shadow:0 0 34px rgba(121,186,211,.46);transform:translateY(-1px)}
.drift-list{display:flex;flex-direction:column;gap:11px}
.drift-item{
  position:relative;padding:15px 17px;border-radius:var(--r-md);
  border:1px solid var(--line-soft);background:rgba(210,236,250,.022);
  animation:rise-in 1.2s var(--ease-soft) both;
}
.drift-item__text{
  font-family:var(--font-serif);font-size:14px;line-height:2;letter-spacing:.04em;
  color:var(--mist-100);white-space:pre-wrap;
}
.drift-item__foot{
  display:flex;justify-content:space-between;align-items:center;
  margin-top:10px;font-size:10px;letter-spacing:.1em;color:var(--mist-400);
}
.drift-item__foot button{font-size:10px;letter-spacing:.1em;color:var(--mist-400)}
.drift-item__foot button:hover{color:var(--tide-200)}
.drift-item__badge{
  font-size:9.5px;letter-spacing:.12em;padding:2px 8px;border-radius:var(--r-pill);
  border:1px solid rgba(168,216,232,.24);color:var(--tide-200);
}

/* ── 14. 心象抽牌 ──────────────────────────────────────────── */
.mirror-intro{text-align:center;padding:14px 8px 26px}
.mirror-intro h2{
  font-family:var(--font-serif);font-size:22px;letter-spacing:.3em;text-indent:.3em;
  color:var(--mist-050);margin-bottom:14px;
}
.mirror-intro p{font-size:13px;line-height:2.15;color:var(--mist-300);margin:0 auto;max-width:24em}

.spread-row{display:flex;gap:12px;margin:22px 0}
.spread{
  flex:1;padding:19px 14px;border-radius:var(--r-md);
  border:1px solid var(--line);background:var(--glass);
  transition:all var(--dur-slow) var(--ease-soft);text-align:center;
}
.spread:hover{border-color:var(--line-strong);transform:translateY(-2px);background:var(--glass-2)}
.spread.is-on{border-color:var(--tide-300);box-shadow:0 0 30px rgba(121,186,211,.18)}
.spread b{display:block;font-weight:400;font-family:var(--font-serif);font-size:17px;letter-spacing:.24em;color:var(--mist-050);margin-bottom:5px}
.spread span{font-size:10.5px;letter-spacing:.1em;color:var(--mist-400);line-height:1.7}

.mirror-q textarea{
  width:100%;padding:15px 16px;border-radius:var(--r-md);
  border:1px solid var(--line);background:var(--glass);
  outline:none;font-size:14.5px;line-height:2;color:var(--mist-050);
  font-family:var(--font-serif);letter-spacing:.04em;transition:border-color var(--dur-slow) var(--ease-soft);
}
.mirror-q textarea:focus{border-color:var(--line-strong)}
.mirror-q textarea::placeholder{color:var(--mist-400);font-family:var(--font-sans);font-size:13.5px}
.mirror-q__hint{font-size:11px;letter-spacing:.08em;color:var(--mist-400);margin:9px 4px 0}

.deck-zone{display:grid;place-items:center;padding:34px 0 22px;perspective:1000px}
.deck{position:relative;width:150px;height:238px;cursor:pointer;transform-style:preserve-3d}
.deck__card{
  position:absolute;inset:0;border-radius:var(--r-sm);
  border:1px solid rgba(168,216,232,.22);
  background:
    radial-gradient(circle at 50% 34%,rgba(168,216,232,.14),transparent 62%),
    linear-gradient(160deg,rgba(10,19,32,.96),rgba(3,6,11,.98));
  box-shadow:0 18px 50px rgba(0,0,0,.6),inset 0 0 40px rgba(121,186,211,.06);
  display:grid;place-items:center;overflow:hidden;
  transition:transform 1s var(--ease-soft);
}
.deck__card::after{
  content:"";position:absolute;inset:11px;border-radius:9px;
  border:1px solid rgba(168,216,232,.09);
}
.deck__card svg{width:56%;height:56%;color:rgba(168,216,232,.32)}
.deck__card:nth-child(1){transform:translate(-8px,4px) rotate(-5deg)}
.deck__card:nth-child(2){transform:translate(8px,2px) rotate(4deg)}
.deck__card:nth-child(3){transform:translateY(-3px)}
.deck:hover .deck__card:nth-child(1){transform:translate(-14px,6px) rotate(-8deg)}
.deck:hover .deck__card:nth-child(2){transform:translate(14px,3px) rotate(7deg)}
.deck:hover .deck__card:nth-child(3){transform:translateY(-9px)}
.deck.is-shuffling .deck__card:nth-child(3){animation:tarot-shuffle 1.5s var(--ease-soft) infinite}
@keyframes tarot-shuffle{
  0%,100%{transform:translateY(-3px) rotate(0)}
  50%{transform:translateY(-16px) rotate(3deg)}
}
.deck__breath{animation:tarot-breath 7s var(--ease-soft) infinite}
@keyframes tarot-breath{0%,100%{filter:drop-shadow(0 0 0 transparent)}50%{filter:drop-shadow(0 0 22px rgba(121,186,211,.36))}}

.drawn-row{display:flex;gap:14px;justify-content:center;padding:8px 0 20px;flex-wrap:wrap}
.drawn{
  width:min(46%,158px);border-radius:var(--r-sm);overflow:hidden;
  border:1px solid rgba(168,216,232,.2);
  background:linear-gradient(165deg,rgba(10,19,32,.96),rgba(3,6,11,.98));
  box-shadow:0 16px 46px rgba(0,0,0,.55);
  animation:card-flip 1.6s var(--ease-water) both;
}
@keyframes card-flip{
  from{opacity:0;transform:rotateY(-88deg) scale(.9)}
  to{opacity:1;transform:none}
}
.drawn__art{height:132px;display:grid;place-items:center;position:relative;overflow:hidden;background:radial-gradient(circle at 50% 40%,rgba(168,216,232,.1),transparent 70%)}
.drawn__art svg{width:66px;height:66px;color:rgba(200,232,246,.7)}
.drawn__art em{
  position:absolute;bottom:7px;right:9px;font-style:normal;
  font-size:9px;letter-spacing:.16em;color:var(--mist-400);
}
.drawn__meta{padding:11px 13px 14px}
.drawn__meta h4{font-family:var(--font-serif);font-size:15px;letter-spacing:.14em;color:var(--mist-050);margin-bottom:4px}
.drawn__meta small{font-size:10px;letter-spacing:.12em;color:var(--tide-300)}
.drawn__meta p{font-size:11.5px;line-height:1.9;color:var(--mist-300);margin:8px 0 0}
.drawn__meta h4 .pos{
  font-style:normal;margin-left:7px;font-size:9.5px;letter-spacing:.14em;
  color:var(--tide-300);vertical-align:middle;
}
.drawn__meta-en{
  display:block;margin-top:3px;font-size:9px;letter-spacing:.02em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* 牌组切换：水象牌 / 韦特塔罗 */
.deck-row{display:flex;gap:10px;margin:20px 0 0}
.deck-tab{
  flex:1;padding:13px 14px;border-radius:var(--r-md);text-align:center;
  border:1px solid var(--line);background:var(--glass);
  transition:all var(--dur-slow) var(--ease-soft);
}
.deck-tab b{display:block;font-weight:400;font-family:var(--font-serif);font-size:15px;letter-spacing:.18em;color:var(--mist-100);margin-bottom:3px}
.deck-tab span{font-size:10px;letter-spacing:.1em;color:var(--mist-400)}
.deck-tab:hover{border-color:var(--line-strong);background:var(--glass-2)}
.deck-tab.is-on{border-color:var(--tide-300);background:var(--glass-2);box-shadow:0 0 28px rgba(121,186,211,.16)}
.deck-tab.is-on b{color:var(--tide-100)}

/* 韦特塔罗的牌面：真图 + 逆位翻转 */
.drawn--tarot{border-color:rgba(168,216,232,.26)}
.drawn--tarot .drawn__art{height:auto;aspect-ratio:420 / 700;padding:0;background:#060B14}
.drawn__art--tarot img{
  width:100%;height:100%;display:block;object-fit:cover;
  transition:transform 1.4s var(--ease-soft);
}
.drawn__art--tarot img.is-rev{transform:rotate(180deg)}
.drawn--tarot .drawn__meta p{
  display:-webkit-box;-webkit-line-clamp:7;-webkit-box-orient:vertical;overflow:hidden;
}
.drawn-row--many .drawn{width:min(30%,160px)}
.drawn-row--many.drawn-row--tarot .drawn{width:min(30%,182px)}

/* 续抽 */
.extend-zone{padding:0 0 8px}
.extend-row{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;padding:0 2px}
.extend{
  flex:1;min-width:152px;padding:13px 16px;border-radius:var(--r-md);text-align:left;
  border:1px dashed rgba(168,216,232,.24);background:rgba(168,216,232,.03);
  transition:all var(--dur-slow) var(--ease-soft);
}
.extend b{display:block;font-weight:400;font-family:var(--font-serif);font-size:13.5px;letter-spacing:.12em;color:var(--tide-100);margin-bottom:3px}
.extend span{font-size:10px;letter-spacing:.08em;color:var(--mist-400)}
.extend:hover{
  border-style:solid;border-color:var(--line-strong);
  background:rgba(168,216,232,.07);transform:translateY(-2px);
}

/* ── 15. 设置 ──────────────────────────────────────────────── */
.set-row{
  display:flex;align-items:center;gap:14px;padding:16px 2px;
  border-bottom:1px solid var(--line-soft);
}
.set-row:last-child{border-bottom:0}
.set-row__txt{flex:1;min-width:0}
.set-row__txt b{display:block;font-weight:400;font-size:13.5px;letter-spacing:.06em;color:var(--mist-050);margin-bottom:3px}
.set-row__txt span{font-size:11px;line-height:1.85;color:var(--mist-400);letter-spacing:.03em}
.toggle{
  flex:none;width:44px;height:25px;border-radius:var(--r-pill);position:relative;
  border:1px solid var(--line);background:rgba(168,216,232,.06);
  transition:all var(--dur-slow) var(--ease-soft);
}
.toggle::after{
  content:"";position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;
  background:var(--mist-300);transition:all var(--dur-slow) var(--ease-soft);
}
.toggle.is-on{background:linear-gradient(140deg,var(--tide-500),var(--tide-300));border-color:transparent}
.toggle.is-on::after{left:21px;background:var(--abyss-050)}
.field{
  width:100%;padding:11px 14px;border-radius:var(--r-sm);
  border:1px solid var(--line);background:rgba(210,236,250,.03);
  outline:none;font-size:13px;color:var(--mist-050);
  font-family:var(--font-mono);letter-spacing:.02em;
  transition:border-color var(--dur-slow) var(--ease-soft);
}
.field:focus{border-color:var(--line-strong);box-shadow:0 0 22px rgba(121,186,211,.1)}
.field::placeholder{color:var(--mist-400)}
.field-row{display:flex;gap:9px;margin-top:11px;align-items:center}
.btn-ghost{
  flex:none;padding:9px 16px;border-radius:var(--r-pill);font-size:11.5px;letter-spacing:.14em;
  border:1px solid var(--line);color:var(--mist-200);transition:all var(--dur-slow) var(--ease-soft);
}
.btn-ghost:hover{border-color:var(--line-strong);color:var(--tide-200)}
.btn-danger{color:#D98A8A;border-color:rgba(217,138,138,.24)}
.btn-danger:hover{color:#F0A8A8;border-color:rgba(217,138,138,.5);background:rgba(217,138,138,.07)}
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:11px;margin-top:4px}
.stat{
  padding:14px 8px;border-radius:var(--r-sm);text-align:center;
  border:1px solid var(--line-soft);background:rgba(210,236,250,.022);
}
.stat b{display:block;font-family:var(--font-serif);font-size:21px;color:var(--tide-100);line-height:1.2}
.stat span{font-size:9.5px;letter-spacing:.14em;color:var(--mist-400)}

/* ── 18. 抽屉 ──────────────────────────────────────────────── */
.drawer{position:fixed;inset:0;z-index:80}
.drawer__scrim{position:absolute;inset:0;background:rgba(1,3,6,.66);backdrop-filter:var(--blur-scrim);animation:view-in .5s var(--ease-water)}
.drawer__panel{
  position:absolute;top:0;right:0;bottom:0;width:min(84vw,330px);
  background:linear-gradient(190deg,rgba(10,19,32,.98),rgba(3,6,11,.99));
  border-left:1px solid var(--line);
  display:flex;flex-direction:column;
  padding:calc(var(--safe-t) + 30px) 22px calc(var(--safe-b) + 26px);
  animation:drawer-in .8s var(--ease-water) both;
}
@keyframes drawer-in{from{transform:translateX(100%)}to{transform:none}}
.drawer__brand{display:flex;flex-direction:column;gap:6px;margin-bottom:34px}
.drawer__nav{flex:1;display:flex;flex-direction:column;gap:2px}
.drawer__item{
  display:flex;align-items:center;gap:13px;padding:13px 12px;border-radius:var(--r-sm);
  font-size:14px;letter-spacing:.12em;color:var(--mist-200);text-align:left;
  transition:all var(--dur-med) var(--ease-soft);
}
.drawer__item svg{font-size:18px;color:var(--mist-400)}
.drawer__item:hover{background:rgba(168,216,232,.06);color:var(--tide-100)}
.drawer__item:hover svg{color:var(--tide-200)}
.drawer__item em{font-style:normal;margin-left:auto;font-size:10px;letter-spacing:.1em;color:var(--mist-500)}
.drawer__foot{border-top:1px solid var(--line-soft);padding-top:18px;display:flex;flex-direction:column;gap:12px}
.drawer__quote{font-family:var(--font-serif);font-size:12.5px;letter-spacing:.1em;color:var(--mist-400);margin:0;line-height:1.9}

/* ── 19. 耳语 toast ────────────────────────────────────────── */
.whisper{
  /* 放在顶部：底部在这几个视图里分别压着输入框、音量和底栏，顶部永远只是页眉 */
  position:fixed;left:50%;top:calc(var(--safe-t) + 88px);transform:translateX(-50%) translateY(-12px);
  z-index:90;padding:11px 20px;border-radius:var(--r-pill);
  border:1px solid var(--line-strong);
  background:rgba(6,11,20,.9);backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
  font-size:12px;letter-spacing:.1em;color:var(--mist-050);
  box-shadow:0 12px 40px rgba(0,0,0,.6),0 0 30px rgba(121,186,211,.1);
  opacity:0;pointer-events:none;transition:all var(--dur-slow) var(--ease-soft);
  max-width:min(80vw,400px);text-align:center;line-height:1.7;
}
.whisper.is-on{opacity:1;transform:translateX(-50%) translateY(0)}

/* ── 20. 自适应 ────────────────────────────────────────────── */
@media (min-width:640px){
  body{font-size:15.5px}
  .thread{padding:30px 26px 20px}
  .msg{max-width:min(78%,560px)}
  .scroll{padding:26px 28px 44px}
  .bar{padding:calc(var(--safe-t) + 16px) 22px 13px}
  .composer-wrap{padding:12px 22px calc(var(--safe-b) + 16px)}
  .threshold{padding-left:40px;padding-right:40px}
}
@media (min-width:1024px){
  .thread{padding:34px max(32px,calc(50vw - 380px)) 22px}
  .composer-wrap{padding:12px max(32px,calc(50vw - 380px)) calc(var(--safe-b) + 18px)}
  /* 宽屏时把内容收进一条居中的水柱里，不要拉满整屏 */
  .scroll{max-width:780px;margin-left:auto;margin-right:auto;width:100%}
  .seg{max-width:760px;margin-left:auto;margin-right:auto;width:100%}
  .spring__hints{max-width:560px;margin:0 auto;width:100%}
  .spring__dock{max-width:620px;margin:0 auto;width:100%;border-top-color:transparent}
}
@media (max-height:720px){
  /* 矮屏：门槛页再收一档，保证上下都有留白，且永远不需要滚动 */
  .threshold__sigil{width:clamp(86px,21vw,104px)}
  .threshold__line{font-size:clamp(21px,5.7vw,28px);margin-bottom:14px}
  .threshold__sub{font-size:12.5px;line-height:1.95}
  .sink-btn{width:clamp(96px,25vw,112px);height:clamp(96px,25vw,112px)}
  }
@media (max-height:620px){
  .core{width:128px}
  .spring__hints{padding-top:4px}
  .threshold__line{font-size:21px}
}

/* ── 洞悉弹窗：Yumo 开口之前，先浮上来的那一层 ───────────────
   刻意做得比回复本身更轻：它是一瞥，不是一段话。 */
.composer-wrap{position:relative}

.insight{
  position:absolute;left:14px;right:14px;bottom:calc(100% + 10px);
  display:flex;align-items:flex-start;gap:11px;
  padding:13px 17px;border-radius:var(--r-md);
  background:linear-gradient(158deg,rgba(13,24,37,.95),rgba(9,16,26,.91));
  border:1px solid var(--line-strong);
  box-shadow:var(--glow-soft),inset 0 1px 0 rgba(210,236,250,.05);
  backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
  opacity:0;transform:translateY(10px);
  transition:opacity 1.1s var(--ease-soft),transform 1.1s var(--ease-soft);
  pointer-events:none;
}
.insight[hidden]{display:none}
.insight.is-in{opacity:1;transform:translateY(0)}

.insight__mark{
  flex:0 0 auto;width:7px;height:7px;margin-top:7px;border-radius:50%;
  background:var(--tide-300);
  animation:insight-ripple 2.8s var(--ease-soft) infinite;
}
@keyframes insight-ripple{
  0%{box-shadow:0 0 0 0 rgba(121,186,211,.45);opacity:.92}
  70%{box-shadow:0 0 0 12px rgba(121,186,211,0);opacity:.44}
  100%{box-shadow:0 0 0 0 rgba(121,186,211,0);opacity:.92}
}

.insight__text{
  margin:0;font-family:var(--font-serif);
  font-size:13.5px;line-height:1.8;letter-spacing:.08em;
  color:var(--tide-100);
}

/* ── 账户：登录与云端同步 ─────────────────── */
.acct{margin-top:14px}
.acct .field{margin-bottom:9px}
.acct__sync{font-size:11px;letter-spacing:.05em;color:var(--mist-400);margin:0 0 2px;line-height:1.8}
.acct__msg{font-size:11.5px;letter-spacing:.04em;color:var(--mist-400);margin:11px 0 0;min-height:1.2em;line-height:1.7}
.acct__msg.is-ok{color:var(--tide-200)}
.acct__del{width:100%;margin-top:11px}

/* ── 赞助：一个按钮 → 弹窗选方式 → 出码 ──────────────────
   文案刻意写死「没有会员、没有解锁」——赞助是赠与，不是交易。 */
.pay-intro{
  margin:0 0 16px;font-size:12.5px;line-height:2;letter-spacing:.05em;color:var(--mist-200);
}
.pay-btn{justify-content:center}
.pay-tip{margin:13px 0 0;font-size:11px;letter-spacing:.06em;color:var(--mist-400);line-height:1.9}

.pay-chooser{
  width:min(86vw,320px);padding:26px 24px;border-radius:var(--r-md);
  background:var(--glass);border:1px solid var(--line-strong);
  box-shadow:var(--shadow-modal),var(--highlight-inset);
  backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
  display:flex;flex-direction:column;gap:6px;
}
.pay-chooser__title{font-family:var(--font-serif);font-size:17px;letter-spacing:.16em;text-indent:.16em;color:var(--mist-050);margin:0}
.pay-chooser__sub{font-size:11.5px;letter-spacing:.06em;color:var(--mist-400);margin:0 0 18px;line-height:1.9}
.pay-chooser__opts{display:flex;gap:12px}
.pay-chooser__opt{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:18px 10px;border-radius:var(--r-sm);
  border:1px solid var(--line);background:rgba(210,236,250,.03);
  color:var(--mist-100);font-size:12px;letter-spacing:.1em;
  cursor:pointer;transition:border-color var(--dur-med) var(--ease-soft),box-shadow var(--dur-med) var(--ease-soft),transform var(--dur-med) var(--ease-soft);
}
.pay-chooser__opt:hover{border-color:var(--tide-400);box-shadow:0 12px 34px rgba(0,0,0,.4);transform:translateY(-2px)}
.pay-chooser__dot{
  width:34px;height:34px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-serif);font-size:15px;
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  color:var(--abyss-050);
}

.pay-zoom{
  position:fixed;inset:0;z-index:120;
  display:flex;align-items:center;justify-content:center;padding:26px;
  background:rgba(2,5,9,.93);
  backdrop-filter:var(--blur-sheet);-webkit-backdrop-filter:var(--blur-sheet);
  opacity:0;transition:opacity var(--dur-med) var(--ease-soft);cursor:zoom-out;
}
.pay-zoom.is-in{opacity:1}
.pay-zoom__inner{margin:0;display:flex;flex-direction:column;align-items:center;gap:14px}
.pay-zoom__inner img{
  width:min(78vw,340px);aspect-ratio:1;object-fit:contain;
  background:#fff;padding:14px;border-radius:var(--r-md);
}
.pay-zoom__inner figcaption{font-size:11.5px;letter-spacing:.1em;color:var(--mist-300)}

/* 尊重「减少动态效果」偏好 */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  #grain{animation:none}
}

/* ── 来自 Yumo 的信 ─────────────────────────── */
.letter-btn{
  display:inline-flex;align-items:center;gap:7px;
  padding:9px 14px;border-radius:var(--r-pill);
  border:1px solid var(--line);background:rgba(210,236,250,.03);
  color:var(--mist-200);font-size:11.5px;letter-spacing:.12em;
  cursor:pointer;position:relative;
  transition:border-color var(--dur-med) var(--ease-soft),color var(--dur-med) var(--ease-soft),box-shadow var(--dur-med) var(--ease-soft);
}
.letter-btn svg{width:15px;height:15px}
.letter-btn:hover{border-color:var(--tide-400);color:var(--tide-100);box-shadow:0 8px 26px rgba(0,0,0,.35)}
.letter-btn i{
  position:absolute;top:6px;right:8px;width:6px;height:6px;border-radius:50%;
  background:var(--tide-200);box-shadow:0 0 10px rgba(121,186,211,.8);
}

.letter-sheet{
  position:fixed;inset:0;z-index:130;
  display:flex;align-items:center;justify-content:center;padding:22px 16px;
  background:rgba(2,5,9,.72);
  backdrop-filter:var(--blur-modal) saturate(1.1);-webkit-backdrop-filter:var(--blur-modal) saturate(1.1);
  opacity:0;transition:opacity var(--dur-fast) var(--ease-soft);
  overflow-y:auto;
}
.letter-sheet.is-in{opacity:1}
.letter-paper{
  position:relative;width:min(94vw,470px);max-height:88vh;overflow-y:auto;
  box-sizing:border-box;
  padding:30px 26px 26px;border-radius:var(--r-md);
  background:linear-gradient(168deg,rgba(16,26,38,.97),rgba(8,14,22,.99));
  border:1px solid var(--line-strong);
  box-shadow:var(--shadow-modal);
  opacity:0;
  /* 从页面上方落下来 */
  transform:translateY(-92vh);
  transition:
    transform .95s cubic-bezier(.22,1,.36,1),
    opacity var(--dur-med) var(--ease-soft),
    width .55s var(--ease-soft),
    height .55s var(--ease-soft),
    border-radius .55s var(--ease-soft),
    max-height .55s var(--ease-soft);
}
.letter-sheet.is-in .letter-paper{transform:translateY(0);opacity:1}
/* 手机/竖屏：落定之后再缓缓放大到占满整屏 */
@media (max-width:760px),(orientation:portrait){
  .letter-sheet.is-open{padding:0;background:rgba(2,5,9,.96)}
  .letter-sheet.is-open .letter-paper{
    width:100vw;height:100dvh;max-height:none;border-radius:0;
    padding:calc(var(--safe-t,0px) + 28px) 22px 30px;
  }
}
.letter-close{
  position:absolute;top:10px;right:14px;width:30px;height:30px;
  border-radius:50%;border:1px solid var(--line);background:none;
  color:var(--mist-400);font-size:17px;line-height:1;cursor:pointer;
  transition:color var(--dur-fast),border-color var(--dur-fast);
}
.letter-close:hover{color:var(--mist-050);border-color:var(--line-strong)}
.letter-eyebrow{
  margin:0 0 18px;font-size:10.5px;letter-spacing:.2em;color:var(--mist-400);
}
.letter-body{font-family:var(--font-serif);font-size:14.5px;line-height:2.15;color:var(--mist-050);letter-spacing:.02em}
.letter-body .letter-loading{font-size:13px;color:var(--mist-400);animation:pulse-soft 1.8s ease-in-out infinite}
.letter-body .letter-err{font-size:12.5px;color:var(--mist-300);line-height:1.9}
.letter-body .letter-greeting{margin:0 0 14px;font-size:15px;color:var(--mist-050)}
.letter-body p{margin:0 0 14px}
.letter-body p:last-child{margin-bottom:0}
.letter-quote{
  margin:20px 0 0;padding:14px 16px;border-left:2px solid var(--tide-300);
  background:rgba(210,236,250,.045);border-radius:0 var(--r-sm) var(--r-sm) 0;
}
.letter-quote__text{margin:0;font-family:var(--font-serif);font-size:13px;line-height:2;color:var(--mist-100)}
.letter-quote__src{margin:8px 0 0;font-size:10.5px;letter-spacing:.08em;color:var(--mist-400)}
.letter-reply{
  display:block;width:100%;margin-top:22px;padding:12px;
  border-radius:var(--r-pill);border:1px solid var(--tide-300);
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  color:var(--abyss-050);font-size:13px;letter-spacing:.22em;text-indent:.22em;
  cursor:pointer;transition:box-shadow var(--dur-med) var(--ease-soft),transform var(--dur-med) var(--ease-soft);
}
.letter-reply:hover{box-shadow:0 12px 36px rgba(121,186,211,.35);transform:translateY(-1px)}
@keyframes pulse-soft{0%,100%{opacity:.45}50%{opacity:.9}}

/* ── 赞助双按钮 / 联系 YUMO ─────────────────── */
.pay-actions{margin-top:4px}
.pay-actions .btn-ghost{
  flex:1;padding:12px 10px;font-size:12.5px;letter-spacing:.14em;text-indent:.14em;
}
.contact-mail{
  display:block;width:100%;margin:4px 0 0;padding:13px 12px;
  border-radius:var(--r-sm);border:1px solid var(--line-strong);
  background:rgba(210,236,250,.05);
  font-family:var(--font-mono);font-size:13.5px;letter-spacing:.02em;
  color:var(--tide-100);cursor:pointer;text-align:center;
  transition:border-color var(--dur-med) var(--ease-soft),background var(--dur-med) var(--ease-soft);
}
.contact-mail:hover{border-color:var(--tide-400);background:rgba(210,236,250,.09)}
.contact-mail.is-ok{border-color:var(--tide-300);color:var(--tide-050)}
.contact-hint{margin:9px 0 0;font-size:10.5px;letter-spacing:.14em;color:var(--mist-400);text-align:center}

/* ── 进门页版权小字 ─────────────────────────── */
.threshold__copy{
  margin:26px 0 0;font-size:10.5px;letter-spacing:.14em;
  color:var(--mist-400);opacity:.72;text-align:center;
}


/* ── 月下音乐会 ─────────────────────────────── */
.music-list{display:flex;flex-direction:column;gap:9px}
.music-row{
  position:relative;display:flex;align-items:center;gap:12px;width:100%;
  padding:10px 12px 12px;border-radius:var(--r-sm);
  border:1px solid var(--line-soft);background:rgba(210,236,250,.025);
  color:var(--mist-100);text-align:left;cursor:pointer;overflow:hidden;
  transition:border-color var(--dur-med) var(--ease-soft),background var(--dur-med) var(--ease-soft);
}
.music-row:hover{border-color:var(--line-strong);background:rgba(210,236,250,.05)}
.music-row.is-on{border-color:var(--line-strong);background:rgba(210,236,250,.06)}
.music-row__cover{
  position:relative;flex:none;width:52px;height:52px;border-radius:var(--r-xs);
  overflow:hidden;background:var(--abyss-200);
}
.music-row__cover img{width:100%;height:100%;object-fit:cover;display:block;
  filter:saturate(.85) brightness(.92);transition:filter var(--dur-med) var(--ease-soft)}
.music-row.is-on .music-row__cover img{filter:none}
.music-row__txt{flex:1;min-width:0}
.music-row__txt b{display:block;text-decoration:none;font-weight:400;font-size:13px;letter-spacing:.05em;color:var(--mist-050);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-row__txt span{display:block;text-decoration:none;font-size:10.5px;letter-spacing:.04em;color:var(--mist-400);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.music-credit{margin:14px 0 0;font-size:10px;letter-spacing:.05em;line-height:1.8;color:var(--mist-400);opacity:.8}

/* ── 信件配图 ── */
.letter-fig{margin:0 0 16px}
.letter-fig img{
  width:100%;max-height:240px;object-fit:contain;display:block;
  border-radius:var(--r-xs);background:rgba(3,6,11,.55);
  border:1px solid var(--line-soft);
}

/* ── 播放条（流媒体样式）────────────────────── */
.player-bar{
  display:flex;align-items:center;gap:13px;
  padding:13px 14px;margin-bottom:12px;
  border-radius:var(--r-sm);
  border:1px solid var(--line-strong);
  background:linear-gradient(150deg,rgba(210,236,250,.07),rgba(210,236,250,.02));
  box-shadow:var(--highlight-inset);
}
.player-bar__cover{
  flex:none;width:58px;height:58px;border-radius:var(--r-xs);
  background:var(--abyss-200) center/cover no-repeat;
  border:1px solid var(--line-soft);
  position:relative;
}
.player-bar.is-playing .player-bar__cover::after{
  content:"";position:absolute;inset:0;border-radius:var(--r-xs);
  box-shadow:inset 0 0 0 1px rgba(168,216,232,.28);
}
.player-bar__mid{flex:1;min-width:0}
.player-bar__mid b{
  display:block;text-decoration:none;font-weight:400;font-size:12.5px;
  letter-spacing:.03em;color:var(--mist-050);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.player-bar__mid > span{
  display:block;text-decoration:none;font-size:10.5px;letter-spacing:.04em;
  color:var(--mist-400);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.player-bar__track{
  height:3px;border-radius:2px;background:rgba(210,236,250,.10);
  margin-top:9px;cursor:pointer;
}
.player-bar__track i{
  display:block;height:100%;width:0;border-radius:2px;
  background:linear-gradient(90deg,var(--tide-400),var(--tide-200));
  transition:width .25s linear;
}
.player-bar__times{
  display:flex;justify-content:space-between;margin-top:4px;
  font-family:var(--font-mono);font-size:9.5px;color:var(--mist-400);
}
.player-bar__ctrl{flex:none;display:flex;align-items:center;gap:4px}
.player-bar__btn{
  width:34px;height:34px;border-radius:50%;border:none;background:none;
  color:var(--mist-200);cursor:pointer;display:grid;place-items:center;
  transition:color var(--dur-fast) var(--ease-soft),background var(--dur-fast) var(--ease-soft);
}
.player-bar__btn svg{width:19px;height:19px}
.player-bar__btn:hover{color:var(--mist-000);background:rgba(210,236,250,.07)}
.player-bar__btn--main{
  width:44px;height:44px;margin:0 2px;
  border:1px solid var(--line-strong);
  background:radial-gradient(circle at 34% 30%,rgba(168,216,232,.20),rgba(210,236,250,.04));
  color:var(--tide-050);
}
.player-bar__btn--main svg{width:21px;height:21px}
.player-bar__btn--main:hover{border-color:var(--tide-400);box-shadow:0 6px 22px rgba(121,186,211,.22)}

/* ── 更多乐曲 ── */
.music-more{
  margin:13px 0 0;text-align:center;
  font-size:10.5px;letter-spacing:.22em;text-indent:.22em;color:var(--mist-400);
}

/* ── Yumo 形象 · 气泡水母 ───────────────────── */
.threshold__sigil{position:relative}
.threshold__jelly{
  position:absolute;left:50%;top:44.17%;width:41%;
  transform:translate(-50%,-50%);
  filter:drop-shadow(0 3px 18px rgba(240,250,255,.34));
  animation:jelly-drift 7s var(--ease-soft) infinite;
  pointer-events:none;
}
.core__jelly{
  position:absolute;left:50%;top:46%;width:54%;
  transform:translate(-50%,-50%);
  filter:drop-shadow(0 10px 30px rgba(240,250,255,.26));
  animation:jelly-drift 8.5s var(--ease-soft) infinite;
  pointer-events:none;
}
@keyframes jelly-drift{
  0%,100%{transform:translate(-50%,-50.9%)}
  50%{transform:translate(-50%,-49.1%)}
}

/* ── 进入之前的账户门 ───────────────────────── */
.gate{
  position:fixed;inset:0;z-index:125;
  display:flex;align-items:center;justify-content:center;padding:20px 16px;
  background:rgba(2,5,9,.82);backdrop-filter:var(--blur-modal);-webkit-backdrop-filter:var(--blur-modal);
  opacity:0;transition:opacity var(--dur-med) var(--ease-soft);
}
.gate.is-in{opacity:1}
.gate__card{
  width:min(92vw,400px);padding:30px 26px 24px;border-radius:var(--r-md);
  background:linear-gradient(168deg,rgba(16,26,38,.96),rgba(8,14,22,.98));
  border:1px solid var(--line-strong);box-shadow:var(--shadow-modal);
  transform:translateY(14px);transition:transform var(--dur-slow) var(--ease-soft);
}
.gate.is-in .gate__card{transform:none}
.gate__title{
  margin:0 0 8px;font-family:var(--font-serif);font-size:19px;
  letter-spacing:.14em;color:var(--mist-050);
}
.gate__sub{margin:0 0 20px;font-size:11.5px;line-height:1.9;letter-spacing:.04em;color:var(--mist-400)}
.gate__field{display:block;margin-bottom:14px}
.gate__field span{
  display:block;font-size:10px;letter-spacing:.22em;color:var(--mist-400);margin-bottom:6px;
}
.gate__field input{
  width:100%;padding:11px 12px;border-radius:var(--r-xs);
  border:1px solid var(--line);background:rgba(210,236,250,.04);
  color:var(--mist-050);font-size:14px;letter-spacing:.02em;
  transition:border-color var(--dur-fast) var(--ease-soft);
}
.gate__field input:focus{outline:none;border-color:var(--tide-400)}
.gate__field input::placeholder{color:var(--mist-400);opacity:.55}
.gate__err{
  margin:0 0 12px;font-size:11px;line-height:1.7;letter-spacing:.03em;
  color:#e8b4a8;
}
.gate__go{
  display:block;width:100%;margin-top:6px;padding:13px;
  border-radius:var(--r-pill);border:1px solid var(--tide-300);
  background:linear-gradient(140deg,var(--tide-100),var(--tide-300));
  color:var(--abyss-050);font-size:13.5px;letter-spacing:.3em;text-indent:.3em;
  cursor:pointer;transition:box-shadow var(--dur-med) var(--ease-soft),transform var(--dur-med) var(--ease-soft);
}
.gate__go:hover{box-shadow:0 12px 36px rgba(121,186,211,.32);transform:translateY(-1px)}
.gate__go:disabled{opacity:.55;cursor:wait;transform:none}
.gate__swap{
  display:block;width:100%;margin-top:14px;padding:6px;border:none;background:none;
  font-size:11px;letter-spacing:.08em;color:var(--mist-400);cursor:pointer;
  transition:color var(--dur-fast) var(--ease-soft);
}
.gate__swap:hover{color:var(--tide-200)}

/* ── 信件展开：信纸落定后逐行浮起 ───────────── */
.letter-paper.reveal .reveal-item{
  animation:letter-line 1.15s var(--ease-soft) both;
  animation-delay:calc(.5s + var(--i, 0) * .22s);
}
@keyframes letter-line{
  from{opacity:0;transform:translateY(12px);filter:blur(5px)}
  to{opacity:1;transform:none;filter:blur(0)}
}

/* ── 关于 YUMO ──────────────────────────────── */
.about-text{
  margin:0 0 13px;font-size:12.5px;line-height:2.15;letter-spacing:.05em;
  color:var(--mist-200);
}
.about-text b{font-weight:400;color:var(--tide-100)}
.about-ver{
  margin:16px 0 0;padding-top:13px;border-top:1px solid var(--line-soft);
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;
  color:var(--mist-300);text-align:center;
}
.about-ver span{display:block;margin-top:5px;font-size:9.5px;letter-spacing:.14em;color:var(--mist-400)}
