:root{--brand: #1677ff;--brand-dark: #0958d9;--bg: #f4f6fb;--card: #ffffff;--line: #e5e9f2;--text: #1f2430;--muted: #8a93a6;--ok: #0e9f6e;--danger: #d92d20;--orange: #f79009;--radius: 10px}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,PingFang SC,Microsoft YaHei,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--brand);text-decoration:none}h1,h2,h3{margin:0 0 8px}.muted{color:var(--muted)}.small{font-size:12px}.splash{display:flex;align-items:center;justify-content:center;height:100vh;color:var(--muted)}.app-header{background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.header-inner{max-width:1080px;margin:0 auto;display:flex;align-items:center;gap:24px;padding:0 20px;height:56px}.brand{display:flex;align-items:center;gap:8px;color:var(--text);font-weight:600}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#1677ff,#06b6d4);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700}.header-nav{display:flex;gap:18px;flex:1}.header-nav a{color:var(--text);padding:4px 2px}.header-nav a:hover{color:var(--brand)}.header-user{display:flex;align-items:center;gap:8px}.user-name{font-weight:500}.app-main{max-width:1080px;margin:0 auto;padding:24px 20px 60px}.page-title{font-size:22px}.page-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px}.center-note{margin-top:40px;text-align:center}.btn{border:1px solid transparent;border-radius:8px;padding:8px 16px;font-size:14px;cursor:pointer;transition:.15s;background:#fff}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover:not(:disabled){background:var(--brand-dark)}.btn-ghost{border-color:var(--line);color:var(--text)}.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}.btn-danger{border-color:#fecdca;color:var(--danger)}.btn-danger:hover{background:#fff1f0}.btn-sm{padding:4px 10px;font-size:13px}.input{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;outline:none}.input:focus{border-color:var(--brand)}.input-sm{padding:5px 8px;font-size:13px}.inline-form{display:flex;gap:6px;align-items:center}.badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;line-height:18px}.badge-admin{background:#fff4e0;color:#b45309}.badge-staff{background:#e0f2fe;color:#0369a1}.badge-dev{background:#e5e7eb;color:#4b5563}.badge-ding{background:#d1fae5;color:#047857}.badge-soon{background:#f3f4f6;color:var(--muted)}.err-box{background:#fff1f0;border:1px solid #ffccc7;color:#b42318;border-radius:8px;padding:10px 14px;margin:10px 0}.ok-box{background:#ecfdf5;border:1px solid #a7f3d0;color:#047857;border-radius:8px;padding:10px 14px;margin:10px 0}.tip-box{background:#f0f7ff;border:1px solid #bfdbfe;color:#1e40af;border-radius:8px;padding:12px 16px;margin:10px 0 16px}.tip-box ul{margin:6px 0 0;padding-left:18px}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:radial-gradient(1200px 500px at 10% -10%,rgba(22,119,255,.18),transparent),radial-gradient(900px 420px at 110% 15%,rgba(6,182,212,.16),transparent),#f4f6fb;padding:32px 16px}.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;width:480px;max-width:100%;padding:32px 32px 28px;box-shadow:0 20px 60px #1e32641f}.login-head{text-align:center;margin-bottom:18px}.login-logo{width:56px;height:56px;margin:0 auto 12px;border-radius:14px;background:linear-gradient(135deg,#1677ff,#06b6d4);color:#fff;font-size:28px;font-weight:700;display:flex;align-items:center;justify-content:center}.login-head h1{font-size:20px}.login-head p{color:var(--muted);font-size:13px;margin:0}.env-tip{text-align:center;padding:8px;border-radius:8px;background:#f3f4f6;color:var(--muted);font-size:13px;margin-bottom:16px}.env-ok{background:#ecfdf5;color:#047857}.login-section{border-top:1px dashed var(--line);padding:16px 0 6px;margin-top:12px}.login-section h3{font-size:15px;display:flex;align-items:center;gap:8px}.login-section .btn{margin-top:8px}.persona-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:10px}.persona{border:1px solid var(--line);border-radius:10px;background:#fff;padding:10px 12px;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:4px;transition:.15s}.persona:hover{border-color:var(--brand);box-shadow:0 4px 14px #1677ff26}.persona:disabled{opacity:.6}.persona-admin{background:#fffdf5}.persona-name{font-weight:600}.persona-dept{font-size:12px;color:var(--muted)}.persona .badge{align-self:flex-start}.busy-line{margin-top:14px;color:var(--brand);font-size:13px;text-align:center}.welcome-banner{background:linear-gradient(120deg,#eef6ff,#ecfeff);border:1px solid #bfdbfe;border-radius:var(--radius);padding:20px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px}.welcome-banner h2{font-size:18px}.module-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}.module-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px}.module-card:hover{box-shadow:0 6px 20px #1e326414}.module-icon{font-size:26px}.module-card h3{font-size:15px;margin:8px 0 4px}.admin-callout{margin-top:20px;background:#fffbeb;border:1px solid #fde68a;border-radius:var(--radius);padding:12px 16px}.tab-bar{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:16px 0 20px}.tab{border:none;background:transparent;padding:10px 16px;font-size:14px;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tab-active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:24px}.stat-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px}.stat-num{font-size:30px;font-weight:700;color:var(--brand)}.stat-label{color:var(--muted);margin-top:2px}.sub-title{margin-top:22px;font-size:15px}.tbl{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;font-size:13.5px}.tbl th,.tbl td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line)}.tbl th{background:#f8fafc;color:var(--muted);font-weight:600;white-space:nowrap}.tbl tr:last-child td{border-bottom:none}.tbl tbody tr:hover{background:#fafcff}
