:root{--color-primary:#2563eb;--color-primary-dark:#1d4ed8;--color-admin:#7c3aed;--color-bg:#f1f5f9;--color-card:#fff;--color-text:#0f172a;--color-muted:#64748b;--color-error:#dc2626;color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans Khmer,sans-serif;line-height:1.5}*{box-sizing:border-box}body{min-height:100vh;margin:0}#root{min-height:100vh}.fullscreen-center{text-align:center;min-height:100vh;color:var(--color-muted);flex-direction:column;justify-content:center;align-items:center;gap:1rem;padding:1rem;display:flex}.login-screen{justify-content:center;align-items:center;min-height:100vh;padding:1rem;display:flex}.login-card{background:var(--color-card);border-radius:16px;width:100%;max-width:380px;padding:2rem;box-shadow:0 4px 24px #0f172a14}.login-title{text-align:center;color:var(--color-primary);margin:0 0 .25rem;font-size:1.5rem}.login-subtitle{text-align:center;color:var(--color-muted);margin:0 0 1.5rem;font-size:.9rem}.login-card form{flex-direction:column;gap:.4rem;display:flex}.login-card label{color:var(--color-muted);font-size:.85rem;font-weight:600}.login-card input{color:var(--color-text);background:#fff;border:1px solid #cbd5e1;border-radius:10px;margin-bottom:.6rem;padding:.7rem .85rem;font-size:1rem}.login-card input:focus{outline:2px solid var(--color-primary);border-color:#0000}.login-card button{background:var(--color-primary);color:#fff;cursor:pointer;border:none;border-radius:10px;margin-top:.5rem;padding:.75rem;font-size:1rem;font-weight:600}.login-card button:hover:not(:disabled){background:var(--color-primary-dark)}.login-card button:disabled{opacity:.6;cursor:default}.login-error{color:var(--color-error);margin:.25rem 0 0;font-size:.85rem}.link-btn{color:var(--color-primary);cursor:pointer;text-align:center;background:0 0;border:none;width:100%;margin-top:.75rem;padding:.25rem;font-size:.88rem;font-weight:600}.shell-header{background:var(--color-primary);color:#fff;justify-content:space-between;align-items:center;padding:1rem 1.25rem;display:flex}.shell-header-admin{background:var(--color-admin)}.shell-header h1{margin:0;font-size:1.1rem}.shell-role{opacity:.85;text-transform:uppercase;letter-spacing:.06em;margin:0;font-size:.75rem}.signout-btn{color:inherit;cursor:pointer;background:0 0;border:1px solid #ffffff80;border-radius:8px;padding:.45rem .9rem;font-size:.85rem}.fullscreen-center .signout-btn{border-color:var(--color-muted);color:var(--color-text)}.shell-main{max-width:640px;margin:0 auto;padding:1.5rem 1.25rem}.shell-greeting{margin:0 0 .75rem;font-size:1.1rem;font-weight:600}.shell-placeholder{color:var(--color-muted);margin:0}.clock-page{flex-direction:column;align-items:center;gap:1.25rem;padding:1.5rem 0 2rem;display:flex}.clock-date{margin:0;font-size:1.05rem;font-weight:600}.punch-btn{color:#fff;cursor:pointer;border:none;border-radius:50%;width:180px;height:180px;font-size:1.5rem;font-weight:700;transition:transform .1s;box-shadow:0 8px 24px #0f172a33}.punch-btn:active:not(:disabled){transform:scale(.96)}.punch-btn:disabled{opacity:.65;cursor:default;font-size:1.05rem}.punch-btn-in{background:radial-gradient(circle at 30% 30%,#34d399,#059669)}.punch-btn-out{background:radial-gradient(circle at 30% 30%,#fbbf24,#d97706)}.clock-message{text-align:center;border-radius:10px;width:100%;margin:0;padding:.6rem 1rem;font-size:.9rem}.clock-page .clock-message{max-width:320px}.request-form .clock-message{margin-top:.9rem}.clock-message-error{color:var(--color-error);background:#fee2e2}.clock-message-success{color:#065f46;background:#d1fae5}.punch-list{background:var(--color-card);border-radius:12px;width:100%;max-width:320px;margin:0;padding:0;list-style:none;overflow:hidden;box-shadow:0 2px 8px #0f172a0f}.punch-list li{border-bottom:1px solid var(--color-bg);justify-content:space-between;align-items:center;padding:.6rem 1rem;font-size:.95rem;display:flex}.punch-list li:last-child{border-bottom:none}.punch-type{text-transform:uppercase;letter-spacing:.05em;font-size:.8rem;font-weight:700}.punch-type-in{color:#059669}.punch-type-out{color:#d97706}.clock-quote{color:var(--color-muted);text-align:center;margin:.5rem 0 0;font-size:.9rem;font-style:italic}.shell{padding-bottom:64px}.tab-bar{background:var(--color-card);z-index:10;border-top:1px solid #e2e8f0;display:flex;position:fixed;bottom:0;left:0;right:0}.tab-link{color:var(--color-muted);flex-direction:column;flex:1;align-items:center;gap:2px;padding:.5rem 0 .65rem;font-size:.75rem;font-weight:600;text-decoration:none;display:flex}.tab-link.active{color:var(--color-primary)}.tab-icon{font-size:1.15rem;line-height:1}.history-page{flex-direction:column;gap:1rem;padding-top:.5rem;display:flex}.history-selectors{gap:.6rem;display:flex}.history-selectors select{background:var(--color-card);color:var(--color-text);border:1px solid #cbd5e1;border-radius:10px;flex:1;padding:.55rem .7rem;font-size:.95rem}.history-status{color:var(--color-muted);text-align:center;margin:1rem 0}.history-error{color:var(--color-error)}.day-list{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.day-row{background:var(--color-card);cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;border:none;border-radius:12px;align-items:stretch;gap:.75rem;padding:0;display:flex;overflow:hidden;box-shadow:0 1px 4px #0f172a0f}.day-block{background:var(--color-primary);color:#fff;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;width:56px;min-height:56px;display:flex}.day-block-weekend{background:#94a3b8}.day-num{font-size:1.15rem;font-weight:700;line-height:1.1}.day-wd{text-transform:uppercase;opacity:.9;font-size:.7rem}.weekend-band{color:var(--color-muted);letter-spacing:.08em;text-transform:uppercase;align-self:center;font-size:.8rem;font-weight:600}.day-cols{flex:1;justify-content:space-between;align-items:center;padding-right:1rem;display:flex}.day-col{flex-direction:column;gap:1px;min-width:64px;display:flex}.day-col-label{color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.68rem}.day-col-value{font-size:.95rem;font-weight:600}.day-detail{flex-direction:column;align-items:center;gap:1rem;padding-top:.5rem;display:flex}.back-link{color:var(--color-primary);align-self:flex-start;font-size:.9rem;font-weight:600;text-decoration:none}.day-detail-date{text-align:center;margin:0;font-size:1.15rem}.ring-wrap{width:220px;height:220px;position:relative}.ring-track{fill:none;stroke:#e2e8f0;stroke-width:14px}.ring-progress{fill:none;stroke:var(--color-primary);stroke-width:14px;stroke-linecap:round;transition:stroke-dashoffset .6s}.ring-center{flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;inset:0}.ring-total{font-size:2rem;font-weight:700}.ring-sub{color:var(--color-muted);font-size:.8rem}.ring-live{color:#059669;text-transform:uppercase;letter-spacing:.06em;font-size:.72rem;font-weight:700}.score-card{background:var(--color-card);border-radius:12px;justify-content:space-between;align-items:center;width:100%;max-width:320px;padding:.75rem 1rem;display:flex;box-shadow:0 2px 8px #0f172a0f}.score-label{color:var(--color-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.85rem;font-weight:600}.score-value{color:var(--color-primary);font-size:1.15rem;font-weight:700}.requests-page{flex-direction:column;gap:1.5rem;padding-top:.5rem;display:flex}.section-title{text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted);margin:0 0 .6rem;font-size:1rem}.rw-year-picker{color:var(--color-muted);text-transform:uppercase;letter-spacing:.03em;align-items:center;gap:.4rem;margin-top:.75rem;margin-bottom:.75rem;font-size:.75rem;font-weight:600;display:flex}.rw-year-picker select{font:inherit;text-transform:none;letter-spacing:normal;border:1px solid var(--color-border,#d1d5db);color:var(--color-text,inherit);background:var(--color-card);border-radius:6px;padding:.25rem .4rem}.request-form{background:var(--color-card);border-radius:12px;flex-direction:column;gap:.35rem;padding:1rem;display:flex;box-shadow:0 2px 8px #0f172a0f}.request-form label{color:var(--color-muted);margin-top:.4rem;font-size:.8rem;font-weight:600}.request-form select,.request-form input,.request-form textarea{color:var(--color-text);background:#fff;border:1px solid #cbd5e1;border-radius:10px;padding:.6rem .75rem;font-family:inherit;font-size:.95rem}.request-form button{background:var(--color-primary);color:#fff;cursor:pointer;border:none;border-radius:10px;margin-top:.9rem;padding:.7rem;font-size:.95rem;font-weight:600}.request-form button:disabled{opacity:.6}.request-list{flex-direction:column;gap:.6rem;margin:0;padding:0;list-style:none;display:flex}.request-card{background:var(--color-card);border-radius:12px;padding:.85rem 1rem;box-shadow:0 2px 8px #0f172a0f}.request-head{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.request-title{font-size:.95rem;font-weight:700}.request-meta{color:var(--color-muted);margin:.25rem 0 0;font-size:.85rem}.request-self-note{margin-top:.6rem;font-style:italic}.request-reason{margin:.4rem 0 0;font-size:.9rem}.status-chip{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-radius:999px;padding:.2rem .55rem;font-size:.72rem;font-weight:700}.status-pending{color:#92400e;background:#fef3c7}.status-approved{color:#065f46;background:#d1fae5}.status-denied{color:var(--color-error);background:#fee2e2}.request-actions{flex-wrap:wrap;gap:.5rem;margin-top:.7rem;display:flex}.doc-actions .request-actions,.item-actions .request-actions{margin-top:0}.btn-approve,.btn-penalize,.btn-deny,.btn-muted,.btn-delete-outline{cursor:pointer;color:#fff;border:none;border-radius:8px;padding:.5rem .8rem;font-size:.82rem;font-weight:600}.btn-approve{background:#059669}.btn-penalize{background:#d97706}.btn-deny{background:var(--color-error)}.announcement-body{white-space:pre-wrap;margin:.5rem 0 0;font-size:.92rem}.announce-edit{flex-direction:column;gap:.5rem;display:flex}.announce-edit label{color:var(--color-muted);font-size:.8rem;font-weight:600}.announce-edit input,.announce-edit select,.announce-edit textarea{color:var(--color-text);border:1px solid #cbd5e1;border-radius:10px;padding:.55rem .7rem;font-family:inherit;font-size:.92rem}.btn-muted{background:#64748b}.tab-icon{position:relative}.unread-dot{background:var(--color-error);border:1.5px solid var(--color-card);border-radius:50%;width:9px;height:9px;position:absolute;top:-2px;right:-7px}.announce-banner{background:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;align-items:stretch;width:100%;max-width:340px;display:flex;overflow:hidden}.announce-banner-main{cursor:pointer;text-align:left;font:inherit;color:var(--color-text);background:0 0;border:none;flex-direction:column;flex:1;align-items:flex-start;gap:2px;padding:.7rem .9rem;display:flex}.announce-banner-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-primary);font-size:.72rem;font-weight:700}.announce-banner-title{font-size:.92rem;font-weight:600}.announce-banner-close{cursor:pointer;color:var(--color-muted);background:0 0;border:none;padding:0 .8rem;font-size:.9rem}.employee-row{background:var(--color-card);cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;border:none;border-radius:12px;justify-content:space-between;align-items:center;gap:.75rem;padding:.85rem 1rem;display:flex;box-shadow:0 2px 8px #0f172a0f}.employee-info{flex-direction:column;gap:2px;display:flex}.employee-name{font-size:.95rem;font-weight:600}.employee-role{color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem}.employee-metrics{align-items:center;gap:.75rem;display:flex}.rw-dots{flex-direction:column;align-items:flex-end;gap:3px;display:flex;position:absolute;bottom:8px;right:12px}.rw-dot-row{justify-content:flex-end;gap:3px;display:flex}.rw-dot{box-sizing:border-box;border-radius:999px;width:10px;height:10px}.rw-dot-reward{background:#16a34a}.rw-dot-warning{background:#dc2626}.rw-dot-num{color:#fff;justify-content:center;align-items:center;width:auto;min-width:16px;height:14px;padding:0 4px;font-size:.6rem;font-weight:700;line-height:1;display:inline-flex}.employee-avg{color:var(--color-primary);flex-direction:column;align-items:flex-end;font-size:1.05rem;font-weight:700;line-height:1.1;display:flex}.employee-avg-label{color:var(--color-muted);text-transform:uppercase;letter-spacing:.03em;font-size:.62rem;font-weight:600}.clock-status{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-radius:999px;padding:.2rem .6rem;font-size:.72rem;font-weight:700}.clock-status-in{color:#065f46;background:#d1fae5}.clock-status-out{color:#92400e;background:#fef3c7}.clock-status-none{color:var(--color-muted);background:#e2e8f0}.employee-card{background:var(--color-card);border-radius:12px;position:relative;overflow:hidden;box-shadow:0 2px 8px #0f172a0f}.employee-card.has-rw-dots{padding-bottom:22px}.employee-card .employee-row{box-shadow:none;border-radius:0}.employee-inactive{opacity:.72}.badge-pending,.badge-inactive{text-transform:uppercase;letter-spacing:.03em;border-radius:999px;margin-left:.5rem;padding:.1rem .4rem;font-size:.62rem;font-weight:700}.badge-pending{color:#92400e;background:#fef3c7}.badge-inactive{color:var(--color-muted);background:#e2e8f0}.employee-actions{flex-wrap:wrap;align-items:center;gap:.5rem;padding:0 1rem .85rem;display:flex}.employee-actions button{cursor:pointer;color:#fff;border:none;border-radius:8px;padding:.45rem .8rem;font-size:.82rem;font-weight:600}.employee-actions button:disabled{opacity:.55;cursor:default}.btn-delete-outline{background:var(--color-error)!important;color:#fff!important;border:none!important}.delete-confirm{background:#fef2f2;border:1px solid #fecaca;border-radius:10px;flex:100%;padding:.75rem}.delete-confirm p{margin:0 0 .5rem;font-size:.85rem}.delete-confirm input{border:1px solid #cbd5e1;border-radius:8px;width:100%;margin-bottom:.5rem;padding:.5rem .7rem;font-size:.9rem}.employee-history-header{flex-direction:column;gap:.35rem;margin-bottom:.25rem;display:flex}.day-row{position:relative}.late-dot{color:#fff;z-index:1;border:1.5px solid #0f172a26;border-radius:50%;justify-content:center;align-items:center;width:14px;height:14px;font-size:9px;font-weight:800;line-height:1;display:inline-flex;position:absolute;bottom:6px;right:6px}.dot-late1{background:#fde047}.dot-late1.late-dot-excused,.dot-late1{color:#713f12}.dot-late2{background:#f59e0b}.dot-late3{background:#ea580c}.dot-late4{background:#e02d00}.dot-absent-excused{background:#b91c1c}.dot-absent{background:#7f1d1d}.late-dot-excused{border:2px solid #059669}.late-legend{color:var(--color-muted);flex-wrap:wrap;gap:.4rem 1rem;padding:.25rem .25rem .5rem;font-size:.72rem;display:flex}.late-legend span{align-items:center;gap:.35rem;display:inline-flex}.late-legend .late-dot{flex-shrink:0;width:11px;height:11px;position:static}.section-head-row{justify-content:space-between;align-items:baseline;gap:.75rem;display:flex}.section-link{color:var(--color-primary);white-space:nowrap;font-size:.82rem;font-weight:600;text-decoration:none}.log-card{background:var(--color-card);border-radius:12px;align-items:stretch;gap:.75rem;display:flex;overflow:hidden;box-shadow:0 1px 4px #0f172a0f}.log-card .day-block{border-radius:0}.log-body{flex-direction:column;flex:1;gap:.15rem;min-width:0;padding:.7rem 1rem .7rem 0;display:flex}.log-head{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.log-name{font-size:.95rem;font-weight:700}.log-type{color:var(--color-muted);margin:.1rem 0 0;font-size:.9rem;font-weight:600}.log-body .request-reason{margin-top:.25rem}.settings-card{background:var(--color-card);border-radius:12px;padding:.5rem 1rem;box-shadow:0 2px 8px #0f172a0f}.settings-row{border-bottom:1px solid var(--color-bg);justify-content:space-between;align-items:center;gap:1rem;padding:.6rem 0;display:flex}.settings-row:last-child{border-bottom:none}.settings-label{color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;font-weight:600}.settings-value{text-align:right;overflow-wrap:anywhere;font-size:.95rem;font-weight:600}.settings-note{color:var(--color-muted);margin:0 0 .4rem;font-size:.8rem}.lang-toggle{gap:.5rem;padding:.75rem 1rem;display:flex}.login-lang-toggle{border-top:1px solid #e2e8f0;margin-top:1.25rem;padding:.75rem 0 0}.login-card .login-lang-toggle .lang-btn{color:var(--color-text);background:#fff;border:1px solid #cbd5e1;font-size:.95rem}.login-card .login-lang-toggle .lang-btn-active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.login-card .login-lang-toggle .lang-btn:hover:not(:disabled){border-color:var(--color-primary-dark);color:#fff}.lang-btn{color:var(--color-text);cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:10px;flex:1;padding:.6rem;font-size:.95rem;font-weight:600}.lang-btn-active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.day-picker{flex-wrap:wrap;gap:.4rem;display:flex}.request-form .day-chip{min-width:44px;color:var(--color-muted);cursor:pointer;background:#e2e8f0;border:1px solid #cbd5e1;border-radius:8px;margin-top:0;padding:.4rem .6rem;font-size:.82rem;font-weight:600}.request-form .day-chip-on{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.notif-card{padding:1rem}.notif-btn{background:var(--color-primary);color:#fff;cursor:pointer;border:none;border-radius:10px;width:100%;margin-top:.5rem;padding:.7rem 1rem;font-size:.95rem;font-weight:600}.notif-btn:disabled{opacity:.6}.request-card{position:relative}.seen-indicator{color:var(--color-muted);cursor:pointer;background:0 0;border:none;padding:0;font-size:.72rem;font-weight:600;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;position:absolute;bottom:.6rem;right:.85rem}.modal-overlay{z-index:50;background:#0f172a73;justify-content:center;align-items:flex-end;padding:0;display:flex;position:fixed;inset:0}.modal-card:focus{outline:none}.modal-card{background:var(--color-card);border-radius:16px 16px 0 0;width:100%;max-width:480px;max-height:80vh;padding:1.25rem;overflow-y:auto}.receipt-group{text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted);margin:1rem 0 .4rem;font-size:.8rem}.receipt-list{margin:0;padding:0;list-style:none}.receipt-list li{border-bottom:1px solid var(--color-bg);justify-content:space-between;align-items:center;gap:1rem;padding:.5rem 0;font-size:.92rem;display:flex}.receipt-list li:last-child{border-bottom:none}.receipt-time{color:var(--color-muted);white-space:nowrap;font-size:.78rem}.anon-toggle{color:var(--color-text);cursor:pointer;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.9rem;font-weight:600;display:flex}.anon-toggle input{width:1.05rem;height:1.05rem;accent-color:var(--color-primary)}.employee-history-header .day-detail-date{text-align:left;font-size:1.1rem}.employee-docs{margin:0}.employee-docs-card{padding:.85rem 1rem}.doc-upload{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.doc-empty{margin:.25rem 0 0}.doc-list{flex-direction:column;gap:.4rem;margin:.6rem 0 0;padding:0;list-style:none;display:flex}.doc-item{background:var(--color-bg);border-radius:8px;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .65rem;display:flex}.doc-main{text-align:left;cursor:pointer;min-width:0;color:inherit;background:0 0;border:none;flex-direction:column;flex:1;gap:.2rem;padding:0;display:flex}.doc-name{text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;font-weight:600;overflow:hidden}.doc-meta{color:var(--color-muted);gap:.5rem;font-size:.78rem;display:flex}.doc-actions{flex-shrink:0}.invite-doc-list{flex-direction:column;gap:.4rem;margin:.25rem 0 0;padding:0;list-style:none;display:flex}.invite-doc-row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.invite-doc-name{text-overflow:ellipsis;white-space:nowrap;flex:1 1 0;min-width:0;font-size:.85rem;overflow:hidden}.invite-doc-row select{flex-shrink:0;margin-top:0}.invite-doc-row .btn-muted{background:#64748b;flex-shrink:0;margin-top:0;padding:.45rem .7rem;font-size:.85rem}.employee-contracts{margin:0}.contract-main{cursor:default}.contract-item,.asset-item{align-items:stretch}.item-actions{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:.45rem;display:flex}.item-actions-top,.item-actions-bottom{gap:.35rem;display:flex}.end-contract-confirm{flex-direction:column;align-items:flex-end;gap:.35rem;display:flex}.btn-compact{padding:.32rem .6rem;font-size:.78rem}.btn-add{width:100%;color:var(--color-primary);cursor:pointer;background:0 0;border:1.5px dashed #cbd5e1;border-radius:10px;padding:.55rem .75rem;font-size:.9rem;font-weight:600}.btn-add:hover{border-color:var(--color-primary);background:#2563eb0d}.contract-expiry-row{margin-top:.25rem;display:flex}.contract-expiry-badge{margin-left:.5rem}.contract-expiry-row .contract-expiry-badge{margin-left:0}.contract-dates{flex-wrap:wrap;column-gap:.3rem;display:flex}.contract-notes{white-space:pre-wrap}.contract-form{flex:1;margin-top:.5rem}.employee-assets,.employee-kpi{margin:0}.kpi-stars{color:#d97706;letter-spacing:.1em;margin-left:.5rem}.kpi-cycle-row{gap:.5rem;display:flex}.kpi-cycle-year{flex:none;width:6rem}.kpi-cycle-quarter{flex:auto}.kpi-seed-goal{margin-bottom:.35rem}.kpi-goals{border-top:1px dashed var(--color-border,#e2e8f0);margin-top:.5rem;padding-top:.5rem}.kpi-goals-title{color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.3rem;font-size:.78rem;font-weight:600;display:block}.kpi-goals-empty{font-style:italic}.kpi-goal-list{flex-direction:column;gap:.3rem;margin:0;padding:0;list-style:none;display:flex}.kpi-goal{align-items:center;gap:.4rem;display:flex}.kpi-goal-text{flex:auto;font-size:.9rem}.kpi-goal-done .kpi-goal-text{color:var(--color-muted);text-decoration:line-through}.kpi-goal-status{flex:none;padding:.15rem .3rem;font-size:.8rem}.kpi-goal-remove{color:var(--color-muted);cursor:pointer;background:0 0;border:none;flex:none;padding:.1rem .3rem;font-size:.9rem}.kpi-goal-remove:hover{color:#dc2626}.kpi-goal-add,.kpi-goal-add-btn{margin-top:.35rem}.kpi-goal-add{align-items:center;gap:.4rem;display:flex}.kpi-goal-add input{flex:auto}.kpi-goal-add-btn{color:var(--color-accent,#2563eb);cursor:pointer;background:0 0;border:none;padding:.1rem 0;font-size:.85rem}.report-month{color:var(--color-muted);margin:-.5rem 0 .75rem;font-size:.9rem}.report-grid{grid-template-columns:repeat(2,1fr);gap:.75rem;display:grid}.report-card{background:var(--color-card);border-radius:12px;flex-direction:column;gap:.25rem;padding:.85rem 1rem;display:flex;box-shadow:0 2px 8px #0f172a0f}.report-value{font-size:1.6rem;font-weight:700;line-height:1.2}.report-label{color:var(--color-muted);font-size:.78rem}.report-expiry-title{margin-top:1.5rem}.report-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.report-actions{gap:.5rem;display:flex}.report-card-btn{cursor:pointer;text-align:left;font:inherit;color:inherit;border:1px solid #0000}.report-card-btn:hover{box-shadow:0 3px 12px #0f172a1f}.report-card-active{border-color:var(--color-accent,#2563eb)}.report-drill{margin-top:.85rem}.report-drill-title{margin:0 0 .5rem;font-size:.95rem}.report-drill-list{flex-direction:column;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.report-drill-row{border-bottom:1px solid var(--color-border,#e2e8f0);justify-content:space-between;align-items:baseline;gap:.75rem;padding-bottom:.4rem;display:flex}.report-drill-row:last-child{border-bottom:none;padding-bottom:0}.report-drill-name{font-size:.92rem;font-weight:600}.report-drill-meta{color:var(--color-muted);text-align:right;font-size:.82rem}.report-trend{flex-direction:column;gap:.45rem;margin:0;padding:0;list-style:none;display:flex}.report-trend-row{grid-template-columns:4.5rem 1fr auto;align-items:center;gap:.6rem;display:grid}.report-trend-period{color:var(--color-muted);font-size:.8rem}.report-trend-bar-wrap{background:var(--color-border,#e2e8f0);border-radius:6px;height:.7rem;overflow:hidden}.report-trend-bar{background:var(--color-accent,#2563eb);border-radius:6px;height:100%;display:block}.report-trend-value{font-variant-numeric:tabular-nums;font-size:.82rem}.employee-report-link{text-align:center;text-decoration:none;display:inline-block}.employee-report{margin:0}.report-salary-hidden{font-style:italic}@media print{.no-print,.shell-header,nav,.tabbar{display:none!important}.shell-main{padding:0!important}.report-card{box-shadow:none;border:1px solid #ccc}}.report-expiry-link{text-decoration:none}.employee-modules{flex-direction:column;gap:1.5rem;margin-top:1.5rem;display:flex}@media (width>=960px){.shell-admin{grid-template:"header header""nav main"1fr/220px minmax(0,1fr);min-height:100vh;padding-bottom:0;display:grid}.shell-admin .shell-header{grid-area:header}.shell-admin .tab-bar{border-top:none;border-right:1px solid #e2e8f0;flex-direction:column;grid-area:nav;justify-content:flex-start;padding-top:.75rem;position:static}.shell-admin .tab-secondary{display:flex}.shell-admin .sidenav-toggle,.shell-admin .sidenav,.shell-admin .sidenav-backdrop{display:none}.shell-admin .tab-link{flex-direction:row;flex:none;justify-content:flex-start;gap:.6rem;padding:.7rem 1.25rem;font-size:.9rem}.shell-admin .shell-main{grid-area:main;width:100%;max-width:1100px;margin:0 auto;padding:2rem 2.5rem}.shell-admin .report-grid{grid-template-columns:repeat(3,1fr);gap:1rem}.shell-admin .report-value{font-size:2rem}.shell-admin .teams-page{grid-template-columns:340px minmax(0,1fr);align-items:start;gap:2rem;display:grid}.shell-admin .employee-detail{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:2rem;display:grid}.shell-admin .employee-modules{margin-top:0}}.req-excused,.req-excused-label{color:#16a34a}.req-excused-label{font-weight:600}.req-total{color:var(--color-muted);font-size:1.1rem;font-weight:600}.punct-rate{font-weight:700}.punct-detail{white-space:nowrap;font-size:.95rem;font-weight:600}.punct-late{color:#d97706}.punct-absent{color:#dc2626}.worked-ot{color:var(--color-muted);white-space:nowrap;font-size:.95rem;font-weight:600}.report-monthpicker{margin-top:.4rem;margin-bottom:1rem}.employee-report-year{margin:.35rem 0 .25rem}.employee-report-section{margin-top:1.75rem}.tab-secondary{display:none}.contract-item .doc-name,.asset-item .doc-name{white-space:normal}.ot-total{color:var(--color-muted);margin:.5rem 0 0;font-size:.85rem}.ot-suggestions{border-top:1px dashed var(--color-border,#d0d0d0);margin-top:.9rem;padding-top:.6rem}.ot-suggestions-title{margin:0 0 .25rem;font-size:.9rem;font-weight:600}.employee-overtime .history-selectors{margin:0 0 .6rem}.payroll-status{margin:0;font-size:.85rem;font-weight:600}.payroll-status-draft{color:#b45309}.payroll-status-finalized{color:#15803d}.payroll-audit{margin-top:.75rem}.payroll-audit-title{color:#64748b;margin:0 0 .35rem;font-size:.8rem;font-weight:600}.payroll-audit-list{color:#475569;margin:0;padding-left:1.1rem;font-size:.8rem;line-height:1.5}.payslip-summary{cursor:pointer}.payslip-numbers{flex-wrap:wrap;gap:.9rem;display:flex}.payslip-detail{border-top:1px dashed var(--color-border,#d0d0d0);flex-direction:column;flex-basis:100%;gap:.15rem;margin-top:.6rem;padding-top:.4rem;display:flex}.payslip-line{justify-content:space-between;gap:.75rem;padding:.1rem 0;font-size:.85rem;display:flex}.payslip-amount{font-variant-numeric:tabular-nums;white-space:nowrap}.payslip-line-sub{color:var(--color-muted);padding-top:0;padding-bottom:0;padding-left:1.1rem;font-size:.8rem}.employee-admin-fields .admin-field-form+.admin-field-form{margin-top:.75rem}.payslip-line-total{border-top:1px solid var(--color-border,#d0d0d0);margin-top:.2rem;padding:.3rem 0;font-weight:700}.payslip-line-net{border-top:2px solid var(--color-border,#999);margin-top:.3rem;padding:.4rem 0;font-size:.95rem;font-weight:700}.payslip-employer{background:#00000009;border-radius:6px;margin:.35rem 0;padding:.35rem .5rem}.payslip-employer-title{color:var(--color-muted);margin-bottom:.15rem;font-size:.75rem;font-weight:600;display:block}.payroll-export-actions{flex-wrap:wrap}.tax-profile-controls{flex-wrap:wrap;align-items:center;gap:.9rem;display:flex}.tax-profile-controls .anon-toggle{margin-top:0}.tax-children-label{align-items:center;gap:.35rem;display:inline-flex}.tax-children-label input{width:3.5rem}.doc-list:has(.tax-profile-item){gap:.75rem}.tax-profile-item{align-items:flex-end}.config-toggle{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}.bracket-row{align-items:center;gap:.5rem;display:flex}.bracket-row input{flex:1}.bracket-row button{margin-top:0}.input-suffix-group{align-items:center;gap:.4rem;display:flex}.input-suffix-group input{flex:1}.input-suffix{color:var(--color-muted);font-size:.9rem;font-weight:600}.bracket-rate-group{flex:1}.payroll-page .section-title{margin-top:1.75rem}.payroll-page>section>.section-title:first-child,.settings-card>:first-child,.request-form>label:first-child,.request-form>.request-actions,.request-actions button{margin-top:0}.payslip-item{flex-wrap:wrap}.allowance-form{margin:.3rem 0}.allowance-form .input-negative{background:#fef2f2;border-color:#dc2626}.allowance-negative-warning{color:#dc2626;margin:.15rem 0 .35rem;font-size:.8rem;font-weight:600}.payslip-line-negative .payslip-amount{color:#dc2626}.org-tree,.org-children{margin:0;padding:0;list-style:none}.org-children{border-left:2px solid #cbd5e1;margin-left:.9rem;padding-left:.9rem}.org-node{margin:.4rem 0}.org-card{background:var(--color-card);border-radius:10px;justify-content:space-between;align-items:center;gap:.5rem;padding:.55rem .8rem;display:flex;box-shadow:0 1px 2px #0f172a14}.org-card-self{outline:2px solid var(--color-primary)}.org-name{font-weight:600}.org-role{color:var(--color-muted);align-items:center;gap:.35rem;font-size:.8rem;display:flex}@media (width>=900px){.org-page{max-width:640px}}.rw-badge{vertical-align:middle;border-radius:999px;margin-right:.45rem;padding:.1rem .5rem;font-size:.72rem;font-weight:600;display:inline-block}.rw-badge-reward{color:#166534;background:#dcfce7}.rw-badge-warning{color:#991b1b;background:#fee2e2}.cal-grid{grid-template-columns:repeat(7,1fr);gap:3px;margin:.8rem 0;display:grid}.cal-head{text-align:center;color:var(--color-muted);padding:.2rem 0;font-size:.72rem;font-weight:600}.cal-cell{background:var(--color-card);border-radius:8px;flex-direction:column;gap:.2rem;min-height:3rem;padding:.25rem .3rem;display:flex}.cal-cell-empty{background:0 0}.cal-cell-today{outline:2px solid var(--color-primary)}.cal-cell-holiday{background:#fef3c7}.cal-daynum{font-size:.8rem;font-weight:600}.cal-dots{flex-wrap:wrap;gap:3px;display:flex}.cal-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.cal-dot-holiday{background:#d97706}.cal-dot-event{background:var(--color-primary)}.cal-dot-leave{background:#0d9488}.cal-dot-birthday{background:#db2777}.cal-dot-anniversary{background:#7c3aed}.cal-dot-contract_expiry{background:var(--color-error)}.cal-list{margin:.6rem 0 0;padding:0;list-style:none}.cal-list-day{background:var(--color-card);border-radius:10px;align-items:baseline;gap:.8rem;margin-bottom:.4rem;padding:.5rem .8rem;display:flex}.cal-list-date{white-space:nowrap;min-width:4.5rem;font-weight:700}.cal-list-entries{flex-direction:column;gap:.15rem;display:flex}.cal-entry{font-size:.88rem}.cal-manage-subtitle{margin:.6rem 0 .2rem;font-size:.95rem}@media (width>=900px){.calendar-page{grid-template-columns:1.2fr 1fr;align-items:start;gap:1.2rem;display:grid}}.leave-breakdown{margin:.5rem 0 0;padding:0;font-size:.85rem;list-style:none}.leave-breakdown li{border-bottom:1px solid var(--color-border,#e2e8f0);justify-content:space-between;padding:.2rem 0;display:flex}.leave-breakdown li:last-child{border-bottom:none}.leave-breakdown li span:first-child{color:var(--color-muted)}.leave-history{margin-top:.75rem;overflow-x:auto}.leave-year-table{border-collapse:collapse;width:100%;font-size:.8rem}.leave-year-table th,.leave-year-table td{text-align:right;border-bottom:1px solid var(--color-border,#e2e8f0);white-space:nowrap;padding:.3rem .4rem}.leave-year-table th:first-child,.leave-year-table td:first-child{text-align:left}.leave-year-table th{color:var(--color-muted);font-weight:500}.leave-balance-grid{margin-bottom:.75rem}.shift-day{margin-top:1rem}.shift-day-title{color:var(--color-muted);margin:0 0 .4rem;font-size:.85rem;font-weight:600}.fx-fetch-row{margin:.4rem 0}.fx-fetch-fallback{flex-direction:column;align-items:flex-start;gap:.4rem;display:flex}.request-certificate{flex-wrap:wrap;align-items:center;gap:.4rem;margin:.4rem 0 0;display:flex}.cert-link{color:var(--color-primary);cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-size:.8rem}.cert-link:hover{text-decoration:underline}.cert-attach{color:var(--color-muted);cursor:pointer;font-size:.8rem}.cert-attach input[type=file]{display:none}.cert-attach:hover{color:var(--color-primary)}.shell-header-left{align-items:center;gap:.6rem;min-width:0;display:flex}.sidenav-toggle{color:inherit;cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:.35rem;line-height:0;display:inline-flex;position:relative}.sidenav-toggle:hover{background:#ffffff24}.sidenav-toggle-dot{position:absolute;top:.15rem;right:.15rem}.sidenav-backdrop{z-index:20;background:#0f172a73;position:fixed;inset:0}.sidenav{background:var(--color-card);z-index:21;visibility:hidden;width:min(78vw,260px);transition:transform .22s;position:fixed;top:0;bottom:0;left:0;overflow-y:auto;transform:translate(-100%);box-shadow:2px 0 16px #0f172a2e}.sidenav-open{visibility:visible;transform:translate(0)}@media (prefers-reduced-motion:reduce){.sidenav{transition:none}}.sidenav-list{flex-direction:column;padding:.75rem 0;display:flex}.sidenav-link{color:var(--color-text);align-items:center;gap:.7rem;padding:.85rem 1.25rem;font-size:.95rem;font-weight:600;text-decoration:none;display:flex;position:relative}.sidenav-link.active{color:var(--color-primary);background:var(--color-bg)}.sidenav-icon{font-size:1.15rem;line-height:1}.sidenav-label{flex:1;min-width:0}.sidenav-link-dot{flex-shrink:0;position:static}.shortfall-modal-text{color:var(--color-text);margin:.6rem 0 0;font-size:.85rem;line-height:1.55}.shortfall-ack-note{margin-top:.4rem}.my-role-edit{align-items:center;gap:.5rem;display:inline-flex}.my-role-edit select{padding:.3rem .4rem}:lang(km),:lang(km) *{letter-spacing:normal!important}
