:root{color:#1f2933;background:#eef1f5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{min-width:1200px;margin:0;background:#eef1f5}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.65}h1,h2,p{margin:0}.login-page{min-height:100vh;display:grid;place-items:center}.login-panel{width:420px;padding:30px;background:#fff;border:1px solid #d8dde6;box-shadow:0 12px 28px #1f29331f}.login-title,.sidebar-brand{display:flex;align-items:center;gap:12px}.brand-mark{width:42px;height:42px;display:inline-grid;place-items:center;flex-shrink:0;color:#fff;background:#1f4e79;border-radius:4px;font-size:22px;font-weight:700}.login-title h1{font-size:22px}.login-title p{margin-top:5px;color:#6b7785;font-size:14px}.login-form{display:grid;gap:18px;margin-top:28px}label{display:grid;gap:7px}label span{color:#475569;font-size:14px;font-weight:600}input,select{width:100%;height:36px;padding:0 10px;color:#1f2933;background:#fff;border:1px solid #c8d0dc;border-radius:3px;outline:none}input:focus,select:focus{border-color:#1f4e79;box-shadow:0 0 0 2px #1f4e791f}input[readonly]{color:#4b5563;background:#f5f7fa}.primary-btn,.primary-small,.plain-btn,.link-btn,.close-btn{border:1px solid transparent;border-radius:3px}.primary-btn,.primary-small{color:#fff;background:#1f4e79;border-color:#1f4e79}.primary-btn{height:38px;font-weight:700}.primary-small,.plain-btn{height:32px;padding:0 14px;font-size:14px}.plain-btn{color:#334155;background:#fff;border-color:#c8d0dc}.link-btn{height:28px;padding:0 9px;color:#1f4e79;background:#f7fbff;border-color:#b8cce0;font-size:13px}.hint-row{display:flex;justify-content:space-between;margin-top:18px;padding:10px 12px;color:#64748b;background:#f5f7fa;border:1px solid #e2e8f0;font-size:14px}.hint-row strong{color:#1f4e79}.admin-layout{min-height:100vh;display:grid;grid-template-columns:220px minmax(0,1fr)}.sidebar{background:#1e293b;color:#fff}.sidebar-brand{height:64px;padding:0 18px;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar-brand strong{display:block;font-size:16px}.sidebar-brand small{display:block;margin-top:3px;color:#94a3b8;font-size:12px}.side-nav{padding:12px 0}.side-nav button{width:100%;height:44px;padding:0 22px;color:#cbd5e1;background:transparent;border:0;text-align:left}.side-nav button:hover,.side-nav button.active{color:#fff;background:#1f4e79}.admin-main{min-width:0;padding:18px 22px 28px}.main-header{height:58px;display:flex;justify-content:space-between;align-items:center;margin:-18px -22px 18px;padding:0 22px;background:#fff;border-bottom:1px solid #d8dde6}.main-header h1{font-size:20px}.main-header p{margin-top:4px;color:#7b8794;font-size:12px}.header-actions{display:flex;align-items:center;gap:12px;color:#475569;font-size:14px}.content-panel{background:#fff;border:1px solid #d8dde6}.panel-toolbar{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 14px;border-bottom:1px solid #e1e6ef}.panel-toolbar strong{font-size:16px}.panel-toolbar p{margin-top:4px;color:#6b7785;font-size:13px}.summary-strip{display:flex;gap:12px;color:#475569;font-size:14px}.summary-strip span{padding:4px 10px;background:#f5f7fa;border:1px solid #e1e6ef}.filters{display:grid;grid-template-columns:150px 150px minmax(240px,1fr) 76px;gap:10px;padding:12px 14px;background:#f8fafc;border-bottom:1px solid #e1e6ef}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;background:#fff}th,td{height:44px;padding:8px 12px;border-bottom:1px solid #e8edf3;color:#334155;text-align:left;vertical-align:middle;white-space:nowrap;font-size:14px}th{color:#475569;background:#f1f5f9;font-weight:700}tbody tr:hover{background:#f8fbff}.empty{height:160px;color:#94a3b8;text-align:center}.status{display:inline-flex;align-items:center;justify-content:center;min-width:62px;height:24px;padding:0 8px;border-radius:3px;font-size:13px;font-weight:700}.status-pending{color:#1f4e79;background:#e8f1f8}.status-used{color:#64748b;background:#edf0f3}.status-cancelled{color:#b42318;background:#fdeceb}.image-preview-row{display:flex;align-items:center;gap:16px;padding:14px;color:#475569;font-size:14px}.image-preview-row img{width:260px;height:120px;object-fit:cover;border:1px solid #d8dde6}.modal-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:30px;background:#0f172a73}.modal{width:560px;max-height:calc(100vh - 80px);overflow:auto;background:#fff;border:1px solid #c8d0dc;box-shadow:0 20px 50px #0f172a40}.large-modal{width:760px}.modal-header{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 18px;background:#f8fafc;border-bottom:1px solid #e1e6ef}.modal-header h2{font-size:18px}.modal-header p{margin-top:3px;color:#7b8794;font-size:12px}.close-btn{width:30px;height:30px;color:#475569;background:#fff;border-color:#c8d0dc;font-size:20px;line-height:1}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 18px;padding:18px}.form-grid .wide{grid-column:1 / -1}.upload-field{display:grid;gap:7px}.upload-field>span{color:#475569;font-size:14px;font-weight:600}.upload-control{display:grid;gap:12px}.upload-box{width:160px;height:34px;display:inline-grid;place-items:center;color:#1f4e79;background:#f7fbff;border:1px solid #b8cce0;border-radius:3px;cursor:pointer;font-size:14px;font-weight:700}.upload-box input{display:none}.upload-box span{color:#1f4e79;font-size:14px}.upload-preview{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;align-items:center}.upload-preview img{width:180px;height:90px;object-fit:cover;border:1px solid #d8dde6;background:#f5f7fa}.upload-preview p{color:#64748b;font-size:13px;line-height:1.5;word-break:break-all}.readonly-grid{padding-bottom:4px}.modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:12px 18px;background:#f8fafc;border-top:1px solid #e1e6ef}.message{padding:10px 12px;border-radius:3px;font-size:14px}.message.error{margin-top:16px;color:#9f2a24;background:#fdeceb;border:1px solid #f5c2bd}.message.success{color:#0f766e;background:#e6f4f1;border:1px solid #b8e1da}.message.fixed{position:fixed;right:22px;bottom:22px;z-index:1200;margin:0;box-shadow:0 10px 24px #0f172a2e}
