/* ============================================
   乐乒多渠道电子体验卡系统 · 设计系统 v2
   苹果风 · 白底高端 · 乐乒蓝橙VI
   ============================================ */
:root{
  --blue:#1E5AA8; --blue-2:#2f7bd4; --blue-light:#eaf1fb;
  --orange:#FF7D00; --orange-2:#ff9a3d; --orange-light:#fff3e8;
  --ink:#1d1d1f; --gray:#6e6e73; --gray-light:#f5f5f7; --line:#e8e8ed;
  --green:#0a8f5c; --green-light:#e6f7f0; --red:#e0453a; --red-light:#fdeceb;
  --shadow-sm:0 2px 8px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.03);
  --shadow-md:0 8px 30px rgba(30,90,168,.10),0 2px 8px rgba(0,0,0,.04);
  --shadow-lg:0 20px 60px rgba(0,0,0,.14);
  --r:16px; --r-lg:24px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro SC","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;background:#f5f5f7;color:var(--ink);line-height:1.65;-webkit-font-smoothing:antialiased;}
a{color:var(--blue);text-decoration:none;}

/* ---------- 顶栏 ---------- */
.topbar{background:rgba(255,255,255,.86);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--line);color:var(--ink);padding:12px 20px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;}
.topbar h1{font-size:16px;font-weight:700;letter-spacing:.2px;}
.topbar .sub{font-size:11.5px;color:var(--gray);margin-top:1px;}
.topbar a{color:var(--blue);font-size:13px;margin-left:14px;font-weight:500;}

