:root{--ink:#132038;--muted:#6d7d91;--line:#d9e3ee;--soft:#f4f8fc;--blue:#2563eb;--blue-dark:#154fc2;--teal:#217f78;--danger:#bb3344;--shadow:0 20px 60px rgba(31,53,82,.1)}
*{box-sizing:border-box}body{margin:0;color:var(--ink);font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif;background:#f4f7fb}button,input,textarea,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}
/* 已有 token 时首屏不闪登录页，先展示后台壳再校验会话 */
html.admin-session-pending #loginView{display:none!important}
html.admin-session-pending #adminShell{display:grid!important}
.login-view{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 70% 20%,#d8e7ff 0,transparent 36%),linear-gradient(135deg,#f8fbff,#e9f1fa)}.login-card{width:min(430px,100%);padding:46px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow)}.brand-mark{width:58px;height:58px;display:grid;place-items:center;background:#071019;color:#fff;font-weight:900;font-size:24px;letter-spacing:-3px}.login-card>p,.topbar small,.dialog-shell header small{font:600 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:2px;color:var(--teal)}.login-card h1{font-size:28px;margin:12px 0 30px}.login-card label,.form-grid label{display:grid;gap:8px;margin:15px 0;color:#46576b;font-size:13px}.login-card input,.form-grid input,.form-grid textarea,.form-grid select,.toolbar input,.toolbar select{width:100%;border:1px solid #c9d6e4;background:#fff;color:var(--ink);padding:12px 14px;outline:none}.login-card input:focus,.form-grid input:focus,.form-grid textarea:focus,.form-grid select:focus,.toolbar input:focus{border-color:var(--blue);box-shadow:0 0 0 3px #2563eb16}.login-card>button,.primary{width:100%;border:0;background:var(--blue);color:#fff;font-weight:700;padding:13px 18px;margin-top:12px}.login-card>button:hover,.primary:hover{background:var(--blue-dark)}.form-error{display:block;min-height:20px;color:var(--danger);font-size:13px;margin-top:12px}
.admin-shell{min-height:100vh;display:grid;grid-template-columns:250px 1fr}.admin-shell>aside{position:sticky;top:0;height:100vh;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;padding:26px 18px}.admin-shell>aside header{display:flex;align-items:center;gap:13px;padding:0 10px 28px}.admin-shell>aside header .brand-mark{width:48px;height:48px;font-size:20px}.admin-shell>aside header b{display:block;font-size:18px}.admin-shell>aside header small{display:block;color:#8291a2;font:600 9px ui-monospace,monospace;letter-spacing:1.2px;margin-top:4px}.admin-shell nav{display:grid;gap:5px}.admin-shell nav button{border:0;background:transparent;color:#627289;padding:13px 14px;text-align:left;font-size:14px}.admin-shell nav button span{display:inline-block;width:27px}.admin-shell nav button.active{background:#edf4ff;color:#1551c9;box-shadow:inset 3px 0 var(--blue);font-weight:700}.admin-shell>aside footer{margin-top:auto;border-top:1px solid var(--line);padding-top:18px}.admin-shell>aside footer button{border:0;background:none;color:#718196;padding:10px 14px}
.admin-shell>main{min-width:0}.topbar{height:100px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 42px}.topbar h1{font-size:26px;margin:7px 0 0}.topbar>span{color:#728196;font-size:13px}.content{padding:34px 42px}.flash{position:fixed;z-index:50;top:24px;right:32px;background:#173a35;color:#fff;padding:12px 18px;box-shadow:var(--shadow);font-size:13px}.flash.error{background:#8f2534}
.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.stat-card{background:#fff;border:1px solid var(--line);padding:25px;box-shadow:0 8px 30px rgba(31,53,82,.05)}.stat-card>small{color:#74859a}.stat-card>strong{display:block;font-size:36px;margin:12px 0}.stat-card>div{display:flex;gap:16px;color:#738197;font-size:12px}.stat-card>div b{color:var(--ink);margin-left:4px}.recent-box{margin-top:22px;background:#fff;border:1px solid var(--line);padding:25px}.recent-box h2{font-size:18px;margin:0 0 10px}.recent-box p{color:var(--muted);line-height:1.8}
.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.section-head h2{font-size:20px;margin:0}.section-head .primary{width:auto;margin:0}.toolbar{display:flex;gap:10px;background:#fff;border:1px solid var(--line);padding:14px;margin-bottom:14px}.toolbar input{max-width:430px}.toolbar select{width:160px}.toolbar button{border:1px solid #c9d6e4;background:#fff;color:#45586f;padding:0 18px}.data-card{overflow:auto;background:#fff;border:1px solid var(--line)}table{width:100%;border-collapse:collapse;min-width:900px}th,td{padding:14px 15px;border-bottom:1px solid #e4ebf2;text-align:left;font-size:13px;vertical-align:top}th{background:#edf3f8;color:#516278;font-size:11px;letter-spacing:.4px}td strong{display:block;max-width:460px;line-height:1.45}td small{display:block;color:#8795a5;margin-top:6px}.status{display:inline-flex;border-radius:16px;padding:5px 9px;font-size:11px}.status.public,.status.active{background:#e4f5ef;color:#16705f}.status.hidden,.status.disabled{background:#f4e8eb;color:#a42f43}.status.draft{background:#eef1f5;color:#647386}.actions{display:flex;gap:7px}.actions button{border:1px solid #ccd8e4;background:#fff;color:#43566d;padding:6px 9px;white-space:nowrap}.actions button:hover{border-color:var(--blue);color:var(--blue)}.empty{padding:60px;text-align:center;color:#7c8b9d}
dialog{width:min(1000px,calc(100% - 40px));height:min(920px,calc(100dvh - 40px));max-height:calc(100dvh - 40px);border:0;padding:0;overflow:hidden;background:#fff;box-shadow:0 30px 100px rgba(20,35,55,.26)}dialog::backdrop{background:#13203899}.dialog-shell{display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;background:#fff}.dialog-shell>header{position:relative;z-index:2;flex:0 0 auto;background:#fff;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:16px;padding:22px 28px}.dialog-shell>header>div{min-width:0;flex:1}.dialog-shell h2{margin:5px 0 0}.icon-button{position:relative;z-index:3;flex:0 0 auto;width:40px;height:40px;border:0;background:transparent;font-size:28px;line-height:1;color:#65758a;cursor:pointer}.icon-button:hover{background:var(--soft);color:var(--ink)}#dialogBody{position:relative;z-index:1;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 22px;padding:24px 28px}.form-grid>label{display:flex;flex-direction:column;min-width:0;gap:8px;margin:0;color:#46576b;font-size:13px;font-weight:600}.form-grid>label.wide{grid-column:1/-1}.form-grid input,.form-grid textarea,.form-grid select{display:block;width:100%;min-width:0;border-radius:2px}.form-grid textarea{min-height:104px;line-height:1.65;resize:vertical}.form-grid>footer{grid-column:1/-1;display:flex;justify-content:flex-end;gap:12px;border-top:1px solid var(--line);padding-top:20px;margin-top:2px}.form-grid>footer button{min-width:104px;border:1px solid #cbd7e3;background:#fff;color:#43566d;padding:11px 20px}.form-grid>footer button:hover{border-color:#9eb1c5;background:var(--soft)}.form-grid>footer .primary{width:auto;margin:0;border-color:var(--blue);background:var(--blue);color:#fff}.form-grid>footer .primary:hover{border-color:var(--blue-dark);background:var(--blue-dark)}.repeat-box{grid-column:1/-1;background:#fff;border:1px solid var(--line);margin:2px 0;overflow:hidden}.repeat-box>header{display:flex;justify-content:space-between;align-items:center;padding:13px 16px;background:#edf3f8;border-bottom:1px solid var(--line)}.repeat-box>header button{border:1px solid #bfd0e1;background:#fff;color:var(--blue);padding:7px 11px;font-weight:700}.repeat-box>header button:hover{border-color:var(--blue);background:#f7faff}.repeat-box>div{display:grid;gap:12px;padding:14px}.repeat-item{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(0,1.3fr) 36px;align-items:start;gap:12px;margin:0;padding:14px;background:var(--soft);border:1px solid #e0e8f0}.repeat-field{display:flex!important;flex-direction:column;gap:7px!important;min-width:0;margin:0!important;color:#526378!important;font-size:12px!important;font-weight:700}.repeat-field>span{line-height:1.3}.repeat-item input,.repeat-item textarea{background:#fff}.repeat-item textarea{min-height:86px}.repeat-item>button{width:36px;height:36px;border:1px solid #d5dfe9;background:#fff;color:var(--danger);font-size:20px;line-height:1}.repeat-item>button:hover{border-color:#e2a9b2;background:#fff6f7}.form-field-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;min-width:0}.form-field-pair>label{display:flex;flex-direction:column;min-width:0;gap:8px;margin:0;color:#46576b;font-size:13px;font-weight:600}
.pagination{display:flex;justify-content:flex-end;gap:7px;margin-top:14px}.pagination button{border:1px solid #cbd7e3;background:#fff;padding:8px 12px}.pagination button:disabled{opacity:.4;cursor:not-allowed}
@media(max-width:800px){.admin-shell{grid-template-columns:1fr}.admin-shell>aside{position:static;height:auto;padding:14px}.admin-shell>aside header{padding-bottom:14px}.admin-shell nav{display:flex;overflow:auto}.admin-shell nav button{white-space:nowrap}.admin-shell>aside footer{position:absolute;right:15px;top:17px;border:0;padding:0}.topbar{height:80px;padding:0 20px}.content{padding:20px}.stats-grid{grid-template-columns:1fr}.toolbar{flex-wrap:wrap}.toolbar input,.toolbar select{max-width:none;width:100%}dialog{width:calc(100% - 20px);max-height:calc(100dvh - 20px)}.dialog-shell{max-height:calc(100dvh - 20px)}.dialog-shell>header{padding:18px 20px}.form-grid{grid-template-columns:minmax(0,1fr);gap:15px;padding:18px 20px}.form-grid>label.wide,.repeat-box,.form-grid>footer{grid-column:1}.form-grid>footer{position:sticky;bottom:0;z-index:1;margin:3px -20px -18px;padding:14px 20px;background:#fff;box-shadow:0 -10px 24px rgba(31,53,82,.07)}.form-grid>footer button{flex:1;min-width:0}.repeat-item{grid-template-columns:1fr}.repeat-item button{padding:8px}.section-head{align-items:flex-start}.admin-shell>aside header .brand-mark{width:42px;height:42px}}
@media(max-width:800px){.form-field-pair{grid-template-columns:repeat(2,minmax(0,1fr))}.repeat-box>header{padding:12px}.repeat-box>div{padding:10px}.repeat-item{display:flex;flex-direction:column;gap:10px;padding:12px}.repeat-field{width:100%}.repeat-item>button{align-self:flex-end;padding:0}}
@media(max-width:420px){.form-field-pair{grid-template-columns:1fr}}
