:root{--bg: #f4f5f3;--bg-elev: #ffffff;--bg-sunken: #eef0ec;--ink: #191d21;--ink-2: #464c53;--ink-3: #8a9199;--line: rgba(25, 29, 33, .09);--line-strong: rgba(25, 29, 33, .16);--brand: #0c7a4b;--brand-hover: #0a6b41;--brand-soft: #e3f2e9;--brand-on: #ffffff;--c-work: #0c7a4b;--c-work-bg: #e3f2e9;--c-public: #c22f2f;--c-public-bg: #fbe9e7;--c-rest: #a3610a;--c-rest-bg: #fdf3dd;--c-leave: #bf420f;--c-leave-bg: #fdeee2;--c-away: #6b7280;--c-away-bg: #eef0f2;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-xl: 22px;--r-full: 999px;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-8: 32px;--shadow-1: 0 1px 2px rgba(20, 26, 24, .05), 0 1px 6px rgba(20, 26, 24, .04);--shadow-2: 0 4px 16px rgba(20, 26, 24, .08), 0 1px 4px rgba(20, 26, 24, .05);--shadow-3: 0 16px 48px rgba(20, 26, 24, .14), 0 4px 12px rgba(20, 26, 24, .06);--font: "PingFang SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;--num: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, monospace;--ease: cubic-bezier(.22, .9, .32, 1);--dur: .16s}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:radial-gradient(1200px 500px at 85% -10%,rgba(12,122,75,.05),transparent 60%),var(--bg);color:var(--ink);font-family:var(--font);font-size:14px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:#0c7a4b2e}.center-screen{height:100vh;display:flex;align-items:center;justify-content:center}.link-btn{border:none;background:transparent;color:var(--brand);font-size:14px;font-weight:500;cursor:pointer;min-height:44px;padding:4px 10px;border-radius:var(--r-sm)}.link-btn:hover{background:var(--brand-soft);text-decoration:none}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--r-sm)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.ant-btn{border-radius:var(--r-sm);font-weight:500;box-shadow:none!important}.ant-btn-default{border-color:var(--line-strong)}.ant-btn-default:not(:disabled):hover{border-color:var(--brand);color:var(--brand)}.ant-btn-primary{background:var(--brand)}.ant-btn-primary:not(:disabled):hover{background:var(--brand-hover)!important}.ant-select-selector,.ant-input,.ant-input-affix-wrapper,.ant-picker{border-radius:var(--r-sm)!important;border-color:var(--line-strong)!important}.ant-select:not(.ant-select-disabled):hover .ant-select-selector,.ant-input:hover,.ant-picker:hover{border-color:var(--brand)!important}.ant-select-focused .ant-select-selector,.ant-input-focused,.ant-picker-focused{border-color:var(--brand)!important;box-shadow:0 0 0 3px #0c7a4b24!important}.ant-modal .ant-modal-content{border-radius:var(--r-lg);box-shadow:var(--shadow-3);padding:22px}.ant-modal .ant-modal-title{font-size:17px;font-weight:600}.ant-drawer .ant-drawer-header-title .ant-drawer-title{font-weight:600;font-size:17px}.ant-segmented{background:var(--bg-sunken);border-radius:var(--r-full);padding:3px}.ant-segmented .ant-segmented-item{border-radius:var(--r-full)}.ant-segmented .ant-segmented-item-selected{background:var(--bg-elev);box-shadow:var(--shadow-1);color:var(--ink);font-weight:600}.ant-table{--ant-table-header-bg: var(--bg-sunken)}.ant-alert{border-radius:var(--r-md)}.ant-message .ant-message-notice-content{border-radius:var(--r-full);box-shadow:var(--shadow-2)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--s-5);background:radial-gradient(900px 420px at 20% 0%,rgba(12,122,75,.1),transparent 55%),radial-gradient(700px 380px at 90% 100%,rgba(163,97,10,.08),transparent 55%),var(--bg)}.login-card{width:400px;max-width:100%;border-radius:var(--r-xl);box-shadow:var(--shadow-3);background:var(--bg-elev);animation:rise .48s var(--ease) both}@keyframes rise{0%{opacity:0;transform:translateY(14px) scale(.99)}to{opacity:1;transform:none}}.login-brand{display:flex;align-items:center;gap:var(--s-3)}.brand-mark{width:46px;height:46px;border-radius:14px;background:linear-gradient(145deg,var(--brand),#0a5c39);color:#fff;font-size:21px;font-weight:700;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px #0c7a4b52;flex:none}.app-shell{min-height:100vh}.topbar{height:64px;background:#ffffffdb;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);padding:0 var(--s-6);position:sticky;top:0;z-index:30}.topbar-left{display:flex;align-items:center;gap:var(--s-3);min-width:0}.topbar-title{font-size:17px;font-weight:700;letter-spacing:.2px;white-space:nowrap}.topbar-sub{color:var(--ink-3);font-size:12px;white-space:nowrap}.topbar-right{display:flex;align-items:center;gap:var(--s-2)}.content{padding:var(--s-5) var(--s-6) var(--s-8);max-width:1600px;margin:0 auto}.toolbar{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap;margin-bottom:var(--s-3)}.toolbar .spacer{flex:1}.summary{display:inline-flex;align-items:center;gap:var(--s-2);color:var(--ink-2);font-size:13px;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-full);padding:5px 14px;box-shadow:var(--shadow-1)}.summary strong{color:var(--brand);font-family:var(--num);font-weight:600}.summary .sep{color:var(--ink-3)}.filters{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap;margin-bottom:var(--s-3)}.legend{display:flex;gap:var(--s-2);flex-wrap:wrap;align-items:center;margin-bottom:var(--s-3)}.legend-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-full);padding:4px 11px}.legend-chip i{width:9px;height:9px;border-radius:50%;flex:none}.legend-hint{font-size:12px;color:var(--ink-3);margin-left:var(--s-1)}.grid-wrap{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);overflow:auto;max-height:calc(100vh - 262px);box-shadow:var(--shadow-1);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),rgba(0,0,0,.25));mask-image:linear-gradient(to right,#000 calc(100% - 28px),#00000040)}.grid-wrap::-webkit-scrollbar{width:10px;height:10px}.grid-wrap::-webkit-scrollbar-thumb{background:#191d2129;border-radius:var(--r-full);border:2px solid var(--bg-elev)}.grid-wrap::-webkit-scrollbar-track{background:transparent}.grid{display:grid;min-width:max-content}.cell{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:52px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:4px 2px;font-size:12px;cursor:pointer;background:var(--bg-elev);overflow:hidden;position:relative;transition:background var(--dur) var(--ease)}.cell:hover{background:#f0f7f2}.cell:active{background:var(--brand-soft)}.cell.head{position:sticky;top:0;z-index:3;background:var(--bg-sunken);font-weight:600;color:var(--ink-2);cursor:default;min-height:54px;border-bottom:1px solid var(--line-strong)}.cell.head:hover{background:var(--bg-sunken)}.cell.head .d-num{font-size:13px;font-weight:700;color:var(--ink);font-family:var(--num)}.cell.head .d-wd{font-size:11px;color:var(--ink-3);font-weight:500}.cell.head.weekend{background:#e9ebe7}.cell.head.holiday{background:var(--c-public-bg)}.cell.head.holiday .d-num,.cell.head.holiday .d-wd{color:var(--c-public)}.cell.head.today{box-shadow:inset 0 -2px 0 var(--brand)}.cell.head.today .d-num{color:var(--brand)}.cell.name{position:sticky;left:0;z-index:2;align-items:flex-start;justify-content:center;padding:6px 12px;background:var(--bg-elev);border-right:1px solid var(--line-strong);box-shadow:2px 0 8px #141a180a}.cell.head.name{z-index:4;background:var(--bg-sunken);align-items:center}.name-main{font-size:13.5px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:6px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name-sub{font-size:11px;color:var(--ink-3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.tag-unknown{font-size:10px;color:var(--c-leave);background:var(--c-leave-bg);border-radius:4px;padding:1px 5px;font-weight:500}.cell.row-alt{background:#f8f9f7}.cell.row-alt:hover{background:#eef6f1}.cell.today-col{box-shadow:inset 0 0 0 1px #0c7a4b38}.cell.holiday{background:#fdf6f5}.cell.holiday.row-alt{background:#fcf2f0}.cell.holiday:hover{background:#fae9e6}.cell.empty{color:#d3d8d1;font-weight:500;font-size:14px}.cell.empty:hover{color:var(--brand);background:var(--brand-soft)}.cell-inner{position:relative;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}.status{display:inline-flex;align-items:center;justify-content:center;padding:2px 8px;border-radius:var(--r-full);font-size:11px;line-height:17px;font-weight:600;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}.st-上班{background:var(--c-work-bg);color:var(--c-work)}.st-公休{background:var(--c-public-bg);color:var(--c-public)}.st-例休{background:var(--c-rest-bg);color:var(--c-rest)}.st-請假{background:var(--c-leave-bg);color:var(--c-leave)}.st-未入職,.st-離職{background:var(--c-away-bg);color:var(--c-away)}.cell-stores{font-size:10.5px;color:var(--ink-3);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.multi-badge{position:absolute;top:1px;right:2px;background:var(--brand);color:#fff;border-radius:8px;font-size:9px;line-height:13px;padding:0 5px;font-weight:600}.record-card{border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s-4);margin-bottom:var(--s-3);background:var(--bg-elev);box-shadow:var(--shadow-1)}.record-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s-2);color:var(--ink-2);font-size:12px;font-weight:500}.field-label{font-size:12.5px;color:var(--ink-2);font-weight:600;margin:var(--s-3) 0 var(--s-2)}.day-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.day-cell{border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 4px;text-align:center;cursor:pointer;background:var(--bg-elev);min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;-webkit-user-select:none;user-select:none;transition:all var(--dur) var(--ease)}.day-cell:hover{border-color:var(--brand);transform:translateY(-1px)}.day-cell.selected{border-color:var(--brand);background:var(--brand-soft);box-shadow:inset 0 0 0 1px var(--brand)}.day-cell.selected .day-num{color:var(--brand)}.day-cell.disabled{background:var(--bg-sunken);color:var(--ink-3);cursor:not-allowed}.day-cell.disabled:hover{border-color:var(--line);transform:none}.day-cell.weekend:not(.disabled){background:#f7f8f5}.day-num{font-size:14px;font-weight:700;font-family:var(--num)}.day-note{font-size:10px;line-height:13px;color:var(--ink-3);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:760px){.ant-modal .ant-modal-footer{position:sticky;bottom:0;background:var(--bg-elev);padding:var(--s-3) 0 0;border-top:1px solid var(--line);margin:0 -22px -22px;border-radius:0 0 var(--r-lg) var(--r-lg)}.ant-modal .ant-modal-footer .ant-btn{min-height:44px;min-width:108px;font-size:15px}}.mobile-day{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s-4);box-shadow:var(--shadow-1)}.mobile-row{display:flex;align-items:center;justify-content:space-between;padding:var(--s-3) var(--s-2);border-bottom:1px solid var(--line);gap:var(--s-3);min-height:56px;cursor:pointer;border-radius:var(--r-sm);transition:background var(--dur) var(--ease)}.mobile-row:hover{background:#f5f8f5}.mobile-row:last-child{border-bottom:none}.mobile-name{font-weight:600;font-size:15px}.mobile-sub{color:var(--ink-3);font-size:12px;margin-top:3px}@media(max-width:1023px){.content{padding:var(--s-4)}}@media(max-width:760px){.topbar{padding:var(--s-2) var(--s-3);height:auto;min-height:60px;flex-wrap:wrap;gap:var(--s-2)}.topbar-title{font-size:16px}.topbar-sub{display:none}.topbar .ant-picker{height:36px}.content{padding:var(--s-3)}.toolbar{gap:6px}.toolbar .ant-btn{min-height:38px;padding:4px 12px}.summary{order:-1;width:100%;justify-content:center}.legend{gap:6px}.legend-chip{font-size:12px;padding:4px 9px}.filters .ant-select,.filters .ant-input{height:38px}.grid-wrap{max-height:calc(100vh - 320px);border-radius:var(--r-md)}.cell{min-height:48px}.cell.head .d-num{font-size:12px}}
