:root{--bg:#070b1c;--panel:#111833;--line:#27315a;--text:#edf1ff;--muted:#99a4ca;--accent:#7767ff;--cyan:#31d7f4}
*{box-sizing:border-box}body{min-height:100vh;margin:0;background:radial-gradient(circle at top,#182052 0,var(--bg) 48%);color:var(--text);font-family:system-ui,-apple-system,"Microsoft YaHei",sans-serif}.navbar{background:#0b1028;border-bottom:1px solid var(--line)}a{color:#aaa2ff}.card,.modal-content{background:rgba(17,24,51,.96);border:1px solid var(--line);border-radius:10px;color:var(--text);box-shadow:0 12px 35px #0005}.p-4{padding:1.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.mt-2{margin-top:.5rem}.w-100{width:100%}.text-center{text-align:center}.h3{font-size:1.75rem;margin-top:0}label{display:block;margin:.35rem 0}.form-control,.form-select{display:block;width:100%;padding:.65rem .75rem;border:1px solid #303a67;border-radius:6px;background:#0a1027;color:var(--text);font:inherit}.form-control:focus,.form-select:focus{outline:0;background:#0a1027;color:#fff;border-color:var(--accent);box-shadow:0 0 0 .2rem #7767ff33}.form-control::placeholder{color:#6f7899}.btn{display:inline-block;padding:.65rem 1rem;border:1px solid transparent;border-radius:6px;color:#fff;text-align:center;text-decoration:none;cursor:pointer;font:inherit}.btn-primary{background:linear-gradient(135deg,var(--accent),#5841e7);border:0}.btn-outline-light{background:#121a38;border-color:#8e98bd;color:#fff}.btn-outline-light:hover{background:#29345f}.btn-tutorial{background:linear-gradient(135deg,#00b8d9,#1677ff);border-color:#35d6ef;color:#fff}.btn-tutorial:hover{background:linear-gradient(135deg,#18cdec,#3b8cff);border-color:#70e8f7;color:#fff}.alert{padding:.8rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:6px}.alert-danger{background:#5b1d2a;border-color:#9e334b}.alert-success{background:#174b3b;border-color:#2c8a68}.table{--bs-table-bg:transparent;--bs-table-color:var(--text);--bs-table-border-color:var(--line)}.text-muted,.text-secondary{color:var(--muted)!important}.hero{padding:7rem 0;text-align:center}.hero h1{font-weight:800;font-size:clamp(2.2rem,7vw,4.5rem);background:linear-gradient(90deg,#fff,var(--cyan),#ad9cff);color:transparent;background-clip:text}.glass{max-width:720px;margin:auto}.admin-shell{display:flex;min-height:calc(100vh - 57px)}.sidebar{width:220px;background:#0b1028;border-right:1px solid var(--line);padding:18px}.sidebar a{display:block;color:#c9cff0;text-decoration:none;padding:11px;border-radius:8px;margin-bottom:4px}.sidebar a:hover{background:#232b55;color:#fff}.admin-main{flex:1;padding:28px;min-width:0}.stat{border-left:3px solid var(--cyan)}.stat strong{font-size:1.8rem}.code-box{font-family:ui-monospace,monospace;letter-spacing:.08em;background:#080d20;padding:12px;border-radius:8px;word-break:break-all}.pagination{--bs-pagination-bg:#111833;--bs-pagination-border-color:#303a67;--bs-pagination-color:#ddd}.badge{font-weight:500}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:min(420px,100%)}@media(max-width:991px){.sidebar{position:fixed;z-index:20;left:-230px;top:57px;bottom:0;transition:.2s}.sidebar.open{left:0}.admin-main{padding:18px}.hero{padding:4rem 0}}

/* 深色界面的统一消息提示，覆盖 Bootstrap 默认的浅色变量。 */
.alert-danger{background:rgba(214,64,96,.14)!important;border-color:rgba(238,92,123,.62)!important;color:#ffdbe3!important}
.alert-success{background:rgba(35,177,111,.14)!important;border-color:rgba(64,211,139,.55)!important;color:#d4ffe9!important}
.alert-warning{background:rgba(218,158,42,.14)!important;border-color:rgba(241,185,70,.58)!important;color:#ffedbd!important}
.alert-info{background:rgba(49,184,222,.14)!important;border-color:rgba(80,207,240,.55)!important;color:#d8f8ff!important}
.alert a{color:inherit!important;text-decoration:underline}
