:root{--primary: #14b8b6;--primary-dark: #0ea5a3;--sidebar: #1f2937;--bg: #f3f4f6;--border: #e5e7eb;--text: #1f2937;--text-sub: #6b7280;--danger: #e6432d}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f766e,#14b8b6,#2dd4bf)}.login-card{width:380px;background:#fff;border-radius:12px;padding:40px 36px 32px;box-shadow:0 20px 60px #0000002e}.login-logo{width:56px;height:56px;margin:0 auto 16px;border-radius:14px;background:var(--primary);color:#fff;font-size:22px;font-weight:700;display:flex;align-items:center;justify-content:center}.login-title{font-size:20px;text-align:center}.login-sub{text-align:center;color:var(--text-sub);font-size:13px;margin:8px 0 26px}.login-label{display:block;font-size:13px;color:var(--text-sub);margin:14px 0 6px}.login-input{width:100%;height:42px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:14px;outline:none;transition:border-color .2s}.login-input:focus{border-color:var(--primary)}.login-error{margin-top:12px;padding:8px 12px;border-radius:6px;background:#fef2f2;color:var(--danger);font-size:13px}.login-btn{width:100%;height:44px;margin-top:22px;border:none;border-radius:8px;background:var(--primary);color:#fff;font-size:15px;letter-spacing:4px;cursor:pointer}.login-btn:hover{background:var(--primary-dark)}.login-btn:disabled{opacity:.6}.layout{display:flex;min-height:100vh}.sidebar{width:220px;background:var(--sidebar);color:#cbd5e1;flex-shrink:0}.sidebar-logo{display:flex;align-items:center;gap:10px;padding:20px 18px;color:#fff;font-size:16px;font-weight:600;border-bottom:1px solid rgba(255,255,255,.08)}.sidebar-logo-icon{width:34px;height:34px;border-radius:8px;background:var(--primary);display:flex;align-items:center;justify-content:center;font-size:14px}.sidebar-menu{padding:12px 8px}.menu-item{padding:11px 14px;border-radius:8px;font-size:14px;cursor:pointer;margin-bottom:4px}.menu-item.active{background:var(--primary);color:#fff}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{height:56px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px}.topbar-title{font-size:16px;font-weight:600}.topbar-user{display:flex;align-items:center;gap:14px;font-size:14px}.logout-btn{border:1px solid var(--border);background:#fff;border-radius:6px;padding:6px 14px;font-size:13px;cursor:pointer;color:var(--text-sub)}.logout-btn:hover{color:var(--danger);border-color:var(--danger)}.content{padding:20px 24px}.stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.stat-card{background:#fff;border-radius:10px;padding:18px 20px;border-left:4px solid var(--primary)}.stat-card.green{border-left-color:#22c55e}.stat-card.orange{border-left-color:#f59e0b}.stat-card.gray{border-left-color:#9ca3af}.stat-num{font-size:28px;font-weight:700}.stat-label{margin-top:4px;font-size:13px;color:var(--text-sub)}.panel{background:#fff;border-radius:10px;padding:18px 20px}.filter-bar{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap;align-items:center}.filter-input-sm{width:130px}.filter-date{height:36px;border:1px solid var(--border);border-radius:6px;padding:0 10px;font-size:13px;outline:none;color:#333;background:#fff}.filter-date:focus{border-color:var(--primary)}.filter-sep{color:var(--text-sub);font-size:13px}.filter-spacer{flex:1}.export-btn{position:relative}.export-tip{position:absolute;bottom:calc(100% + 8px);right:0;white-space:nowrap;background:#1f2937;color:#fff;font-size:12px;padding:6px 10px;border-radius:6px;opacity:0;pointer-events:none;transition:opacity .15s;z-index:20}.export-btn:hover .export-tip{opacity:1}.export-modal{width:560px}.export-body{padding:16px 20px;overflow-y:auto}.export-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.export-all{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;cursor:pointer}.export-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.export-field{display:flex;align-items:center;gap:6px;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;cursor:pointer}.export-field.checked{border-color:var(--primary);background:#14b8b60f}.delete-modal{width:420px}.delete-warn{font-size:14px;line-height:1.7;margin-bottom:10px}.delete-tip{font-size:13px;color:var(--text-sub);margin-bottom:8px}.delete-input{max-width:100%}.btn-danger{height:36px;padding:0 20px;border:none;border-radius:6px;background:var(--danger);color:#fff;font-size:14px;cursor:pointer}.btn-danger:disabled{opacity:.4;cursor:not-allowed}.filter-select,.filter-input{height:36px;border:1px solid var(--border);border-radius:6px;padding:0 12px;font-size:14px;outline:none;background:#fff}.filter-input{width:240px}.filter-select:focus,.filter-input:focus{border-color:var(--primary)}.btn-primary{height:36px;padding:0 20px;border:none;border-radius:6px;background:var(--primary);color:#fff;font-size:14px;cursor:pointer}.btn-primary:hover{background:var(--primary-dark)}.btn-plain{height:36px;padding:0 16px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:14px;cursor:pointer}.btn-plain:disabled{opacity:.45;cursor:not-allowed}.table{width:100%;border-collapse:collapse;font-size:14px}.table th{text-align:left;padding:12px 10px;background:#f9fafb;color:var(--text-sub);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap}.table td{padding:12px 10px;border-bottom:1px solid #f3f4f6}.table-row{cursor:pointer}.table-row:hover{background:#f9fafb}.table-empty{text-align:center;color:var(--text-sub);padding:40px 0}.link{color:var(--primary);font-size:13px;cursor:pointer;white-space:nowrap}.link-gap{margin-left:12px}.link-danger{color:var(--danger)}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px}.badge-green{background:#dcfce7;color:#16a34a}.badge-orange{background:#fef3c7;color:#d97706}.badge-gray{background:#f3f4f6;color:#6b7280}.pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:16px;font-size:13px;color:var(--text-sub)}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:50}.drawer{position:absolute;right:0;top:0;bottom:0;width:520px;max-width:92vw;background:#fff;box-shadow:-8px 0 30px #0000001f;display:flex;flex-direction:column;animation:slide-in .22s ease}@keyframes slide-in{0%{transform:translate(60px);opacity:.4}to{transform:translate(0);opacity:1}}.drawer-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);font-size:16px;font-weight:600}.drawer-close{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-sub)}.drawer-body{flex:1;overflow-y:auto;padding:8px 20px 30px}.detail-section{margin:18px 0 6px;font-size:14px;font-weight:600;color:var(--primary-dark);border-left:3px solid var(--primary);padding-left:8px}.detail-row{display:flex;padding:8px 0;border-bottom:1px dashed #f0f0f0;font-size:14px}.detail-label{width:110px;flex-shrink:0;color:var(--text-sub)}.detail-value{flex:1;word-break:break-all}.signature-img{margin-top:8px;max-width:240px;border:1px solid var(--border);border-radius:8px;background:#fafafa}.doc-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:10px}.doc-item img{width:100%;height:130px;object-fit:cover;border-radius:8px;border:1px solid var(--border)}.doc-empty{height:130px;border:1px dashed var(--border);border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--text-sub);font-size:13px}.doc-label{text-align:center;font-size:13px;color:var(--text-sub);margin-top:6px}.drawer-body{padding-bottom:16px}.drawer-footer{flex-shrink:0;padding:12px 20px;border-top:1px solid var(--border);background:#fff}.approve-btn{width:100%;height:42px;font-size:15px}.approve-state{display:block;text-align:center;font-size:13px;color:var(--text-sub);padding:8px 0}.approve-state.approved{color:#16a34a;font-weight:600}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:60;display:flex;align-items:center;justify-content:center}.modal{width:760px;max-width:94vw;max-height:90vh;background:#fff;border-radius:12px;display:flex;flex-direction:column;overflow:hidden}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border);font-size:16px;font-weight:600}.modal-body{flex:1;overflow-y:auto;padding:20px;background:#f3f4f6}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:12px 20px;border-top:1px solid var(--border)}.contract-doc{background:#fff;padding:36px 40px;box-shadow:0 2px 12px #00000014;font-size:14px;line-height:1.9;color:#111}.contract-title{text-align:center;font-size:22px;font-weight:700;letter-spacing:6px;margin-bottom:6px}.contract-no{text-align:right;font-size:12px;color:#555;margin-bottom:14px}.contract-block{margin-bottom:14px}.contract-block p{margin:4px 0}.contract-p{text-indent:2em}.contract-gap{margin-left:24px}.contract-sign{display:flex;justify-content:space-between;margin-top:36px}.contract-sign-col{width:46%}.contract-sign-col p{margin:6px 0}.contract-signature{max-width:160px;max-height:60px;border-bottom:1px solid #999}.contract-signature-empty{height:60px;border-bottom:1px solid #999}.action-toast{position:fixed;top:72px;left:50%;transform:translate(-50%);z-index:80;display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px 18px;box-shadow:0 8px 30px #0000001f;font-size:14px}.btn-sm{height:30px;padding:0 14px;font-size:13px}.pdf-hidden{position:fixed;left:-9999px;top:0;width:760px;z-index:-1}.pdf-hidden .contract-doc{box-shadow:none}.config-panel{max-width:860px}.config-title{font-size:16px;font-weight:600}.config-desc{margin:6px 0 18px;font-size:13px;color:var(--text-sub)}.config-row{display:flex;align-items:center;padding:10px 0;border-bottom:1px dashed #f0f0f0}.config-label{width:150px;flex-shrink:0;font-size:14px;color:#333}.req{color:var(--danger);margin-right:3px}.config-input{flex:1;max-width:420px;height:38px;border:1px solid var(--border);border-radius:6px;padding:0 12px;font-size:14px;outline:none}.config-input:focus{border-color:var(--primary)}.config-actions{margin-top:20px;display:flex;gap:12px}.config-hint{font-size:12px;color:var(--text-sub)}.config-toast{position:fixed;top:72px;left:50%;transform:translate(-50%);z-index:80;padding:10px 20px;border-radius:8px;font-size:14px;background:#fff;box-shadow:0 8px 30px #0000001f;border:1px solid var(--border)}.config-toast.success{color:#16a34a;border-color:#bbf7d0;background:#f0fdf4}.config-toast.error{color:var(--danger);border-color:#fecaca;background:#fef2f2}.seal-area{display:flex;align-items:flex-start;gap:14px}.seal-actions{display:flex;flex-direction:column;gap:8px}.seal-btns{display:flex;gap:10px}.save-blocked-hint{color:var(--danger);align-self:center}.seal-preview{width:96px;height:96px;object-fit:contain;border:1px solid var(--border);border-radius:8px;background:#fafafa}.seal-empty{width:96px;height:96px;border:1px dashed var(--border);border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--text-sub);font-size:13px}.seal-checker{background-image:linear-gradient(45deg,#e5e7eb 25%,transparent 25%),linear-gradient(-45deg,#e5e7eb 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e5e7eb 75%),linear-gradient(-45deg,transparent 75%,#e5e7eb 75%);background-size:12px 12px;background-position:0 0,0 6px,6px -6px,-6px 0}.config-table .config-label-input{width:220px;height:32px;border:1px solid var(--border);border-radius:6px;padding:0 10px;font-size:13px;outline:none}.config-table .config-label-input:focus{border-color:var(--primary)}.config-key-cell{color:var(--text-sub);font-size:12px;font-family:monospace}.config-section-cell{color:var(--text-sub);font-size:13px}.row-disabled td{opacity:.45}.switch{position:relative;display:inline-block;width:42px;height:24px}.switch input{opacity:0;width:0;height:0}.switch-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:#d1d5db;border-radius:999px;cursor:pointer;transition:.2s}.switch-slider:before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}.switch input:checked+.switch-slider{background:var(--primary)}.switch input:checked+.switch-slider:before{transform:translate(18px)}.switch input:disabled+.switch-slider{opacity:.4;cursor:not-allowed}.tpl-layout{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.var-group{margin-bottom:12px}.var-group-title{font-size:13px;color:var(--text-sub);margin-bottom:8px}.var-chips{display:flex;flex-wrap:wrap;gap:8px}.var-chip{border:1px solid var(--primary);color:var(--primary-dark);background:#14b8b60f;border-radius:999px;padding:4px 12px;font-size:12px;cursor:pointer}.var-chip:hover{background:var(--primary);color:#fff}.tpl-editor{width:100%;height:420px;border:1px solid var(--border);border-radius:8px;padding:14px;font-size:13px;line-height:1.8;font-family:inherit;resize:vertical;outline:none;box-sizing:border-box}.tpl-editor:focus{border-color:var(--primary)}.tpl-toolbar{display:flex;gap:6px;margin-bottom:8px}.tpl-tool{min-width:34px;height:30px;padding:0 10px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:13px;font-weight:600;cursor:pointer;color:#333}.tpl-tool:hover{border-color:var(--primary);color:var(--primary-dark)}.tpl-editor-rich{overflow-y:auto;background:#fff;cursor:text}.tpl-editor-rich:empty:before{content:"在此编辑合同模板内容...";color:silver}.tpl-editor-rich h2{font-size:18px;font-weight:700;margin:8px 0}.tpl-editor-rich div,.tpl-editor-rich p{margin:0;line-height:1.8}.contract-content h2{font-size:17px;font-weight:700;margin:10px 0 6px}.contract-content div{line-height:1.9;min-height:1em}.tpl-preview{max-height:560px;overflow-y:auto;background:#f3f4f6;padding:12px;border-radius:8px}.tpl-preview .contract-doc{padding:24px 28px;font-size:12.5px}.seal-img{width:110px;vertical-align:middle}.signature-img-inline{max-width:150px;max-height:56px;vertical-align:bottom;border-bottom:1px solid #999}.contract-content p{margin:6px 0;line-height:1.9}
