/* 笺 · Heart's Corner — 网站样式（严格 1:1 对齐设计稿） */
/* 字体自托管：原版 Caveat / Cormorant Garamond / Nunito 放本地，国内秒回、不依赖 Google、不白屏。中文 Noto Sans SC 走系统字体兜底（与 Google 版行为一致）。 */
@font-face{font-family:'Caveat';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/caveat-latin-400-normal.woff2) format('woff2');}
@font-face{font-family:'Caveat';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/caveat-latin-600-normal.woff2) format('woff2');}
@font-face{font-family:'Caveat';font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/caveat-latin-700-normal.woff2) format('woff2');}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/cormorant-garamond-latin-500-normal.woff2) format('woff2');}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/cormorant-garamond-latin-600-normal.woff2) format('woff2');}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:500;font-display:swap;src:url(/fonts/cormorant-garamond-latin-500-italic.woff2) format('woff2');}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:600;font-display:swap;src:url(/fonts/cormorant-garamond-latin-600-italic.woff2) format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/nunito-latin-600-normal.woff2) format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/nunito-latin-700-normal.woff2) format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/nunito-latin-800-normal.woff2) format('woff2');}
@font-face{font-family:'Nunito';font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/nunito-latin-900-normal.woff2) format('woff2');}
:root{
  --cream:#F7F3EC;
  --surface:#FFFFFF;
  --surface-soft:#FBF8F3;
  --ink:#33303F;
  --ink-2:#6B6678;
  --ink-3:#A29CAE;
  --indigo:#7A6CC4;
  --indigo-deep:#5E4FB0;
  --indigo-soft:#EDE9FB;
  --peach:#F0A78E;
  --peach-soft:#FCE7DE;
  --sage:#9FC0A4;
  --sage-soft:#E6F1E7;
  --gold:#EBC06A;
  --line:#EFEAF2;
  --shadow:0 18px 40px -18px rgba(70,54,120,.28);
  --shadow-sm:0 8px 22px -12px rgba(70,54,120,.22);
  --r-lg:30px;
  --r-md:22px;
  --r-sm:16px;
  --font:"Noto Sans SC","Nunito",-apple-system,"PingFang SC","Helvetica Neue",sans-serif;
  --font-round:"Nunito","Noto Sans SC",-apple-system,"PingFang SC",sans-serif;
  --font-serif:"Cormorant Garamond",Georgia,"Songti SC",serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  font-family:var(--font);
  color:var(--ink);
  background:var(--surface-soft);
  min-height:100vh;
  display:flex;
  justify-content:center;
  padding:0; margin:0;
}
/* ── 外壳：全屏沉浸式，无论桌面还是手机 ── */
.phone{
  width:min(430px,100%);
  margin:0 auto;
  position:relative;
  background:var(--surface-soft);
  border:none !important; outline:none !important;
  box-shadow:none !important;
  overflow:hidden;
  border-radius:0 !important;
}
@media (min-width:901px){
  .phone{ max-width:420px; min-height:100vh; min-height:100dvh; }
}
/* 手机端 / 预览嵌入 iframe：全屏沉浸式，100% 宽度铺满（断点放宽到 900，覆盖 CloudStudio 预览视口） */
@media (max-width:900px){
  html,body{overflow-x:hidden}
  body{justify-content:flex-start}
  .phone{ width:100%; max-width:none; margin:0; }
  /* 边框 0px（手机满屏铺满），内容留 18px 呼吸；顶部含安全区不吞字、不出现分割线 */
  body .content-inner{padding:40px 18px calc(96px + env(safe-area-inset-bottom));padding:max(env(safe-area-inset-top), 40px) 18px calc(96px + env(safe-area-inset-bottom))}
  .sub .sub-scroll{padding:0 18px calc(24px + env(safe-area-inset-bottom))}
}
.screen{
  width:100%;
  height:100vh;
  height:100dvh;
  overflow:hidden;
  position:relative;
  background:var(--surface-soft);
  display:flex;
  flex-direction:column;
}
.notch{display:none}
.statusbar{display:none}
.content{flex:1;overflow-y:auto;overflow-x:hidden}
.content::-webkit-scrollbar{width:0}
.content-inner{padding:0 14px calc(96px + env(safe-area-inset-bottom));}
/* ── appbar ── */
.appbar{display:flex;align-items:center;justify-content:space-between;padding:12px 0 10px;position:relative}
.appbar .lead{display:flex;align-items:center;gap:9px;position:relative;border-radius:13px;cursor:pointer}
/* 连点刷新提示：呼吸光晕，让用户隐约感受到左上角这块区域是可交互的 */
.appbar .lead::after{
  content:"";position:absolute;inset:-5px;border-radius:16px;
  background:radial-gradient(circle, rgba(122,108,196,.14), transparent 70%);
  opacity:0;pointer-events:none;animation:hc-lead-breathe 3.2s ease-in-out infinite;
}
@keyframes hc-lead-breathe{
  0%,62%,100%{opacity:0;transform:scale(.96)}
  30%{opacity:1;transform:scale(1)}
}
.appbar .logo{width:34px;height:34px;border-radius:11px;background:linear-gradient(145deg,var(--indigo),#9C8BE0);display:flex;align-items:center;justify-content:center;flex:0 0 34px}
.appbar .title{display:flex;flex-direction:column;line-height:1}
.appbar .title .t-cn{font-family:var(--font-serif);font-weight:600;font-size:22px;letter-spacing:1px}
.appbar .title .t-en{font-family:var(--font-serif);font-style:italic;font-size:10px;color:var(--ink-3);letter-spacing:.5px;margin-top:2px}
.icon-btn{width:38px;height:38px;border-radius:13px;background:var(--surface);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;position:relative;cursor:pointer;flex:0 0 38px}
.icon-btn.ghost{background:transparent;border:none;box-shadow:none}
/* ── greeting ── */
.greeting{font-size:13px;color:var(--ink-2);font-weight:600;margin-top:2px}
.greeting .uname{font-family:'Caveat',cursive;font-weight:700;font-size:40px;color:var(--indigo-deep);letter-spacing:.5px;line-height:1;margin-left:4px}
.headline-serif{font-family:var(--font-serif);font-weight:600;font-size:27px;line-height:1.2;margin:6px 0 2px;letter-spacing:.5px;color:var(--ink)}
.sec-title{display:flex;align-items:baseline;gap:9px;margin:22px 2px 12px}
.sec-title .cn{font-family:var(--font-round);font-weight:900;font-size:16px}
.sec-title .en{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink-3)}
.list-title{display:flex;align-items:center;justify-content:space-between;margin:24px 2px 12px}
.list-title h4{font-family:var(--font-round);font-weight:900;font-size:16px;margin:0}
.list-title a{font-size:12px;color:var(--ink-3);font-weight:700;text-decoration:none}
/* ── widget ── */
.widget{border-radius:26px;padding:20px 20px 18px;position:relative;overflow:hidden;box-shadow:var(--shadow);color:#fff}
.widget .w-glow{position:absolute;right:-40px;top:-50px;width:150px;height:150px;border-radius:50%;background:rgba(255,255,255,.28)}
.widget .w-top{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:2}
.widget .w-label{display:flex;align-items:center;gap:8px;font-weight:800;font-size:13px}
.widget .w-label .em{font-size:17px}
.widget .w-en{font-family:var(--font-round);font-weight:800;font-size:12px;opacity:.92}
.widget .w-big{font-family:var(--font-serif);font-weight:600;font-size:52px;line-height:1;margin-top:14px;position:relative;z-index:2;letter-spacing:-1px}
.widget .w-big small{font-family:var(--font);font-size:15px;font-weight:700;margin-left:6px;letter-spacing:0}
.widget .w-big .serif-it{font-family:var(--font-serif);font-style:italic;font-size:18px;font-weight:600}
.widget .w-foot{display:flex;align-items:center;justify-content:space-between;margin-top:14px;position:relative;z-index:2;font-size:12px;font-weight:700}
.widget .dots{display:flex;gap:5px;align-items:center}
.widget .dots .d{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.4)}
.widget .dots .d.on{background:#fff}
.w-birthday{background:linear-gradient(150deg,#F6C177 0%,#F0A78E 55%,#E88FA6 100%)}
.w-period{background:linear-gradient(150deg,#E8A7C7 0%,#C79BE0 100%)}
.w-anniv{background:linear-gradient(150deg,#8B7BD6 0%,#6B8FD6 100%)}
/* ── mini-anniv ── */
.mini-anniv{display:flex;gap:12px}
.mini-anniv .ma{flex:1;background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:15px 14px;box-shadow:var(--shadow-sm)}
.mini-anniv .mi{font-size:20px}
.mini-anniv .mt{font-weight:800;font-size:12.5px;margin-top:8px}
.mini-anniv .mn{font-family:var(--font-serif);font-weight:600;font-size:22px;color:var(--indigo-deep);margin-top:2px}
.mini-anniv .ml{font-size:10.5px;color:var(--ink-3);font-weight:700;margin-top:1px}
.add-w{margin-top:12px;padding:15px;border-radius:18px;border:1.5px dashed var(--ink-3);text-align:center;font-weight:800;font-size:13px;color:var(--ink-2);display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;opacity:.85}
/* ── card 基类 ── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow)}
/* ── 日记 feat ── */
.card.diary-feat{padding:20px 20px 18px;margin-top:14px;position:relative;overflow:hidden;cursor:pointer}
.diary-feat .glow{position:absolute;right:-40px;top:-40px;width:140px;height:140px;border-radius:50%;background:radial-gradient(circle,var(--indigo-soft),transparent 70%)}
.df-top{display:flex;align-items:flex-start;justify-content:space-between;position:relative;z-index:2}
.df-date{font-family:var(--font-round);font-weight:900;font-size:15px;color:var(--ink)}
.df-date span{display:block;font-size:11px;color:var(--ink-3);font-weight:700;margin-top:1px}
.badge-ai{display:inline-flex;align-items:center;gap:6px;background:var(--indigo);color:#fff;font-weight:800;font-size:11px;padding:6px 11px;border-radius:999px;box-shadow:0 8px 16px -6px rgba(122,108,196,.7);white-space:nowrap}
.mood-tag{display:inline-flex;align-items:center;gap:7px;margin-top:14px;font-weight:800;font-size:13px;color:var(--indigo-deep);position:relative;z-index:2}
.diary-body{font-size:14px;line-height:1.85;color:#4A4557;margin-top:12px;font-weight:400;position:relative;z-index:2}
.df-foot{display:flex;align-items:center;justify-content:space-between;margin-top:16px;padding-top:14px;border-top:1px dashed var(--line)}
.read-more{font-weight:800;font-size:13px;color:var(--indigo-deep);display:flex;align-items:center;gap:4px}
/* ── 情侣卡 ── */
.couple-card{
  margin-top:16px;padding:28px 20px 22px;
  background:linear-gradient(160deg,#F8CDD8,#F5D5E2 40%,#FCE4E8);
  border-radius:20px;
  position:relative;overflow:hidden;text-align:center;
}
.cc-avatars{display:flex;justify-content:center;align-items:center;gap:0;position:relative;height:64px;margin-bottom:12px}
.cc-av-wrap{position:relative;z-index:2;width:58px;height:58px}
.cc-left{margin-right:-10px}
.cc-right{margin-left:-10px}
.cc-av{
  width:58px;height:58px;border-radius:50%;
  background:var(--surface);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-round);font-weight:900;font-size:25px;color:var(--ink);
  box-shadow:0 4px 14px rgba(180,120,140,.22);overflow:hidden;
  background-size:cover;background-position:center;background-repeat:no-repeat;
}
.cc-names{
  font-family:var(--font-round);font-weight:900;font-size:17px;color:#B86A7A;
  letter-spacing:.8px;position:relative;z-index:2;
}
.cc-watermark{
  position:absolute;right:-12px;top:-8px;width:80px;height:80px;opacity:.45;
}
.cc-enter{
  position:relative;z-index:2;margin-top:10px;font-size:12px;letter-spacing:2px;
  color:#fff;opacity:.82;font-weight:600;cursor:pointer;
  transition:opacity .2s,letter-spacing .2s;
}
.couple-card:hover .cc-enter{opacity:1;letter-spacing:3px;}
/* ── 日记列表 mini ── */
.card.mini{display:flex;gap:13px;padding:15px 16px;margin-bottom:11px;align-items:flex-start;cursor:pointer}
.mini .mood-dot{width:11px;height:11px;border-radius:50%;flex:0 0 11px;margin-top:5px}
.mini .mc-body{flex:1;min-width:0}
.mini .mc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.mini .mc-date{font-weight:800;font-size:13px}
.mini .mc-mood{font-size:11px;font-weight:700;color:var(--ink-3)}
.mini .mc-text{font-size:12.5px;line-height:1.55;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* ── 回顾 ── */
.rev-sum{padding:20px;margin-top:8px;background:linear-gradient(160deg,#FCEBE4 0%,#F3EFFC 100%);border-radius:var(--r-lg);border:1px solid var(--line)}
.rev-sum .rs-top{display:flex;align-items:center;gap:8px;font-weight:800;font-size:13px;color:var(--indigo-deep);margin-bottom:10px}
.rev-sum p{font-size:13.5px;line-height:1.85;color:#4A4557;margin:0}
.stat-row{display:flex;gap:11px;margin-top:16px}
.card.stat{flex:1;padding:15px 12px;text-align:center}
.stat .n{font-family:var(--font-serif);font-weight:600;font-size:26px;color:var(--indigo-deep)}
.stat .l{font-size:11px;color:var(--ink-3);font-weight:700;margin-top:3px}
.card.cal{padding:18px 16px;margin-top:16px}
.cal h4{font-family:var(--font-round);font-weight:900;font-size:15px;margin:0 0 14px;display:flex;align-items:center;justify-content:space-between}
.cal h4 span{font-size:11px;color:var(--ink-3);font-weight:700}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:7px}
.cal-grid .wd{font-size:9px;font-weight:800;color:var(--ink-3);text-align:center;margin-bottom:2px}
.cal-grid .cell{aspect-ratio:1;border-radius:9px;background:var(--surface-soft);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:var(--ink-3);position:relative}
.cal-grid .cell .ce{position:absolute;bottom:0;right:1px;font-size:8px;line-height:1}
.legend{display:flex;align-items:center;gap:6px;font-size:10px;color:var(--ink-3);font-weight:700;margin-top:10px;justify-content:center;flex-wrap:wrap}
.legend .lg{width:13px;height:13px;border-radius:4px}
.card.words{padding:18px 16px;margin-top:16px}
.words h4{font-family:var(--font-round);font-weight:900;font-size:15px;margin:0 0 12px}
.word-cloud{display:flex;flex-wrap:wrap;gap:8px}
.word-cloud .w{font-weight:800;border-radius:999px;padding:6px 13px;line-height:1.2}
/* ── 我的 / profile ── */
.prof-hero{padding:22px 20px;margin-top:8px;background:linear-gradient(160deg,var(--indigo) 0%,#9585DC 100%);border-radius:var(--r-lg);color:#fff;box-shadow:0 20px 40px -18px rgba(122,108,196,.7);display:flex;align-items:center;gap:15px;cursor:pointer}
.prof-hero .pav{width:60px;height:60px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;font-family:var(--font-serif);font-weight:600;font-size:26px;flex:0 0 60px}
.prof-hero .pn{font-family:var(--font-round);font-weight:900;font-size:19px}
.prof-hero .pd{font-size:12.5px;opacity:.9;margin-top:3px;font-weight:600}
.ai-card{padding:15px 16px;margin-top:14px;display:flex;align-items:center;gap:13px;cursor:pointer}
.ai-card .aa{width:44px;height:44px;border-radius:50%;background:linear-gradient(145deg,var(--indigo),#9C8BE0);display:flex;align-items:center;justify-content:center;flex:0 0 44px;position:relative}
.ai-card .aa .st{position:absolute;right:-2px;bottom:-2px;width:16px;height:16px;border-radius:50%;background:var(--sage);border:2.5px solid var(--surface)}
.ai-card .ac{flex:1;min-width:0}
.ai-card .ac .t{font-weight:800;font-size:14px;display:flex;align-items:center;gap:7px}
.ai-card .ac .t .serif-it{font-family:var(--font-serif);font-style:italic;font-weight:600;font-size:12px;color:var(--ink-3)}
.ai-card .ac .d{font-size:11.5px;color:var(--ink-3);font-weight:700;margin-top:2px;display:flex;align-items:center;gap:6px}
.ai-card .ac .d .g{width:7px;height:7px;border-radius:50%;background:var(--sage)}
.chev{width:14px;height:14px;flex:0 0 14px}
.grp-lbl{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink-3);margin:20px 4px 9px;letter-spacing:.5px}
.set-list{overflow:hidden}
.set-row{display:flex;align-items:center;gap:14px;padding:15px 16px;border-bottom:1px solid var(--line);cursor:pointer}
.set-row:last-child{border-bottom:none}
.set-row .si{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:0 0 38px}
.set-row .sc{flex:1;min-width:0}
.set-row .sc .t{font-weight:800;font-size:13.5px}
.set-row .sc .d{font-size:11.5px;color:var(--ink-3);font-weight:600;margin-top:2px}
.set-row .val{font-size:12.5px;font-weight:800;color:var(--indigo-deep);display:flex;align-items:center;gap:5px}
/* ── tabbar ── */
.tabbar-wrap{flex:0 0 auto;padding:12px 18px calc(22px + env(safe-area-inset-bottom));background:linear-gradient(to top,var(--surface-soft) 55%,rgba(251,248,243,0));position:relative;z-index:35}
.tabbar{height:62px;background:var(--surface);border:1px solid var(--line);border-radius:34px;display:flex;padding:5px;box-shadow:0 16px 32px -14px rgba(70,54,120,.4)}
.tab{flex:1;border-radius:26px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--ink-3);cursor:pointer;transition:.2s}
.tab svg path{stroke:var(--ink-3);transition:.2s}
.tab .lb{font-size:9px;font-weight:800;letter-spacing:.6px;text-transform:uppercase}
.tab.active{background:var(--indigo);color:#fff;box-shadow:0 10px 18px -8px rgba(122,108,196,.8)}
.tab.active svg path{stroke:#fff}
/* ── 二级页 ── */
.sub{position:absolute;inset:0;background:var(--surface-soft);z-index:60;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .28s cubic-bezier(.22,.61,.36,1);will-change:transform}
.sub.open{transform:translateX(0)}
.sub:not(.open){pointer-events:none;visibility:hidden}
.sub.open{visibility:visible}
.sub .sub-scroll{flex:1;min-height:0;overflow-y:auto;padding:0 14px calc(24px + env(safe-area-inset-bottom))}
.sub .sub-scroll::-webkit-scrollbar{width:0}
.detail-head{display:flex;align-items:center;gap:12px;padding:calc(6px + env(safe-area-inset-top)) 0 4px}
.exit-btn{background:none;border:none;color:var(--ink-2);font-family:var(--font-round);font-weight:800;font-size:15px;cursor:pointer;padding:8px 6px;margin-right:2px}
.logout-row{margin-top:14px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:15px;text-align:center;font-weight:800;color:var(--peach);cursor:pointer;font-family:var(--font-round);font-size:14px;box-shadow:var(--shadow-sm)}
.logout-row.danger{background:#C0453A;color:#fff;border-color:#C0453A}
/* ── AI 操作日志 ── */
.act-log-wrap{padding:4px 0}
.act-item{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border-bottom:1px solid var(--line)}
.act-item:last-child{border-bottom:none}
.act-row1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.act-tool{font-family:var(--font-round);font-weight:800;font-size:11px;color:var(--indigo-deep);background:var(--indigo-soft);padding:3px 9px;border-radius:999px;letter-spacing:.2px}
.act-time{font-size:11px;color:var(--ink-3);font-weight:600;margin-left:auto}
.act-desc{font-size:13px;color:var(--ink-2);font-weight:600;line-height:1.5}
.act-st{font-size:11px;font-weight:800;padding:1px 8px;border-radius:999px}
.act-st.ok{color:var(--sage);background:rgba(91,138,100,.13)}
.act-st.fail{color:var(--peach);background:rgba(197,106,74,.13)}
.act-err{font-size:11.5px;color:var(--peach);background:var(--peach-soft);padding:7px 10px;border-radius:9px;line-height:1.5;font-weight:600}
.act-log-more{text-align:center;font-size:12px;font-weight:700;color:var(--ink-3);padding:13px;cursor:pointer}
.act-empty{text-align:center;font-size:12.5px;color:var(--ink-3);padding:22px}
.detail-head .ttl{flex:1;text-align:center;font-weight:800;font-size:14px;color:var(--ink-2)}
.detail-hero{padding:20px;margin-top:8px;background:linear-gradient(160deg,#F3EFFC 0%,#FCEBE4 100%);border:1px solid var(--line);border-radius:var(--r-lg)}
.detail-hero .dd{font-family:var(--font-serif);font-weight:600;font-size:30px;letter-spacing:.5px}
.detail-hero .meta{font-size:12px;color:var(--ink-2);font-weight:700;margin-top:4px}
.detail-hero .moodline{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.pill{background:rgba(255,255,255,.75);border:1px solid rgba(122,108,196,.18);color:var(--indigo-deep);font-weight:800;font-size:12px;padding:6px 12px;border-radius:999px;display:inline-flex;align-items:center;gap:6px}
.card.diary-full{padding:20px;margin-top:16px}
.diary-full p{font-size:14px;line-height:1.95;color:#413C50;margin:0 0 14px}
.diary-full p:last-child{margin-bottom:0}
.quote{background:var(--surface-soft);border-left:3px solid var(--peach);border-radius:0 14px 14px 0;padding:12px 14px;margin:16px 0;font-size:13px;line-height:1.7;color:var(--ink-2);font-style:italic}
.subhead{font-family:var(--font-round);font-weight:900;font-size:14px;margin:20px 2px 10px;display:flex;align-items:center;gap:8px}
.save-btn{margin-top:20px;width:100%;padding:15px;border-radius:16px;border:none;background:var(--indigo);color:#fff;font-family:var(--font-round);font-weight:900;font-size:15px;cursor:pointer;box-shadow:var(--shadow-sm)}
.save-btn:active{transform:translateY(1px)}
.afld{display:flex;align-items:center;gap:12px;padding:13px 4px;border-bottom:1px solid var(--line)}
.afld:last-child{border-bottom:none}
.afl{flex:0 0 60px;font-size:13px;font-weight:700;color:var(--ink-2)}
.afin{flex:1;min-width:0;border:none;outline:none;background:transparent;font-size:14px;color:var(--ink);font-family:var(--font);padding:4px 0;text-align:right}
.afin::placeholder{color:var(--ink-3)}
#annivType{display:none}
/* 编辑资料页输入框 */
.fld{flex:1;min-width:0}
.fld input{border:none;outline:none;text-align:right;font-size:14px;font-weight:700;color:var(--ink);background:transparent;width:100%;font-family:var(--font)}
.fld input::placeholder{color:var(--ink-3);font-weight:600}
.av-edit{position:absolute;right:1px;bottom:1px;width:24px;height:24px;border-radius:50%;background:var(--surface);border:2px solid var(--line);display:flex;align-items:center;justify-content:center}
.av-edit svg{width:13px;height:13px}
.topic-chips{display:flex;flex-wrap:wrap;gap:8px}
.topic-chips .tc{background:var(--indigo-soft);color:var(--indigo-deep);font-weight:700;font-size:12px;padding:7px 13px;border-radius:999px}
.card.snippet{padding:14px 15px;margin-bottom:10px}
.snippet .who{font-size:11px;font-weight:800;color:var(--ink-3);margin-bottom:5px;display:flex;align-items:center;gap:6px}
.snippet .msg{font-size:13px;line-height:1.6;color:var(--ink)}
.snippet.ai{background:var(--indigo-soft);border:none}
.respond{display:flex;gap:10px;margin-top:18px}
.respond .r-btn{flex:1;padding:14px;border-radius:16px;font-weight:800;font-size:14px;text-align:center;cursor:pointer;border:none;font-family:var(--font)}
.respond .heart{background:var(--peach-soft);color:#C56A4A}
.respond .reply{background:var(--indigo);color:#fff;box-shadow:var(--shadow-sm)}
/* mcp / about */
.mcp-hero{padding:22px 20px;margin-top:8px;text-align:center;background:linear-gradient(160deg,var(--indigo),#9585DC);color:#fff;border:none}
.mcp-hero h3{color:#fff;font-family:var(--font-serif);font-weight:600;font-size:24px;margin:0}
.mcp-avatar{width:76px;height:76px;border-radius:50%;margin:0 auto 14px;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;box-shadow:0 16px 30px -12px rgba(122,108,196,.7);position:relative}
.mcp-avatar .status{position:absolute;right:-2px;bottom:-2px;width:22px;height:22px;border-radius:50%;background:var(--sage);border:3px solid var(--surface)}
.mcp-avatar > #editAvatar, .mcp-avatar > #aiAvatarBig, .mcp-avatar > #mcpAvatarBig{width:100%;height:100%;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center}
.mcp-hero .link{color:rgba(255,255,255,.85);font-size:12px;font-weight:700;margin-top:6px}
.perm{padding:6px;margin-top:16px}
.perm .prow{display:flex;align-items:center;gap:13px;padding:14px;border-bottom:1px solid var(--line)}
.perm .prow:last-child{border-bottom:none}
.perm .prow .pi{width:38px;height:38px;border-radius:12px;background:var(--sage-soft);display:flex;align-items:center;justify-content:center;flex:0 0 38px}
.perm .pc{flex:1}
.perm .pc .t{font-weight:800;font-size:13.5px}
.perm .pc .d{font-size:11.5px;color:var(--ink-3);font-weight:600;margin-top:2px}
.perm .pc .d a,.perm .pc .d .art-name{color:var(--indigo-deep);font-family:var(--font-serif);font-style:italic;font-weight:600}
.mcp-note{background:var(--indigo-soft);border-radius:var(--r-md);padding:15px 16px;margin-top:16px;font-size:12.5px;line-height:1.7;color:var(--indigo-deep);font-weight:600}
.mcp-tools{margin-top:16px}
.mcp-tools .mt-h{font-family:var(--font-round);font-weight:900;font-size:14px;margin:0 2px 10px;display:flex;align-items:center;gap:8px}
.mcp-tools .tool{display:flex;gap:12px;align-items:flex-start;padding:13px 14px;margin-bottom:10px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-sm)}
.mcp-tools .tool .ic{width:34px;height:34px;border-radius:11px;background:linear-gradient(145deg,var(--indigo),#9C8BE0);display:flex;align-items:center;justify-content:center;flex:0 0 34px;color:#fff;font-size:16px}
.mcp-tools .tool .tn{font-weight:800;font-size:13px}
.mcp-tools .tool .td{font-size:11.5px;color:var(--ink-2);font-weight:600;margin-top:3px;line-height:1.5}
/* 空态 */
.empty{text-align:center;color:var(--ink-3);font-size:13px;font-weight:700;padding:30px 10px}
/* toast */
.toast{position:absolute;left:50%;bottom:42px;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:12px 20px;border-radius:14px;font-size:13.5px;font-weight:700;box-shadow:0 12px 30px -8px rgba(40,30,70,.5);opacity:0;pointer-events:none;transition:.28s;z-index:999;white-space:nowrap;font-family:var(--font)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
/* 日记详情右上角菜单 */
.more-wrap{position:relative;width:38px;height:38px;flex:0 0 38px;display:flex;justify-content:flex-end;align-items:center}
.more-menu{position:absolute;top:46px;right:0;width:172px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:6px;display:none;z-index:80}
.more-menu.open{display:block}
.more-item{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:11px;font-size:13px;font-weight:700;color:var(--ink);cursor:pointer}
.more-item .mi{font-size:15px}
.more-item:active{background:var(--surface-soft)}
.more-item.warn{color:#C56A4A}
.more-sep{height:1px;background:var(--line);margin:5px 4px}
/* 写作风格选择器 */
.style-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.style-opt{padding:14px;border-radius:14px;border:1.5px solid var(--line);text-align:center;font-weight:800;font-size:13px;color:var(--ink-2);cursor:pointer;transition:.15s}
.style-opt:active{transform:scale(.97)}
.style-opt.sel{border-color:var(--indigo);background:var(--indigo-soft);color:var(--indigo-deep)}
.style-opt.locked{opacity:.38;pointer-events:none;cursor:not-allowed;filter:grayscale(.4)}
#styleCustom.locked{opacity:.5;background:#f2eef8;cursor:not-allowed;color:var(--ink-4)}
#styleCustom:focus{border-color:var(--indigo)}
/* 风格提示条 */
.style-hint{margin-top:2px;background:var(--indigo-soft);border-radius:14px;padding:12px 14px;font-size:12.5px;font-weight:700;color:var(--indigo-deep);line-height:1.55}
/* 预设描述 */
.style-desc{font-size:11.5px;color:var(--ink-3);font-weight:600;margin-top:8px;line-height:1.5;display:none}
/* 自定义按钮略区分 */
.style-opt-custom{background:linear-gradient(135deg,#F3EEFF,#EDE9FB);border-style:dashed}
/* ── 落地页（首屏）── */
.landing{position:absolute;inset:0;z-index:120;background:linear-gradient(180deg,#F7F3EC 0%,#F1ECFA 55%,#FBEDE6 100%);display:flex;flex-direction:column;transition:transform .38s cubic-bezier(.22,.61,.36,1),opacity .38s ease}
.landing.gone{transform:translateY(-14px);opacity:0;pointer-events:none}
.land-scroll{flex:1;overflow-y:auto;padding:calc(env(safe-area-inset-top) + 24px) 18px env(safe-area-inset-bottom);-webkit-overflow-scrolling:touch}
.land-scroll::-webkit-scrollbar{width:0}
.land-top{display:flex;align-items:center;gap:10px;margin-bottom:30px}
.land-logo{width:40px;height:40px;border-radius:13px;background:linear-gradient(145deg,var(--indigo),#9C8BE0);display:flex;align-items:center;justify-content:center;box-shadow:0 10px 22px -8px rgba(122,108,196,.6)}
.land-wordmark{font-family:var(--font-serif);font-weight:600;font-size:24px;letter-spacing:1px}
.land-wordmark span{font-family:var(--font-serif);font-style:italic;font-size:12px;color:var(--ink-3);margin-left:4px;letter-spacing:.5px}
.land-hero{background:linear-gradient(160deg,#F3EFFC 0%,#FCEBE4 100%);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px 20px;position:relative;overflow:hidden}
.land-hero::after{content:"";position:absolute;right:-34px;top:-34px;width:130px;height:130px;border-radius:50%;background:radial-gradient(circle,var(--indigo-soft),transparent 70%)}
.land-tag{font-family:var(--font-serif);font-style:italic;font-size:12px;color:var(--indigo-deep);position:relative;z-index:2}
.land-h1{font-family:var(--font-serif);font-weight:600;font-size:27px;line-height:1.25;letter-spacing:.5px;margin-top:8px;position:relative;z-index:2}
.land-h1 b{color:var(--indigo-deep)}
.land-quote{font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ink-3);margin-top:10px;position:relative;z-index:2}
.land-desc{font-size:13px;line-height:1.7;color:var(--ink-2);margin-top:12px;font-weight:500;position:relative;z-index:2}
.land-cta{margin-top:18px;width:100%;background:var(--indigo);color:#fff;text-align:center;font-weight:800;font-size:15px;font-family:var(--font-round);padding:15px;border-radius:16px;box-shadow:var(--shadow-sm);border:none;cursor:pointer;position:relative;z-index:2}
.land-cta:active{transform:translateY(1px)}
.land-skip{text-align:center;margin-top:14px;font-size:13px;font-weight:700;color:var(--ink-3);cursor:pointer}

/* ── 登录 / 注册门 ── */
.auth-gate{position:absolute;inset:0;z-index:200;background:linear-gradient(180deg,#F7F3EC 0%,#F1ECFA 55%,#FBEDE6 100%);display:flex;flex-direction:column;transition:transform .38s cubic-bezier(.22,.61,.36,1),opacity .38s ease}
.auth-gate.gone{transform:translateY(-14px);opacity:0;pointer-events:none}
.auth-scroll{flex:1;overflow-y:auto;padding:calc(env(safe-area-inset-top) + 24px) 18px env(safe-area-inset-bottom);display:flex;flex-direction:column}
.auth-scroll::-webkit-scrollbar{width:0}
.auth-top{display:flex;align-items:center;gap:9px;justify-content:center;margin-bottom:34px;position:relative}.auth-back{position:absolute;left:0;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--ink-2);font-family:var(--font-round);font-weight:800;font-size:14px;cursor:pointer;padding:6px 2px}
.auth-top .land-logo{width:30px;height:30px;border-radius:9px;background:var(--indigo);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm)}
.auth-top .land-wordmark{font-family:var(--font-serif);font-weight:600;font-size:20px;letter-spacing:.5px}
.auth-top .land-wordmark span{font-style:italic;color:var(--ink-3);font-size:15px}
.auth-card{background:linear-gradient(160deg,#F6F2FE 0%,#FCEBE4 100%);border:1px solid var(--line);border-radius:var(--r-lg);padding:28px 22px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.auth-card::after{content:"";position:absolute;right:-40px;top:-40px;width:140px;height:140px;border-radius:50%;background:radial-gradient(circle,var(--indigo-soft),transparent 70%)}
.auth-tag{font-family:var(--font-serif);font-style:italic;font-size:12px;color:var(--indigo-deep);position:relative;z-index:2}
.auth-h1{font-family:var(--font-serif);font-weight:600;font-size:28px;line-height:1.2;letter-spacing:.5px;margin-top:6px;position:relative;z-index:2}
.auth-sub{font-size:12.5px;color:var(--ink-2);font-weight:600;line-height:1.6;margin-top:10px;position:relative;z-index:2}
.auth-fld{margin-top:20px;background:var(--surface);border:1.5px solid var(--line);border-radius:14px;padding:14px 16px;position:relative;z-index:2}
.auth-fld input{width:100%;border:none;outline:none;background:transparent;font-size:16px;font-weight:700;color:var(--ink);font-family:var(--font);letter-spacing:.5px}
.auth-fld input::placeholder{color:var(--ink-3);font-weight:600;letter-spacing:0}
#authCode{text-align:center;letter-spacing:8px;font-size:22px;font-family:var(--font-round)}
.auth-btn{margin-top:16px;width:100%;background:var(--indigo);color:#fff;text-align:center;font-weight:800;font-size:15px;font-family:var(--font-round);padding:15px;border-radius:14px;box-shadow:var(--shadow-sm);border:none;cursor:pointer;position:relative;z-index:2}
.auth-btn:active{transform:translateY(1px)}
.auth-btn:disabled{opacity:.6;cursor:default}
.auth-code-hint{font-size:12.5px;color:var(--indigo-deep);font-weight:700;margin-top:18px;position:relative;z-index:2}
.auth-links{display:flex;justify-content:space-between;margin-top:16px;font-size:12.5px;font-weight:700;color:var(--ink-3);position:relative;z-index:2}
.auth-links span{cursor:pointer}
.auth-foot{text-align:center;font-size:11.5px;color:var(--ink-3);font-weight:700;margin-top:28px;padding-top:0}
.land-steps{margin-top:26px}
.ls{display:flex;gap:13px;align-items:center;padding:13px 4px;border-bottom:1px solid var(--line)}
.ls:last-child{border-bottom:none}
.ls-n{width:32px;height:32px;border-radius:10px;background:var(--indigo);color:#fff;font-family:var(--font-serif);font-weight:600;font-size:16px;display:flex;align-items:center;justify-content:center;flex:0 0 32px}
.ls-n.ls-2{background:var(--peach)}
.ls-n.ls-3{background:var(--sage)}
.ls-b .ls-t{font-weight:800;font-size:14px}
.ls-b .ls-d{font-size:12px;color:var(--ink-3);font-weight:600;margin-top:1px}
.land-feat{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:24px}
.land-feat .lf{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:15px 14px;box-shadow:var(--shadow-sm)}
.land-feat .li{font-size:20px}
.land-feat .lt{font-weight:800;font-size:13px;margin-top:8px}
.land-feat .ld{font-size:11px;color:var(--ink-3);font-weight:600;margin-top:2px}
/* ── 日记空/加载/错误态 ── */
.state-card{text-align:center;padding:34px 22px;margin-top:14px}
.state-ico{font-size:34px;margin-bottom:12px}
.spinner{width:42px;height:42px;border:4px solid var(--indigo-soft);border-top-color:var(--indigo);border-radius:50%;margin:0 auto 14px;animation:spin 1s linear infinite}
.state-t{font-weight:800;font-size:15px;color:var(--ink-2)}
.state-s{font-size:12.5px;color:var(--ink-3);font-weight:600;margin-top:6px;line-height:1.6}
.state-btn{display:inline-block;margin-top:16px;background:var(--indigo);color:#fff;text-align:center;font-weight:800;font-size:13px;font-family:var(--font-round);padding:11px 18px;border-radius:14px;cursor:pointer}
.state-card.err .state-btn{background:var(--surface);border:1px solid var(--line);color:var(--ink-2)}
.state-card.ind .state-btn{background:var(--indigo)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── 未填写占位（muted）── */
.ph{color:var(--ink-3);font-weight:600;opacity:.7}
/* ── 站内信 ── */
.inbox-item{padding:14px 15px;margin-top:12px;line-height:1.55}
.inbox-item.unread{border-left:3px solid var(--peach);background:var(--peach-soft)}
.ii-msg{font-size:13.5px;font-weight:600;color:var(--ink-2)}
.ii-foot{margin-top:7px;display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3)}
.ii-tag{font-weight:800;color:var(--peach);background:var(--peach-soft);padding:2px 8px;border-radius:8px;font-size:11px}
.ii-emotion{font-weight:700;color:var(--ink-2)}
.ii-time{margin-top:8px;font-size:11px;color:var(--ink-3);font-weight:600}
.ii-ref{margin-top:8px;padding:7px 10px;border-radius:10px;background:var(--indigo-soft);color:var(--indigo-deep);font-size:12px;font-weight:700;line-height:1.5;word-break:break-word}
.ii-ref .rf-ico{margin-right:5px}
/* 日记搜索栏 + 关闭按钮 */
.diary-search-row{display:flex;align-items:center;gap:8px}
.diary-search-row input{flex:1}
.diary-search-close{flex:none;width:34px;height:38px;border-radius:12px;border:1.5px solid var(--line);background:#fff;color:var(--ink-2);font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.diary-search-close:active{background:var(--surface-soft)}
/* 全局播放：退出情侣空间后静默续播（无 UI 条） */
/* ═══ 情侣空间爱心氛围画布（轻量飘心，不拦截点击，置内容之下） ═══ */
#subCouple #fxCanvas{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;opacity:.92;}
#subCouple > .cc-head, #subCouple > .sub-scroll{position:relative;z-index:2;}
/* ═══ 情侣空间（子页面 #subCouple 作用域）═══ */
#subCouple {

  --cream:#F7F3EC; --surface:#FFFFFF; --surface-soft:#FBF8F3;
  --ink:#33303F; --ink-2:#6B6678; --ink-3:#A29CAE;
  --indigo:#7A6CC4; --indigo-deep:#5E4FB0; --indigo-soft:#EDE9FB;
  --peach:#F0A78E; --peach-soft:#FCE7DE; --sage:#9FC0A4; --gold:#EBC06A;
  --line:#EFEAF2;
  --shadow:0 18px 40px -18px rgba(70,54,120,.28);
  --shadow-sm:0 8px 22px -12px rgba(70,54,120,.22);
  --font:"Noto Sans SC","Nunito",-apple-system,"PingFang SC",sans-serif;
  --font-round:"Nunito","Noto Sans SC",-apple-system,"PingFang SC",sans-serif;
  --font-serif:"Cormorant Garamond",Georgia,"Songti SC",serif;

}
#subCouple * {
box-sizing:border-box;-webkit-tap-highlight-color:transparent
}
#subCouple, #subCouple {
margin:0;padding:0;height:100%
}
#subCouple {
font-family:var(--font);color:var(--ink);background:var(--surface-soft);min-height:100vh;display:flex;justify-content:center;overscroll-behavior:none
}
/* ═══ 情侣空间：严格复刻主页面模板（appbar + content-inner 结构） ═══ */
/* 头部：复刻主页面 .appbar，但因不在 .content-inner 内需自行处理安全距 */
/* 顶部留 30px 间隙（兼顾刘海安全区），两侧间距与下方内容一致（2x 原边距），无分割线 */
#subCouple .cc-head {
  padding: max(env(safe-area-inset-top), 30px) 30px 10px;
  background: transparent;
  border-bottom: none !important;
  box-shadow: none !important;
}
#subCouple .cc-head.cc-head-hidden{display:none}
/* 内容滚动区：左右各 30px，与标题左缘对齐，避免贴边 */
#subCouple .sub-scroll {
  padding: 0 30px calc(24px + env(safe-area-inset-bottom));
}
/* .phone 容器：去掉独立页遗留的渐变背景（与主页面 .content-inner 背景一致），不额外加宽 */
#subCouple .phone {
  background: transparent;
}
#subCouple .sec {
padding:6px 2px;margin-top:22px
}
#subCouple .sec-head {
display:flex;align-items:center;justify-content:space-between;margin:0 2px 12px
}
#subCouple .sec-head .t {
font-family:'Cormorant Garamond',serif;font-weight:600;font-size:15px;color:var(--ink);letter-spacing:2px;text-transform:uppercase
}
#subCouple .add {
width:32px;height:32px;border:none;background:transparent;color:var(--ink-3);font-size:20px;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 32px;line-height:1;opacity:.72;transition:opacity .2s
}
#subCouple .add:active {
opacity:1
}
/* ═══ hero 复用原情侣卡（头像最大 > 名字 > 正在听） ═══ */
#subCouple .hero-card {
margin:16px 0 0;padding:28px 20px 22px;background:linear-gradient(160deg,#F8CDD8,#F5D5E2 40%,#FCE4E8);border-radius:20px;position:relative;overflow:hidden;text-align:center
}
#subCouple .cc-avatars {
display:flex;justify-content:center;align-items:center;gap:0;position:relative;height:64px;margin-bottom:10px
}
#subCouple .cc-av-wrap {
position:relative;z-index:2;width:58px;height:58px
}
#subCouple .cc-left {
margin-right:-10px
}
#subCouple .cc-right {
margin-left:-10px
}
#subCouple .cc-av {
width:58px;height:58px;border-radius:50%;background:var(--surface);display:flex;align-items:center;justify-content:center;font-family:var(--font-round);font-weight:900;font-size:22px;color:var(--ink);box-shadow:0 4px 14px rgba(180,120,140,.22);overflow:hidden;background-size:cover;background-position:center;background-repeat:no-repeat
}
#subCouple .cc-names {
font-family:var(--font-round);font-weight:900;font-size:17px;color:#B86A7A;letter-spacing:.8px;position:relative;z-index:2;margin-bottom:2px
}
#subCouple .cc-watermark {
position:absolute;right:-10px;top:-6px;width:76px;height:76px;opacity:.42
}
#subCouple /* 耳机——极简细线：两根白线从耳边垂下底部合拢，无耳机实体 */
.hp {
position:absolute;left:50%;top:0;transform:translateX(-50%);width:220px;height:130px;z-index:3;pointer-events:none;opacity:0;transition:opacity .7s ease
}
#subCouple .hero-card.listening .hp {
opacity:1
}
#subCouple .hp path {
stroke:rgba(255,255,255,.82);stroke-width:1.1;stroke-linecap:round;fill:none
}
#subCouple /* 正在听——歌名 + 从前往后扫的闪光 */
.now-playing {
font-family:var(--font-round);font-weight:900;font-size:13px;letter-spacing:.5px;margin-top:8px;min-height:20px;opacity:0;transition:opacity .5s;line-height:1.4;padding:0 4px
}
#subCouple .hero-card.listening .now-playing {
opacity:1
}
#subCouple .np-shimmer {

  background:linear-gradient(100deg,#B86A7A 0%,#B86A7A 38%,#FFFFFF 50%,#B86A7A 62%,#B86A7A 100%);
  background-size:200% auto;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
  animation:np-sweep 1.9s linear infinite;

}
@keyframes np-sweep {
to{background-position:200% 0}
}
#subCouple /* L1 照片堆 */
.pile-wrap {
position:relative
}
#subCouple .pile {
position:relative;height:210px;margin-top:6px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:12px 18px
}
#subCouple .pile-ph {
position:absolute;left:50%;top:50%;width:96px;height:120px;margin:-60px 0 0 -48px;border-radius:12px;overflow:hidden;box-shadow:0 10px 24px -10px rgba(60,40,80,.42);border:3px solid #fff;background:#eee;transition:transform .45s cubic-bezier(.2,.8,.3,1)
}
#subCouple .pile-ph:first-child {
z-index:30!important;transform:translate(-50%,-50%) rotate(0deg)!important;
}
#subCouple .pile-ph img {
width:100%;height:100%;object-fit:cover;display:block;-webkit-user-drag:none;pointer-events:none
}
#subCouple /* L2 时间轴（独立视图） */
.timeline-view {
display:none;padding-left:2px;padding-right:2px
}
#subCouple .timeline-view.on {
display:block
}
#subCouple .tl-back {
display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:none;border:none;cursor:pointer;padding:0;font-family:var(--font-round);font-weight:800;font-size:22px;color:var(--indigo);transition:background .2s
}
#subCouple .tl-back:active {
background:rgba(122,108,196,.1)
}
#subCouple .tl-upload {
width:30px;height:30px;border:none;background:transparent;color:var(--ink-3);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 30px;opacity:.72;transition:opacity .2s,transform .2s
}
#subCouple .tl-upload:active {
opacity:1;transform:scale(.9)
}
#subCouple .tl-empty {
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:64px 20px;text-align:center
}
#subCouple .tl-empty .txt {
font-family:var(--font-round);font-weight:700;font-size:15px;color:var(--ink-3)
}
#subCouple .tl-empty .up {
width:58px;height:58px;border-radius:50%;background:var(--indigo);color:#fff;border:none;font-size:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 10px 24px -10px rgba(94,79,176,.7);-webkit-tap-highlight-color:transparent
}
#subCouple .tl-empty .up:active {
transform:scale(.94)
}
#subCouple .tl-back::before {
content:"‹";font-size:22px
}
#subCouple .tl-month {
font-family:'Cormorant Garamond',serif;font-weight:600;font-size:22px;color:var(--ink);margin:8px 4px 6px;letter-spacing:3px;text-transform:uppercase;display:flex;align-items:center;justify-content:space-between
}
#subCouple .tl-date {
font-family:'Cormorant Garamond',serif;font-weight:600;font-size:17px;color:var(--indigo-deep);margin:14px 4px 8px;letter-spacing:2px
}
#subCouple .tl-up {
font-family:var(--font-round);font-weight:800;font-size:12.5px;color:var(--ink-3);margin:10px 4px 6px;display:flex;align-items:center;gap:6px
}
#subCouple .tl-up .dot {
width:7px;height:7px;border-radius:50%;background:var(--peach)
}
#subCouple .cluster {
display:flex;align-items:center;gap:8px;overflow-x:auto;overflow-y:visible;padding:4px 2px 10px;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;flex-wrap:nowrap
}
#subCouple .cluster.tight {
gap:0
}
#subCouple .cluster.tight .cl-ph {
margin-left:-20px
}
#subCouple .cluster.tight .cl-ph:first-child {
margin-left:0
}
#subCouple .cl-ph {
flex:0 0 auto;width:78px;height:100px;border-radius:11px;overflow:hidden;background:#eee;border:2.5px solid #fff;box-shadow:0 6px 16px -8px rgba(60,40,80,.4);transform:rotate(var(--r,0deg));cursor:pointer;-webkit-tap-highlight-color:transparent;padding:4px;scroll-snap-align:start
}
#subCouple .cl-ph img {
width:100%;height:100%;object-fit:cover;display:block;-webkit-user-drag:none;pointer-events:none
}
#subCouple .empty {
text-align:center;color:var(--ink-3);font-size:13px;padding:30px 0;font-family:var(--font-round)
}
#subCouple /* L3 查看器——手势绑整个 viewer */
.viewer {
position:fixed;inset:0;z-index:500;background:rgba(20,16,30,.96);display:none;flex-direction:column;touch-action:none;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none
}
#subCouple .viewer.on {
display:flex
}
#subCouple .v-stage {
flex:1 1 auto;min-height:0;width:100%;display:flex;align-items:center;justify-content:center;overflow:visible;position:relative
}
#subCouple .v-img-wrap {
display:flex;align-items:center;justify-content:center;overflow:visible;position:relative
}
#subCouple .v-img {
max-width:95vw;max-height:78vh;width:auto;height:auto;border-radius:10px;box-shadow:0 22px 60px -16px rgba(0,0,0,.7);object-fit:contain;-webkit-object-fit:contain;transition:transform .15s ease;pointer-events:none;touch-action:none;align-self:center;flex:none
}
#subCouple .v-meta {
position:absolute;top:0;left:0;right:0;padding:10px 16px 6px;text-align:right;z-index:2;pointer-events:none
}
#subCouple .v-time {
font-family:var(--font-round);font-weight:800;font-size:15px;color:rgba(255,255,255,.75);letter-spacing:.5px
}
#subCouple .v-owner {
font-family:var(--font-round);font-weight:700;font-size:13px;color:rgba(255,255,255,.5);margin-top:3px
}
#subCouple /* 备注——聊天式气泡，AI左用户右，无名字前缀 */
.v-notes {
padding:6px 18px 10px;width:100%;max-width:430px;align-self:center;max-height:32vh;overflow-y:auto;-webkit-overflow-scrolling:touch;flex:0 1 auto;display:flex;flex-direction:column
}
#subCouple .v-note {
font-family:var(--font);font-size:14px;line-height:1.6;display:flex;flex-direction:column;margin:10px 0;max-width:78%;word-break:break-word;border-radius:16px;padding:10px 14px
}
#subCouple .v-note.ai {
align-self:flex-start;background:rgba(160,140,200,.18);color:rgba(255,255,255,.92);border-bottom-left-radius:4px
}
#subCouple .v-note.user {
align-self:flex-end;background:rgba(240,167,142,.22);color:rgba(255,255,255,.92);border-bottom-right-radius:4px;margin-left:auto;max-width:75%
}
#subCouple .v-note .ed {
display:none
}
#subCouple /* 无备注时——直接显示折叠的评论栏 */
/* 折叠式评论输入：默认只显示 ✎ 图标，点击展开为完整输入条 */
.v-comment {
flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:8px 16px calc(8px + env(safe-area-inset-bottom));background:transparent;position:relative;min-height:44px
}
#subCouple .v-comment .vc-toggle {
flex:0 0 auto;width:30px;height:30px;border:none;background:transparent;color:rgba(255,255,255,.42);font-size:17px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .25s;margin-left:auto
}
#subCouple .v-comment .vc-toggle:active {
color:rgba(255,255,255,.75);transform:scale(1.12)
}
#subCouple .v-comment .vc-input-bar {
display:flex;flex:1;gap:8px;align-items:center
}
#subCouple .v-comment .vc-toggle {
display:none
}
#subCouple .v-comment input {
flex:1;min-width:0;border:none;border-radius:20px;padding:10px 14px;font-family:var(--font-round);font-weight:700;font-size:13px;background:rgba(255,255,255,.12);color:#fff;outline:none
}
#subCouple .v-comment input::placeholder {
color:rgba(255,255,255,.38)
}
#subCouple .v-comment button {
flex:0 0 36px;width:36px;height:36px;border-radius:50%;border:none;background:var(--indigo);color:#fff;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center
}
#subCouple .v-hint-close {
display:none
}
#subCouple /* 音乐列表 —— 只显示上传者名，不写时间 */
.song {
display:flex;align-items:center;gap:12px;padding:11px 13px;background:var(--surface);border:1px solid var(--line);border-radius:16px;margin-bottom:9px;cursor:pointer;box-shadow:var(--shadow-sm)
}
#subCouple .song .ic {
width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--indigo-soft),var(--peach-soft));display:flex;align-items:center;justify-content:center;font-size:17px;flex:0 0 38px
}
#subCouple .song .meta {
flex:1;min-width:0
}
#subCouple .song .ti {
font-family:var(--font-round);font-weight:800;font-size:14px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
#subCouple .song .sub {
font-family:var(--font-round);font-weight:700;font-size:11px;color:var(--ink-3);margin-top:2px
}
#subCouple .song .up-by {
margin-left:auto;flex:0 0 auto;align-self:center;font-family:var(--font-round);font-weight:800;font-size:11px;color:var(--ink-3);padding-left:8px
}
#subCouple .expand-arrow {
font-family:var(--font-round);font-weight:800;font-size:24px;color:var(--ink-3);background:none;border:none;cursor:pointer;padding:2px 8px;line-height:1;flex:0 0 auto;transition:transform .2s
}
#subCouple .expand-arrow:active {
transform:scale(.9)
}
#subCouple .lib-add {
width:34px;height:34px;border-radius:50%;border:none;background:rgba(255,255,255,.12);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 34px;margin-left:auto
}
#subCouple .song.cur {
outline:2px solid var(--indigo)
}
/* 底部播放器——纯黑胶唱片无唱臂无心（fixed 定位，不受 sub 滚动影响） */
#subCouple .player {
position:fixed;left:0;right:0;bottom:0;width:100%;transform:none;background:rgba(255,255,255,.94);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:12px 30px;padding-bottom:calc(12px + env(safe-area-inset-bottom));z-index:400;touch-action:manipulation;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none
}
#subCouple.hide-player .player {
display:none
}
#subCouple .vinyl-wrap {
position:relative;width:52px;height:52px;flex:0 0 52px;cursor:pointer
}
#subCouple .vinyl {
width:52px;height:52px;border-radius:50%;background:
  linear-gradient(135deg, rgba(255,158,196,.55) 0%, rgba(255,158,196,0) 52%),
  radial-gradient(circle at 50% 50%, rgba(255,210,230,.95) 0 11%, transparent 11.5%),
  repeating-radial-gradient(circle at 50% 50%, rgba(255,255,255,.05) 0 1px, transparent 1px 3px),
  radial-gradient(circle at 50% 50%, #2c2230 0%, #1a1420 60%, #100b16 100%);
  box-shadow:0 4px 14px -4px rgba(0,0,0,.45);
  animation:spin 3.5s linear infinite;animation-play-state:paused
}
#subCouple .vinyl.play {
animation-play-state:running
}
@keyframes spin {
to{transform:rotate(360deg)}
}
#subCouple .pc {
flex:1;min-width:0
}
#subCouple .pc .pt {
font-family:var(--font-round);font-weight:800;font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
#subCouple .pc .ps {
font-family:var(--font-round);font-weight:700;font-size:10.5px;color:var(--ink-3);margin-top:1px
}
#subCouple .pbtns {
display:flex;align-items:center;gap:6px;flex:0 0 auto
}
#subCouple .pb {
width:36px;height:36px;border-radius:50%;border:none;background:var(--indigo);display:flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 36px;padding:0
}
#subCouple .pb svg {
width:15px;height:15px;display:block
}
#subCouple .pb.pp {
width:40px;height:40px;flex:0 0 40px;position:relative
}
#subCouple .spin {
position:absolute;left:50%;top:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:none;pointer-events:none
}
#subCouple .pb.pp svg {
width:17px;height:17px
}
#subCouple .pb.ghost {
background:var(--indigo-soft)
}
#subCouple .pb.ghost svg {
fill:var(--indigo-deep)
}
#subCouple .pb.ghost.loop-on {
background:var(--indigo);color:#fff
}
#subCouple /* 唱片库子页面 */
.lib-overlay {
position:fixed;inset:0;z-index:480;background:rgba(20,16,30,.97);display:none;flex-direction:column;overflow:hidden
}
#subCouple .lib-overlay.on {
display:flex
}
#subCouple .lib-head {
display:flex;align-items:center;gap:12px;padding:16px 18px 20px;padding-top:calc(16px + env(safe-area-inset-top))
}
#subCouple .lib-back {
width:34px;height:34px;border-radius:50%;border:none;background:rgba(255,255,255,.12);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 34px
}
#subCouple .lib-title {
font-family:var(--font-round);font-weight:900;font-size:19px;color:#fff
}
#subCouple .lib-body {
flex:1;min-height:0;overflow-y:auto;padding:0 16px 20px;-webkit-overflow-scrolling:touch
}
#subCouple .lib-empty {
color:rgba(255,255,255,.4);text-align:center;padding:60px 0;font-family:var(--font-round);font-size:14
}
#subCouple .lib-song {
display:flex;align-items:center;gap:14px;padding:14px 16px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08);border-radius:18px;margin-bottom:10px;cursor:pointer;transition:background .2s
}
#subCouple .lib-song.cur {
border-color:var(--indigo);background:rgba(122,108,196,.15)
}
#subCouple .lib-song .lic {
width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,var(--indigo-soft),var(--peach-soft));display:flex;align-items:center;justify-content:center;font-size:20px;flex:0 0 46px
}
#subCouple .lib-song .lm {
flex:1;min-width:0
}
#subCouple .lib-song .lti {
font-family:var(--font-round);font-weight:800;font-size:15px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
#subCouple .lib-song .lsub {
font-family:var(--font-round);font-weight:700;font-size:12px;color:rgba(255,255,255,.45);margin-top:3px
}
#subCouple .lib-song .state-dot {
width:8px;height:8px;border-radius:50%;background:var(--indigo);flex:0 0 8px;opacity:0;transition:opacity .3s
}
#subCouple .lib-song.cur .state-dot {
opacity:1;box-shadow:0 0 8px var(--indigo)
}
#subCouple /* 小站 */
.station {
display:flex;align-items:center;gap:12px;padding:13px;background:var(--surface);border:1px solid var(--line);border-radius:16px;margin-bottom:9px;cursor:pointer;box-shadow:var(--shadow-sm)
}
#subCouple .station .ic {
width:40px;height:40px;border-radius:11px;background:linear-gradient(135deg,var(--sage-soft),var(--indigo-soft));display:flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 40px
}
/* 情侣影厅 COUPLE CINEMA 列：色块与音乐列一致（indigo→peach），区别于 HTML 小站 */
#subCouple .station.cinema .ic {
background:linear-gradient(135deg,var(--indigo-soft),var(--peach-soft))
}
#subCouple .station .meta {
flex:1;min-width:0
}
#subCouple .station .ti {
font-family:var(--font-round);font-weight:800;font-size:14px
}
#subCouple .station .sub {
font-family:var(--font-round);font-weight:700;font-size:11px;color:var(--ink-3);margin-top:2px
}
#subCouple .station .sf-btn {
margin-left:auto;flex:0 0 auto;width:30px;height:30px;border:none;background:transparent;color:var(--ink-3);font-size:17px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.7;transition:opacity .2s
}
#subCouple .station .sf-btn:active {
opacity:1;color:var(--indigo)
}
#subCouple /* 小站全屏浏览 */
.site-full {
position:fixed;inset:0;z-index:750;background:#fff;display:none;flex-direction:column
}
#subCouple .site-full.on {
display:flex
}
/* ★情侣影院 iframe 必须铺满整个视口（包括顶部状态栏+底部 home indicator），
   不然手机上看电影只有半屏、缩在中间 */
