/* From current xm-authorization-api/static/admin.html; 2026-10-24. */

:root{
  --bg:#FFFFFF; --surface:#FFFFFF; --surface-2:#FCFDFF; --surface-3:#F3F5FC;
  --text:#28334B; --text-2:#5F687E; --text-3:#687E89;
  --line:#D6E0E5; --line-soft:#E0E7EB;
  --accent:#475CCA; --accent-hover:#384BAD; --accent-soft:#E9EDFF;
  --danger:#D05D6A; --danger-soft:#FBE9EB;
  --ok:#3E9B6E; --ok-soft:#E2F3EA;
  --warn:#D9933E; --warn-soft:#FBF0DE;
  --r-card:14px; --r-inner:10px; --r-btn:8px;
  --shadow-sm:0 1px 2px rgba(40,70,90,.05);
  --shadow:0 1px 2px rgba(40,70,90,.04), 0 8px 22px rgba(40,70,90,.07);
  --shadow-lg:0 2px 4px rgba(40,70,90,.05), 0 18px 44px rgba(40,70,90,.12);
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;outline:none}
::selection{background:var(--accent-soft)}

.view{display:none;min-height:100vh;animation:fadeIn .35s cubic-bezier(.22,1,.36,1)}
.view.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ============ 登录 ============ */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}
.login-card{width:100%;max-width:420px;background:var(--surface);border-radius:22px;padding:40px 36px;box-shadow:var(--shadow-lg);border:1px solid var(--line-soft)}
.login-brand{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:24px;font-weight:700;font-size:17px}
.brand-mark{width:34px;height:34px;border-radius:10px;background:var(--accent);display:grid;place-items:center;color:#fff}
.brand-mark svg{width:19px;height:19px}
.login-card h1{font-size:20px;text-align:center}
.login-card .sub{text-align:center;color:var(--text-2);font-size:13px;margin:6px 0 24px}
.field{margin-bottom:16px}
.field label{display:block;font-size:13px;font-weight:600;margin-bottom:7px}
.input-wrap{display:flex;align-items:center;gap:10px;background:var(--surface-2);border:1.5px solid var(--line);border-radius:var(--r-btn);padding:0 14px;height:46px;transition:all .25s}
.input-wrap:focus-within{border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 4px var(--accent-soft)}
.input-wrap.err{border-color:var(--danger);background:var(--danger-soft)}
.input-wrap input{flex:1;border:none;background:transparent;font-size:14px}
.toggle-pw{color:var(--text-3);display:grid;place-items:center;padding:4px}
.toggle-pw:hover{color:var(--accent)}
.toggle-pw svg{width:17px;height:17px}
.field-err{font-size:12px;color:var(--danger);margin-top:6px;display:none}
.field.err .field-err{display:block}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:10px 20px;border-radius:var(--r-btn);font-size:14px;font-weight:600;transition:all .25s cubic-bezier(.4,0,.2,1);border:none}
.btn svg{width:15px;height:15px}
.btn-primary{background:var(--accent);color:#fff;box-shadow:0 4px 14px rgba(47,126,140,.3)}
.btn-primary:hover{background:var(--accent-hover);transform:translateY(-2px)}
.btn-ghost{background:var(--surface-2);color:var(--text);border:1px solid var(--line)}
.btn-ghost:hover{background:var(--surface-3)}
.btn-danger{background:var(--danger-soft);color:var(--danger)}
.btn-danger:hover{background:var(--danger);color:#fff}
.btn-lg{width:100%;height:46px}
.btn-sm{padding:5px 12px;font-size:12.5px;border-radius:999px}

/* ============ 后台布局 ============ */
.admin-top{height:60px;display:flex;align-items:center;gap:16px;padding:0 24px;background:var(--surface);border-bottom:1px solid var(--line-soft);position:sticky;top:0;z-index:20}
.admin-top .brand{font-weight:700;font-size:15px;display:flex;align-items:center;gap:9px}
.admin-top .env{font-size:11px;background:var(--warn-soft);color:var(--warn);padding:2px 10px;border-radius:999px;font-weight:600}
.logout-top{margin-left:auto;font-size:13px;color:var(--text-2);padding:7px 14px;border-radius:999px;transition:all .2s}
.logout-top:hover{background:var(--danger-soft);color:var(--danger)}
.admin-top .env{margin-right:auto}
.admin-top .logout-top{margin-left:0;display:inline-flex;align-items:center;justify-content:center;flex:none;white-space:nowrap}
.admin-top a.logout-top{text-decoration:none;border:1px solid var(--line);background:var(--surface-2)}
.admin-top a.logout-top:hover{background:var(--surface-3);color:var(--text)}
.admin-body{display:flex;align-items:flex-start;max-width:1280px;margin:0 auto}
.side{width:200px;flex:none;padding:20px 12px;position:sticky;top:60px}
.menu-item{width:100%;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:12px;font-size:13.5px;color:var(--text-2);margin-bottom:4px;text-align:left;transition:all .25s}
.menu-item svg{width:16px;height:16px;flex:none;opacity:.75}
.menu-item:hover{background:var(--surface);color:var(--text);transform:translateX(3px)}
.menu-item.active{background:var(--surface);color:var(--accent);font-weight:600;box-shadow:var(--shadow)}
.menu-item .badge-count[hidden]{display:none}
.menu-item .badge-count{margin-left:auto;font-size:11px;background:var(--danger-soft);color:var(--danger);padding:1px 8px;border-radius:999px;font-weight:700}
.content{flex:1;min-width:0;padding:24px 24px 60px}
.page-head{display:flex;align-items:center;gap:12px;margin-bottom:20px}
.page-head h1{font-size:20px;font-weight:700}
.page-head .spacer{flex:1}

/* ============ 统计卡片 ============ */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px;margin-bottom:24px}
.stat{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:18px;box-shadow:var(--shadow);transition:all .3s}
.stat:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.stat .label{font-size:12px;color:var(--text-2)}
.stat .num{font-size:28px;font-weight:700;margin-top:6px;line-height:1.1}
.stat .sub{font-size:11.5px;color:var(--text-3);margin-top:6px}
.stat.hl .num{color:var(--accent)}
.stat.danger .num{color:var(--danger)}

#scanOverview{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}#scanOverview .stat{min-width:0}#scanOverview .stat:hover{transform:none}#scanLatest{font-size:17px;line-height:1.5;overflow-wrap:anywhere}
@media(max-width:900px){#scanOverview{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:380px){#scanOverview .stat{padding:12px}#scanOverview{gap:10px}#scanLatest{font-size:14px}}

/* ============ 概览图表 ============ */
#apiStatGrid{grid-template-columns:repeat(4,minmax(0,1fr))}
.dashboard-note{font-size:12px;color:var(--text-2);line-height:1.6}
.chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.chart-grid .panel{margin:0;min-width:0}
.chart-grid h3{font-size:15px;margin-bottom:5px}
.bar-chart{display:grid;align-items:end;gap:8px;height:230px;padding-top:20px;margin-top:16px}
.bar-column{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0}
.bar-value{min-height:15px;flex:none;font-size:11px;color:var(--text-2);margin-bottom:6px}
.bar-track{flex:none;height:150px;width:100%;display:flex;align-items:flex-end;justify-content:center;border-bottom:1px solid var(--line)}
.bar-fill{width:65%;max-width:42px;background:var(--accent-soft);border-radius:5px 5px 0 0;position:relative;overflow:hidden;min-height:0}
.bar-success{position:absolute;bottom:0;left:0;right:0;background:var(--accent)}
.bar-label{height:18px;flex:none;font-size:11px;color:var(--text-2);margin-top:7px;white-space:nowrap}
.hour-chart{gap:3px;overflow-x:auto;overflow-y:hidden;grid-template-columns:repeat(24,minmax(12px,1fr))}
.hour-chart .bar-fill{width:80%;background:var(--accent)}
.hour-chart .bar-value{font-size:9px}
.metric-row{margin-top:17px}
.metric-label{display:flex;justify-content:space-between;gap:12px;font-size:12px;margin-bottom:7px}
.metric-track{height:8px;background:var(--surface-2);border-radius:8px;overflow:hidden}
.metric-fill{height:100%;background:var(--accent);border-radius:8px}
#page-api-logs table{min-width:1250px}
@media(max-width:900px){.chart-grid{grid-template-columns:1fr}#apiStatGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}

.products-table{table-layout:fixed}
.products-table th:nth-child(2){width:80px}.products-table th:nth-child(3){width:130px}.products-table th:nth-child(4){width:90px}.products-table th:last-child{width:232px}
.products-table td{overflow-wrap:anywhere}.products-table th,.products-table td:nth-child(2),.products-table td:nth-child(4){white-space:nowrap}
.product-identity{display:grid;gap:5px}.product-identity strong{font-size:14px}.product-identity small,.product-download span{color:var(--text-3);font-size:12px}
.product-download{display:grid;gap:4px}.product-actions{display:flex;gap:8px;align-items:center}.product-actions .btn{flex:none}
.publish-package-form{display:grid;gap:16px;text-align:left;margin-top:18px;max-height:58vh;overflow:auto;padding:2px}.publish-package-links{display:grid;gap:14px}.publish-package-form small{font-size:12px;color:var(--text-3)}.publish-package-extra{font-size:13px;color:var(--text-2)}.publish-package-extra summary{cursor:pointer}.publish-package-extra label{margin-top:14px}
.product-options{display:grid;gap:8px;text-align:left;margin-top:18px}.product-options button{display:grid;gap:4px;text-align:left;white-space:normal;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer}.product-options button:hover{background:var(--surface-2)}.product-options small{font-size:12px;color:var(--text-3)}.product-options button.danger{color:var(--danger)}
@media(max-width:1100px){.products-table,.products-table tbody{display:block}.products-table thead{display:none}.products-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;padding:18px 0;border-bottom:1px solid var(--line)}.products-table tr:last-child{border-bottom:0}.products-table td{display:flex;align-items:center;gap:12px;justify-content:space-between;padding:0;border:0;white-space:normal}.products-table td:before{content:attr(data-label);font-size:12px;color:var(--text-3);flex:none}.products-table td:first-child,.products-table td:nth-child(3),.products-table td:last-child{grid-column:1/-1}.products-table td:nth-child(2){grid-column:1;grid-row:2;flex-direction:column;align-items:flex-start;gap:6px}.products-table td:nth-child(4){grid-column:2;grid-row:2;flex-direction:column;align-items:flex-end;gap:6px}.products-table td:first-child:before,.products-table td:last-child:before{display:none}.products-table td:first-child{display:block}.products-table td:last-child{justify-content:flex-start}.product-actions{flex-wrap:wrap}.product-download{text-align:right}.products-panel{padding-top:2px;padding-bottom:2px}}

/* ============ 卡片/表格 ============ */
.panel{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r-card);box-shadow:var(--shadow);padding:20px;margin-bottom:18px}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.form-control,.toolbar select,.toolbar input{height:38px;border:1.5px solid var(--line);background:var(--surface-2);border-radius:10px;padding:0 12px;font-size:13.5px;color:var(--text)}
.toolbar input{flex:1;min-width:140px}
.form-control:focus,.toolbar select:focus,.toolbar input:focus{border-color:var(--accent)}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:10px 12px;color:var(--text-3);font-weight:600;font-size:12px;border-bottom:1px solid var(--line-soft)}
td{padding:12px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
th:last-child,td:last-child{white-space:nowrap}
.page table .btn{white-space:nowrap;word-break:keep-all}
tr:last-child td{border-bottom:none}
tr{transition:background .15s}
tbody tr:hover{background:var(--surface-2)}
.audit-detail{min-width:220px;max-width:480px;overflow-wrap:anywhere}
#page-audit table{min-width:1080px;table-layout:fixed}
#page-audit th:nth-child(1){width:175px}
#page-audit th:nth-child(2){width:210px}
#page-audit th:nth-child(3){width:170px}
#page-audit th:nth-child(4){width:180px}
#page-audit td:nth-child(1){white-space:nowrap}
#page-audit th{white-space:nowrap}
#page-audit th:nth-child(3),#page-audit td:nth-child(3){min-width:120px;white-space:nowrap}
#page-audit td:nth-child(2),#page-audit td:nth-child(4){overflow-wrap:anywhere}
#page-audit td.audit-detail{white-space:normal}
#page-audit .tag{display:inline-flex;white-space:nowrap;word-break:keep-all}

.audit-raw{margin-top:6px;color:var(--text-3);font-size:12px}
.audit-raw summary{cursor:pointer;width:fit-content}
.audit-raw pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;margin:6px 0 0}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px}
.badge{font-size:11px;padding:3px 10px;border-radius:999px;font-weight:600;display:inline-block}
.badge.ok{background:var(--ok-soft);color:var(--ok)}
.badge.off{background:var(--surface-3);color:var(--text-3)}
.badge.warn{background:var(--danger-soft);color:var(--danger)}
.tag{font-size:11px;background:var(--accent-soft);color:var(--accent);padding:2px 8px;border-radius:6px;margin-right:4px}
.empty{text-align:center;color:var(--text-3);padding:30px;font-size:13px}

