Files
saasshop/public/css/admin-base.css

374 lines
11 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
html{box-sizing:border-box;}
*,*::before,*::after{box-sizing:inherit;}
body{
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
color:var(--adm-text, #0f172a);
background:var(--adm-bg-layout, transparent);
margin:0;
}
a{color:var(--adm-color-link, #1677ff);text-decoration:none;}
a:hover{text-decoration:underline;}
.layout{display:grid;min-height:100vh;}
.sidebar{padding:24px;}
.sidebar-title,.sidebar-brand{margin-top:0;}
/* 左侧菜单形态(兼容):不应覆盖顶部导航 topnav 的链接样式 */
.sidebar:not(.topnav) a,
.sidebar:not(.topnav) .sidebar-link{
display:block;
color:var(--adm-text-secondary, #64748b);
text-decoration:none;
padding:10px 12px;
border-radius:10px;
margin-bottom:8px;
}
.sidebar:not(.topnav) a:hover,
.sidebar:not(.topnav) .sidebar-link:hover{
text-decoration:none;
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
color:var(--adm-text, #0f172a);
}
.group-title{
font-size:12px;
color:var(--adm-text-muted, #94a3b8);
text-transform:uppercase;
letter-spacing:.08em;
margin:18px 0 8px;
}
.sidebar-logout,.logout-form{margin-top:18px;}
.content{padding:28px;}
/* 顶部导航布局(将左侧菜单提升到顶部,提升可视面积,避免底部需要横向滚动才看到关键动作) */
.layout.layout-topnav{grid-template-columns:1fr;grid-template-rows:auto 1fr;}
.layout.layout-topnav .sidebar{
position:sticky;
top:0;
z-index:50;
padding:16px 20px;
border-right:none !important;
border-bottom:1px solid var(--adm-border-color, #e5e7eb);
}
.layout.layout-topnav .content{padding-top:20px;}
/* 顶部导航:链接样式由 admin-components.css 的 topnav 组件接管;这里不再做强样式覆盖 */
.layout.layout-topnav .sidebar{white-space:normal;overflow-x:visible;}
.top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;}
.page-title{margin:0;}
.card{border:1px solid var(--adm-border-color, #e5e7eb);border-radius:var(--adm-radius, 14px);padding:16px;background:var(--adm-bg-container, transparent);box-shadow:var(--adm-shadow-sm, none);}
.card + .card{margin-top:20px;}
.card-spaced{margin-bottom:20px;}
.grid{display:grid;gap:16px;}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.grid-5{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;}
.grid-6{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;}
.grid-align-end{align-items:end;}
.two-col{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;}
.two-col > *{min-width:0;}
.span-2{grid-column:span 2;}
.span-3{grid-column:span 3;}
.num{font-size:28px;font-weight:700;}
.num-md{font-size:20px;font-weight:700;}
.num-sm{font-size:18px;font-weight:700;}
/* 兼容:早期页面使用 metric-number 作为指标数字样式 */
.metric-number{font-size:28px;font-weight:700;}
.text-md{font-size:16px;display:block;}
.muted{color:var(--adm-text-muted, #94a3b8);}
.muted-tight{margin-top:0;}
.muted-xs{margin-top:6px;font-size:12px;}
.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:12px;margin-top:8px;}
/* Form Grid中后台表单统一布局两列栅格 + 全宽行) */
.form-grid{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:12px;
}
.form-grid label{
display:flex;
flex-direction:column;
gap:6px;
}
.form-grid label > span{
font-size:12px;
font-weight:600;
color:var(--adm-text-secondary, #64748b);
}
.form-grid label > small{
margin-top:6px;
}
.form-grid .full{
grid-column:1 / -1;
}
@media (max-width: 768px){
.form-grid{grid-template-columns:1fr;}
.form-grid .full{grid-column:auto;}
}
table{
width:100%;
border-collapse:collapse;
}
th,td{
padding:10px;
border-bottom:1px solid var(--adm-border-color, #e5e7eb);
text-align:left;
vertical-align:top;
}
th{
color:var(--adm-text-secondary, #64748b);
font-weight:600;
}
input,select,button,textarea,
.form-grid input,
.form-grid select,
.login-form input,
.login-form button{
padding:10px 12px;
border-radius:var(--adm-radius-sm, 10px);
border:1px solid var(--adm-input-border, #d1d5db);
background:var(--adm-input-bg, #ffffff);
color:var(--adm-input-text, #0f172a);
box-sizing:border-box;
}
input:hover,select:hover,textarea:hover{
border-color:var(--adm-input-border-hover, var(--adm-input-border, #a3aab6));
}
input:focus,select:focus,textarea:focus{
outline:none;
border-color:var(--adm-color-primary, #1677ff);
box-shadow:0 0 0 3px var(--adm-primary-focus-ring, rgba(22, 119, 255, .12));
}
button{cursor:pointer;}
/* Buttons (UI Components)
* 说明:统一总台/站点后台/商家后台按钮风格(四端后台美化第一步)。
*/
.btn,
button.btn,
.btn-secondary,
button.btn-secondary,
.btn-danger,
button.btn-danger{
display:inline-flex;
align-items:center;
justify-content:center;
gap:6px;
padding:10px 14px;
border-radius:10px;
font-weight:600;
text-decoration:none;
border:1px solid transparent;
cursor:pointer;
}
.btn,
button.btn{
background:var(--adm-color-primary, #1d4ed8);
border-color:var(--adm-color-primary, #1d4ed8);
color:#fff;
}
.btn:hover,
button.btn:hover{
background:var(--adm-color-primary-hover, #1e40af);
border-color:var(--adm-color-primary-hover, #1e40af);
text-decoration:none;
}
.btn-secondary,
button.btn-secondary{
background:#ffffff;
border-color:var(--adm-border-color-strong, #d1d5db);
color:var(--adm-text, #0f172a);
}
.btn-secondary:hover,
button.btn-secondary:hover{
background:#f8fafc;
border-color:var(--adm-border-color-strong, #d1d5db);
text-decoration:none;
}
.btn-danger,
button.btn-danger{
background:var(--adm-error, #ef4444);
border-color:var(--adm-error, #ef4444);
color:#fff;
}
.btn-danger:hover,
button.btn-danger:hover{
background:#dc2626;
border-color:#dc2626;
text-decoration:none;
}
.btn-sm,
button.btn-sm{
padding:8px 10px;
border-radius:9px;
font-size:13px;
}
textarea.w-full,input.w-full{width:100%;}
.pre-wrap{white-space:pre-wrap;}
.w-100{width:100px;}
.w-120{width:120px;}
.w-140{width:140px;}
.w-160{width:160px;}
.w-180{width:180px;}
.w-200{width:200px;}
input.w-90{width:90px;}
.block{display:block;}
.inline{display:inline;}
.inline-form{display:inline;}
.mb-0{margin-bottom:0;}
.mb-6{margin-bottom:6px;}
.mb-8{margin-bottom:8px;}
.mb-10{margin-bottom:10px;}
.mb-12{margin-bottom:12px;}
.mb-16{margin-bottom:16px;}
.mb-20{margin-bottom:20px;}
.mt-0{margin-top:0;}
.mt-4{margin-top:4px;}
.mt-6{margin-top:6px;}
.mt-8{margin-top:8px;}
.mt-10{margin-top:10px;}
.mt-12{margin-top:12px;}
.mt-16{margin-top:16px;}
.my-16{margin:16px 0;}
.my-20{margin:20px 0;}
.list-indent,.ml-18{margin:8px 0 0 18px;}
.flash{
background:var(--adm-success-bg, #f0fdf4);
color:var(--adm-success, #16a34a);
padding:12px 14px;
border-radius:var(--adm-radius-sm, 10px);
margin-bottom:16px;
border:1px solid rgba(22, 163, 74, .25);
}
.warning{
background:var(--adm-warning-bg, #fffbeb);
color:var(--adm-warning, #f59e0b);
padding:12px 14px;
border-radius:var(--adm-radius-sm, 10px);
margin-bottom:16px;
border:1px solid rgba(245, 158, 11, .25);
}
.error-box{
background:var(--adm-error-bg, #fef2f2);
color:var(--adm-error, #ef4444);
padding:12px 14px;
border-radius:var(--adm-radius-sm, 10px);
margin-bottom:16px;
border:1px solid rgba(239, 68, 68, .25);
}
.error,.error-inline{
color:var(--adm-error, #ef4444);
margin-top:10px;
}
.filter-error{
margin-bottom:12px;
padding:12px;
border:1px solid rgba(239, 68, 68, .25);
background:var(--adm-error-bg, #fef2f2);
color:var(--adm-error, #ef4444);
border-radius:var(--adm-radius-sm, 10px);
}
.actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.actions-spread{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap;}
.inline-links,.card-link-list{display:flex;gap:8px;flex-wrap:wrap;}
/* Layout helpers */
.flex-between{display:flex;justify-content:space-between;gap:12px;align-items:center;}
.items-center{align-items:center;}
.gap-12{gap:12px;}
.gap-10{gap:10px;}
.focus-box,.nav-box,.profile-box{
padding:12px;
border:1px solid var(--adm-border-color, #e5e7eb);
border-radius:8px;
background:var(--adm-bg-container, #ffffff);
}
.summary-box,.stat-box,.status-card,.status-link{
padding:12px;
border:1px solid var(--adm-border-color, #e5e7eb);
border-radius:8px;
background:var(--adm-bg-container, #ffffff);
}
.status-card,.status-link{color:inherit;text-decoration:none;display:block;}
.status-card:hover,.status-link:hover{text-decoration:none;}
.pagination-wrap{margin-top:16px;}
/* Pagination避免全局 a:hover 下划线在分页区域显得“底部一片线” */
.pagination-wrap a{text-decoration:none;}
.pagination-wrap a:hover,
.pagination-wrap a:focus,
.pagination-wrap a:active{text-decoration:none;}
.text-center,.table-empty{text-align:center;}
.section-dark{
/* 说明:早期是深色块,但与当前 Ant Design Pro-ish 浅色主题不一致,且容易造成文字对比度问题。
* 统一收敛:用 surface tint 作为“弱强调区块”,避免“颜色回退”。
*/
background:var(--adm-surface-tint, rgba(15, 23, 42, .02));
}
.stat-box-light,.status-link-light{
padding:12px;
border:1px solid var(--adm-border-color, #e5e7eb);
border-radius:8px;
background:var(--adm-bg-container, #ffffff);
}
.status-link-light{color:inherit;text-decoration:none;display:block;}
.is-active-dark,.status-card-active{background:#1e293b;border-color:#60a5fa;}
.is-active-light{background:#f5faff;border-color:#93c5fd;}
.result-warning{color:#f59e0b;}
.result-success{color:#22c55e;}
.info-warning{margin-bottom:12px;padding:10px 12px;border:1px solid rgba(245, 158, 11, .28);border-radius:var(--adm-radius-sm, 10px);color:var(--adm-warning, #f59e0b);background:var(--adm-warning-bg, #fffbeb);}
.helper-text{margin:12px 0 0;}
.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;}
.card-login,.login-card{width:420px;border-radius:18px;padding:28px;}
.login-form input,
.login-form button{width:100%;padding:12px;margin-top:10px;}
@media (max-width: 1200px){
.grid,.grid-2,.grid-3,.grid-4,.grid-5,.grid-6{grid-template-columns:repeat(2,1fr);}
.two-col{grid-template-columns:1fr;}
}
@media (max-width: 768px){
.layout{grid-template-columns:1fr !important;}
.sidebar{border-right:none !important;border-bottom:1px solid #22384f;}
.content{padding:16px;}
.top,.actions-spread{flex-direction:column;}
.grid,.grid-2,.grid-3,.grid-4,.grid-5,.grid-6{grid-template-columns:1fr;}
}