/* ---------- 布局 ---------- */
.wrap{max-width:1040px;margin:0 auto;padding:22px 16px 40px;}
.panel{background:#fff;border-radius:var(--r-lg);padding:22px;margin-bottom:16px;box-shadow:var(--shadow-sm);border:1px solid rgba(0,0,0,.02);}
.panel h2{font-size:16px;margin-bottom:14px;color:var(--ink);font-weight:700;letter-spacing:.2px;}
.panel h3{font-size:14px;margin:14px 0 8px;font-weight:600;}

/* ---------- 表单 ---------- */
label{display:block;font-size:12.5px;color:var(--gray);margin:12px 0 5px;font-weight:500;letter-spacing:.3px;}
input,select,textarea{width:100%;padding:11px 14px;border:1.5px solid var(--line);border-radius:12px;font-size:15px;background:#fff;outline:none;transition:all .18s ease;color:var(--ink);}
input:focus,select:focus,textarea:focus{border-color:var(--blue);box-shadow:0 0 0 4px rgba(30,90,168,.10);}
input::placeholder{color:#b0b0b8;}

/* ---------- 按钮 ---------- */
.btn{display:inline-block;background:var(--blue);background-image:linear-gradient(180deg,var(--blue-2),var(--blue));color:#fff;border:none;border-radius:14px;padding:12px 24px;font-size:15px;font-weight:600;cursor:pointer;text-align:center;transition:all .2s ease;box-shadow:0 4px 14px rgba(30,90,168,.28);letter-spacing:.3px;}
.btn:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(30,90,168,.36);}
.btn:active{transform:translateY(0);}
.btn.orange{background-image:linear-gradient(180deg,var(--orange-2),var(--orange));box-shadow:0 4px 14px rgba(255,125,0,.30);}
.btn.orange:hover{box-shadow:0 6px 20px rgba(255,125,0,.38);}
.btn.green{background-image:linear-gradient(180deg,#12b37b,var(--green));box-shadow:0 4px 14px rgba(10,143,92,.28);}
.btn.gray{background:#f0f0f2;color:#444;box-shadow:none;}
.btn.gray:hover{background:#e5e5e9;box-shadow:none;}
.btn.sm{padding:7px 14px;font-size:13px;border-radius:10px;box-shadow:none;}
.btn.sm:hover{box-shadow:none;}
.btn.block{display:block;width:100%;margin-top:16px;}
.btn.warn{background-image:linear-gradient(180deg,#f0645a,var(--red));box-shadow:0 4px 14px rgba(224,69,58,.28);}

/* ---------- 表格 ---------- */
.table-scroll{overflow-x:auto;border-radius:14px;border:1px solid var(--line);}
table{width:100%;border-collapse:collapse;font-size:13.5px;background:#fff;}
th{background:var(--gray-light);color:var(--gray);padding:11px 12px;text-align:left;font-size:11.5px;font-weight:600;letter-spacing:.6px;text-transform:uppercase;white-space:nowrap;border-bottom:1px solid var(--line);}
td{padding:12px;border-bottom:1px solid #f2f2f5;vertical-align:middle;}
tr:last-child td{border-bottom:none;}
tbody tr{transition:background .15s;}
tbody tr:hover{background:#fafbfd;}

/* ---------- 标签 ---------- */
.tag{display:inline-block;padding:3px 12px;border-radius:999px;font-size:12px;font-weight:600;letter-spacing:.3px;}
.tag.blue{background:var(--blue-light);color:var(--blue);}
.tag.orange{background:var(--orange-light);color:var(--orange);}
.tag.green{background:var(--green-light);color:var(--green);}
.tag.red{background:var(--red-light);color:var(--red);}
.tag.gray{background:#f0f0f2;color:#666;}

/* ---------- 提示 ---------- */
.alert{padding:13px 16px;border-radius:14px;font-size:14px;margin-bottom:14px;font-weight:500;}
.alert.err{background:var(--red-light);color:var(--red);}
.alert.ok{background:var(--green-light);color:var(--green);}
.alert.info{background:var(--blue-light);color:var(--blue);}

/* ---------- 统计卡 ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:18px;}
.stat{background:#fff;border-radius:var(--r-lg);padding:18px;text-align:center;box-shadow:var(--shadow-sm);border:1px solid rgba(0,0,0,.02);transition:transform .2s ease;}
.stat:hover{transform:translateY(-2px);}
.stat .ico{font-size:22px;margin-bottom:6px;}
.stat .num{font-size:26px;font-weight:800;color:var(--ink);letter-spacing:-.5px;}
.stat .num.orange{color:var(--orange);}
.stat .num.green{color:var(--green);}
.stat .num.blue{color:var(--blue);}
.stat .lbl{font-size:12px;color:var(--gray);margin-top:3px;letter-spacing:.3px;}

/* ---------- Tabs ---------- */
.tabs{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;}
.tabs a{padding:8px 18px;border-radius:999px;background:#fff;font-size:13px;color:var(--gray);font-weight:500;box-shadow:var(--shadow-sm);transition:all .18s ease;border:1px solid transparent;}
.tabs a:hover{color:var(--blue);}
.tabs a.on{background:var(--blue);color:#fff;font-weight:600;box-shadow:0 4px 14px rgba(30,90,168,.28);}

/* ---------- 电子卡（家长端·真实卡片质感） ---------- */
.card-box{border-radius:24px;padding:24px 22px;color:#fff;position:relative;overflow:hidden;background:linear-gradient(135deg,#1E5AA8 0%,#2f7bd4 55%,#4a9ae0 100%);box-shadow:var(--shadow-md);border:1px solid rgba(255,255,255,.25);}
.card-box::before{content:"";position:absolute;top:-60%;right:-30%;width:80%;height:140%;background:radial-gradient(circle,rgba(255,255,255,.16),transparent 60%);pointer-events:none;}
.card-box .brand{display:flex;align-items:center;gap:8px;position:relative;z-index:1;}
.card-box .brand .logo{width:30px;height:30px;border-radius:9px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:16px;border:1px solid rgba(255,255,255,.3);}
.card-box .brand .bname{font-size:14px;font-weight:700;letter-spacing:.5px;}
.card-box .brand .btype{margin-left:auto;font-size:10.5px;background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);padding:3px 10px;border-radius:999px;letter-spacing:1px;}
.card-box .course{margin-top:16px;position:relative;z-index:1;}
.card-box .course .cname{font-size:13px;opacity:.85;letter-spacing:.5px;}
.card-box .course .sname{font-size:24px;font-weight:800;margin-top:2px;letter-spacing:.5px;}
/* 课时格子：一眼看清几节课/剩几节 */
.lesson-dots{display:flex;gap:8px;margin-top:14px;position:relative;z-index:1;}
.lesson-dot{width:38px;height:38px;border-radius:11px;background:rgba(255,255,255,.16);border:1.5px solid rgba(255,255,255,.4);display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;backdrop-filter:blur(4px);}
.lesson-dot.used{background:rgba(255,255,255,.92);color:var(--blue);border-color:#fff;}
.lesson-dot.left-txt{font-size:11px;font-weight:600;color:#fff;opacity:.9;border-style:dashed;}
.card-box .remain{margin-top:8px;font-size:12px;opacity:.9;position:relative;z-index:1;}
.card-box .card-foot{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;border-top:1px solid rgba(255,255,255,.22);position:relative;z-index:1;}
.card-box .card-foot .no{font-size:11.5px;opacity:.85;letter-spacing:1px;}
.card-box .card-foot .exp{font-size:11.5px;opacity:.85;}

/* ---------- 二维码 ---------- */
.qr-box{text-align:center;padding:24px;}
.qr-box img{max-width:230px;width:100%;border-radius:18px;box-shadow:var(--shadow-md);background:#fff;padding:10px;}
.qr-box .qr-url{font-size:12px;color:var(--blue);word-break:break-all;background:var(--blue-light);border-radius:10px;padding:8px 12px;margin-top:10px;}

/* ---------- 登录页 ---------- */
.login-body{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#f5f7fb 0%,#eef2f9 45%,#e7edf8 100%);padding:20px;}
.login-card{background:rgba(255,255,255,.92);backdrop-filter:blur(20px);border-radius:28px;padding:44px 36px;width:100%;max-width:400px;box-shadow:var(--shadow-lg);border:1px solid rgba(255,255,255,.6);text-align:center;}
.login-logo{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,var(--blue),var(--blue-2));display:flex;align-items:center;justify-content:center;font-size:30px;margin:0 auto 16px;box-shadow:0 8px 24px rgba(30,90,168,.35);}
.login-card h1{font-size:21px;font-weight:800;letter-spacing:.3px;}
.login-card .slogan{font-size:13px;color:var(--gray);margin:6px 0 22px;}
.login-foot{margin-top:18px;font-size:12.5px;color:var(--gray);}
.login-foot a{color:var(--blue);font-weight:500;}

/* ---------- 杂项 ---------- */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.muted{color:var(--gray);font-size:12.5px;}
.footer{text-align:center;padding:26px;color:#a8a8b0;font-size:12px;letter-spacing:.3px;}
.summary{cursor:pointer;color:var(--blue);font-size:13px;font-weight:500;}
details .op-box{margin-top:10px;background:var(--gray-light);border-radius:14px;padding:14px;}
.link-box{background:var(--gray-light);border-radius:12px;padding:11px 14px;font-size:13px;word-break:break-all;margin-top:6px;color:var(--ink);}
@media(max-width:640px){.grid2{grid-template-columns:1fr;}.wrap{padding:14px 12px 32px;}.panel{padding:18px;border-radius:20px;}}
