*{box-sizing:border-box;margin:0;padding:0}body{font-family:PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:#22322a;-webkit-font-smoothing:antialiased}.login-page{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 16px;background:linear-gradient(135deg,#0b4f3a,#12766b 45%,#1a6fa3);overflow:hidden}.login-page:before,.login-page:after,.blob{position:absolute;border-radius:50%;pointer-events:none}.login-page:before{width:420px;height:420px;top:-120px;left:-100px;background:radial-gradient(circle,rgba(250,204,21,.22),transparent 70%);animation:float 14s ease-in-out infinite alternate}.login-page:after{width:520px;height:520px;bottom:-180px;right:-140px;background:radial-gradient(circle,rgba(255,255,255,.13),transparent 70%);animation:float 18s ease-in-out infinite alternate-reverse}.blob-a{width:280px;height:280px;top:10%;right:4%;background:radial-gradient(circle,rgba(14,165,233,.26),transparent 70%);animation:float 16s ease-in-out infinite alternate}.blob-b{width:320px;height:320px;bottom:4%;left:0;background:radial-gradient(circle,rgba(134,239,172,.2),transparent 70%);animation:float 20s ease-in-out infinite alternate-reverse}@keyframes float{0%{transform:translateY(0)}to{transform:translateY(36px)}}.login-card{position:relative;z-index:1;width:100%;max-width:420px;background:#fff;border-radius:16px;padding:40px 38px 34px;box-shadow:0 18px 50px #04261b59;text-align:center;overflow:hidden}.login-card:before{content:"";position:absolute;top:0;left:0;right:0;height:6px;background:linear-gradient(90deg,#16a34a,#facc15,#0ea5e9,#f97316)}.brand{font-size:12px;color:#5c6c61;letter-spacing:.5px;margin-bottom:6px}.login-card h1{font-size:26px;font-weight:700;color:#14532d;margin-bottom:6px}.subtitle{font-size:13px;color:#66766b;margin-bottom:26px}.login-card label{display:block;text-align:left;font-size:13px;color:#5a6a5f;margin-bottom:16px}.login-card input{width:100%;margin-top:6px;padding:12px 14px;font-size:16px;border:1px solid #d5ded8;border-radius:10px;background:#f6faf7;outline:none;transition:border-color .15s,box-shadow .15s,background .15s}.login-card input:focus{border-color:#0d9488;background:#fff;box-shadow:0 0 0 3px #0d948826}.captcha-row{display:flex;gap:10px;align-items:center;margin-top:6px}.captcha-row input{flex:1;margin-top:0;letter-spacing:2px}.captcha-btn{padding:0;border:1px solid #d5ded8;border-radius:10px;background:#fff;cursor:pointer;line-height:0;flex-shrink:0}.captcha-btn canvas{border-radius:9px;display:block}.captcha-hint{display:block;font-size:12px;color:#9aa89f;text-align:right;margin-top:5px}.login-card button[type=submit]{width:100%;margin-top:20px;padding:13px 0;font-size:16px;color:#fff;background:linear-gradient(135deg,#16a34a,#0d9488);border:none;border-radius:10px;cursor:pointer;box-shadow:0 8px 18px #1285604d;transition:transform .12s,box-shadow .12s,filter .12s}.login-card button[type=submit]:hover:not(:disabled){filter:brightness(1.07);transform:translateY(-1px);box-shadow:0 10px 22px #12856059}.login-card button[type=submit]:disabled{background:linear-gradient(135deg,#b6c8bd,#aebfc4);cursor:not-allowed;box-shadow:none}.demo-hint{margin-top:14px;font-size:12px;color:#9aa89f}.message{margin-top:14px;padding:10px 12px;font-size:13px;border-radius:10px}.message.ok{color:#14532d;background:#e9f7ee;border:1px solid #bfe6cc}.message.error{color:#991b1b;background:#fdeeee;border:1px solid #f3c6c6}.captcha-loading{display:inline-block;width:118px;height:44px;line-height:44px;font-size:12px;color:#9aa89f}.shell{display:flex;min-height:100vh;background:linear-gradient(160deg,#eef4ef,#e2ecdf)}.sidebar{width:200px;flex-shrink:0;display:flex;flex-direction:column;background:linear-gradient(180deg,#0b4f3a,#116354);color:#fff;padding:18px 12px;position:sticky;top:0;height:100vh}.sidebar-logo{display:flex;align-items:center;font-size:13px;font-weight:600;line-height:1.4;padding:2px 8px 14px;border-bottom:1px solid rgba(255,255,255,.14)}.menu{display:flex;flex-direction:column;gap:4px;margin-top:12px;flex:1}.menu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;font-size:14px;color:#ffffffc7;background:transparent;border:none;border-radius:9px;cursor:pointer;text-align:left}.menu-item svg{width:18px;height:18px;flex-shrink:0}.menu-item:hover{background:#ffffff1a;color:#fff}.menu-item.active{background:#ffffff29;color:#fff;font-weight:600}.sidebar-foot{padding:10px 8px 0;border-top:1px solid rgba(255,255,255,.14)}.sidebar-foot .version-footer{color:#ffffff8c;margin:0}.shell-main{flex:1;min-width:0;display:flex;flex-direction:column}.shell-header{display:flex;justify-content:space-between;align-items:center;padding:14px 26px;background:#fff;border-bottom:1px solid #e3e9e4}.shell-header h1{font-size:19px;color:#14532d}.shell-content{padding:20px 26px;flex:1}.page{max-width:1080px}.admin-user{display:flex;align-items:center;gap:10px;font-size:13px}.admin-user span{opacity:.9}.admin-user button{padding:5px 12px;font-size:12px;color:#5a6a5f;background:#f1f5f2;border:1px solid #d5ded8;border-radius:6px;cursor:pointer}.admin-user button:hover{background:#e7eee9;color:#14532d}.menu-toggle,.header-brand,.drawer-user,.sidebar-backdrop{display:none}.admin-layout{display:flex;gap:16px;align-items:flex-start}.org-panel{max-width:none;width:100%;padding:20px 24px}@media(min-width:1100px){.org-panel .tree-node{padding-top:10px;padding-bottom:10px;font-size:15px}.page{max-width:1180px}}.profile-panel{max-width:560px}.settings-panel{max-width:720px;margin-bottom:16px;padding:16px 18px}.profile-table th{width:180px;background:#f7faf8}.dept-filter{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.dept-filter button{padding:5px 12px;font-size:12px;color:#5a6a5f;background:#f1f5f2;border:1px solid #dce4df;border-radius:14px;cursor:pointer}.dept-filter button.active{color:#fff;background:#1f7a3d;border-color:#1f7a3d}.dept-filter-sep{align-self:center;color:#c4cfc8;font-size:12px}.panel{background:#fff;border:1px solid #e3e9e4;border-radius:12px;box-shadow:0 4px 16px #24312a0d;overflow:hidden}.dept-panel{width:290px;flex-shrink:0;padding:14px 10px}.emp-panel{flex:1;padding:14px 18px;min-width:0}.panel-title{display:flex;justify-content:space-between;align-items:center;font-size:15px;font-weight:600;color:#14532d;padding:2px 6px 12px}.btn-sm{padding:4px 10px;font-size:12px;color:#0d9488;background:#e9f7f0;border:1px solid #bfe6d4;border-radius:6px;cursor:pointer}.btn-sm:hover{background:#d9f0e4}.tree-node{display:flex;align-items:center;gap:6px;padding:7px 8px;border-radius:8px;font-size:14px;cursor:pointer}.tree-node:hover{background:#f2f7f3}.tree-node.active{background:#e3f2e8;color:#14532d;font-weight:600}.tree-node.all{margin-bottom:4px;border-bottom:1px dashed #e0e8e2;border-radius:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{flex-shrink:0;min-width:20px;text-align:center;padding:1px 6px;font-size:11px;color:#0d9488;background:#e9f7f0;border-radius:10px}.node-actions{display:none;gap:2px;flex-shrink:0}.tree-node:hover .node-actions{display:inline-flex}.node-actions button{min-width:28px;height:28px;padding:0 5px;display:inline-flex;align-items:center;justify-content:center;font-size:12px;color:#5a6a5f;background:transparent;border:none;border-radius:6px;cursor:pointer}.node-actions button svg{display:block}.node-actions button.danger{color:#b4545a}.node-actions button:hover{background:#dcebe0;color:#14532d}.node-actions button.danger:hover{background:#fdeeee;color:#b91c1c}.alert{margin-bottom:12px;padding:9px 12px;font-size:13px;color:#991b1b;background:#fdeeee;border:1px solid #f3c6c6;border-radius:8px}.emp-table{width:100%;border-collapse:collapse;font-size:14px}.emp-table th,.emp-table td{padding:9px 10px;text-align:left;border-bottom:1px solid #edf2ee;white-space:nowrap}.emp-table th{font-size:12px;color:#5c6c61;font-weight:600;background:#f7faf8}.emp-table tr:hover td{background:#f9fbf9}.row-actions button{margin-right:6px;padding:3px 10px;font-size:12px;color:#0d9488;background:#e9f7f0;border:1px solid #bfe6d4;border-radius:6px;cursor:pointer}.row-actions button.danger{color:#b91c1c;background:#fdeeee;border-color:#f3c6c6}.empty{text-align:center;color:#9aa89f;padding:28px 0!important}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#12221a73;display:flex;align-items:center;justify-content:center;padding:16px;z-index:100}.modal{width:100%;max-width:420px;max-height:calc(100vh - 32px);overflow-y:auto;background:#fff;border-radius:14px;padding:24px 24px 20px;box-shadow:0 20px 60px #04261b4d}.modal h3{font-size:17px;color:#14532d;margin-bottom:14px}.modal-hint{font-size:12px;color:#66766b;margin:-8px 0 12px}.modal label:not(.perm-check){display:block;text-align:left;font-size:13px;color:#5a6a5f;margin-bottom:12px}.modal input:not([type=checkbox]),.modal select{width:100%;margin-top:5px;padding:9px 11px;font-size:15px;border:1px solid #d5ded8;border-radius:8px;background:#f8faf9;outline:none}.modal input:focus,.modal select:focus{border-color:#0d9488;background:#fff}.form-row{display:flex;gap:12px}.form-row label{flex:1}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.btn-primary{padding:8px 22px;font-size:14px;color:#fff;background:linear-gradient(135deg,#16a34a,#0d9488);border:none;border-radius:8px;cursor:pointer}.btn-primary:hover{filter:brightness(1.07)}.btn-ghost{padding:8px 18px;font-size:14px;color:#5a6a5f;background:#f1f5f2;border:1px solid #d5ded8;border-radius:8px;cursor:pointer}.btn-ghost:hover{background:#e7eee9}@media(max-width:760px){.shell{flex-direction:column}.shell-header{position:sticky;top:0;z-index:40;gap:10px;padding:9px 12px;box-shadow:0 2px 12px #24312a1a}.menu-toggle{display:flex;align-items:center;justify-content:center;width:38px;height:38px;flex-shrink:0;border:none;border-radius:10px;background:#0b4f3a;color:#fff;cursor:pointer}.menu-toggle svg{width:20px;height:20px}.header-brand{display:block;flex:1;min-width:0;font-size:15px;font-weight:700;color:#14532d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.shell-header h1,.admin-user{display:none}.sidebar{position:fixed;top:0;left:0;bottom:0;width:min(78vw,300px);z-index:60;padding:16px 12px;overflow-y:auto;transform:translate(-105%);transition:transform .25s ease}.sidebar.open{transform:translate(0);box-shadow:18px 0 44px #04261b66}.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#09181173}.drawer-user{display:flex;align-items:center;gap:8px;margin-top:10px;padding:12px 8px 10px;border-top:1px solid rgba(255,255,255,.14)}.drawer-user-name{flex:1;min-width:0;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.9}.drawer-user button{padding:6px 10px;font-size:12px;color:#fff;background:#ffffff24;border:none;border-radius:7px;cursor:pointer}.drawer-user button.danger{background:#ef4444d9}.shell-content{padding:14px 12px 30px}.shell-content .page>*+*{margin-top:14px}.panel{border-radius:14px;box-shadow:0 6px 22px #24312a1f}.admin-layout{flex-direction:column}.emp-table{font-size:13px}.ver-grid{grid-template-columns:1fr}.form-row{flex-direction:column;gap:0}}.workbench{display:grid;grid-template-columns:minmax(340px,1fr) minmax(300px,420px);gap:16px;align-items:start}.wb-greet{padding:26px 24px}.wb-greet h2{font-size:22px;color:#14532d;margin-bottom:8px}.wb-greet p{font-size:14px;color:#5c6c61}.wb-cal{padding:16px 18px}.wb-holidays,.wb-notices{grid-column:1 / -1;padding:16px 18px}.notice-row{display:flex;align-items:center;gap:12px;padding:10px 6px;border-bottom:1px solid #eef2ee;font-size:14px;cursor:pointer}.notice-row:last-child{border-bottom:none}.notice-row:hover{background:#f6faf7}.notice-dot{width:7px;height:7px;border-radius:50%;background:#1f7a3d;flex:none}.notice-main{flex:1;min-width:0}.notice-title{font-weight:600;margin-right:10px}.notice-title.good{color:#14532d}.notice-title.bad{color:#b91c1c}.notice-body{color:#5a6a5f;font-size:13px}.notice-time{color:#66766b;font-size:12px;flex:none}.holiday-row{display:flex;align-items:center;gap:14px;padding:10px 6px;border-bottom:1px solid #eef2ee;font-size:14px}.holiday-row:last-child{border-bottom:none}.holiday-name{font-weight:600;color:#14532d;width:64px}.holiday-date{flex:1;color:#5a6a5f;font-size:13px}.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}.cal-head strong{flex:1;text-align:center;font-size:15px;color:#14532d}.cal-head button{width:30px;height:30px;border:1px solid #d5ded8;border-radius:8px;background:#fff;font-size:16px;color:#5a6a5f;cursor:pointer}.cal-head .cal-today{width:auto;padding:0 10px;font-size:12px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-week{text-align:center;font-size:12px;color:#9aa89f;padding:4px 0}.cal-day{position:relative;min-height:48px;border-radius:8px;background:#f7faf8;font-size:13px;color:#33443a;padding:4px}.cal-day.empty{background:transparent}.cal-gz{font-size:11px;color:#6b8a75;font-weight:400;margin-left:2px}.cal-lunar{display:block;font-size:10px;color:#8aa192;line-height:1.4;white-space:nowrap;overflow:hidden}.cal-lunar.hl{color:#1f7a3d;font-weight:600}.cal-day.today .cal-lunar{color:#ffffffbf}.cal-day.today .cal-lunar.hl{color:#fff}.cal-day.weekend .cal-num{color:#b1484a}.cal-day.today{background:#14532d}.cal-day.today .cal-num{color:#fff;font-weight:700}.cal-day.rest{background:#e9f7ee}.cal-day.rest .cal-num{color:#1f7a3d;font-weight:600}.cal-day.workday{background:#fdf3e7}.cal-day.workday .cal-num{color:#b45309}.cal-flag{position:absolute;right:4px;top:4px;font-size:10px;padding:0 3px;border-radius:4px;background:#1f7a3d;color:#fff}.cal-day.workday .cal-flag{background:#b45309}.cal-note{margin-top:8px;font-size:11px;color:#9aa89f}.cal-day.pickable{cursor:pointer}.cal-day.pickable:hover{background:#eef6f1;border-color:#9dc7ab}.modal-day{max-width:480px}.day-lunar{display:block;font-size:12px;font-weight:400;color:#66766b;margin-top:2px}.day-holiday{margin:8px 0 2px;padding:7px 12px;font-size:13px;color:#14532d;background:#e7f3ec;border:1px solid #9dc7ab;border-radius:8px}.day-holiday.work{color:#b45309;background:#fdf3e7;border-color:#fde68a}.day-sec{margin-top:12px}.day-sec-title{font-size:12px;font-weight:600;color:#14532d;padding-left:8px;border-left:3px solid #1f7a3d;margin-bottom:6px}.day-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 4px;font-size:13px;color:#3d4a42;border-bottom:1px solid #eef2ee}.day-item:last-child{border-bottom:none}.day-del{border:none;background:none;cursor:pointer;color:#66766b;font-size:12px;padding:0 4px}.day-del:hover{color:#b91c1c}.day-ev-add{display:flex;gap:8px}.day-ev-add input{flex:1}.day-abs{flex:none;font-size:11px;color:#b45309;background:#fdf3e7;border:1px solid #fde68a;border-radius:9px;padding:1px 8px}.day-abs.ok{color:#14532d;background:#e7f3ec;border-color:#9dc7ab}.day-event{align-items:flex-start}.day-event-main{flex:1;display:flex;flex-direction:column;gap:6px;min-width:0}.canteen-summary{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 12px}.canteen-amount{font-weight:600;color:#14532d}.ocr-row{margin-top:8px}.img-thumbs{display:inline-flex;flex-wrap:wrap;gap:6px}.img-thumb{width:52px;height:52px;object-fit:cover;border-radius:6px;border:1px solid #dce4df;cursor:pointer;display:block}.img-thumb:hover{border-color:#1f7a3d}.img-thumb-wrap{position:relative;display:inline-block}.img-thumb-del{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;border:none;background:#b91c1c;color:#fff;font-size:11px;line-height:18px;padding:0;cursor:pointer;text-align:center}.img-thumb-add{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border:1px dashed #9dc7ab;border-radius:6px;color:#5a6a5f;font-size:12px;cursor:pointer;background:#fafcfb}.img-thumb-add:hover{color:#14532d;border-color:#1f7a3d}.sim-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 14px;font-size:13px;color:#7a4d05;background:#fdf3e7;border-bottom:1px solid #fde68a}.sim-banner b{color:#92400e}.sim-banner button{flex:none;padding:3px 12px;font-size:12px;color:#fff;background:#b45309;border:none;border-radius:6px;cursor:pointer}.sim-banner button:hover{background:#92400e}.img-viewer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#0a140ee0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;cursor:zoom-out}.img-viewer img{max-width:92vw;max-height:82vh;border-radius:8px}.img-viewer-tip{color:#cfe0d6;font-size:12px}.ver-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:10px}.ver-card{display:flex;flex-direction:column;gap:4px;padding:16px 14px;background:#f7faf8;border:1px solid #e3e9e4;border-radius:10px}.ver-name{font-size:12px;color:#5c6c61}.ver-num{font-size:20px;font-weight:700;color:#14532d}.ver-note{font-size:11px;color:#9aa89f}.roadmap{display:flex;flex-direction:column;gap:14px}.roadmap-item{display:flex;gap:12px}.roadmap-dot{width:10px;height:10px;border-radius:50%;margin-top:5px;flex-shrink:0}.roadmap-dot.done{background:#1f7a3d}.roadmap-dot.doing{background:#d97706}.roadmap-dot.todo{background:#c4cfc8}.roadmap-name{font-size:14px;color:#33443a;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.roadmap-status{font-size:11px;padding:1px 8px;border-radius:9px}.roadmap-status.done{color:#1f7a3d;background:#e9f7ee}.roadmap-status.doing{color:#b45309;background:#fdf3e7}.roadmap-status.todo{color:#5c6c61;background:#f1f5f2}.roadmap-note{font-size:12px;color:#9aa89f;margin-top:2px}.perm-panel,.logs-panel{padding:16px 18px}.mgr-name{font-size:12px;font-weight:400;color:#66766b}.chip{display:inline-block;margin:1px 3px 1px 0;padding:1px 8px;font-size:11px;color:#0d9488;background:#e9f7f0;border-radius:9px;white-space:nowrap}.chip-mgr{color:#b45309;background:#fdf3e7}.chip-login{color:#6d28d9;background:#f1e9fd}.status-on{color:#1f7a3d;font-size:13px}.status-off{color:#b91c1c;font-size:13px}.row-inactive td{color:#b6c1ba}.perm-block{border:1px solid #e3e9e4;border-radius:10px;padding:10px 12px;margin-bottom:12px}.perm-label{display:block;font-size:13px;color:#5a6a5f;margin-bottom:6px}.perm-check{display:inline-flex;align-items:center;gap:5px;margin:3px 14px 3px 0;font-size:13px;color:#33443a}.perm-check input{margin:0}.logs-filter{display:flex;gap:8px;font-weight:400}.logs-filter input{padding:5px 10px;font-size:13px;border:1px solid #d5ded8;border-radius:7px;outline:none}.feedback-fab{position:fixed;right:18px;bottom:18px;width:46px;height:46px;border-radius:50%;border:none;background:linear-gradient(135deg,#16a34a,#0d9488);color:#fff;cursor:pointer;box-shadow:0 6px 18px #12856066;display:flex;align-items:center;justify-content:center;z-index:60;transition:transform .12s}.feedback-fab:hover{transform:scale(1.08)}.feedback-fab svg{width:22px;height:22px}.fb-textarea{width:100%;margin-top:5px;padding:10px 12px;font-size:14px;font-family:inherit;border:1px solid #d5ded8;border-radius:8px;background:#f8faf9;outline:none;resize:vertical}.fb-textarea:focus{border-color:#0d9488;background:#fff}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.table-wrap .emp-table{min-width:640px}.profile-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}.profile-group h3{font-size:14px;color:#14532d;margin-bottom:8px;padding-left:8px;border-left:3px solid #1f7a3d}.profile-panel{max-width:980px}.duty-add{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}.duty-add input{flex:1;min-width:180px;padding:8px 11px;font-size:14px;border:1px solid #d5ded8;border-radius:8px;outline:none}.duty-add select{padding:8px 10px;font-size:13px;border:1px solid #d5ded8;border-radius:8px;background:#fff}.duty-group{margin-bottom:12px}.duty-group-label{font-size:12px;color:#66766b;margin-bottom:6px}.duty-chip{display:inline-flex;align-items:center;gap:6px;margin:0 6px 6px 0;padding:5px 8px 5px 12px;font-size:13px;color:#14532d;background:#eef4ef;border:1px solid #d7e4da;border-radius:16px}.duty-chip em{font-style:normal;font-size:11px;color:#0d9488}.duty-chip button{width:18px;height:18px;padding:0;font-size:11px;color:#b91c1c;background:transparent;border:none;border-radius:50%;cursor:pointer}.duty-chip button:disabled{color:#c4cfc8;cursor:not-allowed}.feedback-list{display:flex;flex-direction:column;gap:10px}.feedback-item{border:1px solid #e3e9e4;border-radius:10px;padding:10px 12px;background:#fff}.feedback-item.done{background:#f8faf8}.feedback-item.done .feedback-content{color:#9aa89f;text-decoration:line-through}.feedback-head{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap}.feedback-meta{font-size:12px;color:#66766b;flex:1}.feedback-head button{padding:4px 10px;font-size:12px;color:#0d9488;background:#e9f7f0;border:1px solid #bfe6d4;border-radius:6px;cursor:pointer}.feedback-content{font-size:14px;color:#33443a;white-space:pre-wrap}.devlog{display:flex;flex-direction:column;gap:16px}.devlog-item{border-left:2px solid #d7e4da;padding-left:16px;position:relative}.devlog-item:before{content:"";position:absolute;left:-6px;top:4px;width:10px;height:10px;border-radius:50%;background:#1f7a3d}.devlog-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}.devlog-ver{font-size:14px;font-weight:700;color:#14532d}.devlog-date{font-size:12px;color:#9aa89f}.devlog-title{font-size:13px;color:#5a6a5f}.devlog-platform{font-size:11px;padding:1px 8px;border-radius:9px}.devlog-platform.全部{color:#14532d;background:#e9f7ee}.devlog-platform.网页{color:#1d4ed8;background:#e5edfd}.devlog-platform.安卓{color:#b45309;background:#fdf3e7}.devlog-platform.苹果{color:#6d28d9;background:#f1e9fd}.role-select{width:100%;padding:6px 8px;font-size:13px;border:1px solid #d5ded8;border-radius:7px;background:#fff;outline:none}.role-detail{margin-top:4px;font-size:11px;color:#66766b;line-height:1.5}.perms-cell{font-size:13px}.status-pending{color:#b45309;font-size:13px}.devlog-items{margin:0;padding-left:18px;font-size:13px;color:#5a6a5f;line-height:1.9}.modal-wide{max-width:560px;max-height:88vh;overflow-y:auto}.update-banner{display:flex;align-items:center;justify-content:center;gap:8px;padding:9px 16px;font-size:13px;color:#92400e;background:linear-gradient(90deg,#fef3c7,#fde68a);text-decoration:none;border-bottom:1px solid #fcd34d}.update-banner:active{filter:brightness(.97)}.update-banner svg{width:15px;height:15px}.utility-panel{padding:16px 18px}.utility-group{margin-bottom:14px}.utility-group-head{display:flex;align-items:center;gap:10px;font-size:14px;font-weight:600;color:#14532d;margin:4px 0 8px;padding-left:8px;border-left:3px solid #1f7a3d}.modal-sheet{max-width:760px;max-height:88vh;overflow-y:auto}.sheet-group{margin-bottom:12px}.sheet-input{width:120px;padding:6px 8px;font-size:14px;border:1px solid #d5ded8;border-radius:7px;background:#fff;outline:none}.sheet-input:focus{border-color:#0d9488}.utility-months{margin-top:16px}.utility-months-title{font-size:14px;font-weight:600;color:#14532d;margin-bottom:8px;padding-left:8px;border-left:3px solid #1f7a3d;display:flex;justify-content:space-between;align-items:center;gap:10px}.chart-toggle{display:inline-flex;gap:0;border:1px solid #d5ded8;border-radius:7px;overflow:hidden}.chart-toggle button{padding:3px 12px;font-size:12px;color:#4b5f52;background:#fff;border:none;cursor:pointer}.chart-toggle button+button{border-left:1px solid #d5ded8}.chart-toggle button.active{color:#fff;background:#1f7a3d}.utility-chart{display:flex;align-items:flex-end;gap:6px;height:180px;padding:8px 4px 0}.chart-col{flex:1;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;min-width:0}.chart-bar{width:62%;background:linear-gradient(180deg,#16a34a,#0d9488);border-radius:3px 3px 0 0;min-height:2px}.chart-bar.water{background:linear-gradient(180deg,#0891b2,#0e7490)}.chart-bar.none{background:#dbe5df}.chart-val{font-size:10px;color:#6b7a70;margin-bottom:3px;white-space:nowrap}.chart-month{font-size:11px;color:#66766b;margin-top:4px}.utility-total td{font-weight:600;background:#f8faf8;border-top:2px solid #dce4df}.trend-up{color:#b45309}.trend-down{color:#1f7a3d}.cell-sub{font-size:11px;color:#66766b}.chip-warn{color:#b45309;background:#fdf3e7;border:1px solid #fde68a}.meter-row{display:flex;justify-content:space-between;align-items:center;padding:8px 4px;border-bottom:1px solid #eef2ee;font-size:13px}.meter-row button{padding:3px 10px;font-size:12px;color:#b91c1c;background:#fdeeee;border:1px solid #f3c6c6;border-radius:6px;cursor:pointer}.wb-badges{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.wb-badge{padding:5px 12px;font-size:12px;color:#5a6a5f;background:#f1f5f2;border:1px solid #dce4df;border-radius:14px}.wb-badge b{color:#14532d;font-size:14px}.wb-badge.hot{color:#b45309;background:#fdf3e7;border-color:#fde68a}.wb-badge.hot b{color:#b45309}button.wb-badge{font-family:inherit;cursor:pointer;transition:border-color .15s}button.wb-badge:hover{border-color:#1f7a3d}button.wb-badge.hot:hover{border-color:#b45309}.apply-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:16px}.apply-tile{display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 8px 14px;background:linear-gradient(160deg,#f7faf8,#eef4ef);border:1px solid #dce4df;border-radius:12px;cursor:pointer;transition:border-color .12s,box-shadow .12s,transform .12s}.apply-tile:hover{border-color:#1f7a3d;box-shadow:0 6px 16px #1f7a3d26;transform:translateY(-2px)}.apply-tile-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:#14532d;color:#fff}.apply-tile-icon svg{width:22px;height:22px}.apply-tile-name{font-size:14px;font-weight:600;color:#14532d}.apply-tile-plus{font-size:11px;color:#66766b}.appr-chain{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}.appr-chain-arrow{color:#66766b;font-size:12px}.appr-chain-node{font-size:12px;padding:2px 8px;border-radius:10px;border:1px solid #dce4df}.appr-chain-node.done{color:#5a6a5f;background:#f1f5f2}.appr-chain-node.done:before{content:"✓ ";color:#1f7a3d}.appr-chain-node.cur{color:#14532d;font-weight:600;background:#e7f3ec;border-color:#9dc7ab}.appr-chain-node.cur:before{content:"● ";font-size:9px}.appr-chain-node.pend{color:#66766b;background:#fafcfb}.appr-step{color:#66766b;font-size:12px}.appr-chain-edit .form-row{align-items:flex-end}.appr-chain-list{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px}.appr-chain-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;font-size:13px;color:#14532d;background:#e7f3ec;border:1px solid #9dc7ab;border-radius:14px}.appr-chain-chip b{font-size:11px;color:#fff;background:#1f7a3d;border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center}.appr-chain-chip button{border:none;background:none;cursor:pointer;color:#5a6a5f;font-size:12px;padding:0 2px}.appr-chain-chip button:hover{color:#b45309}.appr-preview{border:1px solid #dce4df;border-radius:10px;padding:10px 12px;margin:6px 0 10px;background:#fafcfb}.appr-preview-title{font-size:13px;color:#5a6a5f;margin-bottom:8px}.appr-preview .modal-hint{margin:8px 0 0}.neg-num{color:#b4545a;font-weight:600}.todo-prog{display:inline-flex;align-items:center;gap:6px}.todo-prog-bar{width:60px;height:6px;border-radius:3px;background:#e4ebe6;overflow:hidden}.todo-prog-bar i{display:block;height:100%;border-radius:3px;background:#1f7a3d}.todo-prog-num{font-size:12px;color:#5a6a5f;min-width:3em}.todo-att{display:inline-block;font-size:12px;padding:1px 8px;border-radius:10px;border:1px solid #dce4df;color:#5a6a5f}.todo-content-summ{display:block;font-size:12px;color:#66766b;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.todo-files{margin:4px 0 8px}.todo-file-row{display:flex;align-items:center;gap:8px;font-size:13px;padding:4px 0;border-bottom:1px dashed #e4ebe6}.todo-file-row:last-child{border-bottom:none}.todo-file-row a{color:#14532d;text-decoration:none;word-break:break-all}.todo-file-row a:hover{text-decoration:underline}.todo-file-size{color:#66766b;font-size:12px;white-space:nowrap}.todo-file-row button{margin-left:auto;white-space:nowrap}@media(max-width:760px){.apply-tiles{grid-template-columns:repeat(2,1fr)}.utility-chart{height:140px;gap:3px}}@media(min-width:761px)and (max-width:1000px){.apply-tiles{grid-template-columns:repeat(3,1fr)}}.tree-node.dept-head{background:#f4f8f5;border:1px solid #e0e8e2;border-radius:9px;margin:6px 0;padding-top:8px;padding-bottom:8px;font-size:15px}.tree-node.dept-head.active,.tree-node.dept-head:hover{background:#ebf3ec}.expand-btn{width:22px;height:22px;margin-right:2px;border:none;border-radius:6px;background:#dcebe0;color:#14532d;font-size:12px;cursor:pointer;flex-shrink:0}.dept-body{border-left:2px dashed #dce4df;padding-left:6px;margin-bottom:4px}.person-row{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:8px;font-size:14px}.person-row:hover{background:#f6faf7}.person-row .node-actions{display:none}.person-row:hover .node-actions{display:inline-flex}.person-name{width:76px;font-weight:600;color:#33443a;flex-shrink:0}.person-duty{flex:1;min-width:0;color:#5a6a5f;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.person-phone{color:#66766b;font-size:13px;flex-shrink:0}.person-empty{color:#b6c1ba;font-size:13px}.btn-group{display:flex;flex-wrap:wrap;gap:6px;font-weight:400}.todo-title{max-width:320px;white-space:normal}.appr-summary{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.appr-history{margin:12px 0}.appr-hist-row{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:13px;color:#33443a;flex-wrap:wrap}.appr-comment{font-size:12px;color:#66766b}.appr-action-box{border-top:1px dashed #dce4df;padding-top:12px;margin-top:8px}.row-low td{background:#fffaf2}@media(max-width:760px){.feedback-fab{right:14px;bottom:74px}.profile-grid,.workbench{grid-template-columns:1fr}}.version-footer{margin-top:18px;font-size:11px;color:#6f7f74;letter-spacing:.3px;line-height:1.8}.version-footer a{color:#6f7f74;text-decoration:none}.version-footer a:hover{text-decoration:underline}.dl-section{text-align:left;margin-bottom:18px}.dl-section h2{font-size:15px;color:#14532d;margin-bottom:10px;padding-left:8px;border-left:3px solid #1f7a3d}.dl-btn{display:block;text-align:center;padding:12px 0;font-size:16px;color:#fff;text-decoration:none;background:linear-gradient(135deg,#16a34a,#0d9488);border-radius:10px;box-shadow:0 8px 18px #1285604d}.dl-btn:active{filter:brightness(1.1)}.dl-meta{margin-top:8px;font-size:12px;color:#66766b;text-align:center}.dl-tip{margin-top:10px;padding:8px 10px;font-size:12px;color:#92400e;background:#fef3c7;border:1px solid #fde68a;border-radius:8px}.dl-note{margin-top:10px;font-size:12px;color:#9aa89f;line-height:1.7}.dl-steps{padding-left:22px;font-size:14px;color:#5a6a5f;line-height:2}.dl-qr{display:block;margin:10px auto;border:1px solid #e3e9e4;border-radius:10px;padding:8px;background:#fff}.dl-url{text-align:center;font-size:13px;color:#0d9488;letter-spacing:.5px}@media(max-width:760px){.table-wrap .emp-table{min-width:0}.table-wrap.keep-scroll .emp-table{min-width:900px}.emp-table th,.emp-table td{white-space:normal;overflow-wrap:break-word;padding:7px 6px}.logs-table thead{display:none}.logs-table tbody tr{display:block;padding:4px 0;border-bottom:1px solid #edf2ee}.logs-table tbody td{display:flex;align-items:baseline;gap:10px;padding:3px 0;border-bottom:none}.logs-table td[data-label]:before{content:attr(data-label);flex:none;min-width:3em;font-size:11px;color:#5c6c61}.logs-table td.hide-sm,.hide-sm{display:none}.appr-summary{max-width:none;white-space:normal}.todo-title{max-width:none}.row-actions button{padding:5px 10px;margin:2px 4px 2px 0}.panel-title{flex-wrap:wrap;gap:8px}.node-actions{display:inline-flex}}.wb-punch{grid-column:1 / -1;padding:16px 18px}.wb-punch-row{display:flex;align-items:stretch;gap:14px;flex-wrap:wrap;margin-top:12px}.wb-punch-item{display:flex;flex-direction:column;gap:3px;flex:1 1 0;min-width:150px;padding:12px 16px 10px;background:#f6faf7;border:1px solid #dfe9e3;border-radius:12px}.wb-punch-item.miss{background:#fdf8ef;border-color:#efdcc0}.wb-punch-label{font-size:12px;color:#5c6c61}.wb-punch-time{font-size:26px;font-weight:700;color:#14532d;line-height:1.25}.wb-punch-time.miss{color:#b45309;font-size:18px}.wb-punch-src{font-size:11px;color:#9aa89f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wb-punch-btn{margin-left:auto;align-self:center;white-space:nowrap}.wb-punch-hint{font-size:12px;color:#66766b;margin-top:12px}.wb-punch-month{font-size:13px;color:#5a6a5f;margin-top:12px;padding-top:10px;border-top:1px dashed #e0e9e3}.wb-punch-month b{color:#14532d}.wb-punch-rest{font-size:14px;color:#5a6a5f;padding:8px 0}.link-btn{border:none;background:none;padding:0 2px;color:#0d9488;cursor:pointer;font-size:inherit;text-decoration:underline}.att-toolbar{justify-content:space-between}.att-tools{display:flex;align-items:center;gap:8px}.att-tools input{padding:5px 8px;border:1px solid #d5ded8;border-radius:7px;background:#f6faf7;font-size:13px}.att-note{font-size:12px;color:#66766b;margin:6px 0 10px;line-height:1.6}.att-net-form{align-items:flex-end;margin-bottom:10px}.att-net-form button{margin-bottom:22px}@media(max-width:760px){.wb-punch-row{gap:10px}.wb-punch-item{min-width:130px}.wb-punch-btn{margin-left:0;width:100%;padding:10px}.att-toolbar{flex-direction:column;align-items:flex-start}}.dining-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;padding:14px}.dining-card{display:flex;flex-direction:column;gap:10px;padding:14px;background:#fbfdfc;border:1px solid #e3e9e4;border-radius:12px;transition:border-color .15s,box-shadow .15s}.dining-card.today{border-color:#86efac;background:#f6fdf8}.dining-card.booked{border-color:#16a34a;box-shadow:0 4px 14px #16a34a1f}.dining-date{display:flex;align-items:baseline;justify-content:space-between}.dining-date b{font-size:18px;color:#22322a}.dining-date span{font-size:12px;color:#66766b}.dining-card.today .dining-date span{color:#16a34a;font-weight:600}.dining-menu{flex:1;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start;min-height:54px}.dining-dish{padding:3px 10px;font-size:12px;color:#3f5748;background:#f1f5f2;border-radius:10px}.dining-note{width:100%;font-size:11px;color:#66766b}.dining-card .btn-primary,.dining-card .btn-ghost{width:100%;padding:7px 0;font-size:13px}.mine-panel{margin-bottom:14px}.mine-head{display:flex;align-items:center;gap:14px;padding:18px 16px 6px}.mine-avatar{display:flex;align-items:center;justify-content:center;width:52px;height:52px;font-size:22px;font-weight:600;color:#fff;background:linear-gradient(135deg,#16a34a,#0d9488);border-radius:50%;flex-shrink:0}.mine-head>div{display:flex;flex-direction:column;gap:3px}.mine-name{font-size:17px}.mine-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;padding:14px 16px 16px}.mine-field{display:flex;flex-direction:column;gap:3px;padding:10px 12px;background:#f8faf9;border-radius:10px}.mine-field span{font-size:11px;color:#66766b}.mine-field b{font-size:14px;font-weight:600;word-break:break-all}.mine-payslips{display:flex;flex-direction:column}.payslip-item{display:flex;align-items:center;gap:10px;padding:13px 16px;background:none;border:none;border-bottom:1px solid #eef2ef;text-align:left;cursor:pointer}.payslip-item:last-child{border-bottom:none}.payslip-month{font-size:15px;font-weight:600;color:#22322a}.payslip-item .cell-sub{flex:1}.payslip-arrow{font-size:18px;color:#b4c0b8}.menu-edit-form{display:flex;flex-direction:column;gap:12px;padding:16px 16px 14px;margin:2px 0 18px;background:#f7faf8;border:1px solid #e0e9e3;border-radius:12px}.menu-edit-form label{font-size:13px;font-weight:600;color:#3f5748}.menu-edit-form input,.menu-edit-form textarea{width:100%;margin-top:6px;background:#fff;border:1px solid #d5e0d8;border-radius:8px;padding:8px 12px;font-size:13px;font-family:inherit;outline:none;transition:border-color .15s,box-shadow .15s}.menu-edit-form input:focus,.menu-edit-form textarea:focus{border-color:#1f7a3d;box-shadow:0 0 0 3px #1f7a3d1f}.menu-note-label{flex:1}.menu-edit-form .ocr-row{display:flex;justify-content:flex-end;margin-top:2px}@media(max-width:760px){.menu-edit-form .ocr-row .btn-primary{width:100%}}.menu-dishes-input{resize:vertical;min-height:64px;line-height:1.6}.stat-names{font-size:12px;color:#5a6a5f}.import-preview{display:flex;flex-direction:column;gap:10px}.import-preview .ocr-row{padding:0}.news-list{display:flex;flex-direction:column;gap:10px;padding:14px}.news-card{padding:13px 15px;background:#fbfdfc;border:1px solid #e3e9e4;border-radius:12px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.news-card:hover{border-color:#b8ccc0;box-shadow:0 3px 12px #24312a14}.news-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.news-cat{padding:2px 10px;font-size:11px;border-radius:9px;color:#5a6a5f;background:#f1f5f2}.news-cat.cat-大事记{color:#0d9488;background:#e6f7f4}.news-cat.cat-获奖荣誉{color:#b45309;background:#fdf1de}.news-cat.cat-会议动态{color:#1d4ed8;background:#e8eefd}.news-card-title{display:block;font-size:15px;line-height:1.4}.news-card-excerpt{margin-top:5px;font-size:13px;color:#5a6a5f;line-height:1.5}.news-card-foot{display:flex;align-items:center;gap:12px;margin-top:8px}.news-admin-acts{display:inline-flex;gap:6px;margin-left:auto}.news-filter{padding:4px 12px;font-size:12px;color:#5a6a5f;background:#f1f5f2;border:1px solid #dce4df;border-radius:13px;cursor:pointer}.news-filter.on{color:#fff;background:#16a34a;border-color:#16a34a}.news-detail-head{display:flex;align-items:center;gap:10px}.news-detail-title{margin:8px 0 10px;font-size:18px;line-height:1.4}.news-detail-body{font-size:14px;line-height:1.8;white-space:pre-wrap;word-break:break-word;color:#2d3d33}.news-body-input{resize:vertical}.news-title-label{flex:1}@media(max-width:760px){.panel-title,.dept-filter,.emp-table th,.emp-table td,.logs-table tbody td,.notice-row,.canteen-summary,.apply-tiles{padding-left:14px;padding-right:14px}.alert{margin-left:14px;margin-right:14px}.dl-note,.cal-note,.utility-months{padding-left:14px;padding-right:14px}}@media(max-width:760px){.dept-filter button,.news-filter{flex:1;text-align:center}}@media(min-width:761px){.dept-filter{gap:14px}.dept-filter button{padding:6px 15px}.logs-filter{gap:10px}}@media(min-width:761px){.dept-filter{gap:16px}.dept-filter button{min-width:96px;padding:6px 18px;text-align:center}}@media(min-width:761px){.todo-panel,.appr-panel,.perm-panel,.assets-panel,.inv-panel,.mine-panel,.profile-panel,.panel-pad{padding:16px 18px}}.dining-card.cutoff{opacity:.55;background:#fafbfa}.dining-card.cutoff .dining-date b{text-decoration:line-through;text-decoration-color:#8a978e99}td.empty{text-align:center}.tel-link{color:#1f7a3d;font-weight:600;text-decoration:none;border-bottom:1px dashed #9fc8ae}@media(min-width:761px){.tel-link{color:inherit;font-weight:inherit;border-bottom:none;cursor:default}}.date-field{position:relative;display:block}.date-field input[type=date]{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;border:none;opacity:0;cursor:pointer}.date-field-box{width:100%;cursor:pointer}.date-field-cal{position:absolute;right:12px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;width:23px;height:23px;overflow:hidden;border:1px solid #cdd9d2;border-radius:5px;background:#fff;font-style:normal;font-size:11px;line-height:15px;font-weight:700;text-align:center;color:#22322a;pointer-events:none}.date-field-cal:before{content:"";flex:none;height:6px;background:#0d9488}