/* ============ 建议/Bug 卡片 ============ */
.feed-card{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:18px;box-shadow:var(--shadow);margin-bottom:12px;transition:all .3s}
.feed-card.pending{border-left:3px solid var(--danger)}
.feed-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.feed-head .email{font-weight:600;font-size:13.5px}
.feed-head .time{font-size:12px;color:var(--text-3)}
.feed-head .spacer{flex:1}
.feed-content{font-size:13.5px;line-height:1.7;margin:6px 0}
.feed-reply{background:var(--accent-soft);border-radius:10px;padding:10px 14px;font-size:13px;margin-top:8px;color:var(--accent-hover)}
.feed-reply b{font-weight:600}
.reply-box{margin-top:10px;display:none;gap:8px}
.reply-box.show{display:flex}
.reply-box textarea{flex:1;border:1.5px solid var(--line);background:var(--surface-2);border-radius:10px;padding:9px 12px;font-size:13px;resize:vertical;min-height:44px}
.bug-img{max-width:120px;max-height:90px;border-radius:10px;border:1px solid var(--line);cursor:pointer;transition:transform .2s}
.bug-img:hover{transform:scale(1.03)}

/* ============ Modal ============ */
.modal-mask{position:fixed;inset:0;background:rgba(43,51,59,.35);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:100;padding:20px;animation:maskIn .25s}
.modal-mask.show{display:flex}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
.modal{background:var(--surface);border-radius:20px;padding:28px 24px;width:100%;max-width:460px;box-shadow:var(--shadow-lg);animation:popIn .35s cubic-bezier(.22,1,.36,1)}
@keyframes popIn{from{opacity:0;transform:scale(.92) translateY(10px)}to{opacity:1;transform:none}}
.modal.wide{max-width:620px}
.modal-icon{width:52px;height:52px;border-radius:50%;margin:0 auto 12px;display:grid;place-items:center}
.modal-icon svg{width:24px;height:24px}
.modal-icon.success{background:var(--ok-soft);color:var(--ok)}
.modal-icon.warn{background:var(--danger-soft);color:var(--danger)}
.modal-icon.info{background:var(--accent-soft);color:var(--accent)}
.modal h3{font-size:16px;font-weight:700;text-align:center}
.modal p{color:var(--text-2);font-size:13px;margin-top:8px;line-height:1.6;text-align:center}
.modal p b{color:var(--text)}
.modal-btns{display:flex;gap:10px;margin-top:20px}
.modal-btns .btn{flex:1}
.code-list{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:14px;margin-top:14px;max-height:220px;overflow:auto;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:2}
.detail-row{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px dashed var(--line-soft);font-size:13px}
.detail-row:last-child{border-bottom:none}
.detail-row .k{color:var(--text-2)}
.detail-row .v{font-weight:500}
.user-device-limit{display:grid;grid-template-columns:minmax(140px,1fr) auto 76px auto auto;align-items:center;gap:8px;padding:10px 0;border-bottom:1px solid var(--line-soft);font-size:12px}
.user-device-limit input{width:76px;min-width:0}
.filter-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:18px;align-items:end}
.filter-field{display:flex;flex-direction:column;gap:7px;font-size:12px;color:var(--text-2);min-width:0}
.filter-grid input,.filter-grid select{flex:none;width:100%;min-width:0;box-sizing:border-box}
.filter-actions{grid-column:1/-1;display:flex;gap:10px;justify-content:flex-end}
.table-pagination{display:flex;align-items:center;gap:10px;margin-top:16px;font-size:13px;color:var(--text-2)}
.table-pagination>span{margin-right:auto}
.panel-note{font-size:13px;color:var(--text-2);line-height:1.7}
.delete-confirm-field{text-align:left;margin-top:18px}
.delete-confirm-field .input-wrap{margin-top:7px}
.btn:disabled{opacity:.5;cursor:default;transform:none;box-shadow:none}
@media(max-width:700px){.filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.table-pagination{flex-wrap:wrap}}
@media(max-width:480px){.filter-grid{grid-template-columns:1fr}}
@media(max-width:700px){.user-device-limit{grid-template-columns:1fr auto auto}.user-device-limit .limit-meta{grid-column:1/-1}}
.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);background:var(--text);color:var(--bg);padding:10px 20px;border-radius:999px;font-size:13px;opacity:0;pointer-events:none;z-index:200;transition:all .35s;box-shadow:var(--shadow-lg)}
.toast.show{opacity:1;transform:translate(-50%,0)}
@media (max-width:800px){.content{width:100%}.admin-body{flex-direction:column}.side{width:100%;position:static;display:flex;overflow-x:auto}.menu-item{white-space:nowrap}}
@media(max-width:560px){.admin-top{gap:6px;padding:0 12px}.admin-top .brand{gap:5px;font-size:12px;white-space:nowrap}.admin-top .brand-mark{width:28px;height:28px}.admin-top .env{display:none}.admin-top .logout-top{font-size:11px;padding:6px 7px}}

