/* ============ 会员端 H5（手机稿）样式 ============ */

.stage{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;gap:36px;padding:40px 24px;
  background:
    radial-gradient(1200px 500px at 15% 0%,#EEF2FF 0%,transparent 60%),
    radial-gradient(1000px 500px at 85% 100%,#FDF4E3 0%,transparent 55%),
    #F1F3F9}
.stage.center{align-items:center}

/* 手机机身 */
.phone{width:390px;height:844px;background:#F7F8FC;border-radius:54px;border:11px solid #10131C;overflow:hidden;
  position:relative;display:flex;flex-direction:column;box-shadow:0 30px 80px rgba(15,23,42,.35);flex-shrink:0}
.phone::before{content:"";position:absolute;top:11px;left:50%;transform:translateX(-50%);width:118px;height:30px;background:#10131C;border-radius:999px;z-index:60}
.phone::after{content:"";position:absolute;right:-3px;top:210px;width:3px;height:64px;background:#262B3A;border-radius:2px;z-index:2}
.p-status{height:52px;flex-shrink:0;display:flex;align-items:flex-end;justify-content:space-between;padding:0 26px 4px;font-size:13px;font-weight:600;color:var(--ink);position:relative;z-index:50}
.p-status .right{display:flex;gap:5px;align-items:center}
.p-status svg{width:15px;height:15px}
.p-status.on-dark{color:#fff}
.p-body{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;scrollbar-width:none}
.p-body::-webkit-scrollbar{display:none}
.p-tabbar{flex-shrink:0;background:#fff;border-top:.5px solid var(--line2);display:flex;padding:6px 6px calc(10px + 14px);position:relative;z-index:50}
.p-tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;color:var(--t3);padding:3px 0}
.p-tabbar a svg{width:21px;height:21px}
.p-tabbar a.on{color:var(--p1);font-weight:600}
.p-home-indicator{position:absolute;bottom:7px;left:50%;transform:translateX(-50%);width:130px;height:5px;border-radius:99px;background:#0F172A;opacity:.85;z-index:60}

/* —— 页头 —— */
.m-head{background:linear-gradient(150deg,#4F46E5 0%,#7C3AED 60%,#9333EA 100%);color:#fff;padding:10px 18px 58px;position:relative;overflow:hidden}
.m-head::after{content:"";position:absolute;right:-50px;top:-60px;width:200px;height:200px;border-radius:50%;background:rgba(255,255,255,.09)}
.m-head::before{content:"";position:absolute;right:40px;top:30px;width:110px;height:110px;border-radius:50%;background:rgba(255,255,255,.06)}
.m-head .row1{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:1}
.m-head .store{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600}
.m-head .store .slogo{width:26px;height:26px;border-radius:8px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:13px}
.m-head .hi{margin-top:18px;display:flex;align-items:center;gap:12px;position:relative;z-index:1}
.m-head .hi .avatar{width:46px;height:46px;font-size:17px;border:2px solid rgba(255,255,255,.6)}
.m-head .hi .nm{font-size:17px;font-weight:600}
.m-head .hi .sub{font-size:11.5px;opacity:.85;margin-top:1px}

/* 悬浮汇总卡（压在渐变上） */
.m-float{margin:-42px 14px 0;background:#fff;border-radius:18px;box-shadow:0 10px 30px rgba(79,70,229,.16);padding:16px 6px;display:flex;position:relative;z-index:2}
.m-float .fi{flex:1;text-align:center;position:relative}
.m-float .fi+.fi::before{content:"";position:absolute;left:0;top:15%;height:70%;width:1px;background:var(--line2)}
.m-float .fv{font-size:20px;font-weight:700;letter-spacing:-.3px}
.m-float .fl{font-size:11px;color:var(--t3);margin-top:2px}

/* 快捷宫格 */
.qa-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:16px 8px}
.qa{display:flex;flex-direction:column;align-items:center;gap:7px;font-size:11.5px;color:var(--t1)}
.qa .qi{width:44px;height:44px;border-radius:15px;display:flex;align-items:center;justify-content:center;color:#fff}
.qi-1{background:linear-gradient(135deg,#60A5FA,#2563EB)}
.qi-2{background:var(--grad-gold)}
.qi-3{background:linear-gradient(135deg,#F472B6,#DB2777)}
.qi-4{background:linear-gradient(135deg,#34D399,#059669)}
.qi-5{background:linear-gradient(135deg,#A78BFA,#7C3AED)}
.qi-6{background:linear-gradient(135deg,#F87171,#DC2626)}
.qi-7{background:linear-gradient(135deg,#38BDF8,#0284C7)}
.qi-8{background:linear-gradient(135deg,#94A3B8,#475569)}

/* 通用移动区块 */
.m-sec{padding:0 14px;margin-top:14px}
.m-sec-h{display:flex;align-items:center;justify-content:space-between;margin:0 4px 10px}
.m-sec-h .t{font-size:15px;font-weight:700}
.m-sec-h .more{font-size:12px;color:var(--t3)}
.m-panel{background:#fff;border-radius:16px;padding:16px;box-shadow:0 2px 10px rgba(15,23,42,.04)}
.m-panel.pad-s{padding:4px}

/* 会员卡大卡面（移动端） */
.m-cardface{border-radius:20px;padding:20px;color:#fff;position:relative;overflow:hidden;box-shadow:0 14px 34px rgba(79,70,229,.35)}
.m-cardface::after{content:"";position:absolute;right:-46px;top:-70px;width:210px;height:210px;border-radius:50%;background:rgba(255,255,255,.10)}
.m-cardface::before{content:"";position:absolute;right:36px;bottom:-80px;width:160px;height:160px;border-radius:50%;background:rgba(255,255,255,.07)}
.m-cardface .top{display:flex;justify-content:space-between;align-items:flex-start;position:relative;z-index:1}
.m-cardface .kname{font-size:16px;font-weight:700}
.m-cardface .ktag{font-size:10.5px;border:1px solid rgba(255,255,255,.5);padding:1.5px 9px;border-radius:999px;opacity:.92}
.m-cardface .kv{position:relative;z-index:1;margin-top:22px;display:flex;align-items:baseline;gap:7px}
.m-cardface .kv b{font-size:38px;font-weight:800;letter-spacing:-1px}
.m-cardface .kv span{font-size:13px;opacity:.85}
.m-cardface .kno{position:relative;z-index:1;margin-top:16px;font-size:13.5px;letter-spacing:2.5px;opacity:.88;font-family:ui-monospace,Consolas,monospace}
.m-cardface .kfoot{position:relative;z-index:1;display:flex;justify-content:space-between;margin-top:10px;font-size:11px;opacity:.8}
.card-scroll{display:flex;gap:12px;overflow-x:auto;padding:2px 14px 8px;scrollbar-width:none}
.card-scroll::-webkit-scrollbar{display:none}
.card-scroll .m-cardface{min-width:318px;flex-shrink:0}
.card-scroll .m-cardface.small{min-width:260px}

/* 充值套餐 */
.pkg{border:1.5px solid var(--line);border-radius:16px;padding:14px;background:#fff;position:relative;text-align:center}
.pkg.on{border-color:var(--p1);background:var(--violet-bg);box-shadow:0 0 0 3px rgba(79,70,229,.1)}
.pkg .pa{font-size:12px;color:var(--t2)}
.pkg .pv{font-size:22px;font-weight:800;margin-top:2px}
.pkg .pv small{font-size:12px;font-weight:500}
.pkg .pb{display:inline-block;margin-top:6px;font-size:11px;color:#B45309;background:#FEF3C7;border-radius:999px;padding:1px 8px;font-weight:600}
.pkg .pick{position:absolute;right:9px;top:9px;width:17px;height:17px;border-radius:50%;border:1.5px solid #CBD5E1;display:none;align-items:center;justify-content:center;color:#fff}
.pkg.on .pick{display:flex;background:var(--p1);border-color:var(--p1)}
.pkg .pick svg{width:9px;height:9px}

/* 优惠券票券 */
.ticket{display:flex;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 2px 10px rgba(15,23,42,.05);position:relative}
.ticket::before,.ticket::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#F7F8FC;top:50%;transform:translateY(-50%);z-index:2}
.ticket::before{left:-8px}
.ticket::after{right:-8px}
.ticket .tl{width:104px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;padding:16px 6px;position:relative}
.ticket .tl::after{content:"";position:absolute;right:0;top:6px;bottom:6px;border-right:1.5px dashed rgba(255,255,255,.55)}
.tk-red{background:linear-gradient(135deg,#F87171,#DC2626)}
.tk-violet{background:linear-gradient(135deg,#8B5CF6,#6D28D9)}
.tk-gold{background:linear-gradient(135deg,#FBBF24,#D97706)}
.ticket .tl .v{font-size:24px;font-weight:800;letter-spacing:-.5px}
.ticket .tl .v small{font-size:11px;font-weight:500}
.ticket .tl .c{font-size:10.5px;opacity:.9;margin-top:1px;text-align:center;line-height:1.4}
.ticket .tr{flex:1;padding:12px 14px;display:flex;flex-direction:column;justify-content:center;min-width:0}
.ticket .tr .n{font-size:14px;font-weight:600}
.ticket .tr .d{font-size:11px;color:var(--t3);margin-top:3px}
.ticket .tr .o{margin-top:8px;display:flex;justify-content:space-between;align-items:center}
.ticket.used{filter:grayscale(1);opacity:.62}
.ticket .stamp{position:absolute;right:14px;top:10px;border:2px solid var(--bad);color:var(--bad);font-size:12px;font-weight:700;border-radius:6px;padding:1px 7px;transform:rotate(-14deg);z-index:3}

/* 明细列表 */
.rec{display:flex;align-items:center;gap:12px;background:#fff;border-radius:14px;padding:14px;margin-bottom:10px;box-shadow:0 2px 8px rgba(15,23,42,.04)}
.rec .ri{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.rec .rt{font-size:14px;font-weight:600}
.rec .rd{font-size:11.5px;color:var(--t3);margin-top:2px}
.rec .rv{margin-left:auto;text-align:right}
.rec .rv .a{font-size:15px;font-weight:700;letter-spacing:-.2px}
.rec .rv .s{font-size:11px;color:var(--t3);margin-top:2px}

/* 移动按钮 */
.m-btn{display:flex;align-items:center;justify-content:center;gap:7px;height:48px;border-radius:14px;font-size:15.5px;font-weight:600}
.m-btn-p{background:var(--grad-p);color:#fff;box-shadow:0 8px 20px rgba(79,70,229,.35)}
.m-btn-o{background:#fff;color:var(--ink);border:1.5px solid var(--line)}
.m-btn-gold{background:var(--grad-gold);color:#3B2A00}
.m-btn-disabled{background:#E2E8F0;color:var(--t3)}

/* 核销码页 */
.qr-card{margin:16px 14px 0;background:#fff;border-radius:22px;padding:26px 20px;text-align:center;box-shadow:0 10px 30px rgba(15,23,42,.08)}
.qr-code-box{width:224px;height:224px;margin:14px auto 10px;border-radius:14px;background:#fff;border:1px solid var(--line2);padding:10px}
.qr-code-box canvas{width:100%;height:100%}
.code-num{font-size:26px;font-weight:800;letter-spacing:6px;font-family:ui-monospace,Consolas,monospace}
.refresh-tip{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--t3);margin-top:8px}

/* 登录页（H5） */
.p-login{height:100%;display:flex;flex-direction:column;background:#fff}
.p-login .hero{background:linear-gradient(150deg,#4F46E5,#7C3AED 70%,#9333EA);padding:64px 26px 46px;color:#fff;position:relative;overflow:hidden;border-radius:0 0 34px 34px}
.p-login .hero::after{content:"";position:absolute;right:-40px;top:-40px;width:170px;height:170px;border-radius:50%;background:rgba(255,255,255,.1)}
.p-login .hero .bt{font-size:24px;font-weight:800;letter-spacing:.5px}
.p-login .hero .bs{font-size:13px;opacity:.85;margin-top:6px}
.p-login .form{padding:30px 24px}
.p-input{display:flex;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:14px;height:52px;padding:0 16px;background:#fff}
.p-input svg{width:18px;height:18px;color:var(--t3);flex-shrink:0}
.p-input input{border:none;flex:1;font-size:15px;height:100%}
.p-input.focus{border-color:var(--p1);box-shadow:0 0 0 3px rgba(79,70,229,.12)}

/* 右侧交互说明卡 */
.notes{width:300px;flex-shrink:0;position:sticky;top:40px}
.notes .n-head{background:#0F172A;color:#fff;border-radius:16px 16px 0 0;padding:16px 20px}
.notes .n-head .t{font-size:15px;font-weight:700}
.notes .n-head .s{font-size:11.5px;color:#8E97AC;margin-top:2px}
.notes .n-body{background:#fff;border-radius:0 0 16px 16px;padding:6px 20px 16px;box-shadow:var(--sh-md)}
.notes .n-item{display:flex;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line2);font-size:12.5px;color:var(--t2);line-height:1.55}
.notes .n-item:last-child{border-bottom:none}
.notes .n-item b{color:var(--ink)}
.notes .ni-dot{width:18px;height:18px;border-radius:6px;background:var(--violet-bg);color:var(--p1);font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}
@media (max-width:1100px){.notes{display:none}.stage{padding:24px 12px}}

/* ============ 与后台共享的组件（portal 内联镜像，避免跨端引入 admin.css） ============ */

/* 卡面默认主题 */
.m-cardface{background:linear-gradient(135deg,#4F46E5,#7C3AED)}

/* 头像 */
.avatar{border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;flex-shrink:0}
.av-indigo{background:linear-gradient(135deg,#4F46E5,#7C3AED)}.av-gold{background:linear-gradient(135deg,#FBBF24,#D97706)}
.av-teal{background:linear-gradient(135deg,#2DD4BF,#0D9488)}.av-rose{background:linear-gradient(135deg,#FB7185,#E11D48)}
.av-blue{background:linear-gradient(135deg,#60A5FA,#2563EB)}

/* 徽章 */
.badge{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 9px;border-radius:999px;font-size:11.5px;font-weight:500}
.bd-indigo{background:#EEF2FF;color:#4F46E5}.bd-gold{background:#FEF3C7;color:#B45309}
.bd-green{background:#ECFDF5;color:#047857}.bd-red{background:#FEF2F2;color:#B91C1C}
.bd-gray{background:#F1F5F9;color:#64748B}.bd-blue{background:#F0F9FF;color:#0369A1}
.dot{width:6px;height:6px;border-radius:50%;background:currentColor}

/* 键值行 */
.kv{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:13px;border-bottom:1px dashed #EEF2F7}
.kv:last-child{border-bottom:none}
.kv .k{color:var(--t2)}

/* 分段选择器 */
.seg{background:var(--bg);border-radius:12px;padding:3px;gap:2px;display:flex}
.seg button{border-radius:10px;color:var(--t2)}
.seg button.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(15,23,42,.1)}

/* 单选卡 */
.radio-card{display:flex;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:14px;padding:12px 14px;background:#fff}
.radio-card.on{border-color:var(--p1);background:#EEF2FF}

/* 迷你卡面（后台同款） */
.mini-face{border-radius:14px;padding:14px 16px;color:#fff;position:relative;overflow:hidden}
.mini-face .mv{font-size:20px;font-weight:700;margin-top:4px}
.mini-face .mn{font-size:12px;opacity:.9}
.cf-indigo{background:linear-gradient(135deg,#4F46E5,#7C3AED)}.cf-black{background:linear-gradient(135deg,#334155,#0F172A)}
.cf-teal{background:linear-gradient(135deg,#14B8A6,#0F766E)}.cf-rose{background:linear-gradient(135deg,#FB7185,#BE123C)}
.cf-blue{background:linear-gradient(135deg,#38BDF8,#1D4ED8)}.cf-gold{background:linear-gradient(135deg,#FBBF24,#B45309)}

/* 提示条 */
.notice{display:flex;align-items:center;gap:10px;background:#F0F9FF;border:1px solid #BAE6FD;color:#075985;border-radius:12px;padding:10px 14px;font-size:12.5px}
.notice.warn{background:#FFFBEB;border-color:#FDE68A;color:#92400E}
.notice svg{width:16px;height:16px;flex-shrink:0}

/* Toast */
.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%);background:#0F172A;color:#fff;font-size:13px;padding:10px 18px;border-radius:999px;box-shadow:0 12px 40px rgba(15,23,42,.2);z-index:200;display:none;align-items:center;gap:8px}
.toast svg{width:15px;height:15px;color:var(--ok)}
.toast.show{display:flex}
