  :root{
    --bg:#F6F5F1; --panel:#FFFFFF; --panel-2:#FBFAF7;
    --ink:#20242A; --ink-2:#6A7078; --ink-3:#9AA0A8;
    --line:#E5E2DA; --line-2:#EFECE5;
    --accent:#C2570B; --accent-ink:#FFFFFF; --accent-soft:rgba(194,87,11,.10); --accent-line:rgba(194,87,11,.45);
    --ok:#1A7F4B; --err:#C0392B; --srv:#5B6472;
    --s1:#2a78d6; --s2:#eb6834;
    --ok-soft:rgba(26,127,75,.12);
    --shadow:0 1px 2px rgba(30,30,25,.05),0 8px 28px rgba(30,30,25,.07);
    --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  }
  @media (prefers-color-scheme: dark){
    :root{
      --bg:#141619; --panel:#1C1F23; --panel-2:#22262B;
      --ink:#ECEDEE; --ink-2:#A2A8B0; --ink-3:#6F757D;
      --line:#2C3036; --line-2:#25292E;
      --accent:#E8873F; --accent-ink:#1B1206; --accent-soft:rgba(232,135,63,.14); --accent-line:rgba(232,135,63,.55);
      --ok:#4CC38A; --err:#E67E6C; --srv:#8B93A0;
      --s1:#3987e5; --s2:#d95926;
      --ok-soft:rgba(76,195,138,.15);
      --shadow:0 1px 2px rgba(0,0,0,.3),0 10px 30px rgba(0,0,0,.35);
    }
  }
  *{box-sizing:border-box}
  [hidden]{display:none !important} /* 视图切换靠 hidden 属性，必须压过各自的 display:grid/flex */
  body{
    margin:0;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.6;
    font-family:system-ui,-apple-system,'PingFang SC','Noto Sans SC','Microsoft YaHei',sans-serif;
  }
  button{font-family:inherit}
  input,select,textarea{font-family:inherit;font-size:13px}
  :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

  .topbar{
    position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
    padding:12px 20px;background:var(--panel);border-bottom:1px solid var(--line);
  }
  .brand{display:flex;align-items:center;gap:10px;font-weight:900;font-size:16px}
  .brand .logo{width:26px;height:26px;border-radius:7px;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-size:13px;font-weight:900}
  .dirty{width:8px;height:8px;border-radius:50%;background:var(--accent);display:none}
  .dirty.on{display:block}
  .grow{flex:1}
  .btn{border:1px solid var(--line);background:var(--panel-2);color:var(--ink);padding:7px 14px;border-radius:9px;font-size:13px;font-weight:500;cursor:pointer;text-decoration:none;display:inline-block;white-space:nowrap}
  .btn:hover{border-color:var(--ink-3)}
  .btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700}
  .btn.sm{padding:4px 10px;font-size:12px;border-radius:7px}
  .btn[disabled]{opacity:.5;cursor:not-allowed}
  .linklike{border:0;background:none;color:var(--accent);cursor:pointer;padding:0;font-size:inherit;text-decoration:underline}
  .dim{color:var(--ink-3)}

  .viewbar{display:flex;gap:6px;padding:9px 20px;background:var(--panel-2);border-bottom:1px solid var(--line);overflow-x:auto}
  .viewbar button{border:1px solid transparent;background:transparent;color:var(--ink-2);padding:5px 15px;border-radius:999px;font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap}
  .viewbar button:hover{color:var(--ink)}
  .viewbar button.on{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent);font-weight:700}

  .wrap{max-width:1180px;margin:0 auto;padding:24px 20px 60px;display:grid;grid-template-columns:minmax(0,430px) minmax(0,1fr);gap:26px;align-items:start}
  @media (max-width:920px){ .wrap{grid-template-columns:1fr} }

  .stage{position:sticky;top:76px}
  @media (max-width:920px){ .stage{position:static} }
  .stage-hint{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:9px 13px;border-radius:10px;background:var(--accent-soft);border:1px solid var(--accent-line);font-size:12.5px}
  .stage-hint b{color:var(--accent)}
  .stage-lang{display:flex;align-items:center;justify-content:center;gap:9px;margin:0 0 12px;font-size:12px;color:var(--ink-2)}
  .seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;background:var(--panel-2);padding:3px;gap:2px}
  .seg button{border:0;background:transparent;color:var(--ink-2);padding:3px 13px;border-radius:999px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap}
  .seg button.on{background:var(--accent);color:var(--accent-ink);font-weight:700}
  .phone{width:min(392px,100%);margin:0 auto;background:#000;border-radius:44px;padding:10px;box-shadow:var(--shadow),0 0 0 1px var(--line)}
  .phone .screen{border-radius:35px;overflow:hidden;height:680px;display:flex;flex-direction:column;position:relative}
  .phone .statusbar{flex:none;height:34px;display:flex;align-items:center;justify-content:center;position:relative;z-index:3}
  .phone .statusbar i{width:110px;height:22px;border-radius:14px;background:#000;display:block}
  .lp{flex:1;overflow-y:auto;padding:10px 18px 30px;display:flex;flex-direction:column;gap:14px;scrollbar-width:thin}

  .blk{position:relative;border-radius:16px;cursor:pointer}
  .blk:hover{box-shadow:0 0 0 2px var(--accent-line)}
  .blk.sel{box-shadow:0 0 0 2.5px var(--accent)}
  .blk-tools{position:absolute;top:-13px;right:8px;z-index:5;display:none;gap:4px;background:var(--accent);border-radius:8px;padding:3px}
  .blk.sel .blk-tools{display:flex}
  .blk-tools button{border:0;background:transparent;color:var(--accent-ink);width:26px;height:24px;border-radius:6px;font-size:13px;cursor:pointer;display:grid;place-items:center;line-height:1}
  .blk-tools button:hover{background:rgba(0,0,0,.18)}
  .blk-tag{position:absolute;top:-13px;left:8px;z-index:5;display:none;background:var(--accent);color:var(--accent-ink);font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:7px}
  .blk.sel .blk-tag{display:block}

  .lp-img{display:block;width:100%;border-radius:16px;overflow:hidden;line-height:0;border:0;padding:0;background:none}
  .lp-img img{width:100%;display:block}
  .lp-text{color:#fff;margin:0}
  .lp-text.h1{font-size:21px;font-weight:900;line-height:1.35}
  .lp-text.p{font-size:13.5px;color:rgba(255,255,255,.72)}
  .lp-btn{display:flex;align-items:center;gap:12px;width:100%;border:0;background:var(--c,#475569);color:#fff;border-radius:999px;padding:13px 18px;font-size:15px;font-weight:700;font-family:inherit;text-align:left;box-shadow:0 6px 18px rgba(0,0,0,.25);cursor:pointer}
  .lp-btn .ic{flex:none;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.22);display:grid;place-items:center}
  .lp-btn .ic svg{width:17px;height:17px;fill:#fff}
  .lp-btn .ic span{font-size:8.5px;font-weight:900}
  .lp-btn .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .lp-btn .chev{flex:none;opacity:.75;font-weight:400}

  .panel{background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:hidden}
  .tabs{display:flex;border-bottom:1px solid var(--line);background:var(--panel-2)}
  .tabs button{flex:1;border:0;background:transparent;padding:12px 8px;font-size:13.5px;font-weight:500;color:var(--ink-2);cursor:pointer;border-bottom:2px solid transparent}
  .tabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:700}
  .pane{padding:18px}

  .sec-label{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin:0 0 10px}
  .add-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
  .chip{display:flex;align-items:center;gap:6px;border:1px dashed var(--line);background:var(--panel-2);color:var(--ink);padding:6px 12px;border-radius:999px;font-size:12.5px;font-weight:500;cursor:pointer}
  .chip:hover{border-color:var(--accent);color:var(--accent)}
  .chip .dot{width:9px;height:9px;border-radius:50%;flex:none}

  .blk-list{display:flex;flex-direction:column;gap:7px;margin-bottom:20px}
  .blk-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--line);border-radius:11px;background:var(--panel-2);cursor:pointer}
  .blk-row:hover{border-color:var(--ink-3)}
  .blk-row.sel{border-color:var(--accent);background:var(--accent-soft)}
  .blk-row .swatch{width:12px;height:12px;border-radius:4px;flex:none}
  .blk-row .name{flex:1;min-width:0;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .blk-row .kind{font-size:11px;color:var(--ink-3);font-family:var(--mono);flex:none}

  .form{display:flex;flex-direction:column;gap:13px;border-top:1px solid var(--line-2);padding-top:16px}
  .form.noline{border:0;padding-top:0}
  .form .empty{color:var(--ink-3);text-align:center;padding:18px 0 6px;font-size:13px}
  .field{display:flex;flex-direction:column;gap:5px}
  .field label{font-size:12px;font-weight:700;color:var(--ink-2)}
  .field .note,.note{font-size:11.5px;color:var(--ink-3);font-weight:400}
  .field input[type=text],.field input[type=url],.field input[type=password],.field input[type=number],.field input[type=date],.field select,.field textarea,.inp{
    border:1px solid var(--line);background:var(--panel-2);color:var(--ink);border-radius:9px;padding:8px 11px;width:100%;
  }
  .inp{width:auto;padding:6px 10px}
  .field input:focus,.field select:focus,.field textarea:focus,.inp:focus{border-color:var(--accent);outline:none}
  .field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .color-row{display:flex;gap:8px;align-items:center}
  .color-row input[type=color]{width:40px;height:34px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2);padding:2px;cursor:pointer}
  .color-row input[type=text]{flex:1}
  .upload-zone{border:1.5px dashed var(--line);border-radius:11px;padding:14px;text-align:center;color:var(--ink-2);font-size:12.5px;cursor:pointer;background:var(--panel-2)}
  .upload-zone:hover{border-color:var(--accent);color:var(--accent)}
  .switch{display:flex;align-items:center;gap:9px;cursor:pointer;user-select:none;position:relative}
  .switch input{position:absolute;opacity:0;width:0;height:0}
  .switch .tr{width:36px;height:21px;border-radius:11px;background:var(--line);position:relative;flex:none;transition:background .15s}
  .switch .tr::after{content:'';position:absolute;top:2.5px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--panel);transition:transform .15s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
  .switch input:checked + .tr{background:var(--ok)}
  .switch input:checked + .tr::after{transform:translateX(14px)}
  .switch input:disabled + .tr{opacity:.55}
  .switch .sw-lbl{font-size:13px;font-weight:500}

  .lt-row{display:flex;align-items:flex-start;gap:7px}
  .lt-row + .lt-row{margin-top:6px}
  .lt-tag{flex:none;width:36px;text-align:center;font-size:10.5px;font-weight:700;color:var(--ink-3);border:1px solid var(--line);border-radius:6px;padding:2px 0;background:var(--panel-2);margin-top:6px}
  .lt-row input,.lt-row textarea{flex:1;min-width:0}

  .ro-box{border:1px dashed var(--line);border-radius:9px;padding:8px 11px;background:var(--panel-2);color:var(--ink-2);font-size:12.5px;font-family:var(--mono)}

  .tg-head,.tg-row{display:grid;grid-template-columns:minmax(58px,.9fr) minmax(110px,1.7fr) 56px 40px 44px 26px;gap:6px;align-items:center}
  .tg-test{white-space:nowrap;text-decoration:none;text-align:center;padding:5px 4px;font-size:12px;border:1px solid var(--line);background:var(--panel-2);color:var(--ink);border-radius:8px}
  .tg-test:hover{border-color:var(--accent);color:var(--accent)}
  .tg-test.dis{opacity:.4;pointer-events:none}
  .tg-url{font-size:11px;color:var(--ink-3);font-family:var(--mono);margin:2px 0 0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tg-head{font-size:10.5px;font-weight:700;color:var(--ink-3)}
  .tg-head span:nth-child(3),.tg-head span:nth-child(4){text-align:right}
  .tg-row input{border:1px solid var(--line);background:var(--panel-2);color:var(--ink);border-radius:8px;padding:6px 8px;width:100%;min-width:0;font-size:12.5px}
  .tg-row input:focus{border-color:var(--accent);outline:none}
  .tg-row input[type=number]{text-align:right;font-variant-numeric:tabular-nums;padding-left:4px;padding-right:5px;-moz-appearance:textfield}
  .tg-row input[type=number]::-webkit-outer-spin-button,
  .tg-row input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0} /* 去掉调节箭头，避免挤占数字 */
  .tg-total{font-size:11.5px;color:var(--ink-3);text-align:right;font-variant-numeric:tabular-nums;font-family:var(--mono)}
  .tg-del{border:1px solid var(--line);background:var(--panel-2);color:var(--ink-2);border-radius:7px;height:29px;cursor:pointer;font-size:12px;line-height:1}
  .tg-del:hover{border-color:var(--err);color:var(--err)}

  .env-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:6px}
  .env-chip{display:flex;align-items:center;gap:6px;font-size:12px;padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:var(--panel-2)}
  .env-chip i{width:8px;height:8px;border-radius:50%;background:var(--ink-3);display:block}
  .env-chip.ok i{background:var(--ok)}
  .env-chip.bad i{background:var(--err)}
  /* 测试码告警：填了 test_event_code 时线上转化会全部静默消失，必须一眼看见 */
  .warn-box{display:flex;align-items:flex-start;gap:10px;margin:0 0 10px;padding:10px 12px;
    border:1px solid var(--err);border-radius:10px;background:rgba(192,57,43,.10)}
  .warn-box .wb-t{flex:1;min-width:0;font-size:12.5px;line-height:1.55;color:var(--ink)}
  .warn-box .wb-t b{color:var(--err)}
  .warn-box button{flex:none;align-self:center}

  table.stats{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
  table.stats th,table.stats td{padding:7px 10px;border-bottom:1px solid var(--line-2);text-align:right;font-variant-numeric:tabular-nums}
  table.stats th{color:var(--ink-3);font-size:11.5px;font-weight:700}
  table.stats th:first-child,table.stats td:first-child{text-align:left;font-family:var(--mono);font-size:12px}
  table.logs{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap}
  table.logs th,table.logs td{padding:6px 10px;border-bottom:1px solid var(--line-2);text-align:left;font-variant-numeric:tabular-nums}
  table.logs th{color:var(--ink-3);font-size:11px;font-weight:700}
  .mono{font-family:var(--mono)}
  .trunc{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}
  .stats-note{color:var(--ink-3);font-size:12px;margin-top:12px}
  .tbl-wrap{overflow-x:auto}

  .badge{display:inline-block;font-size:10.5px;font-weight:700;padding:1px 8px;border-radius:999px;line-height:1.7;vertical-align:1px}
  .badge.first{background:var(--ok-soft);color:var(--ok)}
  .badge.rep{background:var(--line-2);color:var(--ink-3)}
  .badge.active{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line)}

  .dash{max-width:1180px;margin:0 auto;padding:24px 20px 60px;font-variant-numeric:tabular-nums}
  .dash-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
  .dash-body{display:flex;flex-direction:column;gap:16px}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:16px}
  .stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
  .stat-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:13px 16px}
  .stat-card .k{font-size:12px;color:var(--ink-2);font-weight:500}
  .stat-card .v{font-size:26px;font-weight:900;font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.3}
  .stat-card .sub{font-size:11px;color:var(--ink-3)}

  .chart-legend{display:flex;gap:16px;font-size:12px;color:var(--ink-2);margin-bottom:6px;flex-wrap:wrap}
  .chart-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px;font-style:normal}
  .chart-scroll{overflow-x:auto;padding-bottom:2px}
  .chart{display:flex;align-items:stretch;gap:2px;padding-top:48px;min-width:420px}
  .cg{position:relative;flex:1 0 24px;max-width:54px;min-width:0}
  .cg-col{height:160px;position:relative;border-bottom:1px solid var(--line);border-radius:2px 2px 0 0}
  .cg:hover .cg-col{background:var(--line-2)}
  .cg-col .bar-t,.cg-col .bar-u{position:absolute;bottom:0;display:block;border-radius:4px 4px 0 0;min-height:3px}
  .cg-col .bar-t{left:0;right:0;background:var(--s1)}
  .cg-col .bar-u{left:22%;right:22%;background:var(--s2)}
  .cg-lbl{font-size:10px;color:var(--ink-3);text-align:center;padding-top:5px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden}
  .cg-tip{display:none;position:absolute;top:-46px;left:50%;transform:translateX(-50%);z-index:6;background:var(--ink);color:var(--bg);font-size:11.5px;line-height:1.5;padding:5px 10px;border-radius:8px;white-space:nowrap;pointer-events:none;box-shadow:var(--shadow)}
  .cg-tip.lft{left:0;transform:none}
  .cg-tip.rgt{left:auto;right:0;transform:none}
  .cg:hover .cg-tip{display:block}
  .chart-empty{height:160px;display:grid;place-items:center;color:var(--ink-3);font-size:13px}

  .rot-grid{display:grid;grid-template-columns:1fr;gap:16px} /* 每张轮换卡独占一行，表格完整展示不横向滚动 */
  .rot-grid .trunc{max-width:420px}
  .rot-head{display:flex;align-items:center;gap:8px;font-weight:700;margin-bottom:10px}
  .rot-dot{width:10px;height:10px;border-radius:50%;flex:none}
  .rot-mode{font-size:11px;color:var(--ink-3);font-weight:400;margin-left:auto}
  .mini-prog{height:4px;border-radius:2px;background:var(--line-2);margin-top:4px;min-width:56px}
  .mini-prog i{display:block;height:100%;border-radius:2px;background:var(--accent)}
  .rot-foot{margin-top:10px;display:flex;gap:8px;align-items:center}

  .log-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
  .log-tools label{font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:6px}
  .log-more{margin-top:12px;display:flex;align-items:center;gap:10px}
  .rc-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

  .settings-wrap{max-width:760px;margin:0 auto;padding:24px 20px 60px}
  .pw-row{position:relative}
  .pw-row input{padding-right:38px !important}
  .pw-row .eye{position:absolute;right:5px;top:50%;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;color:var(--ink-3);padding:4px 6px;line-height:0;border-radius:6px}
  .pw-row .eye:hover{color:var(--ink)}
  .sec-gap{margin-top:22px}

  .overlay{position:fixed;inset:0;z-index:100;background:var(--bg);display:grid;place-items:center;padding:20px}
  .login{width:min(380px,100%);background:var(--panel);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:28px;display:flex;flex-direction:column;gap:14px}
  .login h1{margin:0;font-size:18px;display:flex;align-items:center;gap:10px}
  .login h1 .logo{width:28px;height:28px;border-radius:8px;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-size:14px;font-weight:900}
  .login .err-msg{color:var(--err);font-size:12.5px;min-height:1.2em;margin:0}
  .login .alt{text-align:center;font-size:12.5px;color:var(--ink-3)}
  .login .alt button{border:0;background:none;color:var(--accent);cursor:pointer;font-size:12.5px;text-decoration:underline;padding:0}

  .toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,80px);z-index:120;background:var(--ink);color:var(--bg);padding:10px 20px;border-radius:12px;font-size:13.5px;font-weight:500;box-shadow:var(--shadow);transition:transform .25s,opacity .25s;opacity:0;pointer-events:none;max-width:90vw}
  .toast.show{transform:translate(-50%,0);opacity:1}
  @media (prefers-reduced-motion: reduce){ .toast,.switch .tr,.switch .tr::after{transition:none} }

  /* ── 多租户后台：顶栏、页面切换、代客横幅 ───────────────────── */
  .boot{min-height:60vh;display:grid;place-items:center;padding:24px}
  .who{font-size:12.5px;color:var(--ink-2);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .pagesel{max-width:230px}

  /* 代客横幅刻意用最刺眼的配色且不可关闭：客户必须一眼看出「现在不是我自己在操作」。
     可关闭的提示等于没有提示。 */
  .actbar{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
    padding:9px 20px;background:var(--accent);color:var(--accent-ink);font-size:12.5px;font-weight:600}
  .actbar .dot{width:8px;height:8px;border-radius:50%;background:var(--accent-ink);flex:none;animation:actpulse 1.8s ease-in-out infinite}
  .actbar .btn{background:rgba(0,0,0,.14);border-color:transparent;color:var(--accent-ink);font-weight:700}
  .actbar .btn:hover{border-color:var(--accent-ink)}
  body.acting .topbar{top:38px}
  @keyframes actpulse{0%,100%{opacity:1}50%{opacity:.35}}
  @media (prefers-reduced-motion: reduce){ .actbar .dot{animation:none} }

  /* 到期提醒条 */
  .pagebar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 20px;font-size:12.5px;
    border-bottom:1px solid var(--line)}
  .pagebar.warn{background:var(--accent-soft);color:var(--ink)}
  .pagebar.err{background:rgba(192,57,43,.12);color:var(--ink)}
  .pagebar b{font-weight:800}

  .empty-wrap{min-height:60vh;display:grid;place-items:center;padding:24px}
  .empty-card{max-width:520px;text-align:center;display:flex;flex-direction:column;gap:12px;align-items:center;padding:34px 30px}
  .empty-card h2{margin:0;font-size:20px;font-weight:800}
  .empty-card p{margin:0;font-size:13.5px;line-height:1.75}

  /* 通用数据表：用户列表、流水、域名说明共用 */
  table.tbl{width:100%;border-collapse:collapse;font-size:13px}
  table.tbl th,table.tbl td{padding:8px 10px;border-bottom:1px solid var(--line-2);text-align:left;vertical-align:top}
  table.tbl th{color:var(--ink-3);font-size:11.5px;font-weight:700;white-space:nowrap}
  table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
  table.tbl tbody tr:hover{background:var(--panel-2)}
  table.tbl a{color:var(--accent)}
  .stat-card .v.warn{color:var(--err)}

  /* ── 登录 / 注册 / 找回 ─────────────────────────────────────── */
  .auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}
  .auth{width:min(420px,100%);background:var(--panel);border:1px solid var(--line);border-radius:18px;
    box-shadow:var(--shadow);padding:28px;display:flex;flex-direction:column;gap:14px}
  .auth h1{margin:0;font-size:18px;display:flex;align-items:center;gap:10px}
  .auth h1 .logo{width:28px;height:28px;border-radius:8px;background:var(--accent);color:var(--accent-ink);
    display:grid;place-items:center;font-size:14px;font-weight:900}
  .auth .tabs{display:flex;gap:4px;background:var(--panel-2);border:1px solid var(--line);border-radius:11px;padding:3px}
  .auth .tabs button{flex:1;border:0;background:transparent;color:var(--ink-2);padding:7px 0;border-radius:9px;
    font-size:13px;font-weight:600;cursor:pointer}
  .auth .tabs button.on{background:var(--accent);color:var(--accent-ink);font-weight:700}
  .auth form{display:flex;flex-direction:column;gap:13px;margin:0}
  .auth .msg{font-size:12.5px;min-height:1.2em;margin:0;line-height:1.6}
  .auth .msg.err{color:var(--err)}
  .auth .msg.ok{color:var(--ok)}
  .auth .foot{text-align:center;font-size:12.5px;color:var(--ink-3);margin:0}
  .auth .foot button{border:0;background:none;color:var(--accent);cursor:pointer;font-size:12.5px;
    text-decoration:underline;padding:0}
  .auth .hint{font-size:11.5px;color:var(--ink-3);line-height:1.7;margin:0;
    background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;padding:10px 12px}
  .auth .hint b{color:var(--ink-2)}

  /* ── 平台首页 ───────────────────────────────────────────────── */
  .home{max-width:940px;margin:0 auto;padding:64px 20px 80px}
  .home .lede{font-size:15px;line-height:1.85;color:var(--ink-2);max-width:600px;margin:0 0 26px}
  .home h1{font-size:32px;font-weight:900;letter-spacing:-.02em;margin:0 0 14px;line-height:1.25}
  .home h2{font-size:15px;font-weight:800;margin:0 0 8px}
  .home .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:34px 0}
  .home .grid .card p{margin:0;font-size:13px;line-height:1.75;color:var(--ink-2)}
  .home .cta{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
  .home .price{font-size:13.5px;color:var(--ink-2);margin:26px 0 0}
  .home .price b{font-size:22px;font-weight:900;color:var(--ink)}
  .home footer{margin-top:54px;padding-top:20px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}

  /* ── 平台管理后台 ───────────────────────────────────────────── */
  .adm{max-width:1180px;margin:0 auto;padding:24px 20px 60px}
  .adm-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
  .adm-tools .inp.search{min-width:220px}
  .pill{display:inline-block;font-size:10.5px;font-weight:700;padding:1px 8px;border-radius:999px;line-height:1.7}
  .pill.admin{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line)}
  .pill.off{background:rgba(192,57,43,.12);color:var(--err)}
  .pill.on{background:var(--ok-soft);color:var(--ok)}
  .modal{position:fixed;inset:0;z-index:110;background:rgba(0,0,0,.45);display:grid;place-items:center;padding:20px}
  .modal .box{width:min(420px,100%);background:var(--panel);border:1px solid var(--line);border-radius:16px;
    box-shadow:var(--shadow);padding:22px;display:flex;flex-direction:column;gap:13px;max-height:86vh;overflow:auto}
  .modal h3{margin:0;font-size:15px;font-weight:800}
  .modal .row{display:flex;gap:8px;justify-content:flex-end}

  /* 输入框 + 紧邻按钮。注意不要复用 .pw-row —— 那个是给绝对定位的小眼睛图标用的，
     放一个真实按钮进去会被挤到下一行。 */
  .inline-row{display:flex;gap:8px;align-items:stretch}
  .inline-row input{flex:1;min-width:0}
  .inline-row .btn{flex:none}

  /* 费用说明。定义列表比段落好读：左边是问题，右边是答案，扫一眼就能找到
     「不续费会怎样」这类客户真正关心的条目。 */
  .terms{background:var(--panel-2);border:1px solid var(--line-2);border-radius:12px;padding:4px 16px}
  .terms dl{margin:0;display:grid;grid-template-columns:120px 1fr;gap:0}
  .terms dt{font-size:12.5px;font-weight:700;color:var(--ink-2);padding:11px 0;
    border-top:1px solid var(--line-2);line-height:1.6}
  .terms dd{font-size:12.5px;color:var(--ink-2);margin:0;padding:11px 0 11px 14px;
    border-top:1px solid var(--line-2);line-height:1.75}
  .terms dt:first-of-type,.terms dl > dt:first-child + dd{border-top:0}
  .terms b{color:var(--ink);font-weight:700}
  @media (max-width:620px){
    .terms dl{grid-template-columns:1fr}
    .terms dd{padding:0 0 11px;border-top:0}
    .terms dt{padding-bottom:3px}
    .terms dt:first-of-type{border-top:0}
  }
  /* display:contents —— 包装元素不参与布局，顶栏按钮仍是 flex 的直接子项；
     隐藏时靠全局 [hidden]{display:none !important} 生效。 */
  .pagetools{display:contents}
