/* =========================================================
   样式：决定每样东西长什么样
   ========================================================= */
:root{
  --ease: cubic-bezier(.32,.72,0,1);   /* 模仿 iOS 的动画手感 */
  --green: #07c160;                    /* 微信绿 */
  --blue: #007aff;
  --grey: #8e8e93;
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Helvetica Neue", sans-serif;
  -webkit-font-smoothing: antialiased;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}
html,body{height:100%;overflow:hidden;background:radial-gradient(ellipse at 50% 30%,#2a2a30,#0b0b0d 70%)}
body{display:flex;align-items:center;justify-content:center}
button{border:0;background:none;font:inherit;color:inherit;cursor:pointer;text-align:inherit}
input{font:inherit;-webkit-user-select:text;user-select:text}
svg{display:block}

/* ---------- 手机外框 ---------- */
#phone{position:relative;width:393px;height:852px;flex:none;border-radius:56px;overflow:hidden;background:#000;
  box-shadow:0 0 0 10px #121214,0 0 0 12px #3b3b40,0 30px 80px rgba(0,0,0,.7);isolation:isolate}
#phone.mob{border-radius:0;box-shadow:none}            /* 在真手机上打开：去掉外框 */
#screen{position:absolute;inset:0;overflow:hidden}
.layer{position:absolute;inset:0}

/* 壁纸：默认是渐变色；在 data.js 里填 WALLPAPER 就会换成你的图片 */
#wall{position:absolute;inset:-20px;
  background:radial-gradient(circle at 20% 15%,rgba(255,154,139,.9) 0,transparent 45%),
             radial-gradient(circle at 85% 70%,rgba(106,130,251,.9) 0,transparent 50%),
             linear-gradient(160deg,#2b5876,#4e4376 60%,#1a1a2e);
  background-size:cover;background-position:center;
  transition:filter .4s,transform .4s}
#wall.blur{filter:blur(20px) brightness(.6);transform:scale(1.1)}

#home{z-index:10;visibility:hidden}
#lock{z-index:30;color:#fff}
#app{z-index:20;visibility:hidden;background:#fff;overflow:hidden}

/* ---------- 状态栏 / 灵动岛 / 底部横条 ---------- */
#statusbar{position:absolute;z-index:80;top:0;left:0;right:0;height:54px;display:flex;justify-content:space-between;align-items:center;
  padding:6px 30px 0 44px;pointer-events:none;color:#000;transition:color .3s}
#statusbar.light{color:#fff}
#sbTime{font-size:17px;font-weight:600;width:60px;text-align:center}
#statusbar .icons{display:flex;gap:6px;align-items:center}
#statusbar svg{fill:currentColor}
#island{position:absolute;z-index:90;top:11px;left:50%;transform:translateX(-50%);width:124px;height:36px;border-radius:20px;background:#000;pointer-events:none}
#homebar{position:absolute;z-index:85;bottom:0;left:0;right:0;height:34px;display:flex;justify-content:center;align-items:flex-end;padding-bottom:8px;cursor:pointer}
#homebar i{width:139px;height:5px;border-radius:3px;background:#000;transition:background .3s,transform .2s}
#homebar.light i{background:#fff}
#homebar:hover i{transform:scaleX(1.08)}

/* ---------- 锁屏 ---------- */
#lockMain{position:absolute;inset:0;touch-action:none;cursor:grab}
.lk-date{position:absolute;top:84px;width:100%;text-align:center;font-size:21px;font-weight:600;text-shadow:0 1px 8px rgba(0,0,0,.25)}
.lk-time{position:absolute;top:104px;width:100%;text-align:center;font-size:96px;font-weight:600;letter-spacing:-2px;line-height:1.1;
  font-variant-numeric:tabular-nums;text-shadow:0 2px 20px rgba(0,0,0,.2)}
.lk-notes{position:absolute;left:10px;right:10px;bottom:118px;display:flex;flex-direction:column;gap:8px}
.lk-hint{position:absolute;bottom:44px;width:100%;text-align:center;font-size:14px;font-weight:500;animation:hint 2.4s ease-in-out infinite;pointer-events:none}
@keyframes hint{0%,100%{opacity:.25;transform:none}50%{opacity:.9;transform:translateY(-4px)}}

/* 通知卡片（锁屏和顶部横幅共用），毛玻璃效果 */
.ncard{display:flex;gap:10px;align-items:flex-start;width:100%;padding:12px 14px;border-radius:22px;color:#111;text-align:left;
  background:rgba(245,245,247,.6);-webkit-backdrop-filter:blur(30px) saturate(1.8);backdrop-filter:blur(30px) saturate(1.8)}
.ncard .ni{width:38px;height:38px;border-radius:9px;overflow:hidden;flex:none}
.ncard .ni svg{width:100%;height:100%}
.ncard .nt{flex:1;min-width:0}
.ncard .nh{display:flex;justify-content:space-between;gap:8px;font-size:15px;font-weight:600}
.ncard .nh small{font-weight:400;color:rgba(0,0,0,.5);font-size:13px;white-space:nowrap}
.ncard .nb{font-size:15px;line-height:1.3;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* 输入密码 */
#pin{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;padding-top:120px}
#pin .pt{font-size:20px;font-weight:500}
.pdots{display:flex;gap:22px;margin:22px 0 46px}
.pdots i{width:13px;height:13px;border-radius:50%;border:1.5px solid #fff;transition:background .1s}
.pdots i.on{background:#fff}
.pdots.shake{animation:shake .45s}
@keyframes shake{20%{transform:translateX(-14px)}40%{transform:translateX(12px)}60%{transform:translateX(-8px)}80%{transform:translateX(5px)}}
.pkeys{display:grid;grid-template-columns:repeat(3,78px);gap:16px 26px}
.pk{width:78px;height:78px;border-radius:50%;background:rgba(255,255,255,.18);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:background .35s}
.pk.down{background:rgba(255,255,255,.55);transition:none}
.pk b{font-size:36px;font-weight:400;line-height:1}
.pk small{font-size:10px;font-weight:700;letter-spacing:2px;margin-top:2px;min-height:12px}
.pbot{position:absolute;bottom:50px;left:48px;right:48px;display:flex;justify-content:space-between;font-size:16px}

/* ---------- 主屏幕 ---------- */
.hgrid{position:absolute;top:70px;left:20px;right:20px;display:grid;grid-template-columns:repeat(4,1fr);row-gap:26px;justify-items:center}
.app-btn{display:flex;flex-direction:column;align-items:center;gap:6px;width:74px}
.icon{position:relative;width:62px;height:62px;border-radius:14px;box-shadow:0 2px 6px rgba(0,0,0,.2);transition:transform .15s,filter .15s}
.icon svg{width:100%;height:100%;border-radius:14px}
.app-btn:active .icon{transform:scale(.9);filter:brightness(.85)}
.lbl{color:#fff;font-size:12px;font-weight:500;text-shadow:0 1px 4px rgba(0,0,0,.5)}
.badge{position:absolute;top:-6px;right:-7px;min-width:22px;height:22px;padding:0 6px;border-radius:11px;background:#ff3b30;color:#fff;
  font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center}
/* 日历小组件，占 2×2 格 */
.widget{grid-column:span 2;grid-row:span 2;width:calc(100% - 8px);aspect-ratio:1;border-radius:24px;padding:15px 16px;background:#fff;color:#000;box-shadow:0 2px 10px rgba(0,0,0,.2)}
.widget .wd{color:#ff3b30;font-size:13px;font-weight:700}
.widget .wn{font-size:44px;font-weight:300;line-height:1;margin:2px 0 8px}
.widget .we{font-size:13px;font-weight:600;padding-left:7px;border-left:3px solid #af52de;margin-top:6px;line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.widget .we small{display:block;color:var(--grey);font-weight:400;font-size:12px}

/* ---------- 通用页面 ---------- */
.page{position:absolute;inset:0;background:#fff;overflow:hidden;display:flex;flex-direction:column}

/* ---------- 微信：聊天列表 ---------- */
.wx{background:#ededed}
.wx-head{flex:none;height:96px;padding:54px 14px 0;display:grid;grid-template-columns:40px 1fr 40px;align-items:center;text-align:center}
.wx-head b{font-size:17px;font-weight:600}
.wx-head svg{width:24px;height:24px;stroke:#111;fill:none;stroke-width:1.6;justify-self:end}
.wx-list{flex:1;overflow-y:auto;background:#fff;scrollbar-width:none}
.wx-list::-webkit-scrollbar{display:none}
.wx-search{background:#ededed;padding:2px 10px 10px}
.sbox{height:36px;border-radius:6px;background:#fff;display:flex;align-items:center;justify-content:center;gap:5px;color:#b2b2b2;font-size:15px}
.sbox svg{width:16px;height:16px;stroke:#b2b2b2;fill:none;stroke-width:2}
.wx-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 16px;text-align:left;position:relative;background:#fff}
.wx-row:active{background:#e5e5e5}
.wx-row+.wx-row::before{content:'';position:absolute;top:0;left:76px;right:0;height:.5px;background:#e5e5e5}
.wx-row .info{flex:1;min-width:0}
.wx-row .top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.wx-row .name{font-size:16.5px;color:#111;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wx-row .time{font-size:12px;color:#b2b2b2;flex:none}
.wx-row .preview{font-size:14px;color:#9a9a9a;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wx-tabs{flex:none;height:84px;padding:6px 0 30px;display:flex;background:#f7f7f7;border-top:.5px solid #ddd}
.wx-tabs button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10.5px;color:#191919}
.wx-tabs button.on{color:var(--green)}
.wx-tabs svg{width:26px;height:26px;stroke:currentColor;fill:none;stroke-width:1.6}

/* 头像：有照片显示照片，没有就显示名字第一个字 */
.avatar{position:relative;width:48px;height:48px;border-radius:6px;flex:none;display:grid;place-items:center;color:#fff;font-size:20px;font-weight:600;
  background-size:cover;background-position:center}
.avatar .dotb{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#fa5151;color:#fff;
  font-size:11px;font-weight:500;display:flex;align-items:center;justify-content:center}

/* ---------- 微信：聊天界面 ---------- */
.chat{background:#ededed}
.chat-head{flex:none;height:96px;padding:54px 8px 0;display:grid;grid-template-columns:70px 1fr 70px;align-items:center;text-align:center;border-bottom:.5px solid #d9d9d9}
.chat-head .back{display:flex;align-items:center;gap:2px;height:40px;padding-left:4px;font-size:16px;color:#111}
.chat-head .back svg{width:12px;height:20px;stroke:#111;fill:none;stroke-width:2.2}
.chat-head b{font-size:17px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-head .more{justify-self:end;padding-right:6px}
.chat-head .more svg{width:24px;height:24px;fill:#111}
.msgs{flex:1;overflow-y:auto;padding:6px 12px 16px;scrollbar-width:none}
.msgs::-webkit-scrollbar{display:none}
.tpill{text-align:center;font-size:12px;color:#b2b2b2;margin:16px 0 6px}
.msg{display:flex;gap:9px;margin:12px 0;align-items:flex-start}
.msg.me{flex-direction:row-reverse}
.msg .avatar{width:40px;height:40px;border-radius:5px;font-size:17px}
.bubble{position:relative;max-width:68%;padding:9px 12px;border-radius:6px;font-size:16px;line-height:1.45;word-break:break-word;white-space:pre-wrap;
  background:#fff;color:#111;-webkit-user-select:text;user-select:text}
.bubble::before{content:'';position:absolute;top:14px;left:-4px;width:9px;height:9px;background:inherit;transform:rotate(45deg)}
.me .bubble{background:#95ec69}
.me .bubble::before{left:auto;right:-4px}
.bubble.img{padding:0;background:none}
.bubble.img::before{display:none}
.bubble.img img{display:block;max-width:180px;max-height:240px;border-radius:6px}
.msg.pop{animation:pop .3s cubic-bezier(.2,1.3,.4,1)}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.96)}}
.chat-input{flex:none;display:flex;align-items:center;gap:8px;padding:8px 10px 38px;background:#f7f7f7;border-top:.5px solid #ddd}
.chat-input svg{width:28px;height:28px;stroke:#181818;fill:none;stroke-width:1.5;flex:none}
.chat-input input{flex:1;min-width:0;height:40px;border:0;border-radius:6px;background:#fff;padding:0 10px;font-size:16px;outline:none;color:#111}
.chat-input .send{flex:none;height:34px;padding:0 13px;border-radius:5px;background:var(--green);color:#fff;font-size:15px;display:none}
.chat-input.has .send{display:block}
.chat-input.has .plus{display:none}

/* ---------- 顶部通知横幅 ---------- */
.banner{position:absolute;z-index:95;top:52px;left:8px;right:8px}
.banner .ncard{background:rgba(245,245,247,.9);box-shadow:0 8px 30px rgba(0,0,0,.2)}

/* ---------- 地图 ---------- */
.mapp{background:#f2efe9}
.map-wrap{position:absolute;inset:0;overflow:hidden;touch-action:none;cursor:grab}
.map-wrap:active{cursor:grabbing}
.map-canvas{position:absolute;left:0;top:0;width:1000px;height:1300px}
.pin-m{position:absolute;transform:translate(-50%,-17px);display:flex;flex-direction:column;align-items:center}
.pin-m .pc{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:17px;border:2.5px solid #fff;
  box-shadow:0 2px 6px rgba(0,0,0,.25);transition:transform .25s cubic-bezier(.2,1.4,.4,1)}
.pin-m .pl{font-size:12px;font-weight:600;color:#333;margin-top:3px;white-space:nowrap;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 3px #fff}
.pin-m.sel .pc{transform:scale(1.3)}
.me-dot{position:absolute;width:20px;height:20px;border-radius:50%;background:var(--blue);border:3px solid #fff;transform:translate(-50%,-50%);animation:me 2s infinite}
@keyframes me{0%{box-shadow:0 0 0 0 rgba(0,122,255,.4),0 1px 4px rgba(0,0,0,.3)}100%{box-shadow:0 0 0 26px rgba(0,122,255,0),0 1px 4px rgba(0,0,0,.3)}}
.map-btns{position:absolute;top:60px;right:10px;z-index:3;border-radius:10px;background:rgba(255,255,255,.95);box-shadow:0 2px 10px rgba(0,0,0,.15);overflow:hidden}
.map-btns button{width:44px;height:44px;display:grid;place-items:center}
.map-btns svg{width:22px;height:22px;fill:var(--blue)}
.map-sheet{position:absolute;z-index:4;left:0;right:0;bottom:0;max-height:48%;overflow-y:auto;padding:8px 16px 44px;border-radius:16px 16px 0 0;
  background:rgba(246,246,248,.97);-webkit-backdrop-filter:blur(30px);backdrop-filter:blur(30px);box-shadow:0 -2px 18px rgba(0,0,0,.14);scrollbar-width:none}
.grab{width:36px;height:5px;border-radius:3px;background:#c7c7cc;margin:0 auto 10px}
.msearch{height:38px;border-radius:10px;background:rgba(118,118,128,.12);display:flex;align-items:center;gap:6px;padding:0 10px;color:var(--grey);font-size:16px}
.msearch svg{width:16px;height:16px;stroke:var(--grey);fill:none;stroke-width:2}
.mh{font-size:13px;color:var(--grey);margin:14px 2px 8px;font-weight:600}
.mfav{display:flex;gap:14px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.mfav button{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:12.5px;min-width:58px;text-align:center}
.mfav .fc{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-size:22px}
.mdet h2{font-size:24px;margin:2px 40px 2px 0}
.mdet .sub{color:var(--grey);font-size:14px}
.mdet .acts{display:flex;gap:8px;margin-top:12px}
.mdet .acts button{flex:1;border-radius:11px;padding:10px 0;background:#fff;color:var(--blue);font-size:14px;font-weight:600;text-align:center}
.mdet .acts .pri{background:var(--blue);color:#fff}
.mdet p{margin-top:12px;background:#fff;border-radius:11px;padding:12px 14px;font-size:15px;line-height:1.55}
.mclose{position:absolute;top:22px;right:16px;width:30px;height:30px;border-radius:50%;background:rgba(118,118,128,.16);color:#666;font-size:14px;text-align:center}