/* =====================================================================
   webmail.css —— 网页邮箱专用样式（与后台 app.css 完全分开，互不影响）
   设计目标：2C2G 机器上零 JS、零字体、零外链，一次加载 ≈ 12KB。
   结构对应：topbar/side 布局 → .msglist 列表 → .mailview 阅读 → .compose 写信
             未登录时走 .auth 居中卡片（login / register / disabled 共用）。
   ===================================================================== */
:root{
  --bg:#f4f6fa; --card:#fff; --line:#e2e7ef; --text:#1f2733; --muted:#6b7789;
  --head:#131a24; --pri:#2f6fed; --ok:#1a9a5c; --bad:#cf3b3b; --warn:#c98a12;
  --radius:10px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body.wm-body{
  margin:0;background:var(--bg);color:var(--text);
  font:14px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",Verdana,sans-serif;
}
h1,h2,h3,p,dl,dd,ul{margin:0}
ul{padding-left:18px}
a{color:var(--pri);text-decoration:none}
a:hover{text-decoration:underline}
code{font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
  background:#f1f4f9;border:1px solid var(--line);border-radius:4px;padding:1px 5px;word-break:break-all}
pre{margin:0}
.wmut{color:var(--muted);font-weight:400;font-size:12px}
.inl{display:inline}
.right{margin-left:auto}
.pg-h{font-size:19px;font-weight:600;margin:2px 0 12px}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  min-height:32px;padding:0 13px;border:1px solid var(--line);border-radius:7px;
  background:var(--card);color:var(--text);font:inherit;font-size:13px;line-height:1;
  cursor:pointer;text-decoration:none;white-space:nowrap;appearance:none}
.btn:hover{background:#f6f8fc;border-color:#c7d2e2;text-decoration:none}
.btn:active{transform:translateY(1px)}
.btn:focus-visible{outline:2px solid var(--pri);outline-offset:1px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.btn.sm{min-height:28px;padding:0 10px;font-size:12.5px}
.btn.pri{background:var(--pri);border-color:var(--pri);color:#fff}
.btn.pri:hover{background:#275fd0;border-color:#275fd0}
.btn.bad{color:var(--bad);border-color:#f0cdcd;background:#fffafa}
.btn.bad:hover{background:var(--bad);color:#fff;border-color:var(--bad)}
.btn.block{width:100%;min-height:40px;font-size:15px;margin-top:4px}
.wbtns{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:2px}
.wbadge{display:inline-block;min-width:18px;padding:0 5px;border-radius:9px;
  background:#eef1f6;color:var(--muted);font-size:11.5px;text-align:center}
.wbadge.hot{background:var(--pri);color:#fff}

/* ---------- 提示条 ---------- */
.flash{padding:9px 13px;border-radius:8px;font-size:13px;margin:10px 0;border:1px solid;line-height:1.55}
.flash.ok{background:#eefaf2;border-color:#c2e7d1;color:#136b41}
.flash.err{background:#fdefef;border-color:#f0c9c9;color:#a02c2c}

/* ---------- 卡片 ---------- */
.wcard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:0 1px 2px rgba(23,34,54,.04);margin:0 0 14px;overflow:hidden}
.wcard-h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:12px 14px;border-bottom:1px solid var(--line);background:#fbfcfe}
.wcard-h h2{font-size:15px;font-weight:600;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.wcard-h form.srch,.mv-acts{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.wcard form.wform,.wcard>.mempty,.wcard>.batch>p{padding:14px}
.wcard>.batch>p.mempty{margin:0;padding:26px 14px;text-align:center;color:var(--muted)}
.wcard table+div,.wcard .wmpg{border-top:1px solid var(--line)}

/* ---------- 顶栏 ---------- */
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;
  gap:12px;flex-wrap:wrap;min-height:54px;padding:0 16px;background:var(--head);color:#fff}
.brand{display:flex;align-items:center;gap:8px;color:#fff;font-size:16px}
.brand:hover{text-decoration:none;color:#fff}
.brand .dot{width:9px;height:9px;border-radius:50%;background:#37d39a;flex:0 0 9px}
.brand b{font-weight:600;letter-spacing:.3px}
.brand i{font-style:normal;font-size:12px;color:#8b98ad;font-weight:400}
.topbar-r{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.topbar-r .btn{background:#222c3c;border-color:#333f52;color:#dde5f1}
.topbar-r .btn:hover{background:#2c384b;border-color:#43506a;color:#fff}
.topbar-r .btn.pri{background:var(--pri);border-color:var(--pri);color:#fff}
.topbar-r .btn.pri:hover{background:#275fd0}
.topbar-r .who{max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:12px;color:#9fadc4;padding-right:2px}

/* ---------- 主体两栏 ---------- */
.wm-wrap{display:flex;align-items:flex-start;gap:14px;max-width:1240px;margin:0 auto;padding:14px}
.side{flex:0 0 196px;width:196px;position:sticky;top:68px}
.side-h{font-size:11.5px;letter-spacing:1px;color:var(--muted);padding:0 4px 6px;text-transform:uppercase}
.side-nav{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.side-nav a{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border-bottom:1px solid #f0f3f8;color:var(--text);font-size:13.5px}
.side-nav a:last-child{border-bottom:0}
.side-nav a:hover{background:#f6f9ff;text-decoration:none}
.side-nav a.on{background:#eef4ff;color:var(--pri);font-weight:600;box-shadow:inset 3px 0 0 var(--pri)}
.side-nav .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-nav .cnt{flex:0 0 auto;font-size:11.5px;color:var(--muted);background:#f0f3f8;border-radius:9px;padding:1px 6px;min-width:22px;text-align:center}
.side-nav .cnt.hot{background:var(--pri);color:#fff}
.quota{margin-top:10px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}
.quota-t{font-size:11.5px;color:var(--muted);margin-bottom:5px}
.quota .bar{height:6px;border-radius:4px;background:#eef1f6;overflow:hidden}
.quota .bar i{display:block;height:100%;background:var(--pri);border-radius:4px}
.quota.warn .bar i{background:var(--warn)}
.quota-v{font-size:12px;margin-top:6px;color:var(--text)}
.quota-d{font-size:12px;color:var(--muted)}
.main{flex:1 1 auto;min-width:0}

/* ---------- 列表工具条 ---------- */
.mtbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:9px 14px;
  background:#fbfcfe;border-bottom:1px solid var(--line)}
.mtbar .ck{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted);margin-right:2px}
.mtbar .sep{width:1px;height:18px;background:var(--line);margin:0 3px}
.mtbar select{height:28px;border:1px solid var(--line);border-radius:7px;background:#fff;
  font:inherit;font-size:12.5px;padding:0 6px;color:var(--text);max-width:150px}
.mtbar input[type=checkbox]{width:15px;height:15px;margin:0;accent-color:var(--pri)}

/* ---------- 邮件列表 ---------- */
table.msglist{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
table.msglist th{padding:7px 8px;text-align:left;font-weight:600;font-size:11.5px;color:var(--muted);
  background:#fbfcfe;border-bottom:1px solid var(--line);white-space:nowrap}
table.msglist td{padding:8px;border-bottom:1px solid #f2f5f9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
table.msglist tr:last-child td{border-bottom:0}
table.msglist tbody tr:hover{background:#f7faff}
table.msglist .c1{width:30px}
table.msglist .c2{width:26px;text-align:center}
table.msglist .c3{width:19%}
table.msglist .c4{width:auto}
table.msglist .c5{width:96px;color:var(--muted);font-size:12px}
table.msglist .c6{width:66px;text-align:right;font-size:12px}
table.msglist input[type=checkbox]{width:15px;height:15px;margin:0;accent-color:var(--pri)}
table.msglist tr.unseen td.c4 a{font-weight:700;color:#12203a}
table.msglist tr.unseen td.c3{font-weight:600}
table.msglist .star{color:#e6a23c}
table.msglist .star.off{color:#cfd7e3}
.wmpg{display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding:10px 14px}
.wmpg .wb{min-width:28px;height:28px;padding:0 9px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--text);font-size:12.5px}
.wmpg a.wb:hover{border-color:var(--pri);color:var(--pri);text-decoration:none;background:#f7faff}
.wmpg .wb.on{background:var(--pri);border-color:var(--pri);color:#fff;font-weight:600}
.wmpg .wb.off{opacity:.42;pointer-events:none}
.wmpg .wmut{margin-left:8px}

/* ---------- 阅读邮件 ---------- */
.mv-subject{font-size:17px;font-weight:600;flex:1 1 320px;min-width:0;word-break:break-word}
.mv-head{display:grid;grid-template-columns:64px minmax(0,1fr);gap:4px 10px;
  padding:12px 14px;border-bottom:1px solid var(--line);font-size:13px;background:#fdfefe}
.mv-head dt{color:var(--muted);font-size:12.5px}
.mv-head dd{margin:0;word-break:break-word}
.mv-head a.wmut{text-decoration:none}
.mv-att{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 14px;border-bottom:1px solid var(--line);background:#fbfcfe}
.mv-att-t{font-size:12.5px;color:var(--muted)}
.mv-att .att{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);
  border-radius:20px;background:#fff;font-size:12.5px;color:var(--text)}
.mv-att .att:hover{border-color:var(--pri);color:var(--pri);text-decoration:none}
.mv-att .att i{font-style:normal;color:var(--muted);font-size:11.5px}
.mv-body{white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:14px;
  margin:0;padding:16px 18px;max-height:70vh;overflow:auto;line-height:1.75}
.mv-body.html{background:#fff;padding:14px 18px}
.mv-body.html img{max-width:100%}
.mv-foot{padding:9px 14px;border-top:1px solid var(--line);background:#fbfcfe;word-break:break-all}
.mv-note{padding:9px 14px;font-size:12px;color:var(--muted);border-top:1px solid #f2f5f9}
.wcard>.mv-note:first-child{border-top:0}

/* ---------- 表单 ---------- */
.wform{display:block}
.fr{display:block;margin:0 0 13px}
.fr>span{display:block;font-size:12.5px;font-weight:600;margin-bottom:5px;color:#3a4657}
.fr input[type=text],.fr input[type=password],.fr input[type=number],.fr input[type=email],
.fr input[type=file],.fr textarea,.fr select{width:100%;border:1px solid var(--line);border-radius:7px;
  background:#fff;color:var(--text);font:inherit;font-size:13.5px;padding:8px 10px}
.fr input[type=text],.fr input[type=password],.fr input[type=email],.fr input[type=number]{height:36px;padding:0 10px}
.fr input[type=file]{padding:6px;font-size:12.5px;background:#fbfcfe}
.fr textarea{resize:vertical;min-height:150px;line-height:1.7;font-family:inherit}
.fr input:focus,.fr textarea:focus,.fr select:focus,.mtbar select:focus,.srch input:focus{
  outline:none;border-color:var(--pri);box-shadow:0 0 0 3px rgba(47,111,237,.13)}
.fr .hint{display:block;font-style:normal;font-size:12px;color:var(--muted);margin-top:5px;line-height:1.5}
.fr .addon{display:flex;align-items:stretch}
.fr .addon input{border-radius:7px 0 0 7px;flex:1 1 auto;min-width:0}
.fr .addon i{display:flex;align-items:center;padding:0 11px;border:1px solid var(--line);border-left:0;
  border-radius:0 7px 7px 0;background:#f4f6fa;color:var(--muted);font-style:normal;font-size:13px;white-space:nowrap}
.fr .addon.cap i{padding:0 8px}
.fr .addon.cap svg{display:block;height:36px;width:auto}
.compose textarea{min-height:210px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.srch{gap:6px}
.srch input[type=text]{height:28px;width:190px;border:1px solid var(--line);border-radius:7px;padding:0 9px;font:inherit;font-size:12.5px;background:#fff}

/* ---------- 只读表格（帮助页 / 账号页） ---------- */
table.wtable{width:100%;border-collapse:collapse;font-size:13px}
table.wtable th,table.wtable td{padding:8px 12px;border-bottom:1px solid #f0f3f8;text-align:left;vertical-align:top}
table.wtable thead th{background:#fbfcfe;font-size:11.5px;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap}
table.wtable tr:last-child td,table.wtable tr:last-child th{border-bottom:0}
table.wtable.kv th{width:130px;color:var(--muted);font-weight:500}
.tips{font-size:13px;line-height:1.9;padding:12px 14px 12px 16px;margin:0}
.tips li{margin:0 0 3px}

/* ---------- 未登录：居中卡片 ---------- */
body.wm-guest{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:16px;
  background:linear-gradient(160deg,#1b2a44 0%,#131a24 52%,#0f1520 100%)}
.auth{width:100%;max-width:430px}
.auth-card{background:var(--card);border-radius:14px;padding:24px 24px 20px;
  box-shadow:0 18px 50px rgba(6,12,24,.35)}
.auth-logo{display:flex;align-items:center;gap:8px;margin:0 0 16px;font-size:15px;flex-wrap:wrap}
.auth-logo .dot{width:9px;height:9px;border-radius:50%;background:var(--pri)}
.auth-logo b{font-weight:700}
.auth-logo i{font-style:normal;font-size:12px;color:var(--muted);font-weight:400;margin-left:auto}
.auth-h{font-size:17px;font-weight:600;margin:0 0 6px}
.auth-p{font-size:13px;color:var(--muted);margin:0 0 14px;line-height:1.6;word-break:break-word}
.auth-p.alt{text-align:center;margin:14px 0 0;font-size:12.5px}
.auth-tip{font-size:12.5px;color:var(--muted);background:#f6f8fc;border:1px solid var(--line);
  border-radius:8px;padding:9px 11px;margin:14px 0 0;line-height:1.6}
.auth-list{font-size:12.5px;color:var(--muted);line-height:1.85;margin:0 0 14px;padding-left:18px}
.auth-copy{text-align:center;font-size:11.5px;color:#7d8ca3;margin-top:12px}
.auth-foot{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:14px;font-size:12.5px;color:#8fa0b8}
.auth-foot a{color:#cfe0ff}
.auth .wform .btn.block{margin-top:8px}

/* ---------- 响应式 ---------- */
@media (max-width:920px){
  .wm-wrap{flex-direction:column;padding:10px}
  .side{position:static;width:100%;flex:0 0 auto;display:flex;gap:10px;align-items:flex-end}
  .side-h{display:none}
  .side-nav{flex:1 1 auto;display:flex;flex-wrap:wrap;border-radius:var(--radius)}
  .side-nav a{flex:1 1 auto;border-bottom:0;border-right:1px solid #f0f3f8;justify-content:center;white-space:nowrap}
  .side-nav a.on{box-shadow:inset 0 -3px 0 var(--pri)}
  .quota{flex:0 0 168px;margin-top:0}
  .grid2{grid-template-columns:1fr}
  .topbar{padding:0 12px}
  .topbar-r .who{display:none}
  table.msglist .c5,table.msglist .c6{display:none}
  .srch input[type=text]{width:130px}
}
/* ---------- 手机（<=768px）：安全区 + 触控目标 + 防 iOS 聚焦放大 ---------- */
@media (max-width:768px){
  .wm-wrap{padding:8px 8px calc(18px + env(safe-area-inset-bottom))}
  .topbar{padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
  .btn{min-height:40px}
  .btn.sm{min-height:36px}
  .wmpg .wb{min-width:40px;height:40px}
  .mtbar{gap:8px;padding:9px 10px}
  .mtbar select{height:38px;max-width:46%}
  .mtbar input[type=checkbox],table.msglist input[type=checkbox]{width:18px;height:18px}
  .side-nav a{padding:12px 10px}
  .fr input[type=text],.fr input[type=password],.fr input[type=email],.fr input[type=number],
  .fr select,.fr textarea,.srch input[type=text],.mtbar select{font-size:16px}
  .fr input[type=text],.fr input[type=password],.fr input[type=email],.fr input[type=number]{height:42px}
  .fr textarea{min-height:120px}
  form.srch{flex:1 1 160px}
  .srch input[type=text]{width:100%;min-width:0}
  table.msglist th{padding:8px}
  table.msglist td{padding:10px 8px}
}
@media (max-width:600px){
  .side{flex-direction:column;align-items:stretch}
  .quota{flex:0 0 auto}
  table.msglist .c3{width:26%}
  .mtbar .sep{display:none}
  .mv-head{grid-template-columns:56px minmax(0,1fr)}
  .wcard-h{padding:10px 12px}
}
/* ---------- 小屏手机（<=480px）：单列收口，杜绝横向溢出 ---------- */
@media (max-width:480px){
  .topbar{flex-wrap:wrap;gap:6px;padding-top:8px;padding-bottom:8px}
  .brand i{display:none}
  .topbar-r{flex:1 1 auto;justify-content:flex-end}
  .topbar-r .btn{padding:0 10px}
  table.msglist .c3{width:34%}
  .wcard-h{padding:10px;gap:8px}
  .wcard-h h2{font-size:14.5px}
  form.srch{flex:1 1 100%}
  .mv-head{grid-template-columns:52px minmax(0,1fr);gap:2px 8px}
  .mv-body{padding:12px 10px}
  .mv-body.html{padding:10px}
  .mv-att{padding:8px 10px}
  .mv-att .att{padding:7px 10px}
  .auth-card{padding:18px 14px 14px;border-radius:12px}
  .wmpg{padding:8px 10px}
  .wmpg .wmut{margin-left:0;width:100%;font-size:12px}
}
@media print{.topbar,.side,.mtbar,.mv-acts,.wmpg{display:none}.wm-wrap{padding:0}.wcard{border:0}}