#subCouple #cinemaFull {
z-index:9999
}
/* ★影院覆盖层：宿主顶部条(#cinemaFull .sf-bar)与 iframe 内影院 appbar 重复显示「Couple Cinema」，
   以 iframe 内更完整的 appbar（含桥状态/陪看记录/返回键）为准，隐藏宿主顶部条，避免双标题栏。
   !important 确保连退出全屏时也不会被 JS 内联 display 重新显示出来 */
#subCouple #cinemaFull .sf-bar {
display:none!important
}
#subCouple #cinemaFrame {
flex:1 1 auto;width:100%;height:auto;max-width:none;max-height:none;display:block;border:none;background:#000;min-height:0
}
#subCouple .sf-bar {
display:flex;align-items:center;gap:10px;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));background:#fff;border-bottom:1px solid var(--line);flex:0 0 auto
}
#subCouple .sf-close {
width:34px;height:34px;border-radius:50%;border:none;background:var(--indigo-soft);color:var(--indigo-deep);font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 34px
}
#subCouple .sf-title {
font-family:var(--font-round);font-weight:800;font-size:15px;color:var(--ink);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
#subCouple .sf-frame {
flex:1 1 auto;width:100%;border:none;background:#fff;min-height:0
}
#subCouple /* modal */
.mask {
position:fixed;inset:0;background:rgba(30,24,44,.55);z-index:700;display:none;align-items:center;justify-content:center;padding:20px
}
#subCouple .mask.on {
display:flex
}
#subCouple .sheet {
width:100%;max-width:380px;background:var(--surface);border-radius:20px;padding:18px;box-shadow:var(--shadow)
}
#subCouple .sheet h3 {
font-family:var(--font-round);font-weight:900;font-size:16px;margin:0 0 12px;color:var(--ink)
}
#subCouple .sheet textarea, #subCouple .sheet input {
width:100%;border:1.5px solid var(--line);border-radius:12px;padding:11px;font-size:14px;font-family:var(--font);outline:none;resize:vertical
}
#subCouple .sheet .row {
display:flex;gap:10px;margin-top:14px
}
#subCouple .sheet .btn {
flex:1;padding:12px;border-radius:13px;border:none;font-family:var(--font-round);font-weight:800;font-size:14px;cursor:pointer
}
#subCouple .sheet .ok {
background:var(--indigo);color:#fff
}
#subCouple .sheet .no {
background:var(--surface-soft);color:var(--ink-2);border:1px solid var(--line)
}
#subCouple .sheet .file {
border:1.5px dashed var(--line);border-radius:12px;padding:14px;text-align:center;color:var(--ink-3);font-size:13px;cursor:pointer;font-family:var(--font-round)
}
#subCouple iframe.st {
width:100%;height:460px;border:1px solid var(--line);border-radius:14px;background:#fff;margin-top:10px
}
#subCouple /* ── 长按菜单 V24d：仅库内（时间轴/唱片库/小站库），不在主页触发 ── */
.ctx-menu {
position:fixed;inset:0;z-index:800;display:none
}
#subCouple .ctx-menu.on {
display:block
}
#subCouple .ctx-card {
position:absolute;min-width:154px;background:var(--surface);border-radius:16px;padding:6px;box-shadow:0 14px 44px rgba(40,20,50,.30);overflow:hidden;animation:ctxPop .14s ease
}
@keyframes ctxPop {
0%{transform:scale(.92);opacity:.4}100%{transform:scale(1);opacity:1}
}
#subCouple .ctx-item {
display:block;width:100%;text-align:left;padding:13px 16px;border:none;background:none;font-family:var(--font-round);font-weight:700;font-size:15px;color:var(--ink);border-radius:11px;cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none
}
#subCouple .ctx-item:active {
background:var(--surface-soft)
}
#subCouple .ctx-item.danger {
color:#E0577A
}
#subCouple .lp-hold {
opacity:.65;transform:scale(.97);transition:transform .15s ease,opacity .15s ease
}
#subCouple .cl-ph img {
-webkit-touch-callout:none;user-select:none;-webkit-user-select:none
}
#subCouple /* ═══ 首次进入欢迎视频（只一次） ═══ */
.welcome-video {
position:fixed;inset:0;z-index:999;background:#0b0b12;display:flex;align-items:center;justify-content:center;overflow:hidden;
}
#subCouple .welcome-video .wv-vid {
width:100%;height:100%;object-fit:cover;
}
#subCouple .welcome-video .wv-hint {
position:absolute;left:0;right:0;bottom:46px;text-align:center;color:#fff;font-family:var(--font-serif);font-size:15px;letter-spacing:.5px;opacity:.9;text-shadow:0 2px 12px rgba(0,0,0,.5);animation:wvPulse 1.9s ease-in-out infinite;pointer-events:none;
}
@keyframes wvPulse {
0%,100%{opacity:.45}50%{opacity:1}
}
#subCouple .welcome-video.hide {
opacity:0;pointer-events:none;transition:opacity .65s ease;
}
#subCouple .welcome-video .wv-skip {
position:absolute;top:18px;right:20px;color:rgba(255,255,255,.72);font-size:13px;font-family:var(--font-serif);letter-spacing:.5px;cursor:pointer;padding:6px 12px;background:rgba(0,0,0,.25);border-radius:20px;backdrop-filter:blur(4px);
}
#subCouple .welcome-video .wv-skip:active {
color:#fff;
}

/* ── iOS 风紫色一键开关（Bark / 浏览器通知 / Music Key）── */
.hc-switch{position:relative;display:inline-block;width:51px;height:31px;flex:0 0 51px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.hc-switch input{position:absolute;inset:0;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:2}
.hc-switch .track{position:absolute;inset:0;border-radius:31px;background:#E2DCEA;transition:background .28s ease}
.hc-switch .knob{position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(60,40,90,.28);transition:transform .28s cubic-bezier(.4,.2,.2,1),width .18s ease}
.hc-switch input:checked ~ .track{background:var(--indigo)}
.hc-switch input:checked ~ .knob{transform:translateX(20px)}
.hc-switch input:active ~ .knob{width:31px}
.hc-switch input:checked:active ~ .knob{transform:translateX(16px);width:31px}
