/* ================= 野养小记 · 样式 ================= */
:root {
  --cream: #fbf5e7;
  --paper: #fffaf0;
  --ink: #4a3b2a;
  --ink2: #7a6a55;
  --green: #8fb96a;
  --green2: #6f9a4d;
  --gold: #e8a838;
  --line: #e3d5bd;
  --shadow: 0 4px 16px rgba(94, 74, 40, .12);
  --safe-b: env(safe-area-inset-bottom, 0px);
}
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body {
  margin: 0; padding: 0; height: 100%;
  background: var(--cream);
  color: var(--ink);
  font-family: -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  overscroll-behavior: none;
  user-select: none;
}
body { display: flex; justify-content: center; }
#app {
  width: 100%; max-width: 480px; height: 100%;
  display: flex; flex-direction: column;
  background: var(--cream);
  position: relative;
  overflow: hidden;
}
.hidden { display: none !important; }

/* ---------- 顶部 ---------- */
.topbar {
  flex: 0 0 auto;
  padding: 10px 12px 6px;
  display: flex; align-items: center; justify-content: space-between;
  background: linear-gradient(#fdf8ec, #fbf3e2);
  border-bottom: 1px solid var(--line);
  z-index: 5;
}
.duckinfo .nameRow { display: flex; align-items: center; gap: 6px; }
.duckinfo b { font-size: 17px; letter-spacing: .5px; }
.titletag {
  font-size: 10px; padding: 2px 7px; border-radius: 8px;
  background: #f1e3c4; color: #9a7a3d; border: 1px solid #e5d2ab;
  flex-shrink: 0; white-space: nowrap;
}
.stag { font-size: 10.5px; color: var(--ink2); margin-top: 2px; }
.wallet { display: flex; align-items: center; gap: 5px; }
.pill {
  font-size: 11.5px; background: #fff; border: 1px solid var(--line);
  padding: 3px 8px; border-radius: 12px; box-shadow: 0 1px 0 #fff inset;
}
.pill b { font-weight: 700; }
.pill.coin { color: #b07d1c; }
.pill.gem { color: #4a7fb5; }
.pill.lv { color: var(--green2); }
.iconbtn {
  border: 1px solid var(--line); background: #fff; border-radius: 11px;
  width: 30px; height: 30px; font-size: 15px; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  padding: 0; box-shadow: var(--shadow);
}
.iconbtn:active { transform: scale(.94); }

/* ---------- 舞台 ---------- */
main { flex: 1 1 auto; overflow: hidden; display: flex; flex-direction: column; position: relative; }
#duckStage { flex: 1; display: flex; flex-direction: column; min-height: 0; }
#scene {
  position: relative; flex: 1; min-height: 0; overflow: hidden;
  --sky1: #cdeaf5; --sky2: #eef7dd; --ground: #a8cc7a;
}
#scene .sky {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, var(--sky1) 0%, var(--sky2) 62%, var(--ground) 62%, var(--ground) 100%);
  transition: background .6s;
}
#scene .ground {
  position: absolute; left: 0; right: 0; bottom: 0; height: 38%;
  background:
    radial-gradient(ellipse at 20% 0%, rgba(255,255,255,.25), transparent 60%),
    repeating-linear-gradient(92deg, rgba(255,255,255,.06) 0 3px, transparent 3px 14px);
}
#scene .hills {
  position: absolute; left: -10%; right: -10%; bottom: 34%; height: 26%;
  background:
    radial-gradient(ellipse at 15% 100%, #b9d69a 0 40%, transparent 41%),
    radial-gradient(ellipse at 52% 100%, #a8ca86 0 45%, transparent 46%),
    radial-gradient(ellipse at 88% 100%, #c0dba4 0 38%, transparent 39%);
  opacity: .85;
}
#scene .sun {
  position: absolute; right: 18px; top: 16px; width: 46px; height: 46px;
  border-radius: 50%;
  background: radial-gradient(circle, #fff3c4, #ffd978);
  box-shadow: 0 0 32px rgba(255, 220, 130, .75);
  animation: sunPulse 6s ease-in-out infinite;
}
@keyframes sunPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }
#scene[data-night="1"] .sun { background: radial-gradient(circle, #fffbe8, #e8e4c8); box-shadow: 0 0 40px rgba(255,250,220,.5); }
#scene[data-night="1"] .topbar, #scene[data-night="1"] { }
#scene .clouds span {
  position: absolute; background: #fff; border-radius: 50px;
  opacity: .8; filter: blur(.3px);
  animation: drift linear infinite;
}
#scene .clouds span:nth-child(1) { width: 54px; height: 16px; top: 12%; left: -60px; animation-duration: 46s; }
#scene .clouds span:nth-child(2) { width: 38px; height: 12px; top: 24%; left: -60px; animation-duration: 62s; animation-delay: -18s; }
#scene .clouds span:nth-child(3) { width: 70px; height: 18px; top: 6%; left: -80px; animation-duration: 80s; animation-delay: -40s; }
@keyframes drift { from { transform: translateX(0); } to { transform: translateX(560px); } }
#scene .fence {
  position: absolute; left: 0; right: 0; bottom: 33%; height: 26px;
  background:
    repeating-linear-gradient(90deg, #c8a878 0 8px, transparent 8px 34px);
  border-top: 3px solid #dcbb8d; border-bottom: 3px solid #dcbb8d;
  opacity: .55;
}
#scene .butterfly {
  position: absolute; left: 22%; top: 46%; font-size: 15px;
  animation: flutter 9s ease-in-out infinite;
}
@keyframes flutter {
  0%,100% { transform: translate(0,0) rotate(-6deg); }
  25% { transform: translate(40px,-26px) rotate(8deg); }
  50% { transform: translate(90px,10px) rotate(-4deg); }
  75% { transform: translate(30px,-14px) rotate(6deg); }
}
.weatherlayer { position: absolute; inset: 0; pointer-events: none; }
#scene[data-weather="rain"] .weatherlayer,
#scene[data-weather="snow"] .weatherlayer { background-image: repeating-linear-gradient(12deg, rgba(180,210,235,.55) 0 1px, transparent 1px 9px); opacity: .5; animation: rainMove .9s linear infinite; }
#scene[data-weather="rain"] .weatherlayer::after {
  content: ''; position: absolute; inset: 0;
  background: rgba(120,150,180,.10);
}
#scene[data-weather="snow"] .weatherlayer {
  background-image: radial-gradient(circle, #fff 0 2px, transparent 2.5px);
  background-size: 34px 34px; opacity: .8; animation: snowMove 6s linear infinite;
}
@keyframes rainMove { to { background-position: 30px 60px; } }
@keyframes snowMove { to { background-position: 20px 60px; } }
#scene[data-weather="wind"] .butterfly { animation-duration: 3s; }
#scene[data-weather="rainbow"] .sky::after {
  content: ''; position: absolute; left: 50%; top: -30%; width: 140%; height: 90%;
  transform: translateX(-50%);
  background: conic-gradient(from 200deg at 50% 100%, transparent 0 32%, rgba(255,120,120,.25) 34%, rgba(255,200,100,.25) 38%, rgba(140,220,140,.25) 42%, rgba(120,180,240,.25) 46%, transparent 48%);
  border-radius: 50%; opacity: .8;
}

/* 装饰 */
#decorLayer { position: absolute; inset: 0; pointer-events: none; }
.decor {
  position: absolute; transform: translate(-50%, -50%);
  filter: drop-shadow(0 3px 3px rgba(80,60,30,.18));
  animation: sway 5s ease-in-out infinite;
}
.decor:nth-child(even) { animation-delay: -2.5s; }
@keyframes sway { 0%,100% { transform: translate(-50%,-50%) rotate(-2deg); } 50% { transform: translate(-50%,-50%) rotate(2deg); } }

/* 小鸭 */
.duckwrap {
  position: absolute; left: 50%; bottom: 6%;
  transform: translateX(-50%);
  width: 62%; max-width: 260px;
  display: flex; flex-direction: column; align-items: center;
  z-index: 3;
}
#duckHolder { width: 100%; height: 42vh; max-height: 300px; animation: breathe 3.6s ease-in-out infinite; }
#duckHolder svg { width: 100%; height: auto; display: block; filter: drop-shadow(0 8px 10px rgba(90,70,40,.18)); }
#duckHolder canvas { width: 100% !important; height: 100% !important; display: block; touch-action: manipulation; }
#duckHolder .wing { transform-origin: 0 12px; animation: wingMove 4.2s ease-in-out infinite; }
#duckHolder .head { transform-origin: 0 40px; animation: headBob 3.6s ease-in-out infinite; }
@keyframes breathe { 0%,100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-3px) scale(1.012); } }
@keyframes wingMove { 0%,100% { transform: rotate(0); } 50% { transform: rotate(-4deg); } }
@keyframes headBob { 0%,100% { transform: translate(0,-48px) rotate(0); } 50% { transform: translate(0,-51px) rotate(1.5deg); } }
#duckHolder.pop { animation: popIt .42s cubic-bezier(.3,1.6,.5,1); }
@keyframes popIt { 0% { transform: scale(1); } 40% { transform: scale(1.07) translateY(-4px); } 100% { transform: scale(1); } }
#duckHolder.eat { animation: eatIt .8s ease; }
@keyframes eatIt { 0% { transform: translateY(0); } 30% { transform: translateY(6px) scaleY(.95); } 60% { transform: translateY(-6px); } 100% { transform: translateY(0); } }
.duckname {
  font-size: 11px; color: #fff; background: rgba(90,70,40,.35);
  padding: 2px 9px; border-radius: 9px; margin-top: -4px;
  backdrop-filter: blur(2px);
}

/* 漂浮文字 */
.float {
  position: absolute; font-size: 15px; font-weight: 700;
  animation: floatUp 1.2s ease-out forwards; pointer-events: none;
  text-shadow: 0 1px 2px rgba(255,255,255,.8); z-index: 8;
}
@keyframes floatUp { 0% { opacity: 0; transform: translateY(0) scale(.8); } 25% { opacity: 1; } 100% { opacity: 0; transform: translateY(-46px) scale(1.05); } }
.foodfly {
  position: absolute; left: 42%; bottom: 18%; font-size: 26px; z-index: 6;
  animation: flyIn .9s ease-in forwards;
}
@keyframes flyIn { 0% { opacity: 0; transform: translate(0,0) scale(.6) rotate(-20deg); } 40% { opacity: 1; } 100% { opacity: 0; transform: translate(30px,-70px) scale(1.1) rotate(15deg); } }

.eggBadge {
  position: absolute; right: 12px; top: 12px;
  background: #fff8e8; border: 1px solid #e8d3a8; border-radius: 14px;
  padding: 4px 10px; font-size: 12px; font-weight: 700; color: #b07d1c;
  display: none; align-items: center; gap: 4px;
  box-shadow: var(--shadow); z-index: 4;
  animation: badgePulse 1.8s ease-in-out infinite;
}
@keyframes badgePulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }
#scene.flash::after {
  content: ''; position: absolute; inset: 0; background: #fff;
  animation: flashAnim .5s ease-out forwards; z-index: 9;
}
@keyframes flashAnim { 0% { opacity: .9; } 100% { opacity: 0; } }