/* API 日志：沿用后台控件，仅调整筛选区布局。 */
.log-filters{display:grid;gap:16px;margin-bottom:16px}
.log-search-row{display:flex;align-items:flex-end;gap:10px}
.log-search{flex:1}
.log-filters .form-control{width:100%;min-width:0;font-family:inherit}
.log-search-row>.btn{height:38px;flex:none;white-space:nowrap}
.log-filter-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.log-date-options{border-top:1px solid var(--line-soft);padding-top:12px}
.log-date-options summary,.log-explanation summary{cursor:pointer;font-size:12px;color:var(--text-2);width:fit-content}
.log-date-options summary span{color:var(--text-3);margin-left:8px}
.log-date-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr)) auto;gap:12px;align-items:end;margin-top:14px}
.log-date-shortcuts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;min-height:38px}
.log-hint{font-size:12px;color:var(--text-3);margin-top:8px}
.log-feedback{font-size:13px;color:var(--text-2);margin-bottom:12px;overflow-wrap:anywhere}
.log-feedback:empty{display:none}
.log-feedback.error{color:var(--danger)}
.log-table-wrap{overflow-x:auto;border-top:1px solid var(--line-soft)}
.log-table-wrap[aria-busy="true"]{opacity:.6}
.log-explanation{border-top:1px solid var(--line-soft);padding-top:12px;margin-top:16px}
.log-explanation .panel-note{margin-top:8px;font-size:12px}
#page-api-logs :is(button,input,select,summary):focus-visible{outline:2px solid var(--accent);outline-offset:3px}
@media(max-width:1000px){.log-date-row{grid-template-columns:repeat(2,minmax(0,1fr))}.log-date-shortcuts{grid-column:1/-1}}
@media(max-width:600px){.log-search-row{flex-wrap:wrap}.log-search{flex-basis:100%}.log-filter-row{grid-template-columns:1fr}.log-date-row{grid-template-columns:1fr}.log-date-shortcuts{grid-column:auto}}

