:root{
    --bg:#0c1116;
    --bg-2:#0f151c;
    --panel:#141b23;
    --panel-2:#1a232d;
    --panel-3:#202b37;
    --line:#2a3642;
    --line-2:#37454f;
    --text:#e7ecf2;
    --muted:#8a98a8;
    --muted-2:#67737f;
    --blue:#2f7fd6;
    --blue-2:#1f5fa8;
    --blue-soft:rgba(47,127,214,.14);
    --white:#ffffff;
    --black:#05070a;
    --warn:#c8a23a;
    --shadow:0 1px 0 rgba(255,255,255,.02), 0 14px 34px rgba(0,0,0,.45);
}

*{box-sizing:border-box;margin:0;padding:0;}

html,body{
    height:100%;
    background:var(--bg);
    color:var(--text);
    font-family:"Segoe UI","Microsoft YaHei","PingFang SC",Arial,sans-serif;
    font-size:14px;
    line-height:1.55;
    -webkit-font-smoothing:antialiased;
}

body{
    display:flex;
    flex-direction:column;
    min-height:100vh;
}

a{color:inherit;text-decoration:none;}
ul{list-style:none;}
button{font-family:inherit;cursor:pointer;}

/* ===== 顶部导航 ===== */
.topbar{
    display:flex;
    align-items:stretch;
    justify-content:space-between;
    background:linear-gradient(180deg,#0f151c,#0b1015);
    border-bottom:1px solid var(--line);
    height:62px;
    position:sticky;
    top:0;
    z-index:50;
}
.topbar .brand{
    display:flex;
    align-items:center;
    gap:14px;
    padding:0 26px;
    border-right:1px solid var(--line);
}
.brand-mark{
    width:30px;height:30px;
    background:var(--blue);
    position:relative;
}
.brand-mark::after{
    content:"";position:absolute;inset:7px;
    border:2px solid #fff;
}
.brand-name{font-size:15px;font-weight:600;letter-spacing:.5px;}
.brand-sub{font-size:11px;color:var(--muted);letter-spacing:2px;}

.topnav{display:flex;align-items:center;gap:2px;padding-right:18px;}
.topnav a{
    padding:0 18px;height:62px;display:flex;align-items:center;
    color:var(--muted);font-size:13px;border-bottom:2px solid transparent;
}
.topnav a:hover{color:var(--text);}
.topnav a.active{color:var(--white);border-bottom-color:var(--blue);}

.topbar .nav-right{display:flex;align-items:center;gap:14px;padding-right:24px;}
.btn{
    display:inline-flex;align-items:center;justify-content:center;
    height:36px;padding:0 18px;
    background:var(--blue);color:#fff;font-size:13px;font-weight:500;
    border:1px solid var(--blue);
    transition:background .15s,border-color .15s;
}
.btn:hover{background:var(--blue-2);border-color:var(--blue-2);}
.btn-ghost{background:transparent;color:var(--text);border:1px solid var(--line-2);}
.btn-ghost:hover{background:var(--panel-2);border-color:var(--blue);}
.btn-sm{height:30px;padding:0 12px;font-size:12px;}
.btn-danger{background:transparent;border:1px solid var(--line-2);color:#d98a8a;}
.btn-danger:hover{border-color:#b95454;color:#f0a0a0;}

/* ===== 容器 / 不对称栅格 ===== */
.wrap{max-width:1320px;width:100%;margin:0 auto;padding:0 26px;flex:1;}
.section{padding:46px 0;}

.page-head{
    display:flex;align-items:flex-end;justify-content:space-between;
    gap:24px;margin-bottom:34px;
}
.page-head .title-block{max-width:62%;}
.page-title{
    font-size:30px;font-weight:700;letter-spacing:.5px;line-height:1.15;
    border-left:5px solid var(--blue);padding-left:16px;
}
.page-sub{color:var(--muted);margin-top:10px;padding-left:21px;font-size:13px;}

/* 不对称网格 */
.grid{display:grid;gap:22px;}
.grid-asym{
    grid-template-columns:1.65fr 1fr;
}
.grid-asym-2{
    grid-template-columns:1fr 1.4fr;
}
.grid-3{grid-template-columns:1.1fr 1.1fr 1.4fr;}
.grid-cards{grid-template-columns:repeat(12,1fr);}

.card{
    background:var(--panel);
    border:1px solid var(--line);
    box-shadow:var(--shadow);
    position:relative;
}
.card-head{
    display:flex;align-items:center;justify-content:space-between;
    padding:16px 20px;border-bottom:1px solid var(--line);
}
.card-head h3{font-size:14px;font-weight:600;letter-spacing:.5px;}
.card-head .tag{
    font-size:11px;color:var(--muted);border:1px solid var(--line-2);
    padding:2px 9px;
}
.card-body{padding:20px;}

/* 错落偏移，强化不对称 */
.offset-down{margin-top:34px;}
.offset-up{margin-top:-18px;}
.span-7{grid-column:span 7;}
.span-5{grid-column:span 5;}
.span-8{grid-column:span 8;}
.span-4{grid-column:span 4;}
.span-6{grid-column:span 6;}
.span-12{grid-column:span 12;}

/* ===== 进度条（方形） ===== */
.progress-wrap{margin:6px 0 4px;}
.progress-meta{
    display:flex;justify-content:space-between;align-items:baseline;
    font-size:12px;color:var(--muted);margin-bottom:9px;
}
.progress-meta b{color:var(--text);font-size:22px;font-weight:700;}
.progress-track{
    height:18px;background:var(--panel-3);border:1px solid var(--line-2);
    position:relative;overflow:hidden;
}
.progress-fill{
    height:100%;background:var(--blue);
    width:0;transition:width .6s steps(20);
    background-image:linear-gradient(90deg,var(--blue),var(--blue-2));
    border-right:2px solid rgba(255,255,255,.25);
}

/* ===== 统计方块 ===== */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);}
.stat{
    background:var(--panel);padding:22px 20px;position:relative;
}
.stat .label{font-size:12px;color:var(--muted);letter-spacing:.5px;}
.stat .value{font-size:30px;font-weight:700;margin-top:8px;line-height:1;}
.stat .value .unit{font-size:14px;color:var(--muted);font-weight:400;margin-left:4px;}
.stat .bar{position:absolute;left:0;top:0;width:4px;height:100%;background:var(--blue);}
.stat.alt .bar{background:var(--line-2);}

/* ===== 列表 ===== */
.rec-item{
    display:grid;grid-template-columns:6px 1fr auto;gap:16px;align-items:center;
    padding:15px 18px;border-bottom:1px solid var(--line);
}
.rec-item:last-child{border-bottom:none;}
.rec-item:hover{background:var(--panel-2);}
.rec-bar{width:6px;height:38px;background:var(--blue);}
.rec-bar.muted{background:var(--line-2);}
.rec-bar.warn{background:var(--warn);}
.rec-main .name{font-size:14px;font-weight:600;}
.rec-main .meta{font-size:12px;color:var(--muted);margin-top:3px;}
.rec-side{text-align:right;font-size:12px;color:var(--muted);}
.rec-side .cost{color:var(--text);font-size:15px;font-weight:600;}

.status{
    display:inline-block;font-size:11px;padding:2px 9px;border:1px solid var(--line-2);
    color:var(--muted);letter-spacing:.5px;
}
.status.upgraded{background:var(--blue-soft);border-color:var(--blue);color:#9cc4f0;}
.status.pending{border-color:var(--line-2);color:var(--muted);}
.status.deferred{border-color:var(--warn);color:var(--warn);background:rgba(200,162,58,.08);}

/* ===== 倒计时 ===== */
.countdown{
    display:flex;gap:8px;margin-top:14px;
}
.cd-cell{
    flex:1;background:var(--panel-3);border:1px solid var(--line-2);
    padding:12px 0;text-align:center;
}
.cd-cell .num{font-size:24px;font-weight:700;line-height:1;}
.cd-cell .lbl{font-size:11px;color:var(--muted);margin-top:6px;letter-spacing:1px;}
.cd-urgent .num{color:var(--warn);}

/* ===== 空状态 ===== */
.empty{
    padding:34px 20px;text-align:center;color:var(--muted-2);font-size:13px;
    border:1px dashed var(--line-2);background:var(--bg-2);
}

/* ===== 登录页 ===== */
.login-page{
    min-height:100vh;display:grid;grid-template-columns:1.15fr .85fr;
    background:var(--bg);
}
.login-aside{
    background:linear-gradient(135deg,#0e1620,#0a0f15);
    border-right:1px solid var(--line);
    padding:64px 72px;display:flex;flex-direction:column;justify-content:space-between;
    position:relative;overflow:hidden;
}
.login-aside::before{
    content:"";position:absolute;right:-120px;top:-120px;width:340px;height:340px;
    border:1px solid var(--line-2);transform:rotate(0deg);
}
.login-aside .big-mark{
    width:54px;height:54px;background:var(--blue);position:relative;
}
.login-aside .big-mark::after{content:"";position:absolute;inset:14px;border:3px solid #fff;}
.login-aside h1{font-size:38px;font-weight:700;line-height:1.2;margin-top:30px;}
.login-aside h1 span{color:var(--blue);}
.login-aside p{color:var(--muted);margin-top:18px;max-width:430px;font-size:14px;}
.login-aside .foot{color:var(--muted-2);font-size:12px;}

.login-form{
    display:flex;align-items:center;justify-content:center;padding:48px;
    background:var(--bg-2);
}
.login-box{width:100%;max-width:380px;}
.login-box h2{font-size:22px;font-weight:600;margin-bottom:6px;}
.login-box .sub{color:var(--muted);font-size:13px;margin-bottom:30px;}
.field{margin-bottom:18px;}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:8px;letter-spacing:.5px;}
.field input[type=text],.field input[type=password],.field input[type=date],
.field input[type=number],.field input[type=email],.field select,.field textarea{
    width:100%;height:42px;background:var(--panel);border:1px solid var(--line-2);
    color:var(--text);padding:0 14px;font-size:14px;font-family:inherit;
    outline:none;transition:border-color .15s,background .15s;
}
.field textarea{height:auto;padding:12px 14px;resize:vertical;min-height:84px;}
.field select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 18px,calc(100% - 13px) 18px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--blue);background:var(--panel-2);}
.remember{display:flex;align-items:center;gap:9px;margin:6px 0 22px;color:var(--muted);font-size:13px;}
.remember input{width:16px;height:16px;accent-color:var(--blue);}
.login-box .btn{width:100%;height:44px;font-size:15px;}
.login-err{background:rgba(200,80,80,.1);border:1px solid #7a3a3a;color:#e7a3a3;padding:10px 14px;font-size:13px;margin-bottom:18px;}

/* ===== 弹窗（方形） ===== */
.modal-mask{
    position:fixed;inset:0;background:rgba(4,7,10,.72);z-index:100;
    display:none;align-items:flex-start;justify-content:center;padding:60px 20px;overflow:auto;
}
.modal-mask.show{display:flex;}
.modal{
    width:100%;max-width:560px;background:var(--panel);border:1px solid var(--line-2);
    box-shadow:var(--shadow);
}
.modal-head{
    display:flex;align-items:center;justify-content:space-between;
    padding:16px 22px;border-bottom:1px solid var(--line);
}
.modal-head h3{font-size:15px;font-weight:600;}
.modal-close{background:transparent;border:1px solid var(--line-2);color:var(--muted);width:30px;height:30px;font-size:16px;line-height:1;}
.modal-close:hover{color:var(--text);border-color:var(--blue);}
.modal-body{padding:22px;max-height:64vh;overflow:auto;}
.modal-foot{
    display:flex;justify-content:flex-end;gap:10px;padding:16px 22px;
    border-top:1px solid var(--line);background:var(--panel-2);
}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.form-row .full{grid-column:span 2;}

/* ===== 表格 ===== */
.table{width:100%;border-collapse:collapse;}
.table th,.table td{
    text-align:left;padding:13px 16px;border-bottom:1px solid var(--line);font-size:13px;
}
.table th{color:var(--muted);font-weight:500;font-size:12px;letter-spacing:.5px;background:var(--panel-2);}
.table td .name{font-weight:600;}
.table tbody tr:hover{background:var(--panel-2);}
.table .num{text-align:right;font-variant-numeric:tabular-nums;}

/* 分页 */
.pager{display:flex;align-items:center;gap:6px;margin-top:18px;}
.pager button{
    min-width:34px;height:34px;background:var(--panel);border:1px solid var(--line-2);
    color:var(--muted);font-size:13px;
}
.pager button:hover{border-color:var(--blue);color:var(--text);}
.pager button.active{background:var(--blue);border-color:var(--blue);color:#fff;}
.pager .info{margin-left:auto;color:var(--muted);font-size:12px;}

/* 提示条 */
.toast{
    position:fixed;left:50%;bottom:34px;transform:translateX(-50%) translateY(20px);
    background:var(--panel-3);border:1px solid var(--line-2);color:var(--text);
    padding:12px 22px;font-size:13px;z-index:200;opacity:0;transition:opacity .2s,transform .2s;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ===== 底部 ===== */
.site-footer{
    background:linear-gradient(180deg,#0b1117,#070b0f);
    border-top:2px solid var(--blue);
    margin-top:auto;
}
.footer-inner{
    max-width:1320px;margin:0 auto;padding:42px 26px 30px;
    display:grid;grid-template-columns:1.6fr 1fr 1fr 1.8fr;gap:30px;
}
.footer-block-main .footer-logo{
    font-size:22px;font-weight:700;letter-spacing:3px;color:var(--white);
    border-left:5px solid var(--blue);padding-left:14px;
}
.footer-sys{font-size:13px;color:var(--muted);margin-top:10px;padding-left:19px;}
.footer-desc{font-size:12px;color:var(--muted-2);margin-top:8px;padding-left:19px;max-width:280px;}
.footer-title{font-size:13px;color:var(--text);font-weight:600;margin-bottom:14px;letter-spacing:1px;}
.footer-list li{font-size:12px;color:var(--muted);padding:5px 0;border-bottom:1px solid var(--line);}
.footer-list li:hover{color:var(--text);}
.footer-line{font-size:12px;color:var(--muted);padding:5px 0;}
.footer-contact{color:var(--muted-2);}
.footer-copyright{
    border-top:1px solid var(--line);padding:16px 26px;text-align:center;
    font-size:12px;color:var(--muted);letter-spacing:.5px;
}

.muted{color:var(--muted);}
.tiny{font-size:12px;}
.right{text-align:right;}

@media (max-width:1080px){
    .grid-asym,.grid-asym-2,.grid-3{grid-template-columns:1fr;}
    .offset-down,.offset-up{margin-top:0;}
    .login-page{grid-template-columns:1fr;}
    .login-aside{display:none;}
    .footer-inner{grid-template-columns:1fr 1fr;}
    .span-7,.span-5,.span-8,.span-4,.span-6{grid-column:span 12;}
}