/* 属性条 */
.bars {
  flex: 0 0 auto; padding: 8px 12px 4px;
  background: linear-gradient(#fbf3e2, #fdf8ec);
  border-top: 1px solid var(--line);
  display: grid; grid-template-columns: 1fr 1fr; gap: 5px 12px;
}
.barrow { display: flex; align-items: center; gap: 4px; font-size: 10px; }
.bic { font-size: 11px; }
.bnm { color: var(--ink2); width: 22px; }
.track { flex: 1; height: 7px; background: #eadfcb; border-radius: 4px; overflow: hidden; }
.track i { display: block; height: 100%; border-radius: 4px; transition: width .5s ease; }
.barrow b { width: 20px; text-align: right; font-size: 10px; color: var(--ink2); }

/* 快捷按钮 */
.quick {
  flex: 0 0 auto; display: flex; gap: 8px; padding: 8px 12px;
  background: #fdf8ec; border-top: 1px solid var(--line);
}
.qbtn {
  flex: 1; border: 1px solid var(--line); background: #fff;
  border-radius: 13px; padding: 7px 0 5px; font-size: 10.5px; color: var(--ink);
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  box-shadow: 0 2px 0 #efe4d0;
}
.qbtn span { font-size: 17px; line-height: 1; }
.qbtn:active { transform: translateY(2px); box-shadow: none; }

/* ---------- 底部导航 ---------- */
.tabbar {
  flex: 0 0 auto; display: flex; justify-content: space-around;
  background: #fffdf7; border-top: 1px solid var(--line);
  padding: 5px 0 calc(5px + var(--safe-b));
}
.tab {
  border: 0; background: none; display: flex; flex-direction: column;
  align-items: center; gap: 1px; font-size: 9.5px; color: #a89a86;
  flex: 1; padding: 2px 0;
}
.tab span { font-size: 19px; filter: grayscale(.55); transition: .2s; }
.tab.on { color: var(--green2); font-weight: 700; }
.tab.on span { filter: none; transform: translateY(-1px) scale(1.06); }

/* ---------- 页面容器 ---------- */
#panelArea { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.page { padding: 12px 12px 26px; }
.pagehead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.pagehead h2 { font-size: 16px; margin: 0; letter-spacing: .5px; }
.pageact { display: flex; gap: 6px; align-items: center; }
.wallet { font-size: 12px; color: #b07d1c; }
.hint { font-size: 11px; color: var(--ink2); margin: 4px 0 10px; line-height: 1.6; }
.empty { font-size: 12px; color: #b6a894; text-align: center; padding: 18px 0; }
.sec-t {
  font-size: 12px; font-weight: 700; color: var(--green2);
  margin: 16px 0 8px; padding-left: 8px; border-left: 3px solid var(--green);
}

/* 格子按钮 */
.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 7px; }
.cell {
  border: 1px solid var(--line); background: #fffdf8; border-radius: 13px;
  padding: 10px 4px 8px; display: flex; flex-direction: column; align-items: center;
  gap: 3px; font-size: 10.5px; color: var(--ink); box-shadow: 0 2px 0 #f0e6d4;
  position: relative;
}
.cell b { font-size: 22px; line-height: 1.1; }
.cell em { font-style: normal; font-size: 9px; color: #b07d1c; }
.cell span { color: var(--ink2); }
.cell.sm b { font-size: 18px; }
.cell.sm { padding: 7px 2px 5px; }
.cell.on { border-color: var(--green); background: #f3f9ea; box-shadow: 0 2px 0 #dbe9c7; }
.cell.lock { opacity: .5; }
.cell:active { transform: translateY(1px); box-shadow: none; }
.cell.food em { color: #b07d1c; }

/* 列表行 */
.itemlist { display: flex; flex-direction: column; gap: 6px; }
.itemlist.scroll { max-height: 52vh; overflow-y: auto; padding-right: 2px; }
.row {
  display: flex; align-items: center; gap: 9px;
  background: #fffdf8; border: 1px solid var(--line); border-radius: 12px;
  padding: 8px 10px;
}
.row .ic { font-size: 19px; width: 24px; text-align: center; }
.row .mid { flex: 1; min-width: 0; }
.row .mid b { font-size: 12.5px; display: block; }
.row .mid i { font-style: normal; font-size: 10.5px; color: var(--ink2); display: block; margin-top: 1px; }
.row .mid small { font-size: 9.5px; color: #a89a86; }
.row.done { opacity: .62; }
.row .rw { font-size: 10.5px; color: #b07d1c; font-weight: 700; white-space: nowrap; }
.mini-btn {
  border: 1px solid var(--line); background: #fdf6e6; color: #9a7a3d;
  border-radius: 9px; padding: 5px 9px; font-size: 10.5px; white-space: nowrap;
  font-weight: 600;
}
.mini-btn:active { transform: scale(.96); }
.mini-btn.on { background: #eaf6dd; border-color: #b6d99a; color: var(--green2); }
.mini-btn.danger { background: #fdeaea; border-color: #efcaca; color: #c0504d; }
.mini-btn[disabled] { opacity: .45; }
.prog { height: 5px; background: #efe4d0; border-radius: 3px; margin: 4px 0 2px; overflow: hidden; }
.prog span { display: block; height: 100%; background: linear-gradient(90deg, #a9d17e, #7fae58); border-radius: 3px; }

/* 抽屉 */
.mask {
  position: fixed; inset: 0; background: rgba(60,45,25,.32);
  opacity: 0; pointer-events: none; transition: opacity .25s; z-index: 40;
  backdrop-filter: blur(1px);
}
.mask.show { opacity: 1; pointer-events: auto; }
.sheet {
  position: fixed; left: 50%; bottom: 72px; transform: translate(-50%, calc(100% + 80px));
  width: 100%; max-width: 480px; max-height: calc(100vh - 76px);
  background: var(--paper); border-radius: 20px 20px 0 0;
  z-index: 45; transition: transform .3s cubic-bezier(.2,.9,.3,1);
  display: flex; flex-direction: column;
  box-shadow: 0 -6px 24px rgba(80,60,30,.16);
  padding-bottom: var(--safe-b);
  overflow-y: auto;
}
.sheet.show { transform: translate(-50%, 0); }
/* 面板内容区可滚动，底部留出底栏高度，最后一行不再被遮挡 */
.sheet > .sheetBody, .sheet > .sheetWrap { overflow-y: auto; min-height: 0; }
.sheetHandle { width: 38px; height: 4px; background: #e2d5bd; border-radius: 3px; margin: 7px auto 0; }
.sheetHead { display: flex; align-items: center; justify-content: space-between; padding: 8px 16px 4px; }
.sheetHead h3 { margin: 0; font-size: 15px; }
.closebtn { border: 0; background: #f1e8d8; width: 26px; height: 26px; border-radius: 50%; font-size: 13px; color: var(--ink2); }
.sheetBody { padding: 6px 14px 20px; overflow-y: auto; }
.preview { display: flex; justify-content: center; }
.preview svg { width: 40%; }
.row-btn { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }

.pick-btn {
  border: 1px solid #d8c6a6; background: linear-gradient(#fffaf0, #f7ecd6);
  color: #8a6a30; border-radius: 12px; padding: 11px 16px; font-size: 13px;
  font-weight: 700; box-shadow: 0 2px 0 #e8dcc4; width: 100%;
}
.pick-btn.small { width: auto; padding: 8px 14px; font-size: 12px; }
.pick-btn.ghost { background: #fffdf8; color: var(--ink2); }
.pick-btn.done { opacity: .55; }
.pick-btn.danger { background: #fbeaea; border-color: #efcaca; color: #c0504d; }
.pick-btn:active { transform: translateY(1px); box-shadow: none; }

/* 弹窗 */
.modal {
  position: fixed; left: 50%; top: 50%; transform: translate(-50%, -46%) scale(.94);
  width: 84%; max-width: 340px; background: var(--paper);
  border-radius: 18px; padding: 18px 16px 14px; z-index: 50;
  opacity: 0; pointer-events: none; transition: .25s;
  box-shadow: 0 12px 40px rgba(80,60,30,.22);
  max-height: 80vh; overflow-y: auto;
}
.modal.show { opacity: 1; pointer-events: auto; transform: translate(-50%, -50%) scale(1); }
.modal h3 { margin: 0 0 10px; font-size: 15px; text-align: center; }
.modal p { font-size: 12.5px; line-height: 1.65; color: var(--ink2); margin: 6px 0; }
.modalBtns { display: flex; gap: 8px; justify-content: center; margin-top: 14px; }
.modalBtns .pick-btn { flex: 1; }
.upbox { text-align: center; }
.upnum { font-size: 34px; font-weight: 800; color: var(--gold); letter-spacing: 1px; }
.letterpaper {
  background: #fffdf3; border: 1px dashed #e0cfa8; border-radius: 10px;
  padding: 14px; font-size: 12.5px; line-height: 1.9; color: #6a5a45;
}
.letterpaper small { display: block; text-align: right; color: #a89a86; margin-top: 8px; }
.ta {
  width: 100%; border: 1px solid var(--line); border-radius: 11px;
  padding: 9px; font-size: 12.5px; font-family: inherit;
  background: #fffdf8; color: var(--ink); resize: none; margin-top: 6px;
}

/* 提示条 */
#toasts {
  position: fixed; left: 50%; top: 62px; transform: translateX(-50%);
  z-index: 80; display: flex; flex-direction: column; gap: 6px;
  pointer-events: none; width: 84%; max-width: 340px;
}
.toast {
  background: rgba(74,59,42,.92); color: #fff8ea; font-size: 12px;
  padding: 9px 14px; border-radius: 12px; text-align: center;
  opacity: 0; transform: translateY(-8px); transition: .25s; line-height: 1.5;
}
.toast.in { opacity: 1; transform: translateY(0); }

/* ---------- 农场 ---------- */
.farmgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.plot {
  aspect-ratio: 1; border-radius: 14px; border: 1.5px solid #cdb995;
  background:
    repeating-linear-gradient(90deg, #e2cfab 0 6px, #d9c39a 6px 12px);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; position: relative; overflow: hidden; padding: 0; color: #7a6448;
}
.plot .plus { font-size: 18px; opacity: .55; }
.plot small { font-size: 9px; }
.plot .crop { font-size: 27px; animation: cropGrow 2.4s ease-in-out infinite; }
@keyframes cropGrow { 0%,100% { transform: scale(1); } 50% { transform: scale(1.07); } }
.plot.ready { border-color: #9dc46f; background: repeating-linear-gradient(90deg, #dcecc4 0 6px, #d2e4b7 6px 12px); }
.plot.locked { opacity: .55; background: repeating-linear-gradient(90deg, #ded4c2 0 6px, #d6cbb7 6px 12px); }
.plot .plotprog { position: absolute; left: 0; right: 0; bottom: 0; height: 4px; background: rgba(255,255,255,.45); }
.plot .plotprog span { display: block; height: 100%; background: #7fae58; }
.cropref { display: flex; flex-wrap: wrap; gap: 6px; }
.cropref span {
  font-size: 10px; background: #fffdf8; border: 1px solid var(--line);
  border-radius: 9px; padding: 4px 8px; color: var(--ink2);
}

/* ---------- 商店 ---------- */
.cats { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 6px; margin-bottom: 6px; }
.cat {
  border: 1px solid var(--line); background: #fffdf8; border-radius: 11px;
  padding: 6px 13px; font-size: 12px; color: var(--ink2); white-space: nowrap;
}
.cat.on { background: #eaf6dd; color: var(--green2); border-color: #b6d99a; font-weight: 700; }
.shopgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.shopcard {
  background: #fffdf8; border: 1px solid var(--line); border-radius: 14px;
  padding: 10px; display: flex; flex-direction: column; gap: 3px; position: relative;
}
.shopcard .sic { font-size: 28px; text-align: center; }
.shopcard b { font-size: 12.5px; text-align: center; }
.shopcard .rar { font-size: 9px; text-align: center; font-weight: 700; }
.shopcard p { font-size: 10px; color: var(--ink2); margin: 2px 0; line-height: 1.5; min-height: 30px; }
.statline { font-size: 9.5px; color: #8aa37b; text-align: center; }
.buyrow { display: flex; gap: 5px; margin-top: 4px; }
.buyrow .mini-btn { flex: 1; }
.shopcard.owned { background: #f7f7ef; }
.ownedtag { font-size: 10px; color: #a8b09a; text-align: center; padding: 5px 0; }

/* ---------- 任务 ---------- */
.checkincard {
  display: flex; align-items: center; justify-content: space-between;
  background: linear-gradient(120deg, #fff6df, #fdf0d0);
  border: 1px solid #ecd9ae; border-radius: 14px; padding: 11px 13px; margin-bottom: 10px;
}
.checkincard b { font-size: 13px; }
.checkincard p { margin: 2px 0 0; font-size: 10.5px; color: var(--ink2); }

/* ---------- 出行 ---------- */
.travelcard {
  background: linear-gradient(140deg, #eef7e2, #fdf6e4);
  border: 1px solid #dbe7c8; border-radius: 16px; padding: 14px;
  text-align: center; margin-bottom: 6px;
}
.travelcard .big { font-size: 40px; }
.travelcard b { display: block; font-size: 14px; margin: 3px 0; }
.travelcard p { font-size: 11.5px; color: var(--ink2); margin: 3px 0 8px; }
.tprog { height: 6px; background: #e3edd3; border-radius: 4px; overflow: hidden; }
.tprog span { display: block; height: 100%; background: linear-gradient(90deg, #a9d17e, #6f9a4d); }
.nbgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.nbcard {
  background: #fffdf8; border: 1px solid var(--line); border-radius: 14px;
  padding: 9px; display: flex; flex-direction: column; align-items: center; gap: 2px;
}
.nbav { font-size: 27px; }
.nbcard b { font-size: 12px; }
.nbcard small { font-size: 9.5px; color: #a89a86; }
.nbline { font-size: 10px; color: var(--ink2); text-align: center; margin: 4px 0; min-height: 26px; line-height: 1.4; }

/* ---------- 生活 ---------- */
.lifecard {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  background: linear-gradient(120deg, #eef8f0, #fdf7e8);
  border: 1px solid #dbe9d5; border-radius: 16px; padding: 12px;
}
.lifecard .weather { display: flex; flex-direction: column; align-items: center; flex: 1; }
.lifecard .weather span { font-size: 26px; }
.lifecard .weather b { font-size: 12px; margin-top: 2px; }
.lifecard .weather small { font-size: 9px; color: var(--ink2); }
.lifecard .days { display: flex; flex-direction: column; align-items: center; flex: 1; border-left: 1px dashed #d8e4cf; }
.lifecard .days span { font-size: 24px; font-weight: 800; color: var(--green2); }
.lifecard .days small { font-size: 9px; color: var(--ink2); }
.lifecard .fest { width: 100%; text-align: center; font-size: 11px; color: #b07d1c; margin-top: 4px; }
.tempo { background: #fffdf8; border: 1px solid var(--line); border-radius: 13px; padding: 10px; }
.tempbar { height: 9px; background: #f0e6d2; border-radius: 5px; overflow: hidden; }
.tempbar span { display: block; height: 100%; background: linear-gradient(90deg, #f0b86b, #f5d36b, #9ed37a); transition: width .6s; }
.tempo p { font-size: 11px; color: var(--ink2); margin: 6px 0 0; }
.chips { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  font-size: 10.5px; padding: 4px 10px; border-radius: 11px;
  background: #f2ecdf; color: #a89a86; border: 1px solid #e8dfcd;
}
.chip.on { background: #eaf6dd; color: var(--green2); border-color: #c2dda8; font-weight: 700; }
.diaryrow { display: flex; gap: 8px; background: #fffdf8; border: 1px solid var(--line); border-radius: 11px; padding: 8px 10px; }
.diaryrow span { font-size: 15px; }
.diaryrow b { font-size: 9.5px; color: #a89a86; font-weight: 500; }
.diaryrow p { font-size: 11.5px; margin: 2px 0 0; line-height: 1.6; color: var(--ink); }
.rate { display: flex; flex-direction: column; gap: 6px; }
.rate button {
  text-align: left; border: 1px solid var(--line); background: #fffdf8;
  border-radius: 11px; padding: 8px 12px; color: #e8a838; font-size: 15px;
}
.photowall { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ph {
  aspect-ratio: 1; border-radius: 12px; border: 3px solid #fff;
  box-shadow: var(--shadow); display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 1px;
}
.ph b { font-size: 22px; }
.ph span, .ph i { font-size: 9px; color: #6b5a45; font-style: normal; }

/* ---------- 小游戏 ---------- */
.minilayer {
  position: fixed; inset: 0; z-index: 70; background: #f7f0e0;
  display: none; flex-direction: column;
  max-width: 480px; margin: 0 auto;
}
.minilayer.show { display: flex; }
.miniTop {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 14px; font-size: 15px; font-weight: 700; color: var(--ink);
  border-bottom: 1px solid var(--line);
}
.miniClose { border: 0; background: #efe6d5; width: 28px; height: 28px; border-radius: 50%; color: var(--ink2); }
.miniBody { flex: 1; position: relative; overflow: hidden; }
.miniFoot { padding: 8px 14px calc(10px + var(--safe-b)); font-size: 12px; color: var(--ink2); text-align: center; border-top: 1px solid var(--line); }
.miniFoot b { color: var(--gold); font-size: 16px; }
.hintTop { text-align: center; font-size: 11px; color: var(--ink2); padding: 8px 0 6px; }
.cg { position: absolute; inset: 0; }
.cg .basket {
  position: absolute; bottom: 8px; left: 50%; transform: translateX(-50%);
  font-size: 38px; transition: left .08s linear;
}
.cg .egg { position: absolute; font-size: 22px; }
.memgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; padding: 0 14px 14px; }
.memcard {
  aspect-ratio: 1; border-radius: 12px; border: 1px solid #ddd0b8;
  background: #f1e6d2; position: relative; overflow: hidden; padding: 0;
  font-size: 24px; }
.memcard .back, .memcard .front {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  transition: .25s;
}
.memcard .back { background: repeating-linear-gradient(45deg, #e9dcc3 0 6px, #e2d3b7 6px 12px); color: #b8a888; font-size: 18px; }
.memcard .front { background: #fffdf8; opacity: 0; transform: scale(.6); }
.memcard.open .back { opacity: 0; }
.memcard.open .front { opacity: 1; transform: scale(1); }
.memcard.matched { border-color: #9dc46f; box-shadow: 0 0 0 2px #d7e9c3 inset; }
.tapgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 0 16px; }
.hole {
  aspect-ratio: 1; border-radius: 50%; border: 0; padding: 0;
  background: radial-gradient(ellipse at 50% 65%, #7d6a4f, #a89474 70%);
  display: flex; align-items: center; justify-content: center; font-size: 26px;
  box-shadow: inset 0 6px 10px rgba(0,0,0,.2);
}
.hole.up { background: radial-gradient(ellipse at 50% 65%, #8fbf67, #b5d99a 70%); transform: translateY(-3px); }
.minilayer .track {
  position: relative; height: 60px; margin: 30px 16px 10px;
  background: linear-gradient(#e6f2d4, #d7ecc0); border-radius: 30px;
  border: 2px dashed #b6d99a;
}
.minilayer .track .runner { position: absolute; left: 4%; top: 6px; font-size: 34px; transition: left .12s; }
.minilayer .track .runner.jump { transform: translateY(-6px); }
.minilayer .track .finish { position: absolute; right: 6px; top: 12px; font-size: 28px; }
.runbtn {
  width: calc(100% - 32px); margin: 12px 16px; padding: 26px 0;
  border-radius: 20px; border: 2px solid #d8c6a6;
  background: linear-gradient(#fff7e4, #f4e5c6); color: #8a6a30;
  font-size: 17px; font-weight: 800; letter-spacing: 2px;
}
.runbtn:active { transform: scale(.98); }
.miniResult { padding: 40px 24px; text-align: center; }
.miniResult .bigem { font-size: 54px; }
.miniResult h3 { font-size: 20px; margin: 8px 0; }
.miniResult p { font-size: 12px; color: var(--ink2); margin-bottom: 18px; }
.miniResult .pick-btn { margin-top: 8px; }

/* ---------- 开场 ---------- */
.intro {
  position: fixed; inset: 0; z-index: 90;
  background: linear-gradient(170deg, #fdf6e3 0%, #eef7dd 55%, #dcefc4 100%);
  display: flex; align-items: center; justify-content: center;
  transition: opacity .55s, transform .55s;
  max-width: 480px; margin: 0 auto;
}
.intro.gone { opacity: 0; transform: scale(1.04); pointer-events: none; }
.introInner { text-align: center; padding: 0 30px; }
.introDuck { width: 46%; margin: 0 auto -6px; animation: introBob 3s ease-in-out infinite; }
.introDuck svg { width: 100%; }
@keyframes introBob { 0%,100% { transform: translateY(0) rotate(-1deg); } 50% { transform: translateY(-8px) rotate(1deg); } }
.intro h1 {
  font-size: 30px; letter-spacing: 6px; margin: 6px 0 4px; color: #5a7a3d;
  font-weight: 800;
}
.intro .sub { font-size: 12px; color: #8b7c63; letter-spacing: 1px; margin: 0 0 20px; }
.introTip {
  text-align: left; display: inline-block; margin-bottom: 22px;
}
.introTip p { font-size: 11.5px; color: #8b7c63; margin: 5px 0; line-height: 1.6; }
.startbtn {
  display: block; width: 190px; margin: 0 auto; padding: 13px 0;
  border-radius: 26px; border: 0; font-size: 15px; font-weight: 800;
  color: #fff; letter-spacing: 3px;
  background: linear-gradient(#9dc46f, #7aa851);
  box-shadow: 0 5px 0 #5f8a3b, 0 10px 20px rgba(90,130,60,.28);
}
.startbtn:active { transform: translateY(3px); box-shadow: 0 2px 0 #5f8a3b; }
.tiny { font-size: 9.5px; color: #a89a86; margin-top: 16px; }
.about { text-align: center; }
.about .logo { font-size: 46px; }
.about h3 { margin: 4px 0 8px; }
.about p { font-size: 12px; color: var(--ink2); line-height: 1.8; }
.nestcard {
  text-align: center; background: linear-gradient(140deg, #fdf6e4, #f0f7e2);
  border: 1px solid #e6d9c0; border-radius: 16px; padding: 14px;
}
.nestcard .big { font-size: 40px; }
.nestcard h3 { margin: 4px 0; font-size: 15px; }
.nestcard p { font-size: 11.5px; color: var(--ink2); margin: 2px 0; }
.lotbox { text-align: center; padding: 6px 0 10px; }
.lotbox .big { font-size: 46px; }
.lotbox p { font-size: 11.5px; color: var(--ink2); line-height: 1.7; }

/* ---------- 图鉴 ---------- */
.codexgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.cx {
  background: #fffdf8; border: 1px solid var(--line); border-radius: 12px;
  padding: 8px 5px 6px; display: flex; flex-direction: column; align-items: center;
  gap: 2px; opacity: .45; filter: grayscale(.85);
}
.cx.on { opacity: 1; filter: none; border-color: #d6e5c4; background: #fbfdf7; }
.cx span { font-size: 20px; }
.cx b { font-size: 10px; text-align: center; }
.cx i { font-style: normal; font-size: 8.5px; color: #a89a86; text-align: center; line-height: 1.3; }
.tabbar .tab { min-width: 0; }
.tab span { font-size: 18px; }

/* ================= v1.1 液态玻璃 Liquid Glass ================= */
#app { background: linear-gradient(160deg, #eaf4dc 0%, #fdf6e2 45%, #e3f0f6 100%); }
#app::before, #app::after {
  content: ""; position: absolute; border-radius: 50%;
  filter: blur(60px); opacity: .55; pointer-events: none; z-index: 0;
}
#app::before { width: 260px; height: 260px; background: #f9d9a8; top: -60px; right: -80px; animation: blob 14s ease-in-out infinite alternate; }
#app::after { width: 220px; height: 220px; background: #bfe3a6; bottom: 40px; left: -70px; animation: blob 18s ease-in-out infinite alternate-reverse; }
@keyframes blob { from { transform: translate(0,0) scale(1); } to { transform: translate(-30px, 40px) scale(1.15); } }
#app > * { position: relative; z-index: 1; }

.glass, .glasscard, .topbar, .bars, .quick, .tabbar, .sheet, .modal, .row, .cell,
.shopcard, .qbtn, .panelcard, .nestcard, .cx.on, .calwrap {
  background: rgba(255, 255, 255, .55) !important;
  -webkit-backdrop-filter: blur(18px) saturate(1.5) !important;
  backdrop-filter: blur(18px) saturate(1.5) !important;
  border: 1px solid rgba(255, 255, 255, .65) !important;
  box-shadow: 0 6px 22px rgba(94, 74, 40, .10), inset 0 1px 0 rgba(255, 255, 255, .7) !important;
}
.tabbar { background: rgba(255, 255, 255, .72) !important; }
.sheet { background: rgba(255, 255, 255, .82) !important; -webkit-backdrop-filter: blur(28px) saturate(1.6) !important; backdrop-filter: blur(28px) saturate(1.6) !important; }
.modal { background: rgba(255, 255, 255, .88) !important; }
.cx { background: rgba(255, 255, 255, .4) !important; border: 1px solid rgba(255, 255, 255, .5) !important; -webkit-backdrop-filter: blur(10px) !important; backdrop-filter: blur(10px) !important; }

/* 打卡月历 */
.glasscard { border-radius: 18px; padding: 12px; }
.calwrap { border-radius: 18px; padding: 12px; margin-bottom: 10px; }
.calhead { display: flex; justify-content: space-between; align-items: center; font-size: 12.5px; font-weight: 700; margin-bottom: 8px; }
.calhead .mk { color: var(--gold); }
.calgrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.calcell {
  aspect-ratio: 1; border-radius: 10px; font-size: 10.5px;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .45); border: 1px solid rgba(255, 255, 255, .6);
  color: var(--ink2); position: relative; padding: 0;
}
.calcell.claimed { background: linear-gradient(135deg, #a8d08a, #7fb45f); color: #fff; border: none; font-weight: 700; }
.calcell.today { outline: 2px solid var(--gold); outline-offset: 1px; font-weight: 700; color: var(--ink); }
.calcell.missed { background: rgba(230, 220, 200, .5); color: #b6a88e; }
.calcell.makeup { box-shadow: 0 0 0 1.5px #e88a8a inset; }
.calwk { font-size: 9px; text-align: center; color: #a89a86; }

/* 每日福利 / 等级礼包 */
.welfarerow {
  display: flex; align-items: center; gap: 10px; border-radius: 16px;
  padding: 10px 12px; margin-bottom: 10px;
  background: linear-gradient(120deg, rgba(255, 226, 160, .75), rgba(255, 244, 210, .65));
  border: 1px solid rgba(255, 255, 255, .7);
  -webkit-backdrop-filter: blur(14px) saturate(1.5); backdrop-filter: blur(14px) saturate(1.5);
  box-shadow: 0 4px 16px rgba(232, 168, 56, .18);
}
.welfarerow .ic { font-size: 26px; }
.welfarerow .tx { flex: 1; font-size: 11.5px; color: var(--ink2); line-height: 1.5; }
.welfarerow .tx b { display: block; font-size: 13px; color: var(--ink); }
.giftrow { display: flex; gap: 7px; overflow-x: auto; padding: 2px 0 6px; }
.lvlgift {
  flex: 0 0 auto; width: 76px; border-radius: 14px; padding: 8px 4px; text-align: center;
  background: rgba(255, 255, 255, .55); border: 1px solid rgba(255, 255, 255, .7);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  font-size: 10px; color: var(--ink2);
}
.lvlgift .lv { font-weight: 800; font-size: 12px; color: var(--green2); }
.lvlgift .ic { font-size: 22px; display: block; margin: 3px 0; }
.lvlgift.can { border-color: var(--gold); box-shadow: 0 0 0 1.5px rgba(232, 168, 56, .5), 0 4px 14px rgba(232, 168, 56, .2); animation: pulse 1.6s infinite; }
.lvlgift.claimed { opacity: .5; filter: grayscale(.6); }
@keyframes pulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.05); } }
.achpts { font-size: 11px; color: var(--gold); font-weight: 700; margin-bottom: 8px; }

/* 幸运转盘 */
.wheelbox { display: flex; flex-direction: column; align-items: center; padding: 10px 0 14px; }
.wheel {
  width: 210px; height: 210px; border-radius: 50%;
  border: 6px solid rgba(255, 255, 255, .85);
  box-shadow: 0 8px 26px rgba(94, 74, 40, .22), inset 0 2px 8px rgba(255, 255, 255, .6);
  transition: transform 2.6s cubic-bezier(.15, .75, .25, 1);
  position: relative;
}
.wheelfg {
  position: absolute; inset: 0; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
}
.wheelcenter {
  width: 64px; height: 64px; border-radius: 50%;
  background: radial-gradient(circle at 32% 30%, #fff, #f2e3c2);
  border: 3px solid #fff; display: flex; align-items: center; justify-content: center;
  font-size: 26px; box-shadow: 0 2px 8px rgba(94, 74, 40, .25); z-index: 2;
}
.wheellbl { position: absolute; font-size: 10.5px; font-weight: 700; color: #5a4326; text-align: center; width: 56px; }
.wheelres { margin-top: 10px; font-size: 13px; font-weight: 700; color: var(--green2); min-height: 18px; }
.spinbtn {
  margin-top: 10px; padding: 10px 34px; border: none; border-radius: 22px;
  background: linear-gradient(135deg, #8fb96a, #6f9a4d); color: #fff;
  font-size: 14px; font-weight: 700; box-shadow: 0 4px 12px rgba(111, 154, 77, .4);
}
.spinbtn:disabled { opacity: .55; }

/* ================= v1.2 大目录：搜索 / 分页 ================= */
.searchrow {
  display: flex; align-items: center; gap: 8px; margin: 4px 0 10px;
}
.searchrow input {
  flex: 1; height: 34px; border-radius: 12px; padding: 0 12px; font-size: 12.5px;
  border: 1px solid rgba(255, 255, 255, .7);
  background: rgba(255, 255, 255, .6);
  -webkit-backdrop-filter: blur(12px) saturate(1.4); backdrop-filter: blur(12px) saturate(1.4);
  color: var(--ink); outline: none;
}
.searchrow input:focus { border-color: var(--green); }
.searchrow .cnt { font-size: 10.5px; color: var(--ink2); white-space: nowrap; }
.pager {
  display: flex; align-items: center; justify-content: center; gap: 14px;
  padding: 10px 0 20px; font-size: 11.5px; color: var(--ink2);
}
.pgbtn {
  padding: 7px 16px; border-radius: 16px; font-size: 12px; font-weight: 600;
  border: 1px solid rgba(255, 255, 255, .75); color: var(--ink);
  background: rgba(255, 255, 255, .6);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
}
.pgbtn:disabled { opacity: .35; }
.pgbtn:active:not(:disabled) { transform: scale(.95); }
.empty { text-align: center; padding: 30px 0; font-size: 12px; color: #a89a86; }

/* ================= v1.2 集市 / 悬赏 / 野物图鉴 ================= */
.marketlist, .bountylist { display: flex; flex-direction: column; gap: 8px; }
.mrow, .brow {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 14px;
  background: rgba(255, 255, 255, .5); border: 1px solid rgba(255, 255, 255, .65);
  -webkit-backdrop-filter: blur(12px) saturate(1.4); backdrop-filter: blur(12px) saturate(1.4);
}
.mrow .mic { font-size: 22px; }
.mrow .mmid, .brow .bm { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.mrow .mmid b, .brow .bm b { font-size: 12.5px; }
.mrow .mmid i, .brow .bm i { font-style: normal; font-size: 10.5px; color: var(--ink2); }
.brow { flex-wrap: wrap; position: relative; }
.brow .btrack { width: 100%; height: 4px; border-radius: 3px; background: rgba(0,0,0,.07); overflow: hidden; }
.brow .btrack span { display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, #a8d08a, #6f9a4d); }
.brow.done { opacity: .6; }
.codexmini { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; }
.cmini {
  display: flex; flex-direction: column; align-items: center; gap: 1px; padding: 6px 2px;
  border-radius: 10px; border: 1px solid rgba(255, 255, 255, .6);
  background: rgba(255, 255, 255, .38); font-size: 9px; color: var(--ink2);
}
.cmini span { font-size: 17px; filter: grayscale(1); opacity: .5; }
.cmini.on { background: rgba(168, 208, 138, .35); border-color: rgba(127, 180, 95, .6); }
.cmini.on span { filter: none; opacity: 1; }
.cmini i { font-style: normal; line-height: 1.2; text-align: center; }

/* ================= v1.3 手机适配（6.3–6.7 英寸） ================= */
/* 基准：视口宽 360–430dp，整体字体放大到可读尺寸 */
html { font-size: 15px; }
body, #app { font-size: 15px; }
.topbar .nameRow b { font-size: 17px; }
.stag, .pill { font-size: 12.5px; }
.barrow .bnm, .barrow b { font-size: 13px; }
.quick .qbtn { font-size: 12px; }
.quick .qbtn span { font-size: 20px; }
.tabbar .tab i { font-size: 11.5px; }
.tabbar .tab span { font-size: 20px; }
.pagehead h2 { font-size: 19px; }
.shopcard b { font-size: 14.5px; }
.shopcard p, .shopcard .statline { font-size: 12px; }
.mini-btn { font-size: 12.5px; padding: 6px 12px; }
.row .mid b { font-size: 14px; }
.row .mid i { font-size: 11.5px; }
.sec-t { font-size: 13.5px; }
.hint, .empty { font-size: 12px; }
.chip { font-size: 12px; }
.cx b { font-size: 11.5px; }
.cx i { font-size: 9.5px; }
.searchrow input { height: 38px; font-size: 14px; }
.sheetHead h3 { font-size: 17px; }
.modal h3 { font-size: 17px; }
#modalBody, #modalBody p { font-size: 14px; }
.toast { font-size: 13.5px; }
/* 大屏手机（6.7 寸 ≈ 412dp+）再微调 */
@media (min-width: 400px) {
  html { font-size: 16px; }
  .shopcard p, .shopcard .statline { font-size: 12.5px; }
}
.pwin {
  width: 100%; height: 42px; border-radius: 12px; border: 1px solid var(--line);
  padding: 0 12px; font-size: 15px; text-align: center; letter-spacing: 4px;
  background: #fffdf8; color: var(--ink); outline: none; margin: 8px 0 4px;
}
.pwin:focus { border-color: var(--green); }
.mini-btn.wide { width: 100%; padding: 11px; margin: 4px 0 24px; }
/* 控制台 */
.consec { margin-bottom: 6px; }
.consec .cell { background: rgba(255,255,255,.55); border: 1px solid rgba(255,255,255,.65); }
.consec .big { font-size: 19px; color: var(--green2); display: block; }
.consec .cell span { font-size: 11px; color: var(--ink2); }
.tbars { display: flex; align-items: flex-end; gap: 3px; height: 90px; padding: 4px 0; }
.tbar { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; position: relative; }
.tbar span { position: absolute; bottom: 13px; width: 42%; border-radius: 3px 3px 0 0; }
.tbar span.s1 { left: 5%; background: linear-gradient(180deg, #8fb96a, #6f9a4d); }
.tbar span.s2 { right: 5%; background: linear-gradient(180deg, #8abbe4, #5f93c2); }
.tbar i { font-style: normal; font-size: 8.5px; color: #a89a86; margin-top: 3px; }
.trow { display: flex; align-items: center; gap: 8px; font-size: 12px; margin: 4px 0; }
.trow span { width: 38px; color: var(--ink2); }
.trow .ttrack { flex: 1; height: 8px; border-radius: 4px; background: rgba(0,0,0,.06); overflow: hidden; }
.trow .ttrack span { display: block; height: 100%; border-radius: 4px; background: linear-gradient(90deg, #a8d08a, #6f9a4d); }
.trow b { width: 30px; text-align: right; }

/* ================= v1.4 强制联机遮罩 ================= */
.netmask {
  position: fixed; inset: 0; z-index: 999;
  background: linear-gradient(160deg, #eaf4dc, #fdf6e2 50%, #e3f0f6);
  display: flex; align-items: center; justify-content: center;
}
.netinner { text-align: center; padding: 20px; max-width: 320px; }
.neticon { font-size: 52px; margin-bottom: 10px; animation: netspin 2.4s linear infinite; display: inline-block; }
@keyframes netspin { 0% { transform: rotate(0); } 100% { transform: rotate(360deg); } }
.netinner h2 { font-size: 18px; margin: 6px 0; }
.netinner p { font-size: 13px; color: var(--ink2); line-height: 1.7; }
.netinner .startbtn { margin-top: 16px; }

/* ===========================================================
   v2.0 · 新增小游戏样式
   =========================================================== */
.mathq {
  margin: 14px 18px; padding: 22px 10px; text-align: center;
  font-size: 30px; font-weight: 800; color: #6f9a4d; letter-spacing: 2px;
  background: rgba(255,255,255,.72); border-radius: 18px; border: 1px solid rgba(255,255,255,.9);
  box-shadow: 0 6px 20px rgba(94,74,40,.1);
}
.mathopts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 0 18px; }
.mathbtn {
  padding: 16px 0; border-radius: 14px; border: 1px solid #ddd0b8;
  background: linear-gradient(#fffdf6, #f4e8d2); font-size: 20px; font-weight: 800; color: #6b573a;
  transition: .12s;
}
.mathbtn:active { transform: scale(.96); }
.mathbtn.right { background: linear-gradient(#d9f0c4, #b7e094); border-color: #9dc46f; color: #3f6b1e; }
.mathbtn.wrong { background: linear-gradient(#fbdad6, #f3b9b2); border-color: #e0918a; color: #8f3f33; }

.cg .egg.bug { filter: hue-rotate(40deg); }

.seqgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 8px 22px; }
.seqpad {
  aspect-ratio: 1; border-radius: 18px; border: 0; opacity: .55;
  transition: transform .12s, opacity .12s, box-shadow .12s;
}
.seqpad.lit { opacity: 1; transform: scale(1.05); box-shadow: 0 0 0 4px rgba(255,255,255,.9), 0 8px 20px rgba(0,0,0,.18); }
.seqtip { text-align: center; font-size: 13px; color: #7a6a55; margin-top: 10px; font-weight: 600; }

.linkgrid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 5px; padding: 6px 12px; }
.linkcell {
  aspect-ratio: 1; border-radius: 9px; border: 1px solid #e2d6c0;
  background: #fffdf8; font-size: 19px; padding: 0; transition: .15s;
}
.linkcell.sel { border-color: #8fb96a; box-shadow: 0 0 0 2px #cfe6b3 inset; transform: scale(.94); }
.linkcell.gone { opacity: 0; transform: scale(.3); pointer-events: none; }

.rungame {
  position: relative; height: 180px; margin: 22px 14px 0; overflow: hidden;
  background: linear-gradient(#eaf5dc, #d8ecc2); border-radius: 16px; border: 1px solid #cfe3b8;
}
.rgduck { position: absolute; left: 12%; bottom: 26px; font-size: 34px; transition: bottom .12s; }
.rgduck.jump { bottom: 74px; transition: bottom .26s cubic-bezier(.3,-0.4,.6,1.4); }
.rgground {
  position: absolute; left: 0; right: 0; bottom: 0; height: 26px;
  background: repeating-linear-gradient(90deg, #b6d99a 0 14px, #a8ce8a 14px 28px);
}
.rgobs { position: absolute; bottom: 22px; font-size: 26px; }

.drumwrap { position: relative; height: 190px; margin: 10px 16px; }
.drumlane {
  position: absolute; inset: 0; border-radius: 16px;
  background: linear-gradient(#f7f1e2, #eef3e0); border: 1px dashed #cfdcb8; overflow: hidden;
}
.drumhit {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);
  width: 64px; height: 64px; border-radius: 50%; font-size: 30px;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.9); border: 2px solid #8fb96a;
  box-shadow: 0 0 0 6px rgba(143,185,106,.18);
}
.drumhit.hit { transform: translate(-50%,-50%) scale(1.15); box-shadow: 0 0 0 12px rgba(143,185,106,.3); }
.note { position: absolute; font-size: 22px; }
.drumtrack { display: none; }

.pond {
  position: relative; height: 260px; margin: 8px 14px;
  background: linear-gradient(#cfe9f6, #a8d4ea 60%, #86c2de);
  border-radius: 18px; overflow: hidden; border: 1px solid #a9d3e8;
}
.hook { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); font-size: 26px; transition: top .15s; }
.hook.pull { transform: translate(-50%,-50%) scale(1.25); }
.fish { position: absolute; font-size: 22px; transition: left .12s linear; }

.wordhint { text-align: center; font-size: 13px; color: #7a6a55; padding: 10px; font-weight: 600; }
.wordslot { display: flex; justify-content: center; gap: 8px; margin: 6px 0 16px; }
.wcell {
  width: 44px; height: 50px; border-radius: 10px; border: 2px dashed #cbb894;
  display: flex; align-items: center; justify-content: center; font-size: 22px; font-weight: 800; color: #6b573a;
  background: rgba(255,255,255,.7);
}
.wordbank { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; padding: 0 18px; }
.wbtn {
  width: 48px; height: 48px; border-radius: 12px; border: 1px solid #ddd0b8;
  background: linear-gradient(#fffdf6, #f4e8d2); font-size: 20px; font-weight: 800; color: #6b573a;
}
.wbtn.used { opacity: .28; }

/* ===========================================================
   v2.0 · 饲草 / 90任务 / 甜点抽奖 页面
   =========================================================== */
.t90entry { display: flex; align-items: center; gap: 10px; padding: 14px 16px; }
.t90entryl { flex: 1; }
.t90entryl b { font-size: 15px; }
.t90entryl p { font-size: 12px; color: var(--ink2); margin: 4px 0 8px; }
.t90arrow { font-size: 26px; color: #bfae94; }

.t90top { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 14px 16px; }
.t90big { display: flex; align-items: baseline; gap: 4px; }
.t90big b { font-size: 34px; color: #6f9a4d; line-height: 1; }
.t90big span { font-size: 12px; color: var(--ink2); }
.t90meta { flex: 1; display: flex; gap: 14px; font-size: 12px; color: var(--ink2); }
.t90meta i { display: block; font-style: normal; font-size: 17px; font-weight: 800; color: #b8860b; }

.t90list { display: flex; flex-direction: column; gap: 7px; }
.t90row {
  background: rgba(255,255,255,.66); border: 1px solid rgba(255,255,255,.8);
  border-radius: 13px; padding: 9px 12px; backdrop-filter: blur(10px);
}
.t90row.done { background: rgba(232,246,220,.85); border-color: #cbe4b0; }
.t90row.hard { border-left: 3px solid #e8a33d; }
.t90row.hard.done { border-left-color: #6f9a4d; }
.t90head { display: flex; align-items: center; gap: 7px; }
.t90head b { flex: 1; font-size: 13px; font-weight: 600; }
.t90head em { font-style: normal; font-size: 11px; color: #b8860b; font-weight: 700; }
.t90ico { font-size: 15px; }
.t90row .prog { margin: 6px 0 4px; height: 5px; }
.t90foot { display: flex; align-items: center; justify-content: space-between; }
.t90foot small { font-size: 11px; color: var(--ink2); }

/* 饲草页 */
.hayhero { display: flex; align-items: center; gap: 14px; padding: 16px; }
.haynum { text-align: center; min-width: 76px; }
.haynum b { display: block; font-size: 32px; color: #6f9a4d; line-height: 1.1; }
.haynum span { font-size: 11px; color: var(--ink2); }
.hayrow { flex: 1; }
.hayrow .hint { margin-top: 6px; }

.lotterybox { padding: 14px 16px; }
.lotteryhead { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.lotterydesserts {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 12px;
}
.dessertcell {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  background: rgba(255,255,255,.65); border-radius: 11px; padding: 8px 2px;
}
.dessertcell span { font-size: 22px; }
.dessertcell small { font-size: 9.5px; color: var(--ink2); text-align: center; line-height: 1.2; }
.lotterybtns { display: flex; gap: 8px; }
.lotterybtns .pick-btn { flex: 1; font-size: 12.5px; padding: 11px 4px; }
.notecard p { font-size: 12px; color: var(--ink2); line-height: 1.7; }

/* 悬浮进度浮标 */
#floatProg {
  position: fixed; right: 10px; top: 46%; z-index: 60;
  width: 62px; padding: 8px 4px; border-radius: 16px;
  background: rgba(255,255,255,.42); backdrop-filter: blur(18px) saturate(1.6);
  border: 1px solid rgba(255,255,255,.75);
  box-shadow: 0 8px 24px rgba(94,74,40,.16);
  display: none; flex-direction: column; align-items: center; gap: 5px;
}
#floatProg.show { display: flex; animation: fpIn .35s ease; }
@keyframes fpIn { from { transform: translateX(70px); opacity: 0 } to { transform: none; opacity: 1 } }
.fprow { display: flex; flex-direction: column; align-items: center; font-size: 15px; line-height: 1.1; }
.fprow b { font-size: 10.5px; color: #5c4a32; font-weight: 700; }
.fpbar { width: 40px; height: 4px; border-radius: 3px; background: rgba(0,0,0,.09); overflow: hidden; }
.fpbar i { display: block; height: 100%; background: linear-gradient(90deg, #8fb96a, #6f9a4d); }

/* ===========================================================
   Apple Liquid Glass 完整特效 · v2.0
   -----------------------------------------------------------
   分层结构：
     .lg-refract  折射层（backdrop-filter + SVG 位移）
     .lg-tint     色调层（半透明白 + 环境色）
     .lg-spec     镜面高光（跟随指针）
     .lg-rim      边缘光 / 内发光
     .lg-grain    玻璃颗粒
     .lg-shine    高光扫过
   =========================================================== */

:root {
  --lg-mx: 50%;
  --lg-my: 50%;
  --lg-tilt-x: 0deg;
  --lg-tilt-y: 0deg;
  --lg-shine-x: 50%;
  --lg-global-x: 50vw;
  --lg-global-y: 50vh;
  --lg-gyro-x: 0deg;
  --lg-gyro-y: 0deg;
  --lg-radius: 20px;
  --lg-blur: 18px;
  --lg-sat: 1.8;
  --lg-bright: 1.08;
}

/* ---------- 全局环境光（缓慢漂浮的色块，为玻璃提供折射内容） ---------- */
#app::before,
#app::after {
  filter: blur(46px);
  opacity: .85;
  will-change: transform;
}
body::before {
  content: '';
  position: fixed;
  inset: -20%;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(38% 32% at var(--lg-global-x) var(--lg-global-y), rgba(255,255,255,.55), transparent 70%),
    radial-gradient(30% 26% at 78% 22%, rgba(255,214,150,.5), transparent 72%),
    radial-gradient(34% 30% at 16% 78%, rgba(168,214,140,.5), transparent 72%),
    radial-gradient(26% 24% at 62% 82%, rgba(150,200,235,.42), transparent 72%);
  animation: lgAmbient 26s ease-in-out infinite alternate;
  transition: background .5s linear;
}
@keyframes lgAmbient {
  0%   { transform: translate3d(0,0,0) scale(1); }
  50%  { transform: translate3d(-2%, 2.5%, 0) scale(1.06); }
  100% { transform: translate3d(2%, -2%, 0) scale(1.02); }
}

/* ---------- 玻璃基底 ---------- */
.lg-surface {
  isolation: isolate;
  overflow: hidden;
  -webkit-tap-highlight-color: transparent;
  /* 模糊统一由 .lg-refract 子层提供，父级自身的 backdrop 全部关闭，避免双层模糊 */
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  transition: box-shadow .45s cubic-bezier(.22,1,.36,1);
  box-shadow:
    0 1px 0 0 rgba(255,255,255,.55) inset,
    0 -1px 0 0 rgba(255,255,255,.22) inset,
    0 10px 34px -8px rgba(70,54,30,.24),
    0 3px 10px -2px rgba(70,54,30,.12) !important;
}

/* 折射层：模糊 + 饱和 + 亮度，并做 SVG 位移（真折射） */
.lg-surface > .lg-layer.lg-refract {
  position: absolute;
  inset: 0;
  z-index: -4;
  border-radius: inherit;
  -webkit-backdrop-filter: blur(var(--lg-blur)) saturate(var(--lg-sat)) brightness(var(--lg-bright)) contrast(1.06);
  backdrop-filter: blur(var(--lg-blur)) saturate(var(--lg-sat)) brightness(var(--lg-bright));
  pointer-events: none;
}

/* 色调层：苹果的淡磨砂白 + 环境色渗透 */
.lg-surface > .lg-layer.lg-tint {
  position: absolute;
  inset: 0;
  z-index: -3;
  border-radius: inherit;
  pointer-events: none;
  background:
    linear-gradient(148deg,
      rgba(255,255,255,.42) 0%,
      rgba(255,255,255,.34) 38%,
      rgba(255,255,255,.26) 62%,
      rgba(255,255,255,.42) 100%),
    radial-gradient(120% 90% at var(--lg-mx) var(--lg-my),
      rgba(255,255,255,.30) 0%,
      rgba(255,255,255,.04) 42%,
      transparent 70%);
  mix-blend-mode: normal;
}

/* 镜面高光：跟随指针位置的一块椭圆亮斑 */
.lg-surface > .lg-layer.lg-spec {
  position: absolute;
  inset: 0;
  z-index: -2;
  border-radius: inherit;
  pointer-events: none;
  background: radial-gradient(58% 46% at var(--lg-mx) var(--lg-my),
      rgba(255,255,255,.92) 0%,
      rgba(255,255,255,.42) 26%,
      rgba(255,255,255,.10) 52%,
      transparent 72%);
  opacity: .8;
  transition: background .12s linear;
}

/* 边缘光 + 内发光：玻璃厚度的关键 */
.lg-surface > .lg-layer.lg-rim {
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  pointer-events: none;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.62),
    inset 0 1px 1px rgba(255,255,255,.95),
    inset 0 -1px 1px rgba(255,255,255,.42),
    inset 1px 0 1px rgba(255,255,255,.30),
    inset -1px 0 1px rgba(255,255,255,.30),
    inset 0 0 18px rgba(255,255,255,.24);
  background:
    linear-gradient(180deg, rgba(255,255,255,.42), transparent 18%),
    linear-gradient(0deg, rgba(255,255,255,.22), transparent 14%);
}

/* 玻璃颗粒 */
.lg-surface > .lg-layer.lg-grain {
  position: absolute;
  inset: 0;
  z-index: 0;
  border-radius: inherit;
  pointer-events: none;
  opacity: .09;
  background-image: url(data:image/png;base64,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);
  background-size: 64px 64px;
  mix-blend-mode: normal;
}

/* 高光扫过（每 7 秒一次，模拟光在玻璃上流动） */
.lg-surface > .lg-layer.lg-shine {
  position: absolute;
  top: -60%;
  left: -40%;
  width: 46%;
  height: 220%;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(100deg,
    transparent 0%,
    rgba(255,255,255,.55) 45%,
    rgba(255,255,255,.85) 50%,
    rgba(255,255,255,.55) 55%,
    transparent 100%);
  transform: rotate(16deg) translateX(-260%);
  animation: lgShine 7.5s cubic-bezier(.4,0,.2,1) infinite;
  opacity: .6;
  display: none; /* 默认关闭，仅大面板开启 */
}
.topbar.lg-surface > .lg-shine, .tabbar.lg-surface > .lg-shine,
.sheet.lg-surface > .lg-shine, .quick.lg-surface > .lg-shine,
.glasscard.lg-surface > .lg-shine { display: block; }
@keyframes lgShine {
  0%, 62%  { transform: rotate(16deg) translateX(-260%); opacity: 0; }
  68%      { opacity: .75; }
  86%      { transform: rotate(16deg) translateX(420%); opacity: .2; }
  100%     { transform: rotate(16deg) translateX(420%); opacity: 0; }
}

/* 不同元素错开扫光节奏 */
.lg-surface:nth-child(3n)   > .lg-shine { animation-duration: 9.5s; animation-delay: -2.2s; }
.lg-surface:nth-child(3n+1) > .lg-shine { animation-duration: 11s;  animation-delay: -6.4s; }
.lg-surface:nth-child(5n)   > .lg-shine { animation-duration: 8.2s; animation-delay: -4.1s; }

/* 按下时液体鼓起 */
.lg-surface.lg-press {
  transform: scale(.975) translateZ(0);
  box-shadow:
    0 1px 0 0 rgba(255,255,255,.7) inset,
    0 2px 8px -2px rgba(70,54,30,.2) !important;
}
.lg-surface.lg-press > .lg-spec { opacity: 1; }

/* ---------- 涟漪 ---------- */
.lg-ripple {
  position: fixed;
  width: 12px; height: 12px;
  margin: -6px 0 0 -6px;
  border-radius: 50%;
  pointer-events: none;
  z-index: 9999;
  background: radial-gradient(circle, rgba(255,255,255,.85), rgba(255,255,255,.2) 60%, transparent 72%);
  animation: lgRipple .85s cubic-bezier(.2,.8,.3,1) forwards;
}
@keyframes lgRipple {
  0%   { transform: scale(0); opacity: .9; }
  55%  { opacity: .45; }
  100% { transform: scale(14); opacity: 0; }
}

/* ---------- 弹层液体注入 ---------- */
.sheet.show {
  animation: lgMorphIn .62s cubic-bezier(.16,1,.3,1) both;
  transform-origin: 50% 108%;
}
@keyframes lgMorphIn {
  0%   { transform: translate(-50%, 28%) scale(.86, .74); opacity: 0; border-radius: 42px; }
  46%  { transform: translate(-50%, -2%) scale(1.015, 1.01); opacity: 1; border-radius: 30px; }
  100% { transform: translate(-50%, 0) scale(1); opacity: 1; border-radius: 26px 26px 0 0; }
}
.modal.show .modalbox {
  animation: lgModalIn .55s cubic-bezier(.16,1,.3,1) both;
}
@keyframes lgModalIn {
  0%   { transform: scale(.72); opacity: 0; border-radius: 50%; }
  60%  { transform: scale(1.04); opacity: 1; }
  100% { transform: scale(1); border-radius: 22px; }
}

/* ---------- 顶部栏 / 底部栏更强的玻璃 ---------- */
.topbar.lg-surface, .tabbar.lg-surface, .quick.lg-surface {
  --lg-blur: 34px;
  --lg-sat: 2.1;
  box-shadow:
    0 1px 0 0 rgba(255,255,255,.6) inset,
    0 -1px 0 0 rgba(255,255,255,.3) inset,
    0 12px 40px -10px rgba(70,54,30,.3) !important;
}
.topbar.lg-surface > .lg-refract, .tabbar.lg-surface > .lg-refract {
  /* SVG 位移滤镜在部分渲染器上有严重重绘开销，改用 CSS 边缘渐变模拟折射 */
  filter: none;
}
.tabbar.lg-surface { --lg-blur: 40px; --lg-sat: 2.2; }
.sheet.lg-surface { --lg-blur: 26px; --lg-sat: 1.9; border-radius: 26px 26px 0 0; }
.sheet.lg-surface > .lg-refract {
  /* 弹层面积大，用纯 CSS 模拟厚玻璃折射：分层渐变边缘扭曲观感 */
  filter: none;
  box-shadow:
    inset 0 0 40px rgba(255,255,255,.30),
    inset 0 2px 0 rgba(255,255,255,.6);
}
.sheet.lg-surface > .lg-refract::after {
  content: '';
  position: absolute; inset: 0; border-radius: inherit;
  background:
    linear-gradient(90deg, rgba(255,255,255,.28), transparent 9%, transparent 91%, rgba(255,255,255,.28)),
    linear-gradient(0deg, rgba(255,255,255,.22), transparent 7%, transparent 93%, rgba(255,255,255,.22));
}

/* 卡片 */
.glasscard.lg-surface { --lg-radius: 18px; --lg-blur: 24px; }
/* 按钮 */
.pick-btn.lg-surface, .mini-btn.lg-surface, .qbtn.lg-surface {
  --lg-blur: 16px; --lg-sat: 1.7;
  box-shadow:
    0 1px 0 0 rgba(255,255,255,.8) inset,
    0 6px 18px -6px rgba(70,54,30,.28) !important;
}
.pick-btn.lg-surface > .lg-grain, .mini-btn.lg-surface > .lg-grain { opacity: .18; }

/* ---------- 3D 倾斜：仅卡片与按钮（避免破坏容器布局） ---------- */
.glasscard.lg-surface, .hayhero.lg-surface, .t90top.lg-surface, .t90entry.lg-surface,
.lotterybox.lg-surface, .nbcard.lg-surface, .travelcard.lg-surface, .calwrap.lg-surface,
.pick-btn.lg-surface, .mini-btn.lg-surface, .qbtn.lg-surface, .cell.lg-surface {
  transform: perspective(900px)
             rotateX(calc(var(--lg-tilt-x) * .3 + var(--lg-gyro-y) * .18))
             rotateY(calc(var(--lg-tilt-y) * .3 + var(--lg-gyro-x) * .18));
  transition: transform .35s cubic-bezier(.22,1,.36,1), box-shadow .45s;
}
.lg-surface.lg-press {
  transform: perspective(900px) scale(.975);
}

/* ---------- 低端机降级 ---------- */
.lg-lite .lg-surface > .lg-refract { filter: blur(14px) saturate(1.6); }
.lg-lite .lg-surface > .lg-grain,
.lg-lite .lg-surface > .lg-shine { display: none; }
.lg-lite .lg-surface { transform: none !important; }

/* ---------- 尊重减少动效偏好 ---------- */
@media (prefers-reduced-motion: reduce) {
  .lg-surface > .lg-shine { animation: none; display: none; }
  .lg-surface { transform: none !important; }
  body::before { animation: none; }
}

/* ===========================================================
   v2.1 · 美学升级：实景院子背景 + 机型三档自适应
   =========================================================== */
/* 实景院子（默认 yard 场景启用， purchased 场景仍用原配色） */
#scene .yardbg {
  position: absolute; inset: 0;
  background: url('yard_bg.jpg') center 88% / cover no-repeat;
  opacity: 0; transition: opacity .8s ease;
  pointer-events: none;
}
#scene[data-scene="yard"] .yardbg { opacity: 1; }
#scene[data-night="1"] .yardbg { opacity: 0; }
/* 融合柔光层：保证顶栏过渡自然、鸭子区域更聚焦 */
#scene .yardbg::after {
  content: ''; position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(253,248,236,.55) 0%, rgba(253,248,236,0) 26%),
    radial-gradient(ellipse at 50% 78%, rgba(255,251,235,.28) 0%, transparent 55%);
}
#scene[data-scene="yard"] .hills,
#scene[data-scene="yard"] .fence,
#scene[data-scene="yard"] .ground { opacity: 0; }
#scene[data-scene="yard"] .sky { transition: opacity .8s; }
#scene[data-scene="yard"] .clouds { opacity: .5; }

/* ---------- 机型三档自适应（6.3"~6.8"） ----------
   JS(adapt.js) 检测视口逻辑宽度与纵横比，写入 html[data-size]：
   m  ≈ 6.3~6.5" (360~392px)  标准档
   l  ≈ 6.6~6.7" (393~414px)  大屏档
   xl ≈ 6.7~6.8"+ (>414px)    超大档
   s  < 360px                 小屏兜底（也适配 6.1" 及以下）
------------------------------------------------------------- */
html[data-size="s"]  { font-size: 14.5px; }
html[data-size="m"]  { font-size: 15.5px; }
html[data-size="l"]  { font-size: 16.5px; }
html[data-size="xl"] { font-size: 17.5px; }
/* 布局变量由 rem 与 clamp 驱动 */
#app { max-width: clamp(360px, 100vw, 560px); }
.topbar { padding: max(10px, env(safe-area-inset-top)) 14px 8px; }

html[data-size="s"] .duckwrap { width: 70%; bottom: 4%; }
html[data-size="m"] .duckwrap { width: 66%; bottom: 5%; }
html[data-size="l"] .duckwrap { width: 62%; bottom: 6%; }
html[data-size="xl"] .duckwrap { width: 59%; bottom: 7%; }

html[data-size="s"] .topbar { font-size: .92rem; }
html[data-size="xl"] .topbar { font-size: 1.08rem; }
html[data-size="l"] .bars, html[data-size="xl"] .bars { padding: 12px 18px 10px; }
html[data-size="xl"] .bars { padding: 14px 20px 12px; }
html[data-size="s"] #scene .sun { width: 38px; height: 38px; }
html[data-size="xl"] #scene .sun { width: 54px; height: 54px; }

/* 高个机型（19.5:9 ~ 21:9）让鸭子站得更居中 */
@media (min-aspect-ratio: 9/19) {
  html[data-size="l"] .duckwrap, html[data-size="xl"] .duckwrap { bottom: 10%; }
}
/* 矮宽机型兜底 */
@media (max-aspect-ratio: 9/16) {
  .duckwrap { width: 56% !important; }
}
/* 平板/桌面：居中手机壳式呈现 */
@media (min-width: 700px) {
  #app { max-width: 430px; box-shadow: 0 0 60px rgba(60,50,30,.18); border-radius: 24px; margin: 12px 0; height: calc(100% - 24px); }
}

/* ===== 笔记页 ===== */
.notelayer{position:fixed;inset:0;z-index:80;background:var(--cream);display:flex;flex-direction:column;
  padding-top:env(safe-area-inset-top,0px);}
.notelayer.hidden{display:none;}
.notehead{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--paper);}
.notehead h2{flex:1;margin:0;font-size:17px;font-weight:600;color:var(--ink);text-align:center;}
.nback,.nadd{border:0;background:transparent;color:var(--ink);width:36px;height:36px;border-radius:50%;
  font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;}
.nadd{background:var(--green);color:#fff;font-size:20px;box-shadow:var(--shadow);}
.nback:active,.nadd:active{transform:scale(.94);}
.notebody{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px 16px calc(24px + var(--safe-b));}
.notelist{display:flex;flex-direction:column;gap:10px;}
.noteitem{text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:14px;
  padding:12px 14px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:3px;font-family:inherit;
  color:var(--ink);transition:transform .12s ease;}
.noteitem:active{transform:scale(.985);}
.noteitem b{font-size:15px;font-weight:600;color:var(--ink);}
.notemeta{font-size:11px;color:var(--ink2);}
.noteitem p{margin:2px 0 0;font-size:13px;color:var(--ink2);line-height:1.5;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.noteempty{text-align:center;color:var(--ink2);padding:64px 20px;font-size:15px;line-height:2;}
.noteempty span{font-size:12px;opacity:.75;}
.noteedit{display:flex;flex-direction:column;gap:12px;min-height:100%;}
.notetitleinput{border:1px solid var(--line);background:var(--paper);border-radius:12px;padding:12px 14px;
  font-size:16px;color:var(--ink);outline:none;font-family:inherit;}
.notetextarea{flex:1;min-height:300px;border:1px solid var(--line);background:var(--paper);border-radius:12px;
  padding:14px;font-size:15px;line-height:1.75;color:var(--ink);outline:none;resize:none;font-family:inherit;}
.notetitleinput:focus,.notetextarea:focus{border-color:var(--green);}
.notebtns{display:flex;gap:10px;position:sticky;bottom:0;}
.notebtns button{flex:1;border:0;border-radius:12px;padding:13px;font-size:15px;font-family:inherit;}
.notedel{background:#f3ded8;color:#b4553f;}
.notesave{background:var(--green2);color:#fff;}
.notesave:disabled{opacity:.6;}

/* ===== v2.4 笔记附件 + 更新弹窗 ===== */
.notefiles{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.notefile{position:relative;width:calc(50% - 4px);border-radius:12px;overflow:hidden;background:rgba(255,255,255,.6);
  box-shadow:0 2px 8px rgba(90,70,50,.12);padding:6px;box-sizing:border-box}
.notefile img{width:100%;height:110px;object-fit:cover;border-radius:8px;display:block}
.notefile video{width:100%;height:120px;border-radius:8px;background:#000;display:block}
.notefilelink{display:block;font-size:12.5px;color:#4a7c2f;font-weight:600;word-break:break-all;padding:10px 4px;text-decoration:none}
.notefilemeta{display:block;font-size:11px;opacity:.6;padding:2px 4px}
.notefiledel{position:absolute;top:6px;right:6px;width:22px;height:22px;border-radius:50%;border:0;
  background:rgba(0,0,0,.45);color:#fff;font-size:12px;line-height:1;cursor:pointer}
.notethumbs{display:flex;gap:4px;margin-top:6px}
.notethumb{width:34px;height:34px;border-radius:7px;overflow:hidden;display:flex;align-items:center;justify-content:center;
  background:rgba(143,185,106,.18);font-size:16px}
.notethumb img{width:100%;height:100%;object-fit:cover}
.noteattach{background:rgba(255,255,255,.75);border:1px solid rgba(143,185,106,.5);color:#4a3b2a;
  border-radius:16px;padding:9px 14px;font-size:13.5px;font-weight:600;cursor:pointer}
.notehint{font-size:12px;opacity:.65;margin-top:6px;min-height:16px}
.upprog{margin-top:10px;height:34px;border-radius:10px;background:rgba(143,185,106,.16);overflow:hidden;position:relative}
.upprog .upbar{position:absolute;left:0;top:0;bottom:0;width:0;
  background:linear-gradient(90deg,#8fb96a,#6f9a4d);transition:width .25s ease}
.upprog i{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-style:normal;font-size:12.5px;color:#3b3025;font-weight:600}
.upnotes{max-height:180px;overflow:auto;font-size:13.5px;color:#4a3b2a}
.upbox .upnum{font-size:26px;font-weight:800;color:#4a7c2f}

/* ===== v2.5 十三项大功能 ===== */
.m13hero{display:flex;align-items:center;gap:12px;background:linear-gradient(135deg,#fffdf7,#f4f8ec);
  border:1px solid var(--line);border-radius:16px;padding:12px 14px;margin:4px 0 12px;box-shadow:var(--shadow)}
.m13hicon{font-size:30px;line-height:1}
.m13htxt b{display:block;font-size:14.5px;color:var(--ink)}
.m13htxt i{display:block;font-style:normal;font-size:11.5px;color:var(--ink2);margin-top:3px;line-height:1.45}
.m13bar{height:7px;border-radius:6px;background:#efe6d6;overflow:hidden;margin:6px 0 3px}
.m13bar i{display:block;height:100%;border-radius:6px;transition:width .3s ease}
.m13row{display:flex;align-items:center;gap:10px;background:rgba(255,255,255,.72);
  border:1px solid var(--line);border-radius:13px;padding:10px 12px;margin-bottom:8px}
.m13rmain{flex:1;min-width:0}
.m13rmain b{display:block;font-size:13px;color:var(--ink)}
.m13rmain i{display:block;font-style:normal;font-size:11px;color:var(--ink2);margin-top:2px;line-height:1.4}
.m13row .mini-btn{flex-shrink:0}
.m13done{opacity:.5}
.m13dim{opacity:.55}
.m13slots{display:flex;gap:8px;margin-bottom:10px}
.m13slot{flex:1;border-radius:14px;padding:12px 10px;text-align:center;border:1px dashed var(--line);
  background:rgba(255,255,255,.6);display:flex;flex-direction:column;align-items:center;gap:4px}
.m13slot b{font-size:12.5px;color:var(--ink)}
.m13slot i{font-style:normal;font-size:11px;color:var(--ink2)}
.m13slot.warm{background:linear-gradient(#fff7ea,#fdf0d8);border-color:#ecd6a8}
.m13slot.ready{background:linear-gradient(#f2fbe8,#e6f5d4);border-color:#c9e2ac}
.m13slot .mini-btn{margin-top:4px}
.m13alert{background:#fdeeea;border:1px solid #f0c9bf;color:#a5522f;border-radius:13px;
  padding:11px 13px;font-size:12.5px;line-height:1.55;margin-bottom:10px}
.m13ok{background:#eef7e4;border:1px solid #cfe6b7;color:#4d6b33;border-radius:13px;
  padding:11px 13px;font-size:12.5px;margin-bottom:10px}
.m13chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}
.m13chip{background:rgba(143,185,106,.16);border:1px solid rgba(143,185,106,.35);color:#4a6b2e;
  border-radius:12px;padding:5px 10px;font-size:11.5px;font-weight:600}
.m13chip.dim{background:rgba(0,0,0,.04);border-color:var(--line);color:var(--ink2);font-weight:400}
.m13chipbtn{background:#fff;border:1px solid var(--line);border-radius:12px;padding:8px 10px;
  font-size:11.5px;color:var(--ink);cursor:pointer;font-weight:600}
.m13chipbtn:active{transform:translateY(1px)}
.m13card{background:rgba(255,255,255,.75);border:1px solid var(--line);border-radius:15px;
  padding:11px 12px;margin-bottom:9px;box-shadow:var(--shadow)}
.m13chead{display:flex;gap:10px;align-items:center}
.m13cicon{font-size:26px}
.m13quote{font-size:11.5px;color:var(--ink2);margin:7px 0 8px;line-height:1.5}
.m13btns{display:flex;gap:6px;flex-wrap:wrap}
.m13mail{display:block;width:100%;text-align:left;background:#fffdf6;border:1px solid var(--line);
  border-radius:13px;padding:10px 12px;margin-bottom:7px;cursor:pointer;font-family:inherit}
.m13mail b{display:block;font-size:12.5px;color:var(--ink)}
.m13mail span{display:block;font-size:11.5px;color:var(--ink2);margin:3px 0;line-height:1.45}
.m13mail i{font-style:normal;font-size:10.5px;color:#b07d1c}
.m13mail.read{opacity:.62;background:#faf7ef}
.m13mats{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.m13mats span{font-size:10.5px;font-weight:600}
.m13okm{color:#4d7a2e}
.m13nom{color:#b0563a}


/* ===== v2.6.0 场景背景（在线照片，透明画布上的 3D 小鸭站上去） ===== */
#scene .photobg {
  position: absolute; inset: 0; z-index: 0;
  background-size: cover; background-position: center; background-repeat: no-repeat;
  transition: background-image .4s ease;
}
#scene.hasPhoto .sky, #scene.hasPhoto .yardbg, #scene.hasPhoto .hills,
#scene.hasPhoto .ground, #scene.hasPhoto .fence, #scene.hasPhoto .weatherlayer { opacity: 0 !important; }
#scene.hasPhoto .sun, #scene.hasPhoto .clouds { opacity: .35 !important; }

/* ===== 诗意文案 ===== */
.poem { font-size: 14px; line-height: 1.7; color: #5a4a36; font-style: italic;
  background: rgba(255,255,255,.5); padding: 10px 12px; border-radius: 12px;
  border-left: 3px solid #e0a02b; margin: 4px 0 10px; }
.hint b { color: #c0641f; }

/* ===== 场景画廊 ===== */
.bglists { max-height: 52vh; overflow: auto; }
.bggrp { margin-bottom: 12px; }
.bggrp-t { font-size: 12px; color: #8a7a5e; margin: 6px 2px; }
.bggrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.bgtile { border: none; background: #f3ecdd; border-radius: 10px; padding: 0; overflow: hidden; cursor: pointer; }
.bgtile img { width: 100%; height: 46px; object-fit: cover; display: block; background: #ddd; }
.bgtile i { display: block; font-style: normal; font-size: 10px; color: #6a5a40; padding: 2px 0 4px; }
.bigbtn { display: block; width: 100%; margin-top: 12px; padding: 12px; border: none;
  border-radius: 14px; background: linear-gradient(135deg,#f5c46b,#e89b3c); color: #fff;
  font-size: 15px; font-weight: 600; cursor: pointer; }
.bigbtn:active { transform: scale(.98); }


/* ===== v2.6.1 AI 形象小鸭 ===== */
#duckHolder .duckstage { position: relative; width: 100%; height: 100%; display: flex; align-items: flex-end; justify-content: center; }
#duckHolder .duckanim { width: 96%; max-width: 330px; transform-origin: 50% 94%; will-change: transform; animation: duckBreathe 3.2s ease-in-out infinite; }
#duckHolder .duckimg { width: 100%; height: auto; display: block; filter: drop-shadow(0 10px 12px rgba(90,70,40,.22)); pointer-events: none; user-select: none; -webkit-user-drag: none; }
#duckHolder .duckshadow { position: absolute; left: 50%; bottom: 2%; width: 52%; height: 9%; transform: translateX(-50%);
  background: radial-gradient(ellipse at center, rgba(70,55,30,.28) 0%, rgba(70,55,30,0) 70%); border-radius: 50%; animation: duckShdw 3.2s ease-in-out infinite; }
#duckHolder .duckstage.duck-sad .duckimg { filter: drop-shadow(0 10px 12px rgba(90,70,40,.22)) saturate(.85); }
#duckHolder .duckstage.duck-sleepy .duckanim { animation-duration: 5.5s; }
@keyframes duckBreathe { 0%,100% { transform: scale(1,1); } 50% { transform: scale(1.012,.985); } }
@keyframes duckShdw { 0%,100% { opacity: 1; transform: translateX(-50%) scale(1); } 50% { opacity: .92; transform: translateX(-50%) scale(1.02); } }


/* ===== v3.3.0 性能自适应 ===== */
/* 低端机：去掉大面积模糊与滤镜，只保留基础透明感 */
body.perf-low .lg-layer { display: none !important; }
body.perf-low .lg-surface {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  background: rgba(255,255,255,.72) !important;
}
body.perf-low .glasscard, body.perf-low .sheet { box-shadow: 0 2px 10px rgba(90,70,40,.08) !important; }
/* 低端机：关掉持续动画（呼吸、漂浮、闪烁），避免一直占着合成器 */
body.perf-low #duckHolder .duckanim,
body.perf-low #duckHolder .duckshadow,
body.perf-low .clouds,
body.perf-low .sun,
body.perf-low .dot,
body.perf-low .spark { animation: none !important; }
body.perf-low #scene .photobg { transition: none !important; }
/* 页面在后台时不跑动画 */
html[data-paused="1"] * { animation-play-state: paused !important; }

/* ===========================================================
   v3.4 · 登录 / 注册页
   =========================================================== */
.authbox {
  position: fixed; inset: 0; z-index: 1200;
  background: linear-gradient(165deg, #eaf4dc 0%, #fdf6e2 48%, #e3f0f6 100%);
  display: flex; align-items: center; justify-content: center;
  padding: 24px 20px calc(24px + var(--safe-b));
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.authInner { width: 100%; max-width: 330px; text-align: center; }
.authDuck {
  font-size: 54px; line-height: 1; margin-bottom: 6px;
  animation: authfloat 3.4s ease-in-out infinite;
}
.authDuck img { width: 88px; height: 88px; object-fit: contain; filter: drop-shadow(0 6px 10px rgba(94,74,40,.18)); }
@keyframes authfloat {
  0%, 100% { transform: translateY(0) rotate(-3deg); }
  50% { transform: translateY(-7px) rotate(3deg); }
}
.authTitle {
  font-size: 26px; margin: 2px 0 4px; letter-spacing: 3px;
  color: var(--ink); font-weight: 700;
}
.authSub { font-size: 12.5px; color: var(--ink2); margin: 0 0 20px; letter-spacing: .5px; }

.authTabs {
  display: flex; gap: 6px; background: rgba(255, 255, 255, .62);
  border: 1px solid var(--line); border-radius: 14px; padding: 4px; margin-bottom: 16px;
  box-shadow: 0 2px 10px rgba(94, 74, 40, .07);
}
.atab {
  flex: 1; border: 0; background: transparent; padding: 9px 0;
  font-size: 14px; color: var(--ink2); border-radius: 11px;
  font-family: inherit; cursor: pointer; transition: all .18s;
}
.atab.on {
  background: linear-gradient(#fff, #f7f0de);
  color: var(--ink); font-weight: 700;
  box-shadow: 0 2px 6px rgba(94, 74, 40, .12);
}

.authForm { text-align: left; }
.afield { display: block; margin-bottom: 12px; }
.alabel {
  display: block; font-size: 12px; color: var(--ink2);
  margin: 0 0 5px 3px; letter-spacing: .3px;
}
.afield input {
  width: 100%; padding: 12px 14px; font-size: 15px;
  border: 1px solid var(--line); border-radius: 13px;
  background: rgba(255, 255, 255, .85); color: var(--ink);
  font-family: inherit; outline: none;
  transition: border-color .18s, box-shadow .18s;
  user-select: text; -webkit-user-select: text;
}
.afield input::placeholder { color: #b9ab94; font-size: 13px; }
.afield input:focus {
  border-color: var(--green2);
  box-shadow: 0 0 0 3px rgba(143, 185, 106, .22);
}
.aerr {
  min-height: 18px; font-size: 12.5px; color: #c0553f;
  margin: 0 3px 8px; line-height: 1.4;
}
.authGo { width: 100%; margin-top: 2px; }
.atip {
  font-size: 11.5px; color: #a1937c; line-height: 1.6;
  margin: 14px 0 0; text-align: center;
}
.alink {
  margin-top: 16px; border: 0; background: transparent;
  color: var(--ink2); font-size: 12.5px; text-decoration: underline;
  font-family: inherit; opacity: .7; cursor: pointer; padding: 6px;
}
