/* Tesla Pay 后台通用布局（四端共用） */
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--tp-font);background:var(--tp-bg);color:var(--tp-text);min-height:100vh;display:flex}
.sidebar{width:220px;background:var(--tp-navy);color:#fff;flex-shrink:0;display:flex;flex-direction:column;position:fixed;top:0;bottom:0;left:0;z-index:10}
.sidebar .brand{padding:20px 18px;font-size:18px;font-weight:700;letter-spacing:.5px;border-bottom:1px solid rgba(255,255,255,.08);cursor:pointer}
.sidebar .brand span{color:var(--tp-red)}
.sidebar nav{padding:12px 8px;flex:1;overflow-y:auto}
.sidebar nav a{display:flex;align-items:center;gap:10px;padding:11px 14px;color:#c6cedb;text-decoration:none;border-radius:6px;font-size:14px;margin-bottom:4px;transition:.15s;cursor:pointer}
.sidebar nav a:hover{background:rgba(255,255,255,.08);color:#fff}
.sidebar nav a.active{background:var(--tp-red);color:#fff}
.sidebar .user{padding:16px;border-top:1px solid rgba(255,255,255,.08);font-size:13px;color:#c6cedb}
.sidebar .user .switch{display:block;margin-top:8px;font-size:12px;color:#c6cedb;background:rgba(255,255,255,.1);border-radius:6px;padding:6px 10px;cursor:pointer;text-align:center}
.sidebar .user .switch:hover{background:rgba(255,255,255,.2)}
.sidebar .logout{margin-top:4px;font-size:12px;color:#f2b8ba;text-align:center;cursor:pointer;padding:6px}
.main{flex:1;margin-left:220px;display:flex;flex-direction:column}
.topbar{height:56px;background:var(--tp-surface);border-bottom:1px solid var(--tp-border);display:flex;align-items:center;padding:0 24px;justify-content:space-between}
.topbar .title{font-size:16px;font-weight:600}
.topbar .right{font-size:13px;color:var(--tp-text-secondary)}
.content{padding:24px;flex:1}
.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.card{background:var(--tp-surface);border:1px solid var(--tp-border);border-radius:var(--tp-radius-lg);padding:20px;box-shadow:var(--tp-shadow)}
.card .label{font-size:13px;color:var(--tp-text-secondary);margin-bottom:8px}
.card .value{font-size:26px;font-weight:700;font-family:var(--tp-font-num)}
.card .sub{font-size:12px;color:var(--tp-text-secondary);margin-top:6px}
.card .value.red{color:var(--tp-red)}
.card .value.blue{color:var(--tp-blue)}
.card .value.green{color:var(--tp-success)}
.card .value.purple{color:var(--tp-frozen)}
.panel{background:var(--tp-surface);border:1px solid var(--tp-border);border-radius:var(--tp-radius-lg);padding:20px;box-shadow:var(--tp-shadow);margin-bottom:20px}
.panel h3{font-size:15px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--tp-border);display:flex;align-items:center;justify-content:space-between}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--tp-border)}
th{color:var(--tp-text-secondary);font-weight:500;background:var(--tp-bg)}
tbody tr:hover{background:var(--tp-bg)}
.badge{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px}
.badge.ok{background:var(--tp-success-bg);color:var(--tp-success)}
.badge.warn{background:var(--tp-warning-bg);color:var(--tp-warning)}
.badge.danger{background:var(--tp-danger-bg);color:var(--tp-danger)}
.badge.gray{background:#eef1f5;color:var(--tp-text-secondary)}
.badge.blue{background:var(--tp-blue-bg);color:var(--tp-blue-deep)}
.empty{text-align:center;color:var(--tp-text-secondary);padding:32px 0;font-size:13px}
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--tp-radius);border:none;cursor:pointer;font-size:13px;font-weight:600;transition:.15s}
.btn-primary{background:var(--tp-red);color:#fff}
.btn-primary:hover{background:var(--tp-red-hover)}
.btn-ghost{background:#fff;border:1px solid var(--tp-border);color:var(--tp-text)}
.btn-ghost:hover{border-color:var(--tp-red);color:var(--tp-red)}
.btn-sm{padding:5px 12px;font-size:12px}
.btn-danger{background:var(--tp-danger);color:#fff}
.btn-danger:hover{background:#dc2626}
.btn-warning{background:#f59e0b;color:#fff}
.btn-warning:hover{background:#d97706}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:14px}
.form-group label{display:block;font-size:13px;color:var(--tp-text-secondary);margin-bottom:6px}
.form-group input,.form-group select,.form-group textarea{width:100%;padding:9px 12px;border:1px solid var(--tp-border);border-radius:var(--tp-radius);font-size:14px;font-family:var(--tp-font)}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--tp-red)}
.form-actions{display:flex;gap:12px;justify-content:flex-end;padding-top:8px}
.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.filter{display:flex;gap:8px;align-items:center}
.filter select,.filter input{padding:7px 12px;border:1px solid var(--tp-border);border-radius:var(--tp-radius);font-size:13px}
.tab-bar{display:flex;gap:8px;margin-bottom:16px}
.tab-bar .seg{padding:6px 16px;border:1px solid var(--tp-border);border-radius:20px;font-size:13px;cursor:pointer;background:#fff;transition:.15s}
.tab-bar .seg.active{background:var(--tp-red);color:#fff;border-color:var(--tp-red)}
.hidden{display:none}
.page-title{font-size:18px;font-weight:700;margin-bottom:18px}
.chart-wrap canvas{width:100%;display:block}
.hint{font-size:12px;color:var(--tp-text-secondary);margin-bottom:14px;line-height:1.7}
/* 开关样式 */
.switch{position:relative;display:inline-block;width:44px;height:24px;vertical-align:middle}
.switch input{opacity:0;width:0;height:0}
.switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:#cbd5e1;border-radius:24px;transition:.2s}
.switch .slider:before{content:"";position:absolute;height:18px;width:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}
.switch input:checked + .slider{background:var(--tp-red)}
.switch input:checked + .slider:before{transform:translateX(20px)}
@media(max-width:1000px){.cards{grid-template-columns:repeat(2,1fr)}.form-row{grid-template-columns:1fr}}

/* ============================================================
   移动端自适应（手机/平板竖屏）
   侧边栏折叠为抽屉，卡片单列，表格/表单横向滚动适配
   ============================================================ */
.hamburger{display:none;background:none;border:none;font-size:22px;color:var(--tp-text);cursor:pointer;padding:4px 8px;line-height:1}
.sidebar-mask{display:none}

@media(max-width:768px){
  body{display:block}
  /* 侧边栏变为抽屉 */
  .sidebar{width:240px;transform:translateX(-100%);transition:transform .25s ease;box-shadow:none}
  .sidebar.open{transform:translateX(0);box-shadow:0 0 30px rgba(0,0,0,.35)}
  /* 遮罩层 */
  .sidebar-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9;display:none}
  .sidebar-mask.show{display:block}
  /* 主内容区 */
  .main{margin-left:0;width:100%}
  .topbar{height:52px;padding:0 12px;position:sticky;top:0;z-index:8}
  .topbar .title{font-size:15px}
  .topbar .right{display:none}
  .hamburger{display:inline-flex}
  .content{padding:14px 12px}
  .page-title{font-size:16px;margin-bottom:14px}
  /* 卡片：手机单列 */
  .cards{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
  .card{padding:14px}
  .card .value{font-size:20px}
  .panel{padding:14px;margin-bottom:14px}
  .panel h3{font-size:14px}
  /* 表单单列 */
  .form-row{grid-template-columns:1fr;gap:10px}
  .form-actions{justify-content:stretch}
  .form-actions .btn{flex:1}
  .toolbar{flex-direction:column;align-items:stretch;gap:10px}
  .filter{flex-wrap:wrap}
  .filter select,.filter input{flex:1;min-width:0}
  /* 表格横向滚动 */
  .panel{overflow-x:auto}
  .panel table{min-width:640px}
  .btn{padding:9px 14px}
  .tab-bar{flex-wrap:wrap}
}
@media(max-width:420px){
  .cards{grid-template-columns:1fr}
  .card .value{font-size:18px}
}