/* 用户详情：记录与操作分开，只有内容区域滚动。 */
.modal.user-detail{max-width:780px;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);display:flex;flex-direction:column}
.user-detail #modalIcon,.user-detail #modalDesc{display:none}
.user-detail #modalTitle{text-align:left;font-size:19px;flex:none}
.user-detail #modalExtra{min-height:0;overflow:auto;margin-top:20px;overscroll-behavior:contain}
.user-detail .modal-btns{flex:none;border-top:1px solid var(--line-soft);padding-top:16px;margin-top:18px}
.user-detail .modal-btns .btn{flex:none;white-space:nowrap}
.user-detail .modal-btns .btn:first-child{margin-right:auto}
.user-detail-body{text-align:left;padding-right:4px}
.user-summary{display:grid;grid-template-columns:70px minmax(0,1fr);gap:10px 16px;font-size:13px;margin:0 0 22px}
.user-summary dt{color:var(--text-2)}
.user-summary dd{margin:0;overflow-wrap:anywhere}
.user-detail-section+.user-detail-section{margin-top:22px}
.user-detail-section h4{font-size:14px;margin-bottom:10px}
.user-detail .user-detail-note{text-align:left;font-size:12px;margin:0 0 12px;line-height:1.7}
.user-record,.modal.user-detail .user-device-limit{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;border-bottom:1px solid var(--line-soft);padding:12px 0;font-size:13px}
.user-record:last-child,.modal.user-detail .user-device-limit:last-child{border-bottom:0}
.user-record-info,.user-limit-info{min-width:0}
.user-record-heading{display:flex;align-items:center;flex-wrap:wrap;gap:8px;line-height:1.6}
.user-record-heading .badge{white-space:nowrap}
.user-record-code{margin-top:5px;overflow-wrap:anywhere;font-size:12px;color:var(--text-2)}
.user-record-meta,.user-limit-meta{color:var(--text-2);font-size:12px;line-height:1.7;margin-top:5px;overflow-wrap:anywhere}
.user-limit-meta{display:block}
.user-record-actions,.user-limit-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.user-detail .btn-sm{min-height:32px;flex:none;white-space:nowrap;word-break:keep-all;padding:6px 12px;border-radius:10px}
.user-limit-controls{align-items:flex-end}
.user-limit-field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--text-2)}
.user-limit-input{display:flex;gap:6px;align-items:center}
.modal.user-detail .user-device-limit input{width:78px;height:34px;min-width:0}
.user-limit-controls .btn-sm{min-height:34px}
.user-detail-empty{font-size:13px;color:var(--text-2);padding:10px 0}
.user-detail :is(button,input):focus-visible{outline:2px solid var(--accent);outline-offset:3px}
@media(max-width:650px){.user-record,.modal.user-detail .user-device-limit{grid-template-columns:minmax(0,1fr);gap:10px}.user-limit-controls{justify-content:flex-start}.user-detail #modalExtra{margin-top:16px}.modal.user-detail{padding:22px 18px}.user-record-actions{justify-content:flex-start}}
#page-users table{min-width:960px}
#page-users th{white-space:nowrap}
#page-users .user-notes{min-width:160px;max-width:260px;white-space:normal;overflow-wrap:anywhere}
.user-summary dd{white-space:normal}

.modal{max-height:calc(100dvh - 40px);overflow:auto}
.modal.wide #modalExtra{max-height:55vh;overflow:auto;text-align:left}
.modal.ip-detail{max-width:780px;display:flex;flex-direction:column;max-height:calc(100dvh - 40px);overflow:hidden}
.ip-detail #modalIcon{display:none}.ip-detail #modalTitle{text-align:left;font-size:22px}.ip-detail #modalDesc{display:none}
.ip-detail h3,.ip-detail p{text-align:left}
.ip-detail #modalExtra{overflow:auto;min-height:0;overscroll-behavior:contain;overflow-anchor:none;text-align:left;margin-top:18px}
.ip-detail .modal-btns{flex:none;border-top:1px solid var(--line);padding-top:16px}.ip-detail .modal-btns .btn{white-space:nowrap}
.ip-detail-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}.ip-detail-head>strong{font-size:21px;white-space:nowrap;min-width:0;max-width:100%;overflow:auto}.ip-detail-head .badge{max-width:100%;white-space:normal}
.ip-detail-note{color:var(--text-2);font-size:12px;line-height:1.7;margin:8px 0 14px}
.ip-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}.ip-metrics>div{border:1px solid var(--line);border-radius:10px;padding:16px;display:grid;gap:5px}.ip-metrics span{font-size:13px;color:var(--text-2)}.ip-metrics strong{font-size:25px}.ip-metrics small{color:var(--text-2);font-size:12px;line-height:1.6}
.ip-breakdown{display:grid;grid-template-columns:minmax(90px,.65fr) minmax(0,1.35fr);gap:10px 18px;padding:14px 0}.ip-breakdown dt{color:var(--text-2)}.ip-breakdown dd{margin:0;white-space:normal;overflow-wrap:anywhere;text-align:right}
.ip-detail-section{border-top:1px solid var(--line);padding:16px 0;overflow-wrap:anywhere}.ip-detail-section h3{font-size:15px;margin-bottom:8px}.ip-paths>div{display:flex;align-items:start;justify-content:space-between;gap:16px;padding:7px 0}.ip-paths code{min-width:0;overflow-wrap:anywhere}.ip-paths span{flex:none;white-space:nowrap}
@media(max-width:520px){.ip-metrics{grid-template-columns:1fr}.modal.ip-detail{padding:22px 18px}.ip-detail-head>strong{font-size:19px}}
.issue-field{display:grid;gap:7px;font-size:12px;color:var(--text-2);min-width:0}.issue-field[hidden]{display:none}.issue-generation{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:end;margin-bottom:18px}.issue-generation input,.issue-generation select{width:100%;min-width:0}.issue-generation .btn{align-self:end}.issue-filters{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0 18px}.issue-filters select{max-width:100%;min-width:0}#page-cards table{min-width:0;table-layout:fixed}#page-cards th,#page-cards td{vertical-align:top;overflow-wrap:anywhere;white-space:normal}#page-cards th:nth-child(1){width:21%}#page-cards th:nth-child(2){width:21%}#page-cards th:nth-child(3){width:12%}#page-cards th:nth-child(4){width:27%}#page-cards th:nth-child(5){width:19%}#page-cards .tag,#page-cards .badge{display:inline-flex;width:auto;margin-top:5px;white-space:nowrap}.issue-actions,.issue-result-actions{display:flex;flex-wrap:wrap;gap:7px}.issue-actions .btn{white-space:nowrap}.issue-meta{font-size:12px;color:var(--text-2);margin-top:5px;line-height:1.6}.issue-code{display:block;font-size:13px;line-height:1.6;letter-spacing:0}.issue-product{margin-bottom:9px;line-height:1.5}.issue-product small{display:block;color:var(--text-2);font-size:12px;margin-top:3px}.issue-product-choices{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}.issue-product-choices[hidden]{display:none}.issue-product-choices label{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;font-size:13px;cursor:pointer}.issue-product-choices input{accent-color:var(--accent);width:16px;height:16px}.issue-result{border-bottom:1px solid var(--line);padding:14px 0;display:grid;gap:10px;overflow-wrap:anywhere}.issue-result code{font-size:15px}.issue-results{max-height:50vh;overflow:auto;text-align:left}.issue-detail{text-align:left;overflow-wrap:anywhere;display:grid;gap:12px}.issue-detail .issue-actions{padding-top:10px;border-top:1px solid var(--line)}
@media(max-width:1100px){#page-cards table,#page-cards tbody{display:block}#page-cards thead{display:none}#page-cards tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;border-top:1px solid var(--line);padding:20px 0}#page-cards td{display:block;padding:0;border:0;min-width:0}#page-cards td:before{content:attr(data-label);display:block;font-size:11px;color:var(--text-3);margin-bottom:6px}#page-cards td:first-child,#page-cards td:last-child{grid-column:1/-1}#page-cards td:first-child:before,#page-cards td:last-child:before{display:none}.issue-code{font-size:14px}#page-cards .empty{grid-column:1/-1}.issue-generation{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.issue-generation{grid-template-columns:minmax(0,1fr)}.issue-filters>select{flex:1;width:0}.issue-generation .btn{width:100%}.issue-product-choices label{width:100%}}
/* Sales: selected range, two quantities, then the actual customer records. */
#page-sales [hidden]{display:none!important}
#page-sales>.page-head{justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.sales-header-actions{display:flex;gap:8px;flex-wrap:wrap}.sales-header-actions .btn{white-space:nowrap}
.sales-workspace{padding:20px}.sales-range-row{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.sales-presets{display:flex;gap:4px;padding:4px;background:var(--surface-3);border-radius:10px}
.sales-presets button{padding:7px 18px;border:1px solid transparent;border-radius:7px;color:var(--text-2);font-size:13px;white-space:nowrap}
.sales-presets button[aria-pressed="true"]{background:var(--surface);border-color:var(--line);color:var(--accent);font-weight:600}
.sales-presets button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sales-date-field{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text-2)}.sales-date-field .form-control{height:38px;width:174px;min-width:0}.sales-date-field input[type=number]{width:110px}
.sales-search-row{display:grid;grid-template-columns:minmax(0,1fr) 130px auto;gap:10px;align-items:center;margin-bottom:20px}
.sales-search-row .form-control{width:100%;min-width:0;height:38px}.sales-search-row .btn{height:38px;white-space:nowrap}
.sales-summary-head{border-top:1px solid var(--line);padding-top:18px;display:flex;gap:12px;justify-content:space-between;align-items:baseline;flex-wrap:wrap}.sales-summary-head h2{font-size:15px;font-weight:600}.sales-summary-head p{font-size:12px;color:var(--text-2);min-width:0;max-width:100%;overflow-wrap:anywhere}
#salesOverview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin:18px 0 0}
.sales-metric{display:grid;gap:7px;min-width:0}.sales-metric+ .sales-metric{border-left:1px solid var(--line);padding-left:24px}.sales-metric>span{font-size:13px;color:var(--text-2)}.sales-metric strong{font-size:36px;font-weight:650;line-height:1.2;font-variant-numeric:tabular-nums}.sales-metric small{font-size:13px;font-weight:400;color:var(--text-2);margin-left:7px}
.sales-summary-note{font-size:12px;color:var(--text-3);margin-top:15px}.sales-error{color:var(--danger);font-size:13px;margin:12px 0 0;overflow-wrap:anywhere}
.sales-detail-panel>.page-head{justify-content:space-between;gap:12px;margin-bottom:6px;flex-wrap:wrap}.sales-detail-panel h3{font-size:17px}.sales-detail-panel>#salesDetailCount{font-size:12px;margin-bottom:16px}
.sales-scroll{overflow:auto}.sales-scroll table{min-width:0;width:100%;table-layout:fixed}.sales-scroll td,.sales-scroll th{white-space:normal;overflow-wrap:anywhere;vertical-align:top;padding:13px 10px}.sales-scroll td{line-height:1.65}.sales-scroll .btn{white-space:nowrap}
.sales-detail-table th:nth-child(1){width:12%}.sales-detail-table th:nth-child(2){width:18%}.sales-detail-table th:nth-child(3){width:21%}.sales-detail-table th:nth-child(4){width:9%}.sales-detail-table th:nth-child(5){width:24%}.sales-detail-table th:nth-child(6){width:16%}
.sales-row-actions{display:flex;gap:6px;flex-wrap:wrap}.sales-edit-form{display:grid;gap:14px;text-align:left}.sales-edit-form label{display:grid;gap:7px;font-size:13px;color:var(--text-2)}.sales-edit-form textarea{height:80px;padding:10px}
.sales-reports>summary{font-size:14px;font-weight:600;cursor:pointer}.sales-reports>.panel-note{margin:12px 0 18px}.sales-report-layout{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:28px}.sales-report-layout>section{min-width:0}.sales-section-title{font-size:14px;font-weight:600;margin:0 0 12px}.sales-summary-total{font-weight:600;border-top:2px solid var(--line)}#salesGroupTable th:first-child{width:28%}#salesGroupTable th:last-child{width:25%}#salesProductTable th:first-child{width:50%}
@media(max-width:1100px){.sales-detail-table,.sales-detail-table tbody{display:block;min-width:0!important}.sales-detail-table thead{display:none}.sales-detail-table tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:20px 0;border-top:1px solid var(--line)}.sales-scroll .sales-detail-table td{display:block;padding:0;border:0;min-width:0}.sales-detail-table td:before{content:attr(data-label);display:block;font-size:11px;color:var(--text-3);margin-bottom:5px}.sales-detail-table td:nth-child(1){order:0}.sales-detail-table td:nth-child(4){order:1}.sales-detail-table td:nth-child(2){order:2;grid-column:1/-1}.sales-detail-table td:nth-child(3){order:3;grid-column:1/-1}.sales-detail-table td:nth-child(5){order:4;grid-column:1/-1}.sales-detail-table td:nth-child(6){order:5;grid-column:1/-1}.sales-detail-table .empty{grid-column:1/-1}.sales-report-layout{grid-template-columns:minmax(0,1fr)}}
@media(max-width:650px){#page-sales>.page-head{align-items:flex-start;gap:12px}.sales-header-actions{width:100%}.sales-header-actions .btn{flex:1}.sales-range-row{gap:12px}.sales-presets{width:100%}.sales-presets button{flex:1;padding:7px 8px}.sales-date-field{width:100%;justify-content:space-between}.sales-date-field .form-control{flex:1;max-width:210px}.sales-search-row{grid-template-columns:minmax(0,1fr) auto;gap:8px}.sales-search-row input{grid-column:1/-1}.sales-search-row select{grid-column:1}.sales-workspace{padding:16px}#salesOverview{gap:16px}.sales-metric+ .sales-metric{padding-left:16px}.sales-metric strong{font-size:32px}.sales-report-layout .sales-scroll th,.sales-report-layout .sales-scroll td{padding:10px 6px;font-size:12px}#salesGroupTable .btn{padding:5px 7px;font-size:11px}}
/* Admin controls follow the account workspace's visual language. */
body{font-family:"Avenir Next","PingFang SC","Microsoft YaHei",sans-serif}
.view{animation:none}
.admin-top{min-height:76px;height:auto;padding:14px 32px;border-bottom-color:var(--line-soft)}
.admin-top .brand{font-size:21px;letter-spacing:-.6px}
.admin-top .logout-top{height:44px;border-radius:8px;padding:0 14px;line-height:1.4}
.admin-top .logout-top:hover{background:var(--accent-soft);color:var(--accent)}
.side{top:76px;padding-top:32px}
.menu-item{border-radius:8px}
.menu-item:hover{transform:none;background:var(--surface-3)}
.menu-item.active{background:var(--accent-soft);box-shadow:none}
.content{padding-top:36px}
.page-head h1{font-size:28px;font-weight:650;letter-spacing:-.5px}
.page-head{flex-wrap:wrap}
.panel,.stat,.feed-card{box-shadow:none;border-color:var(--line)}
.stat:hover{transform:none;box-shadow:none}
.btn{min-height:38px;border-radius:8px;line-height:1.4;text-decoration:none;white-space:nowrap;box-shadow:none;transition:background .15s,color .15s}
.btn:hover{transform:none;box-shadow:none}
.btn-sm{min-height:32px;padding:6px 12px;border-radius:8px}
.form-control,.toolbar input,.toolbar select,.input-wrap,.reply-box textarea{border-width:1px;border-radius:8px;background:var(--surface)}
input,select,textarea{color:var(--text);min-width:0}
input[type=file]{font-size:13px;max-width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--surface-2)}
input[type=file]::file-selector-button{font:inherit;color:var(--text);padding:7px 12px;margin-right:12px;border:1px solid var(--line);border-radius:6px;background:var(--surface);cursor:pointer}
.badge{border-radius:5px;white-space:nowrap}
.badge.ok{color:#226646}.badge.off{color:var(--text-2)}
.modal{border:1px solid var(--line);border-radius:16px}
:where(button,a,input,select,textarea,summary):focus-visible{outline:2px solid var(--accent);outline-offset:3px}
#homepageForm{grid-template-columns:repeat(2,minmax(0,1fr))}
#homepageForm .filter-field:has(textarea){grid-column:1 / -1}
#page-admins .panel>p,#page-site-images .panel>p{color:var(--text-2);font-size:13px;line-height:1.8;margin-bottom:18px}
@media(max-width:860px){.admin-top{padding:12px 16px;gap:10px;flex-wrap:wrap}.admin-top .brand{font-size:19px}.side{top:0}.content{padding-top:24px}.page-head h1{font-size:25px}}
@media(max-width:520px){.admin-top .env{margin-right:auto}.admin-top .logout-top{height:38px;padding:0 10px}.admin-top .brand{font-size:16px}#homepageForm{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
.sales-report-layout.sales-simple{grid-template-columns:minmax(0,1fr)}.sales-plugin-breakdown>summary{font-size:14px;font-weight:600;cursor:pointer}.sales-plugin-breakdown>p{margin:12px 0}.sales-simple #salesGroupTable th:first-child{width:35%}.sales-simple #salesGroupTable th:last-child{width:22%}
.mail-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-bottom:18px}.mail-settings-grid label{display:grid;gap:7px;font-size:13px;color:var(--text-2);min-width:0}.mail-settings-grid input,.mail-settings-grid select{width:100%;min-width:0}.mail-settings-grid small{font-size:12px;color:var(--text-3);line-height:1.6}.mail-password-field{grid-column:1/-1}.mail-settings-actions{display:flex;gap:14px;align-items:center;margin-top:20px;font-size:13px;color:var(--text-2)}@media(max-width:650px){.mail-settings-grid{grid-template-columns:minmax(0,1fr)}.mail-settings-actions{align-items:stretch;flex-direction:column}}
/* Group the workspace by daily tasks; keep every existing route. */
.side{max-height:calc(100vh - 92px);overflow-y:auto;overscroll-behavior:contain;padding-bottom:20px}.nav-group{margin-top:10px}.nav-group>summary{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;color:var(--text-3);font-size:11.5px;font-weight:600;cursor:pointer;list-style:none}.nav-group>summary::-webkit-details-marker{display:none}.nav-group>summary:after{content:'›';font-size:17px;line-height:1;transform:rotate(0)}.nav-group[open]>summary:after{transform:rotate(90deg)}.nav-group-items .menu-item{padding-left:14px}.admin-location{font-size:12px;color:var(--text-3);margin-bottom:16px}.admin-mobile-bar{display:none}.admin-shortcuts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:22px}.admin-shortcuts button{display:grid;gap:7px;text-align:left;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:8px;color:var(--text)}.admin-shortcuts button:hover{border-color:var(--accent);background:var(--surface-2)}.admin-shortcuts strong{font-size:14px;font-weight:600}.admin-shortcuts span{font-size:12px;line-height:1.5;color:var(--text-2)}.dashboard-section{margin-bottom:28px}.dashboard-section-title{font-size:16px;font-weight:600;margin:0 0 14px}.dashboard-section .page-head{margin-bottom:14px;flex-wrap:wrap}.dashboard-section .page-head .dashboard-section-title{margin:0}.dashboard-section .stat-grid,.dashboard-section .admin-shortcuts{margin-bottom:0}#statGrid{grid-template-columns:repeat(5,minmax(0,1fr))}#statGrid .stat{min-width:0}#statGrid .sub{line-height:1.7}.overview-technical .panel{box-shadow:none}.overview-technical .chart-grid{margin-top:20px}
@media(max-width:1200px){#statGrid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:650px){#statGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:1100px){.admin-shortcuts{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:800px){.admin-mobile-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--line)}.admin-mobile-bar>span{font-size:13px;color:var(--text-2)}.side{display:none;position:static;max-height:65vh;padding:12px 16px;width:100%;border-bottom:1px solid var(--line)}.side.is-open{display:block}.side .menu-item{white-space:normal}.nav-group>summary{padding:12px}.admin-location{margin-bottom:12px}.admin-shortcuts button{padding:14px}}
