/* ================== 变量 & 基础 ================== */
:root{
  --pink:#FF6B8B;
  --pink-deep:#F4476B;
  --pink-light:#FFB3C4;
  --pink-soft:#FFF0F4;
  --pink-grad:linear-gradient(135deg,#FF8CA5 0%,#FF6B8B 100%);
  --bg:#FFF7F8;
  --card:#FFFFFF;
  --orange:#FF9A5A;
  --yellow:#FFD166;
  --green:#7BD389;
  --purple:#B48BE0;
  --text:#4A3540;
  --text-2:#8A7280;
  --text-3:#BBA6B0;
  --shadow:0 6px 20px rgba(244,71,107,.10);
  --shadow-lg:0 12px 34px rgba(244,71,107,.16);
  --radius:20px;
  --radius-sm:14px;
  --bar-h:66px;
  --safe-top:env(safe-area-inset-top,0px);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{height:100%;}
body{
  font-family:"ZCOOL KuaiLe","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  background:var(--bg);
  color:var(--text);
  overflow:hidden;
  user-select:none;
  -webkit-font-smoothing:antialiased;
}

/* ================== PAGE SHELL ================== */
.page{
  position:fixed;inset:0;margin:0 auto;
  width:100%;max-width:520px;
  background:var(--bg);
  display:none;
  flex-direction:column;
  overflow:hidden;
  z-index:1;
}
.page.active{display:flex;animation:pageIn .32s cubic-bezier(.25,.8,.35,1);}
@keyframes pageIn{from{opacity:0;transform:translateX(40px);}to{opacity:1;transform:none;}}
@keyframes pageBack{from{opacity:0;transform:translateX(-40px);}to{opacity:1;transform:none;}}
.page.back{animation:pageBack .32s cubic-bezier(.25,.8,.35,1);}

/* ================== SCROLL AREA ================== */
.scroll{
  flex:1;overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  padding-bottom:calc(30px + env(safe-area-inset-bottom));
}
.scroll::-webkit-scrollbar{width:0;}
.scroll.life{padding-bottom:96px;}

/* ================== TOP BAR ================== */
.topbar{
  flex:none;position:relative;
  height:var(--bar-h);
  padding-top:var(--safe-top);
  background:var(--pink-grad);
  display:flex;align-items:center;
  padding-left:16px;padding-right:16px;
  box-shadow:0 4px 14px rgba(244,71,107,.18);
  z-index:5;
}
.topbar .logo-btn{
  display:flex;align-items:center;gap:10px;
  background:none;border:none;cursor:pointer;
}
.topbar .logo-btn:active{transform:scale(.94);}
.topbar img.logo{
  width:46px;height:46px;
  object-fit:cover;
}
.topbar .app-name{
  color:#fff;
  font-family:"PingFang SC","PingFangTC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-weight:700;font-size:24px;letter-spacing:2px;
  text-shadow:0 2px 6px rgba(200,40,80,.35);
}
.topbar .top-right{margin-left:auto;color:#fff;font-size:18px;cursor:pointer;}
.topbar .top-right:active{transform:scale(.9);}
.topbar .back-btn{
  display:flex;align-items:center;gap:8px;
  background:rgba(255,255,255,.25);border:none;color:#fff;
  font-family:inherit;font-size:16px;
  padding:6px 14px;border-radius:20px;cursor:pointer;
}
.topbar .back-btn:active{background:rgba(255,255,255,.4);transform:scale(.96);}

/* ================== HOME CARDS ================== */
.cards-wrap{padding:14px 14px 6px;}
.cards-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:14px;
}
.card{
  position:relative;
  background:var(--card);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:20px 14px 16px;
  display:flex;flex-direction:column;align-items:center;gap:8px;
  cursor:pointer;
  overflow:hidden;
  transition:transform .18s ease,box-shadow .18s ease;
}
.card::before{
  content:"";position:absolute;top:-30px;right:-30px;
  width:80px;height:80px;border-radius:50%;
  background:rgba(255,107,139,.10);
}
.card:active{transform:scale(.93);box-shadow:0 4px 12px rgba(244,71,107,.14);}
.card .icon-box{
  width:64px;height:64px;border-radius:22px;
  display:flex;align-items:center;justify-content:center;
  font-size:30px;color:#fff;
  box-shadow:0 6px 14px rgba(0,0,0,.12);
}
.card .name{font-size:17px;color:var(--text);}
.card .desc{font-size:12px;color:var(--text-3);}
.card.c-1 .icon-box{background:var(--pink-grad);}
.card.c-2 .icon-box{background:linear-gradient(135deg,#FFB76B,#FF9A5A);}
.card.c-3 .icon-box{background:linear-gradient(135deg,#8FD3A5,#7BD389);}
.card.c-4 .icon-box{background:linear-gradient(135deg,#C8A1EE,#B48BE0);}

/* ================== FEED ================== */
.feed-section{padding:10px 14px 0;}
.section-title{
  display:flex;align-items:center;gap:8px;
  font-size:18px;margin:6px 2px 10px;
}
.section-title i{color:var(--pink);}
.feed-list{list-style:none;display:flex;flex-direction:column;gap:12px;}
.feed-item{
  background:var(--card);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:14px;
  opacity:0;transform:translateY(16px);
  animation:fadeUp .45s ease forwards;
}
@keyframes fadeUp{to{opacity:1;transform:none;}}
.feed-head{display:flex;align-items:center;gap:10px;}
.feed-avatar{
  width:52px;height:52px;border-radius:50%;
  object-fit:cover;border:2px solid var(--pink-light);
  flex:none;
}
.feed-user{font-size:15px;color:var(--text);}
.feed-tag{
  font-size:11px;color:var(--pink-deep);
  background:var(--pink-soft);padding:2px 8px;border-radius:10px;
  margin-left:6px;
}
.feed-text{margin-top:10px;font-size:15px;line-height:1.6;color:var(--text);}
.feed-imgs{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap;}
.feed-imgs .img{
  width:calc(50% - 3px);height:120px;border-radius:12px;
  background-size:cover;background-position:center;
  flex:none;background-color:#fce4ec;
}
.feed-imgs .img.single{width:100%;height:150px;}
.feed-foot{
  margin-top:10px;display:flex;align-items:center;gap:14px;
  font-size:12px;color:var(--text-3);
}
.feed-like{margin-left:auto;cursor:pointer;font-size:14px;color:var(--text-3);}
.feed-like.liked{color:var(--pink-deep);}
.feed-like.liked .fa-heart{animation:pop .35s ease;}
@keyframes pop{0%{transform:scale(.6);}60%{transform:scale(1.4);}100%{transform:scale(1);}}

/* pull to refresh */
.pull-wrap{position:relative;overflow-x:hidden;}
.pull-indicator{
  position:absolute;top:-50px;left:0;right:0;
  height:50px;display:flex;align-items:center;justify-content:center;
  color:var(--pink);font-size:13px;gap:6px;
  transition:transform .25s ease;
}
.pull-indicator .fa-arrow-down,.pull-indicator .fa-spinner{font-size:16px;}
.pull-indicator.spinning .fa-arrow-down{display:none;}
.pull-indicator.spinning .fa-spinner{display:inline-block;animation:rot 1s linear infinite;}
.pull-indicator .fa-spinner{display:none;}
@keyframes rot{to{transform:rotate(360deg);}}

.load-more{
  text-align:center;padding:16px 0 8px;color:var(--text-3);font-size:13px;
}
.load-more .fa-spinner{animation:rot 1s linear infinite;margin-right:6px;}

/* ================== SUB PAGE BLOCKS ================== */
.block{
  background:var(--card);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  padding:16px;
  margin:12px 14px;
}
.block-title{
  display:flex;align-items:center;gap:8px;
  font-size:16px;margin-bottom:12px;
}
.block-title i{color:var(--pink);}
.btn{
  font-family:inherit;font-size:15px;cursor:pointer;
  border:none;border-radius:24px;padding:10px 18px;
  background:var(--pink-grad);color:#fff;
  box-shadow:0 5px 12px rgba(244,71,107,.25);
  transition:transform .15s ease;
}
.btn:active{transform:scale(.94);}
.btn.ghost{background:#fff;color:var(--pink-deep);box-shadow:0 2px 8px rgba(244,71,107,.15);border:1.5px solid var(--pink-light);}
.btn.small{padding:6px 12px;font-size:13px;}
.btn.full{width:100%;}

/* ================== ANNIVERSARY PAGE ================== */
.countdown-hero{
  margin:14px;border-radius:var(--radius);
  background:var(--pink-grad);
  padding:22px 16px;text-align:center;color:#fff;
  box-shadow:var(--shadow-lg);
  position:relative;overflow:hidden;
}
.countdown-hero::after{
  content:"";position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);
  width:220px;height:100px;border-radius:50%;background:rgba(255,255,255,.12);
}
.countdown-hero .label{font-size:14px;opacity:.9;letter-spacing:3px;}
.countdown-hero .num{font-size:56px;font-weight:700;margin:6px 0 2px;text-shadow:0 4px 12px rgba(200,40,80,.3);}
.countdown-hero .unit{font-size:15px;opacity:.9;}
.duration-row{display:flex;gap:8px;justify-content:center;margin-top:14px;}
.duration-chip{
  flex:1;background:rgba(255,255,255,.22);border-radius:12px;padding:8px 4px;
  display:flex;flex-direction:column;align-items:center;
}
.duration-chip b{font-size:20px;}
.duration-chip span{font-size:11px;opacity:.85;}
.setting-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 0;border-bottom:1px dashed #f3d3dc;
}
.setting-row:last-child{border-bottom:none;}
.setting-row .lbl{font-size:15px;}
.setting-row .sub{font-size:12px;color:var(--text-3);}
.switch{
  width:52px;height:30px;border-radius:15px;background:#e6d3da;
  position:relative;cursor:pointer;transition:background .25s ease;flex:none;
}
.switch::after{
  content:"";position:absolute;top:3px;left:3px;
  width:24px;height:24px;border-radius:50%;background:#fff;
  box-shadow:0 2px 5px rgba(0,0,0,.2);
  transition:left .25s ease;
}
.switch.on{background:var(--pink-grad);}
.switch.on::after{left:25px;}
.history-item{
  display:flex;align-items:center;gap:10px;padding:10px 0;
  border-bottom:1px dashed #f3d3dc;
}
.history-item:last-child{border-bottom:none;}
.history-item .ic{
  width:36px;height:36px;border-radius:12px;flex:none;
  background:var(--pink-soft);color:var(--pink-deep);
  display:flex;align-items:center;justify-content:center;
}
.history-item .t{font-size:14px;}
.history-item .d{font-size:11px;color:var(--text-3);}
.history-item .days{margin-left:auto;font-size:13px;color:var(--pink-deep);}

/* ================== CAT PAGE ================== */
.cat-stage{
  margin:14px;border-radius:var(--radius);
  background:linear-gradient(180deg,#fff7f3 0%,#ffeef2 100%);
  box-shadow:var(--shadow);
  padding:26px 16px 18px;text-align:center;
  position:relative;overflow:hidden;
}
.cat-stage .sun{
  position:absolute;top:14px;right:18px;
  width:44px;height:44px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#ffe29a,#ffd166);
  box-shadow:0 0 20px rgba(255,209,102,.7);
}
.cat-stage .cloud{
  position:absolute;color:#fff;font-size:26px;opacity:.7;
  animation:drift 6s ease-in-out infinite alternate;
}
.cat-stage .cloud.c2{top:40px;left:16px;animation-delay:1.2s;font-size:18px;}
@keyframes drift{from{transform:translateX(0);}to{transform:translateX(14px);}}
.cat-name{font-size:18px;color:var(--text);margin-bottom:4px;}
.cat-name .sub{font-size:12px;color:var(--text-3);}
.cat-lv{
  display:inline-block;font-size:11px;color:var(--pink-deep);
  background:#fff;border-radius:12px;padding:2px 10px;margin-bottom:14px;
  box-shadow:0 2px 6px rgba(244,71,107,.12);
}
/* CSS cat */
.cat{position:relative;width:190px;height:170px;margin:8px auto 0;cursor:pointer;}
.cat .body{
  position:absolute;bottom:0;left:50%;transform:translateX(-50%);
  width:150px;height:110px;border-radius:50% 50% 42% 42%;
  background:linear-gradient(180deg,#ffd7a3,#ffc07d);
  box-shadow:inset 0 -10px 20px rgba(235,150,90,.25);
}
.cat .head{
  position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:130px;height:110px;border-radius:46% 46% 44% 44%;
  background:linear-gradient(180deg,#ffe0b5,#ffc98e);
  z-index:2;
}
.cat .ear{position:absolute;top:-6px;width:0;height:0;border-style:solid;}
.cat .ear.l{left:16px;border-width:0 20px 34px 20px;border-color:transparent transparent #ffc98e transparent;transform:rotate(-12deg);}
.cat .ear.r{right:16px;border-width:0 20px 34px 20px;border-color:transparent transparent #ffc98e transparent;transform:rotate(12deg);}
.cat .ear::after{content:"";position:absolute;top:10px;left:-11px;border-style:solid;border-width:0 11px 19px 11px;border-color:transparent transparent #ff9ab0 transparent;}
.cat .eye{position:absolute;top:46px;width:12px;height:14px;background:#5a3a30;border-radius:50%;}
.cat .eye.l{left:32px;}
.cat .eye.r{right:32px;}
.cat .eye::after{content:"";position:absolute;top:2px;left:2px;width:4px;height:4px;background:#fff;border-radius:50%;}
.cat .blush{position:absolute;top:62px;width:16px;height:9px;border-radius:50%;background:rgba(255,120,140,.5);}
.cat .blush.l{left:20px;}
.cat .blush.r{right:20px;}
.cat .nose{position:absolute;top:58px;left:50%;transform:translateX(-50%);width:0;height:0;border-style:solid;border-width:0 7px 9px 7px;border-color:transparent transparent #f0a0b0 transparent;}
.cat .mouth{position:absolute;top:66px;left:50%;transform:translateX(-50%);width:26px;height:12px;}
.cat .mouth::before,.cat .mouth::after{content:"";position:absolute;top:0;width:13px;height:11px;border-bottom:2px solid #c98a80;border-radius:0 0 0 100%;}
.cat .mouth::before{left:0;transform:rotate(20deg);}
.cat .mouth::after{right:0;transform:scaleX(-1) rotate(20deg);}
.cat .tail{
  position:absolute;bottom:-4px;right:-6px;
  width:52px;height:20px;border-radius:12px;
  background:#ffc07d;
  transform-origin:left center;
  animation:wag 1.6s ease-in-out infinite;
}
@keyframes wag{0%,100%{transform:rotate(8deg);}50%{transform:rotate(-10deg);}}
.cat .paw{
  position:absolute;bottom:-2px;width:26px;height:20px;border-radius:50%;
  background:#ffc98e;z-index:3;
  box-shadow:inset 0 -4px 6px rgba(235,150,90,.2);
}
.cat .paw.l{left:34px;}
.cat .paw.r{right:34px;}
.cat .fish-badge{
  position:absolute;top:-6px;right:-2px;z-index:4;
  width:40px;height:40px;border-radius:50%;
  background:var(--yellow);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:18px;
  box-shadow:0 4px 10px rgba(255,209,102,.5);
  transform:rotate(12deg);
}
/* interaction feedback */
.cat.feed .head{animation:bob .5s ease;}
.cat.happy{animation:jump .6s ease;}
@keyframes bob{0%,100%{transform:translateX(-50%);}40%{transform:translateX(-50%) translateY(-8px) rotate(-6deg);}}
@keyframes jump{0%,100%{transform:translateY(0);}40%{transform:translateY(-16px);}60%{transform:translateY(-4px);}}
.float-heart{
  position:absolute;color:var(--pink);font-size:22px;
  animation:floatUp 1.2s ease forwards;pointer-events:none;z-index:5;
}
@keyframes floatUp{
  0%{opacity:0;transform:translateY(0) scale(.5);}
  25%{opacity:1;}
  100%{opacity:0;transform:translateY(-60px) scale(1.3);}
}
/* status bars */
.stat-row{display:flex;flex-direction:column;gap:10px;margin-top:14px;text-align:left;}
.stat{
  display:flex;align-items:center;gap:10px;
}
.stat i{width:22px;text-align:center;font-size:15px;}
.stat .bar{
  flex:1;height:12px;border-radius:6px;background:#f6dfe6;overflow:hidden;
}
.stat .bar>i{
  display:block;height:100%;width:60%;border-radius:6px;
  background:var(--pink-grad);transition:width .6s ease;
}
.stat .bar.green>i{background:linear-gradient(90deg,#8FD3A5,#7BD389);}
.stat .bar.yellow>i{background:linear-gradient(90deg,#ffe08a,#ffd166);}
.stat .val{font-size:12px;color:var(--text-2);width:40px;text-align:right;}
.action-row{display:flex;gap:10px;margin-top:14px;}
.action-btn{
  flex:1;border:none;border-radius:16px;padding:12px 0;font-family:inherit;
  font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;
  background:var(--pink-soft);color:var(--pink-deep);
  transition:transform .15s ease;
}
.action-btn:active{transform:scale(.93);}
.action-btn.solid{background:var(--pink-grad);color:#fff;box-shadow:0 5px 12px rgba(244,71,107,.25);}
.cat-log-item{
  display:flex;align-items:center;gap:10px;padding:9px 0;
  border-bottom:1px dashed #f3d3dc;
}
.cat-log-item:last-child{border-bottom:none;}
.cat-log-item .who{
  width:34px;height:34px;border-radius:50%;object-fit:cover;flex:none;
  border:2px solid var(--pink-light);
}
.cat-log-item .txt{font-size:13px;}
.cat-log-item .txt b{color:var(--pink-deep);}
.cat-log-item .time{margin-left:auto;font-size:11px;color:var(--text-3);}

/* ================== LIFE RECORDS ================== */
.search-box{
  display:flex;align-items:center;gap:8px;
  background:#fff;border-radius:20px;padding:10px 14px;
  box-shadow:var(--shadow);margin:12px 14px 4px;
}
.search-box i{color:var(--text-3);}
.search-box input{
  flex:1;border:none;outline:none;font-family:inherit;font-size:14px;background:transparent;color:var(--text);
}
.tag-row{display:flex;gap:8px;padding:10px 14px;overflow-x:auto;}
.tag-row::-webkit-scrollbar{width:0;}
.tag-chip{
  flex:none;font-size:13px;padding:6px 14px;border-radius:16px;
  background:#fff;color:var(--text-2);box-shadow:0 2px 8px rgba(244,71,107,.08);
  cursor:pointer;transition:all .2s ease;
}
.tag-chip.on{background:var(--pink-grad);color:#fff;}
.record-item{
  background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);
  padding:14px;margin:0 14px 12px;
  opacity:0;transform:translateY(14px);animation:fadeUp .4s ease forwards;
}
.record-head{display:flex;align-items:center;gap:10px;}
.record-head .time-line{font-size:11px;color:var(--text-3);margin-top:2px;}
.record-tags{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;}
.record-tags span{font-size:11px;background:var(--pink-soft);color:var(--pink-deep);padding:2px 9px;border-radius:10px;}
.record-body{margin-top:8px;font-size:14px;line-height:1.6;}
.record-imgs{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap;}
.record-imgs .img{width:calc(33.333% - 4px);height:88px;border-radius:10px;background-color:#fce4ec;background-size:cover;background-position:center;}
.record-actions{margin-top:10px;display:flex;gap:18px;font-size:13px;color:var(--text-3);}
.record-actions span{cursor:pointer;display:flex;align-items:center;gap:5px;}
.record-actions span.active{color:var(--pink-deep);}
.record-actions span.active .fa-heart{animation:pop .3s ease;}
.publish-bar{
  position:absolute;left:14px;right:14px;bottom:calc(16px + env(safe-area-inset-bottom));
  display:flex;align-items:center;gap:10px;
  background:#fff;border-radius:26px;padding:8px 10px 8px 18px;
  box-shadow:0 8px 24px rgba(244,71,107,.22);
}
.publish-bar .ph{flex:1;color:var(--text-3);font-size:14px;}
.publish-bar .pic{width:38px;height:38px;border-radius:50%;background:var(--pink-soft);color:var(--pink-deep);display:flex;align-items:center;justify-content:center;font-size:16px;}
.publish-bar .send{width:44px;height:44px;border-radius:50%;background:var(--pink-grad);color:#fff;border:none;font-size:17px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 10px rgba(244,71,107,.3);}
.publish-bar .send:active{transform:scale(.9);}

/* ================== FOOD PAGE ================== */
.food-actions{display:flex;gap:10px;margin:12px 14px 0;}
.food-actions .btn{flex:1;text-align:center;}
.dish-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:12px;
  padding:14px;
}
.dish{
  background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);
  overflow:hidden;cursor:pointer;position:relative;
  transition:transform .15s ease;
}
.dish:active{transform:scale(.95);}
.dish .cover{
  height:90px;background-size:cover;background-position:center;
  background-color:#fce4ec;
  display:flex;align-items:flex-end;padding:8px;
  position:relative;
}
.dish .cover .fav{font-size:11px;color:var(--orange);background:rgba(255,255,255,.9);border-radius:10px;padding:2px 8px;}
.dish .info{padding:10px 10px 12px;}
.dish .info .n{font-size:15px;}
.dish .info .m{font-size:11px;color:var(--text-3);margin-top:2px;}
.dish.picked{outline:3px solid var(--pink);}
.dish.picked::after{
  content:"\f00c";font-family:"Font Awesome 6 Free";font-weight:900;
  position:absolute;top:6px;right:6px;
  width:26px;height:26px;border-radius:50%;background:var(--pink-grad);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;
  box-shadow:0 3px 8px rgba(244,71,107,.4);
}
.result-panel{
  margin:0 14px 12px;border-radius:var(--radius);
  background:linear-gradient(135deg,#fff7f3,#ffeef2);
  border:2px dashed var(--pink-light);
  padding:16px;text-align:center;
}
.result-panel .big{font-size:20px;color:var(--pink-deep);margin:4px 0 10px;}
.choice-row{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:8px;font-size:13px;color:var(--text-2);}
.choice-row .me{color:var(--pink-deep);}
.choice-row .match i{color:var(--green);}

/* ================== MODAL ================== */
.modal-mask{
  position:fixed;inset:0;background:rgba(74,53,64,.45);
  display:none;align-items:flex-end;justify-content:center;
  z-index:50;max-width:520px;margin:0 auto;
}
.modal-mask.show{display:flex;animation:fadeIn .25s ease;}
@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}
.modal{
  background:#fff;width:100%;border-radius:24px 24px 0 0;
  padding:20px 18px calc(20px + env(safe-area-inset-bottom));
  animation:sheetUp .3s cubic-bezier(.25,.8,.35,1);
  max-height:82vh;overflow-y:auto;
}
@keyframes sheetUp{from{transform:translateY(100%);}to{transform:none;}}
.modal .m-title{font-size:18px;margin-bottom:14px;display:flex;align-items:center;gap:8px;}
.modal .m-title i{color:var(--pink);}
.field{margin-bottom:12px;}
.field label{display:block;font-size:13px;color:var(--text-2);margin-bottom:6px;}
.field input,.field textarea{
  width:100%;border:1.5px solid #f3d3dc;border-radius:12px;
  padding:10px 12px;font-family:inherit;font-size:14px;outline:none;
  background:#fffdfe;color:var(--text);
}
.field input:focus,.field textarea:focus{border-color:var(--pink);}
.field textarea{height:70px;resize:none;}
.pick-list{display:flex;flex-wrap:wrap;gap:8px;}
.pick-list .item{
  font-size:13px;padding:8px 14px;border-radius:14px;cursor:pointer;
  background:var(--pink-soft);color:var(--pink-deep);
  border:1.5px solid transparent;transition:all .2s ease;
}
.pick-list .item.on{background:var(--pink-grad);color:#fff;}

/* ================== 通用表单 ================== */
.text-center{text-align:center;}
.date-input,.select-input{
  border:1.5px solid #f3d3dc;border-radius:10px;padding:6px 8px;
  font-family:inherit;font-size:13px;color:var(--text);outline:none;background:#fff;
}

/* ================== 菜品详情 ================== */
.dish-detail-cover{
  height:140px;border-radius:14px;
  background-size:cover;background-position:center;margin-bottom:12px;
}
.dish-detail-name{font-size:16px;}
.dish-detail-desc{font-size:14px;color:var(--text-2);line-height:1.7;}

/* ================== TOAST / EMPTY ================== */
.toast{
  position:fixed;left:50%;top:46%;transform:translate(-50%,-50%) scale(.8);
  background:rgba(74,53,64,.92);color:#fff;padding:12px 22px;
  border-radius:14px;font-size:14px;z-index:99;opacity:0;
  pointer-events:none;transition:all .25s ease;max-width:80vw;text-align:center;
}
.toast.show{opacity:1;transform:translate(-50%,-50%) scale(1);}
.empty{
  text-align:center;color:var(--text-3);font-size:14px;padding:30px 0;
}
.empty i{font-size:38px;display:block;margin-bottom:10px;color:#f3c9d4;}

/* ================== FOOD: 分类矩阵 ================== */
.filter-reset{
  display:inline-flex;align-items:center;gap:6px;
  font-size:12px;color:var(--pink-deep);cursor:pointer;
  background:var(--pink-soft);padding:5px 12px;border-radius:14px;margin-bottom:8px;
}
.filter-reset:active{transform:scale(.92);}
.cat-matrix-wrap{
  overflow-x:auto;margin-top:8px;-webkit-overflow-scrolling:touch;
  width:100%;
}
.cat-matrix{
  display:grid;grid-template-columns:58px repeat(10,1fr);gap:6px;
  min-width:430px;padding-bottom:4px;
}
.cm-corner{height:32px;}
.cm-col{
  height:32px;display:flex;align-items:center;justify-content:center;
  font-size:13px;color:var(--text-2);background:#fff;border-radius:9px;
  cursor:pointer;box-shadow:0 2px 6px rgba(244,71,107,.06);
  transition:all .15s ease;white-space:nowrap;
}
.cm-col:active{transform:scale(.9);}
.cm-col.sel{background:var(--pink-grad);color:#fff;box-shadow:0 4px 10px rgba(244,71,107,.35);}
.cm-row{
  display:flex;align-items:center;justify-content:center;
  font-size:11px;color:var(--text-2);cursor:pointer;
  white-space:nowrap;border-radius:9px;padding:0 2px;transition:all .15s ease;
}
.cm-row:active{transform:scale(.9);}
.cm-row.sel{color:#fff;background:var(--pink-grad);}
.cm-cell{
  height:30px;display:flex;align-items:center;justify-content:center;
  border-radius:9px;background:var(--pink-soft);color:var(--pink-deep);
  font-size:11px;cursor:pointer;transition:all .15s ease;
}
.cm-cell:active{transform:scale(.9);}
.cm-cell.sel{background:var(--pink-grad);color:#fff;box-shadow:0 4px 10px rgba(244,71,107,.35);}

/* 菜品卡片上的选择按钮 */
.dish .cover .pick{
  position:absolute;bottom:6px;right:6px;
  width:26px;height:26px;border-radius:50%;
  background:rgba(255,255,255,.92);color:var(--pink-deep);
  display:flex;align-items:center;justify-content:center;font-size:12px;
  box-shadow:0 2px 8px rgba(0,0,0,.12);cursor:pointer;z-index:2;
}
.dish .cover .pick.on{background:var(--pink-grad);color:#fff;}
.dish .cover .fav{
  position:relative;z-index:2;
  font-size:11px;color:var(--orange);background:rgba(255,255,255,.9);
  border-radius:10px;padding:2px 8px;
}
.dish .info .cats{font-size:11px;color:var(--text-3);margin-top:4px;}

/* ================== FOOD: 菜品详情页 ================== */
.dish-hero{
  height:220px;background-size:cover;background-position:center;
  background-color:#fce4ec;flex:none;
}
.dish-detail-wrap{padding:0 16px calc(30px + env(safe-area-inset-bottom));margin-top:-26px;position:relative;}
.detail-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:18px 16px;margin-bottom:16px;}
.detail-head{display:flex;align-items:center;gap:10px;}
.detail-name{font-size:22px;color:var(--text);flex:1;}
.detail-fav{
  width:42px;height:42px;border-radius:50%;flex:none;
  background:var(--pink-soft);color:var(--text-3);
  display:flex;align-items:center;justify-content:center;font-size:18px;cursor:pointer;
  transition:all .2s ease;
}
.detail-fav.on{color:#fff;background:var(--yellow);box-shadow:0 4px 10px rgba(255,209,102,.5);}
.detail-fav:active{transform:scale(.9);}
.detail-tags{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;}
.detail-tags .tag{font-size:12px;color:var(--pink-deep);background:var(--pink-soft);padding:4px 12px;border-radius:14px;}
.detail-tags .tag.fav{color:var(--orange);background:#fff4e6;}
.detail-story{margin-top:14px;font-size:14px;line-height:1.7;color:var(--text-2);}
.detail-video{margin-top:14px;}
.detail-video video,.detail-video iframe{width:100%;height:200px;border:none;border-radius:12px;}
.video-link{
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:14px;background:var(--pink-soft);color:var(--pink-deep);
  border-radius:12px;font-size:14px;text-decoration:none;
}
.detail-recipe-title{
  display:flex;align-items:center;gap:8px;
  font-size:17px;margin:6px 2px 10px;
}
.detail-recipe-title i{color:var(--pink);}

/* ================== Markdown 渲染样式 ================== */
.md-render{font-size:14px;line-height:1.75;color:var(--text);word-break:break-word;}
.md-render h1,.md-render h2,.md-render h3,.md-render h4,.md-render h5,.md-render h6{
  color:var(--pink-deep);margin:14px 0 8px;line-height:1.4;
}
.md-render h1{font-size:20px;}.md-render h2{font-size:17px;}.md-render h3{font-size:15px;}
.md-render p{margin:6px 0;}
.md-render ul,.md-render ol{margin:6px 0 6px 6px;padding-left:20px;}
.md-render li{margin:4px 0;}
.md-render code{
  background:var(--pink-soft);color:var(--pink-deep);padding:1px 6px;
  border-radius:6px;font-size:13px;font-family:Consolas,monospace;
}
.md-render pre{background:#2d2530;color:#fff;border-radius:12px;padding:12px;overflow-x:auto;margin:10px 0;}
.md-render pre code{background:none;color:#ffe;padding:0;}
.md-render blockquote{
  border-left:3px solid var(--pink-light);background:var(--pink-soft);
  padding:8px 12px;border-radius:0 10px 10px 0;margin:10px 0;color:var(--text-2);
}
.md-render img{max-width:100%;border-radius:12px;margin:8px 0;}
.md-render a{color:var(--pink-deep);}
.md-render hr{border:none;border-top:1px dashed var(--pink-light);margin:14px 0;}
.md-empty{color:var(--text-3);font-size:13px;text-align:center;padding:20px 0;}

/* ================== Markdown 编辑器 ================== */
.md-editor{border:1.5px solid #f3d3dc;border-radius:12px;overflow:hidden;background:#fff;}
.md-toolbar{
  display:flex;flex-wrap:wrap;gap:6px;padding:8px;
  border-bottom:1.5px solid #f3d3dc;background:var(--pink-soft);
}
.md-toolbar button{
  width:36px;height:30px;border:none;border-radius:8px;background:#fff;
  color:var(--pink-deep);font-family:inherit;font-size:14px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 3px rgba(244,71,107,.12);
}
.md-toolbar button:active{transform:scale(.9);background:var(--pink-grad);color:#fff;}
.md-body{display:flex;flex-direction:column;}
.md-body textarea{
  flex:1;width:100%;min-height:180px;border:none;outline:none;padding:12px;
  font-family:Consolas,monospace;font-size:13px;line-height:1.7;
  resize:vertical;background:#fffdfe;color:var(--text);
}
.md-body .md-preview{
  border-top:1.5px dashed #f3d3dc;padding:12px;
  max-height:240px;overflow-y:auto;background:#fff;
}
@media(min-width:640px){
  .md-body{flex-direction:row;}
  .md-body textarea{width:50%;}
  .md-body .md-preview{width:50%;border-top:none;border-left:1.5px dashed #f3d3dc;}
}

/* ================== 表单增强 ================== */
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px;}
.field-row .field{margin-bottom:0;}
.field-row label{font-size:12px;}
.modal-actions{display:flex;gap:10px;}
.modal-actions .btn{flex:1;}
.btn.danger{background:#fff;color:#e5504b;box-shadow:none;border:1.5px solid #f0b9b5;}
.img-upload{
  height:120px;border:1.5px dashed var(--pink-light);border-radius:12px;
  background:#fffdfe;display:flex;align-items:center;justify-content:center;
  cursor:pointer;overflow:hidden;color:var(--text-3);font-size:13px;
}
.img-upload img{width:100%;height:100%;object-fit:cover;}
.img-upload-foot{margin-top:8px;}
.req{color:var(--pink-deep);font-style:normal;}

/* ================== 注册 / 登录 ================== */
.auth-mask{
  position:fixed;inset:0;z-index:200;
  display:none;overflow-y:auto;
  background:linear-gradient(160deg,#FF8CA5 0%,#F4476B 60%,#e2385f 100%);
  padding:20px 16px 32px;
}
.auth-mask.show{display:flex;animation:fadeIn .3s ease;}
.auth-card{
  margin:auto;width:100%;max-width:340px;
  background:#fff;border-radius:26px;
  padding:26px 22px;text-align:center;
  box-shadow:0 24px 60px rgba(180,20,60,.35);
  animation:sheetUp .35s cubic-bezier(.25,.8,.35,1);
}
.auth-logo{width:72px;height:72px;object-fit:cover;margin-bottom:8px;}
.auth-title{
  font-family:"PingFang SC","Microsoft YaHei",sans-serif;
  font-weight:700;font-size:26px;color:var(--text);letter-spacing:2px;
}
.auth-sub{font-size:13px;color:var(--text-2);margin:6px 0 18px;}
.auth-tabs{
  display:flex;background:var(--pink-soft);border-radius:22px;
  padding:4px;margin-bottom:16px;
}
.auth-tabs .tab{
  flex:1;text-align:center;padding:8px 0;font-size:14px;
  color:var(--text-2);cursor:pointer;border-radius:20px;transition:all .2s ease;
}
.auth-tabs .tab.on{background:var(--pink-grad);color:#fff;box-shadow:0 3px 8px rgba(244,71,107,.3);}
.auth-card input{
  width:100%;border:1.5px solid #f3d3dc;border-radius:12px;
  padding:11px 14px;font-family:inherit;font-size:14px;outline:none;
  background:#fffdfe;color:var(--text);margin-bottom:12px;
  text-align:center;
}
.auth-card input:focus{border-color:var(--pink);}
.auth-error{
  display:none;font-size:12px;color:#e5504b;
  background:#fff0ee;border-radius:8px;padding:8px 10px;margin-top:10px;
}
.auth-hint{font-size:12px;color:var(--text-3);margin-top:14px;line-height:1.7;}

/* ================== 我的 / 配对 ================== */
.couple-card{
  background:var(--pink-soft);border-radius:16px;padding:14px 16px;margin-bottom:14px;
}
.couple-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 0;border-bottom:1px dashed #f3d3dc;
}
.couple-row:last-child{border-bottom:none;}
.couple-row .lbl{font-size:13px;color:var(--text-2);}
.couple-row b{font-size:15px;color:var(--text);}
.invite-box{
  border:2px dashed var(--pink-light);border-radius:16px;
  padding:16px;text-align:center;background:#fffdfe;
}
.invite-label{font-size:13px;color:var(--text-2);margin-bottom:8px;}
.invite-label i{color:var(--pink);}
.invite-code{
  font-family:"PingFang SC","Microsoft YaHei",sans-serif;
  font-weight:700;font-size:28px;letter-spacing:8px;color:var(--pink-deep);
  margin-bottom:12px;
}

/* ================== 设置 ================== */
.settings-sec{
  display:flex;align-items:center;gap:8px;
  font-size:15px;color:var(--text);margin:18px 0 12px;padding-bottom:6px;
  border-bottom:1px dashed #f3d3dc;
}
.settings-sec:first-of-type{margin-top:4px;}
.settings-sec i{color:var(--pink);}
.settings-avatar-box{display:flex;flex-direction:column;align-items:center;margin-bottom:14px;}
.settings-avatar{
  width:76px;height:76px;border-radius:50%;cursor:pointer;
  background-size:cover;background-position:center;
  display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:30px;font-weight:700;
  border:2px solid var(--pink-light);box-shadow:var(--shadow);
  overflow:hidden;
}
.settings-avatar img{width:100%;height:100%;object-fit:cover;}
.settings-avatar-hint{font-size:11px;color:var(--text-3);margin-top:6px;}
.invite-actions{display:flex;gap:10px;}
.invite-actions .btn{flex:1;}
.btn.danger{background:#fff;color:#e5504b;box-shadow:none;border:1.5px solid #f0b9b5;}
#settingsModal input[disabled]{background:#f6f0f2;color:var(--text-3);}

/* ================== 验证码 ================== */
.captcha-row{display:flex;gap:10px;align-items:center;margin-bottom:12px;}
.captcha-row input{flex:1;margin-bottom:0;text-align:center;}
.captcha-img{width:120px;height:42px;border-radius:10px;border:1.5px solid #f3d3dc;cursor:pointer;object-fit:cover;flex:none;background:#fff4f6;}

/* ================== 邮箱验证码 ================== */
.mail-row{display:flex;gap:10px;align-items:center;margin-bottom:12px;}
.mail-row input{flex:1;margin-bottom:0;}
.mail-row .btn{flex:none;white-space:nowrap;padding:9px 14px;font-size:13px;}

/* ================== 头像（字母） ================== */
.avatar{
  width:52px;height:52px;border-radius:50%;flex:none;
  display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:20px;font-weight:700;
  border:2px solid var(--pink-light);
}
.cat-log-item .avatar{width:34px;height:34px;font-size:14px;}
.record-head .avatar{width:52px;height:52px;}

/* ================== 首页卡片折叠 & 悬浮按钮 ================== */
.cards-tabs{
  display:none;position:sticky;top:0;z-index:8;
  grid-template-columns:repeat(4,1fr);gap:8px;
  background:var(--bg);padding:8px 14px 10px;
  box-shadow:0 4px 12px rgba(244,71,107,.08);
}
#feedScroll.collapsed .cards-tabs{display:grid;}
#feedScroll.collapsed .cards-grid{display:none;}
.cards-tabs .tab{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  background:var(--card);border-radius:14px;padding:8px 4px;
  box-shadow:var(--shadow);cursor:pointer;font-size:11px;color:var(--text);
  transition:transform .15s ease;
}
.cards-tabs .tab:active{transform:scale(.92);}
.cards-tabs .tab i{font-size:16px;color:var(--pink);}

.fab-bar{position:fixed;left:0;right:0;bottom:24px;display:flex;justify-content:center;pointer-events:none;z-index:40;}
.fab-inner{position:relative;width:100%;max-width:520px;height:0;pointer-events:none;}
.fab{
  position:absolute;right:20px;bottom:0;
  width:56px;height:56px;border-radius:50%;
  background:var(--pink-grad);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:24px;
  box-shadow:0 8px 20px rgba(244,71,107,.4);cursor:pointer;
  pointer-events:auto;transition:transform .15s ease;
}
.fab:active{transform:scale(.9);}
.back-top{
  position:absolute;right:27px;bottom:72px;
  width:40px;height:40px;border-radius:50%;
  background:#fff;color:var(--pink-deep);border:1.5px solid var(--pink-light);
  display:flex;align-items:center;justify-content:center;font-size:15px;
  box-shadow:0 4px 14px rgba(244,71,107,.25);cursor:pointer;
  pointer-events:auto;opacity:0;transform:translateY(10px);
  transition:all .25s ease;
}
.back-top.show{opacity:1;transform:translateY(0);}
