*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{font-family:Segoe UI,Calibri,Arial,sans-serif}.sheet{color:#1e1e1e;background:#f3f3f3;flex-direction:column;height:100vh;font-family:Segoe UI,Calibri,Arial,sans-serif;display:flex}.toolbar{color:#fff;background:#217346;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 16px;display:flex}.toolbar h1{margin:0;font-size:18px;font-weight:600}.toolbar-actions{align-items:center;gap:8px;display:flex}.search-box{border:none;border-radius:3px;min-width:220px;padding:6px 10px}.refresh-btn{color:#217346;cursor:pointer;background:#fff;border:none;border-radius:3px;padding:6px 14px;font-weight:600}.refresh-btn:disabled{opacity:.6;cursor:default}.effort-btn{color:#3d2b00;cursor:pointer;background:#ffb900;border:none;border-radius:3px;padding:6px 14px;font-weight:600}.effort-menu{position:relative}.effort-menu-list{z-index:10;background:#fff;border:1px solid #c6c6c6;border-radius:3px;flex-direction:column;min-width:100%;padding:4px 0;display:flex;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 4px 12px #00000026}.effort-menu-list button{color:#1e1e1e;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:8px 14px}.effort-menu-list button:hover,.effort-menu-list button:focus-visible{background:#e8f3ec;outline:none}.error-banner{color:#a80000;background:#fde7e9;border-bottom:1px solid #f2b7bb;flex-shrink:0;padding:8px 16px}.grid-wrapper{background:#fff;flex:1;overflow:auto}.excel-grid{border-collapse:collapse;width:100%;font-size:13px}.excel-grid thead th{text-align:left;cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;z-index:1;background:#e6e6e6;border:1px solid #c6c6c6;padding:6px 10px;position:sticky;top:0}.excel-grid thead th:hover{background:#d9d9d9}.excel-grid td{white-space:nowrap;text-overflow:ellipsis;border:1px solid #e0e0e0;padding:5px 10px;overflow:hidden}.col-label{text-overflow:ellipsis;overflow:hidden}.col-resizer{cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;width:12px;position:absolute;top:0;bottom:0}.col-resizer-end{right:-6px}.col-resizer-start{left:-6px}th:last-child>.col-resizer-end{right:0}.col-resizer:hover:after{content:"";background:#217346;width:2px;position:absolute;top:0;bottom:0;left:5px}th:last-child>.col-resizer-end:hover:after{left:auto;right:0}.col-resize-overlay{z-index:100;cursor:col-resize;-webkit-user-select:none;user-select:none;position:fixed;inset:0}.col-resize-guide{background:#217346;width:2px;margin-left:-1px;position:absolute}.excel-grid tbody tr:nth-child(2n){background:#f7faf8}.excel-grid tbody tr:hover{background:#e8f3ec}.row-num-col{text-align:center;color:#666;background:#f0f0f0;width:40px;font-size:12px}.empty-cell{text-align:center;color:#666;padding:24px}.status-bar{color:#fff;background:#217346;flex-shrink:0;padding:6px 16px;font-size:12px}.calendar-controls{background:#fafafa;border-bottom:1px solid #e0e0e0;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:20px;padding:10px 16px;display:flex}.calendar-controls label{color:#333;align-items:center;gap:8px;font-weight:600;display:flex}.calendar-controls select{border:1px solid #c6c6c6;border-radius:3px;min-width:200px;padding:6px 10px}.month-nav{align-items:center;gap:10px;font-weight:600;display:flex}.month-nav button{cursor:pointer;background:#fff;border:1px solid #c6c6c6;border-radius:3px;width:28px;height:28px;font-size:14px}.month-nav button:hover{background:#f0f0f0}.month-total{color:#217346;margin-left:auto;font-weight:600}.calendar-grid-wrapper{background:#fff;flex:1;padding:16px;overflow:auto}.calendar-weekdays{grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px;display:grid}.calendar-weekday{text-align:center;color:#666;padding:4px 0;font-size:13px;font-weight:600}.calendar-grid{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.calendar-cell{background:#fbfbfb;border:1px solid #e0e0e0;border-radius:4px;min-height:90px;padding:6px}.calendar-cell.empty{background:0 0;border:none}.calendar-cell.has-effort{background:#c6efce;border-color:#8fce9f}.calendar-day-number{color:#555;font-size:12px;font-weight:600}.calendar-effort{color:#1e5c2a;text-align:center;margin-top:8px;font-size:13px;font-weight:700}.calendar-effort-days{color:#3a7a48;font-size:11px;font-weight:500}.weekly-legend{color:#555;align-items:center;gap:2px;margin-left:auto;font-size:11px;font-weight:600;display:flex}.weekly-legend-band{color:#1e1e1e;text-align:center;border:1px solid #0000001f;border-radius:2px;min-width:40px;padding:3px 4px}.weekly-legend-unit{margin-left:4px}.weekly-grid-wrapper{background:#fff;flex:1;overflow:auto}.weekly-grid{border-collapse:separate;border-spacing:0;width:max-content;font-size:12px}.weekly-grid th,.weekly-grid td{white-space:nowrap;text-align:center;border-bottom:1px solid #e0e0e0;border-right:1px solid #e0e0e0;padding:4px 6px}.weekly-grid td,.weekly-grid tbody th{text-overflow:ellipsis;overflow:hidden}.weekly-grid td{color:#1e1e1e;font-weight:600}.weekly-grid thead th{z-index:1;background:#e6e6e6;border-color:#c6c6c6;position:sticky;top:0}.weekly-grid thead th.current-week{background:#ffe699}.weekly-week-date{color:#666;font-size:10px;font-weight:400}.weekly-grid .weekly-name-col{z-index:1;text-align:left;background:#f0f0f0;border-right-color:#c6c6c6;position:sticky;left:0}.weekly-grid thead .weekly-name-col{z-index:2;background:#e6e6e6}.weekly-grid tbody tr:hover{background:#f3f9f5}.weekly-grid tbody tr:hover .weekly-name-col{background:#e8f3ec}.weekly-empty{color:#666;padding:24px}.loading-overlay{z-index:1000;-webkit-backdrop-filter:grayscale()blur(2px);backdrop-filter:grayscale()blur(2px);opacity:0;visibility:hidden;pointer-events:none;background:#161e1a73;justify-content:center;align-items:center;padding:16px;transition:opacity .22s,visibility 0s linear .22s;display:flex;position:fixed;inset:0}.loading-overlay.is-active{opacity:1;visibility:visible;pointer-events:auto;cursor:wait;transition:opacity .2s}.loading-overlay:not(.is-active) *{animation-play-state:paused}.loading-window{background:#fff;border-radius:8px;width:min(360px,100%);transition:transform .2s ease-in;overflow:hidden;transform:translateY(16px)scale(.94);box-shadow:0 30px 70px #00000059,0 0 0 1px #00000014}.loading-overlay.is-active .loading-window{transition:transform .55s cubic-bezier(.34,1.56,.64,1);transform:none}.loading-window-bar{color:#fff;background:#217346;align-items:center;height:44px;padding:0 16px;display:flex}.loading-title{font-size:17px;font-weight:600}.loading-sheet{background:#d9d9d9;grid-template-rows:22px repeat(4,26px);grid-template-columns:30px repeat(3,1fr) 22px;gap:1px;font-size:11px;display:grid;position:relative}.loading-sheet-head,.loading-sheet-rownum{color:#666;justify-content:center;align-items:center;display:flex}.loading-sheet-head{background:#e6e6e6}.loading-sheet-rownum{background:#f0f0f0}.loading-sheet-cell{background:#fff;align-items:center;padding:0 10px;display:flex}.loading-sheet-text{transform-origin:0;height:7px;animation:2.2s ease-out infinite backwards loading-sheet-write;animation-delay:calc(var(--row) * .55s + var(--col) * 70ms);background:#9fb2a6;border-radius:4px}.loading-sheet-cursor{border:2px solid #217346;height:28px;animation:2.2s cubic-bezier(.65,0,.35,1) infinite loading-sheet-cursor;position:absolute;top:22px;left:30px;right:21px}.loading-sheet-cursor:after{content:"";background:#217346;border:1px solid #fff;width:8px;height:8px;position:absolute;bottom:-5px;right:-5px}.loading-window-status{color:#fff;background:#217346;padding:7px 16px;font-size:13px}@keyframes loading-sheet-write{0%{opacity:1;transform:scaleX(0)}14%,85%{opacity:1;transform:scaleX(1)}to{opacity:.35;transform:scaleX(1)}}@keyframes loading-sheet-cursor{0%,18%{transform:translateY(0)}25%,43%{transform:translateY(27px)}50%,68%{transform:translateY(54px)}75%,93%{transform:translateY(81px)}to{transform:translateY(0)}}@starting-style{.loading-overlay.is-active{opacity:0}.loading-overlay.is-active .loading-window{transform:translateY(16px)scale(.94)}}@media (prefers-reduced-motion:reduce){.loading-window,.loading-overlay.is-active .loading-window{transition:none;transform:none}}
