.fade-enter-active,.fade-leave-active{transition:opacity .18s ease}.fade-enter-from,.fade-leave-to{opacity:0}:root{--navy-900:#0A1F44;--navy-800:#123058;--navy-700:#1D4ED8;--navy-600:#2563EB;--navy-500:#3B82F6;--navy:#2563EB;--navy-d:#1D4ED8;--navy-l:#EAF1FE;--jade-700:#047857;--jade-600:#059669;--jade-500:#10B981;--jade-100:#E6F7F0;--green:#059669;--green-d:#047857;--green-l:#E6F7F0;--gold:#06B6D4;--gold-d:#0E7490;--gold-l:#E6FAFE;--ink:#1F2329;--ink-2:#3B4757;--ink-3:#667085;--ink-4:#98A2B3;--paper:#F4F6FA;--card:#FFFFFF;--surface:#F4F6FA;--line:#E4E9F0;--line-2:#EFF2F7;--red:#D92D20;--red-l:#FEE4E2;--amber:#DC6803;--amber-l:#FEF0C7;--violet:#6941C6;--violet-l:#EBE9FE;--role:var(--navy);--role-l:var(--navy-l);--r-xs:6px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-pill:999px;--shadow:0 1px 2px rgba(16,24,40,.04), 0 4px 16px -8px rgba(16,24,40,.08);--shadow-lg:0 12px 40px -12px rgba(16,24,40,.18);--fs-caption:12px;--fs-table:13px;--fs-body:14px;--fs-h3:16px;--fs-h2:20px;--fs-h1:28px;--fs-hero:36px;--sans:"PingFang SC","Microsoft YaHei","Noto Sans SC","Hiragino Sans GB",-apple-system,"Segoe UI",sans-serif;--serif:var(--sans)}.app-shell[data-role=ceo]{--role:#2563EB;--role-l:#EAF1FE}.app-shell[data-role=hr]{--role:#059669;--role-l:#E6F7F0}.app-shell[data-role=manager]{--role:#6941C6;--role-l:#EBE9FE}.app-shell[data-role=employee]{--role:#DC6803;--role-l:#FEF0C7}.app-shell[data-role=admin]{--role:#2563EB;--role-l:#EAF1FE}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--sans);color:var(--ink);background:var(--paper);line-height:1.7;font-size:14px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--navy);color:#fff}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:none;background:none}input,select,textarea{font-family:inherit;font-size:14px;color:var(--ink)}h1,h2,h3,h4{font-weight:600;color:var(--ink)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:8px}::-webkit-scrollbar-track{background:transparent}.btn{display:inline-flex;align-items:center;gap:6px;justify-content:center;height:36px;padding:0 16px;border-radius:var(--r-sm);font-size:14px;font-weight:500;background:#fff;color:var(--ink-2);border:1px solid var(--line);transition:.15s;white-space:nowrap}.btn:hover{border-color:#c2cdd9;color:var(--navy);background:#fafbfd}.btn-primary{background:var(--navy);border-color:var(--navy);color:#fff}.btn-primary:hover{background:var(--navy-d);border-color:var(--navy-d);color:#fff}.btn-green{background:var(--green-d);border-color:var(--green-d);color:#fff}.btn-green:hover{background:var(--jade-700);border-color:var(--jade-700);color:#fff}.btn-danger{background:#fff;color:var(--red);border-color:#e8c4c1}.btn-danger:hover{background:var(--red-l)}.btn-sm{height:28px;padding:0 11px;font-size:13px;border-radius:7px}.btn[disabled]{opacity:.55;cursor:not-allowed}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover{background:var(--line-2)}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow)}.card-pad{padding:18px 20px}.sec-title{font-family:var(--sans);font-size:16px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:8px}.sec-title:before{content:"";width:4px;height:15px;border-radius:2px;background:var(--role);display:inline-block}.muted{color:var(--ink-3)}.small{font-size:13px}.field{margin-bottom:14px}.field>label{display:block;font-size:13px;color:var(--ink-2);margin-bottom:6px;font-weight:500}.field .req:before{content:"*";color:var(--red);margin-right:3px}.input,.select,textarea.input{width:100%;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;outline:none;transition:.15s}textarea.input{height:auto;padding:10px 12px;resize:vertical;line-height:1.6}.input:focus,.select:focus,textarea.input:focus{border-color:var(--navy);box-shadow:0 0 0 3px #2563eb1f}.input::placeholder,textarea.input::placeholder{color:var(--ink-4)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.form-grid .span2{grid-column:1/-1}@media (max-width:640px){.form-grid{grid-template-columns:1fr}.form-grid .span2{grid-column:1}}.tbl-wrap{overflow-x:auto;border-radius:12px;border:1px solid var(--line)}table.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:640px;background:#fff}table.tbl th{background:#f5f7fa;color:var(--ink-2);font-weight:600;text-align:left;padding:11px 14px;font-size:12px;white-space:nowrap;border-bottom:1px solid var(--line)}table.tbl td{padding:10px 14px;border-bottom:1px solid var(--line-2);color:var(--ink-2);white-space:nowrap}table.tbl tr:last-child td{border-bottom:none}table.tbl tbody tr:hover{background:#fafbfc}table.tbl .num{text-align:right;font-variant-numeric:tabular-nums}.tag{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 9px;border-radius:99px;font-size:12px;font-weight:500;background:var(--navy-l);color:var(--navy)}.tag.green{background:var(--green-l);color:var(--green-d)}.tag.violet{background:var(--violet-l);color:var(--violet)}.tag.amber{background:var(--amber-l);color:var(--amber)}.tag.red{background:var(--red-l);color:var(--red)}.tag.gray{background:#f1f4f8;color:var(--ink-3)}.dot-status{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px}.flex{display:flex}.between{display:flex;align-items:center;justify-content:space-between;gap:12px}.center{display:flex;align-items:center;justify-content:center}.gap8{gap:8px}.gap12{gap:12px}.gap16{gap:16px}.wrap-flex{display:flex;flex-wrap:wrap;gap:12px}.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt20{margin-top:20px}.mt24{margin-top:24px}.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}@media (max-width:1000px){.grid4{grid-template-columns:repeat(2,1fr)}.grid3{grid-template-columns:1fr 1fr}}@media (max-width:640px){.grid2,.grid3,.grid4{grid-template-columns:1fr}}.empty{padding:48px 20px;text-align:center;color:var(--ink-3)}.empty .ico{font-size:34px;opacity:.45;display:block;margin-bottom:10px}.empty .hint{font-size:13px;margin-top:6px}.toast-wrap{position:fixed;top:18px;left:50%;transform:translate(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center}.toast{background:#1f2937;color:#fff;padding:10px 18px;border-radius:10px;font-size:13px;box-shadow:var(--shadow-lg);animation:tin .2s}.toast.err{background:var(--red)}.toast.ok{background:var(--green-d)}@keyframes tin{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182873;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:48px 16px;overflow-y:auto}.modal{background:#fff;border-radius:var(--r-lg);width:100%;max-width:640px;box-shadow:var(--shadow-lg);animation:mpop .18s ease}.modal.lg{max-width:920px}@keyframes mpop{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.modal-head{padding:18px 22px 0;display:flex;align-items:center;justify-content:space-between}.modal-body{padding:16px 22px 22px;max-height:72vh;overflow-y:auto}.modal-foot{padding:0 22px 20px;display:flex;justify-content:flex-end;gap:10px}.x-close{width:30px;height:30px;border-radius:8px;color:var(--ink-3);font-size:18px}.x-close:hover{background:var(--line-2);color:var(--ink)}.page-head{margin-bottom:18px}.page-head h1{font-family:var(--sans);font-size:20px;font-weight:600;margin-bottom:4px}.page-head p{color:var(--ink-3);font-size:13px}.pill-input{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:0 10px;height:38px}.pill-input input{border:none;outline:none;flex:1;min-width:120px;height:100%}.avatar{width:34px;height:34px;border-radius:10px;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:none}.avatar.lg{width:52px;height:52px;border-radius:14px;font-size:18px}
