:root{color:#17211b;font-synthesis:none;text-rendering:optimizelegibility;background:#f7f4ec;font-family:Inter,Noto Sans TC,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input,select{font:inherit}a{color:inherit;text-decoration:none}.app-shell{background:linear-gradient(#ffffffdb,#f7f4ecf0),#f7f4ec;min-height:100vh}.topbar{z-index:10;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:#f7f4ece0;border-bottom:1px solid #2a42341f;justify-content:space-between;align-items:center;gap:16px;padding:10px 18px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand-mark{object-fit:contain;border-radius:8px;width:54px;height:54px}.brand strong,.brand small{display:block}.brand strong{font-size:18px}.brand small{color:#667267;margin-top:2px;font-size:12px}main{max-width:1080px;margin:0 auto;padding:18px}.login-panel,.status-panel{flex-direction:column;justify-content:center;align-items:flex-start;gap:18px;min-height:calc(100vh - 86px);display:flex}.login-panel{text-align:center;align-items:center}.login-logo{color:#fffdf5;letter-spacing:0;background:#23623d;border-radius:8px;padding:14px 16px;font-size:28px;font-weight:900}.login-panel h1{white-space:nowrap;max-width:none;font-size:clamp(34px,4vw,56px)}.login-panel p{margin-left:auto;margin-right:auto}h1,h2,p{margin:0}@media (width<=720px){.login-panel{min-height:calc(100vh - 76px)}.login-panel h1{white-space:normal;font-size:34px}}h1{max-width:760px;font-size:clamp(32px,8vw,56px);line-height:1.08}h2{font-size:20px}p{color:#59675d;max-width:720px;line-height:1.7}.primary-action,.secondary-action,.icon-button{cursor:pointer;border:0;justify-content:center;align-items:center;display:inline-flex}.primary-action{color:#fffdf5;background:#23623d;border-radius:8px;min-height:48px;padding:0 18px;font-weight:800}.secondary-action{color:#23623d;background:#fffdf7;border:1px solid #23623d38;border-radius:8px;min-height:44px;padding:0 16px;font-weight:750}.compact{min-height:38px;padding:0 14px}.icon-button{color:#23623d;background:#fffdf7;border:1px solid #23623d29;border-radius:8px;width:40px;height:40px}.notice{color:#6a5515;background:#fff8df;border:1px solid #efd37a;border-radius:8px;padding:12px 14px}.identity-claim-panel{gap:14px;display:grid}.danger{color:#8d2f24;background:#fff0ee;border-color:#efb2aa}.status-panel{text-align:center;align-items:center}.hero-row{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;justify-content:space-between;align-items:center;gap:20px;padding:22px;display:flex}.employee-quick-panel{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;gap:14px;margin-bottom:14px;padding:16px;display:grid}.employee-quick-panel h1{font-size:28px}.employee-quick-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.employee-quick-card{background:#edf7ef;border:1px solid #23623d2e;border-radius:8px;gap:4px;min-height:76px;padding:10px;display:grid}.employee-quick-card strong{color:#0b4428;font-size:15px}.employee-quick-card span{color:#59675d;font-size:12px;font-weight:700}.anchored{scroll-margin-top:86px}.admin-menu{z-index:8;background:#f7f4ecf0;border:1px solid #2a42341f;border-radius:8px;gap:8px;margin-bottom:14px;padding:8px;display:grid;position:sticky;top:68px}.menu-toggle,.menu-items button{color:#23623d;cursor:pointer;background:#fffdf7;border:1px solid #23623d29;border-radius:8px;align-items:center;gap:8px;min-height:40px;padding:0 12px;font-weight:800;display:inline-flex}.menu-items{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:none}.menu-items.open{display:grid}.menu-items button{justify-content:flex-start}.menu-items button.active{background:#edf7ef;border-color:#23623d5c}.hero-row h1{font-size:clamp(28px,5vw,42px)}.hero-row svg{color:#23623d;flex:none}.home-actions{justify-content:flex-end;margin-bottom:12px;display:flex}.clock-panel{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;gap:14px;margin-bottom:14px;padding:18px;display:grid}.clock-hero{justify-content:space-between;align-items:center;gap:16px;display:flex}.clock-hero h1{font-size:clamp(32px,10vw,52px)}.clock-hero svg{color:#23623d;flex:none}.location-hint{color:#8d5a13;margin-top:6px;font-weight:750}.clock-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.clock-actions .primary-action,.clock-actions .secondary-action{min-height:58px}.clock-metrics{margin:0}.admin{background:#edf7ef}.eyebrow{color:#23623d;letter-spacing:0;margin-bottom:8px;font-size:13px;font-weight:850}.grid{gap:14px;margin-top:14px;display:grid}.two{grid-template-columns:1fr}.tile,.editor-panel,.approval-card,.metrics article{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;padding:18px}.tile p{margin-top:8px}.metrics,.module-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:14px 0 20px;display:grid}.metrics article{grid-template-columns:auto 1fr;align-items:center;gap:4px 10px;display:grid}.metrics svg{color:#23623d;grid-row:span 2}.metrics span{color:#59675d}.module-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:0}.module-card{color:inherit;cursor:pointer;text-align:left;background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;align-content:start;gap:7px;min-height:104px;padding:11px;display:grid}.module-card:hover{background:#edf7ef;border-color:#23623d5c}.module-card svg{color:#23623d}.module-card strong,.person-row strong{display:block}.module-card span,.person-row span,.person-row small{color:#59675d}.module-card p{font-size:12px;line-height:1.45}.module-card strong{font-size:14px}.module-card span{font-size:12px}.section-head{justify-content:space-between;align-items:center;margin:20px 0 12px;display:flex}.approval-list{gap:14px;display:grid}.people-list{gap:10px;margin-bottom:22px;display:grid}.data-list{gap:10px;display:grid}.data-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;grid-template-columns:1fr;align-items:center;gap:8px;padding:12px;display:grid}.data-row strong,.data-row small{display:block}.data-row small{color:#59675d;overflow-wrap:anywhere}.row-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.wide-field{grid-column:1/-1}.error-text{color:#8d2f24!important}.notification-row{align-items:start}.permission-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.template-actions{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.permission-card{background:#fff;border:1px solid #2a42341f;border-radius:8px;align-items:center;gap:10px;padding:12px;display:flex}.permission-card input{min-height:auto}.permission-card strong,.permission-card small{display:block}.permission-card small{color:#59675d;font-size:12px}.person-row{color:inherit;cursor:pointer;text-align:left;background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;justify-content:space-between;align-items:center;gap:14px;width:100%;padding:14px 16px;display:flex}.person-row:hover{border-color:#23623d59}.approval-card{gap:14px;display:grid}.match-panel{color:#5b4a12;background:#fff8df;border:1px solid #efd37a;border-radius:8px;gap:4px;padding:12px;display:grid}.match-panel.matched{color:#1f5f39;background:#eef9f1;border-color:#a9d8b8}.match-panel.warning{background:#fff4e6;border-color:#eab676}.match-panel small{color:inherit}.editor-panel{gap:14px;margin-bottom:14px;display:grid}.inline-head{align-items:start;gap:12px;display:grid}.date-input{min-width:180px}.calendar-panel{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;gap:10px;padding:12px;display:grid}.calendar-toolbar{grid-template-columns:auto 1fr auto;align-items:center;gap:8px;display:grid}.calendar-toolbar strong{color:#17211b;text-align:center;font-size:18px}.calendar-weekdays,.calendar-grid-month{grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.calendar-weekdays span{color:#59675d;text-align:center;padding:4px 2px;font-size:12px;font-weight:800}.calendar-grid-month{border-top:1px solid #2a42341f;border-left:1px solid #2a42341f}.calendar-cell{color:inherit;cursor:pointer;text-align:left;background:#fff;border:1px solid #2a42341f;border-top:0;border-left:0;align-content:start;gap:3px;min-height:86px;padding:6px;display:grid}.calendar-cell:hover{background:#f5fbf5}.calendar-cell.is-outside{color:#8d978f;background:#faf8f2}.calendar-cell.is-selected{box-shadow:inset 0 0 0 2px #23623d}.calendar-cell.has-staffing-warning{background:#fff0ee}.calendar-cell.has-staffing-warning:hover{background:#ffe5e0}.calendar-cell.has-staffing-warning.is-selected{box-shadow:inset 0 0 0 2px #8d2f24,inset 0 0 0 4px #ffffffd1}.calendar-day-number{color:#17211b;font-size:13px;font-weight:850}.calendar-warning-dot{color:#fffdf7;text-overflow:ellipsis;white-space:nowrap;background:#8d2f24;border-radius:5px;padding:3px 5px;font-size:11px;font-weight:850;line-height:1.2;display:block;overflow:hidden}.calendar-chip{color:#fffdf7;text-overflow:ellipsis;white-space:nowrap;border-radius:5px;padding:3px 5px;font-size:12px;font-weight:750;line-height:1.25;display:block;overflow:hidden}.calendar-chip.morning{background:#23623d}.calendar-chip.afternoon{background:#b44d24}.calendar-chip.off{background:#7b5cb8}.compact-calendar,.selected-day-readout{margin-top:14px}.day-editor{gap:12px;display:grid}.schedule-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.schedule-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;align-content:start;gap:8px;min-height:118px;padding:10px;display:grid}.schedule-row strong,.schedule-row small{display:block}.schedule-row small{color:#59675d;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.schedule-row select{width:100%;min-height:38px;padding:0 8px}.staffing-check-panel{border-top:1px solid #2a42341f;gap:12px;margin-top:4px;padding-top:16px;display:grid}.staffing-check-head{align-items:center}.staffing-warning-row{border-color:#8d2f2447}.pager{justify-content:flex-end;align-items:center;gap:10px;display:flex}.pager span{color:#59675d;text-align:center;min-width:52px;font-weight:800}.approval-head{justify-content:space-between;align-items:center;display:flex}.approval-head small{color:#667267;margin-top:4px;display:block}.form-grid{grid-template-columns:1fr;gap:12px;display:grid}label{color:#304137;gap:6px;font-size:13px;font-weight:750;display:grid}input,select{color:#17211b;background:#fff;border:1px solid #2a42342e;border-radius:8px;min-height:42px;padding:0 12px}.check-row{align-items:center;gap:8px;display:flex}.check-row input{min-height:auto}.button-row{flex-wrap:wrap;gap:10px;display:flex}.empty{background:#fffdf7;border:1px dashed #2a423438;border-radius:8px;padding:18px}.leave-panel{gap:14px;margin-top:14px;display:grid}.signature-field{gap:8px;display:grid}.signature-head{justify-content:space-between;align-items:center;display:flex}.signature-canvas{touch-action:none;background:#fff;border:1px solid #2a42342e;border-radius:8px;width:100%;height:180px}.signature-field small,.signature-consent{color:#59675d;font-size:12px}.signature-preview{background:#fff;border:1px solid #2a42341f;border-radius:8px;align-items:start;gap:6px;padding:8px;display:grid}.signature-preview img{object-fit:contain;width:100%;max-width:220px;max-height:86px;display:block}.leave-list{gap:10px;display:grid}.leave-row{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;grid-template-columns:1fr auto;align-items:center;gap:10px;padding:12px;display:grid}.leave-row strong,.leave-row small{display:block}.leave-row small{color:#59675d}.leave-row-actions{grid-column:1/-1;grid-template-columns:auto minmax(160px,1fr) auto;gap:8px;display:grid}.leave-row-actions input{min-width:0}.leave-events{background:#fff;border:1px solid #2a42341a;border-radius:8px;grid-column:1/-1;gap:8px;padding:10px;display:grid}.leave-event{border-left:3px solid #23623d52;gap:2px;padding-left:8px;display:grid}.admin-leave-row{grid-template-columns:1fr auto}.admin-leave-row input,.admin-leave-row .button-row,.admin-leave-row p{grid-column:1/-1}.year-picker{min-width:140px}.month-picker{min-width:160px}.balance-list{gap:10px;display:grid}.balance-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;gap:10px;padding:12px;display:grid}.balance-person strong,.balance-person small{display:block}.balance-person small{color:#59675d}.balance-card{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;grid-template-columns:44px minmax(78px,.8fr) minmax(118px,1fr) auto;align-items:center;gap:8px 10px;min-width:0;padding:8px;display:grid}.balance-card.is-short{background:#fff0ee;border-color:#8d2f2447}.balance-card label{gap:4px;min-width:0}.balance-card input{width:100%;min-height:36px;padding:0 8px}.balance-card strong{font-size:15px}.balance-usage{background:#f7f4ec;border:1px solid #2a42341a;border-radius:8px;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px;min-width:0;padding:7px 8px;display:grid}.balance-usage span{color:#59675d;overflow-wrap:anywhere;white-space:normal;min-width:0;font-size:13px;font-weight:750}.attendance-summary-list,.attendance-detail-list{gap:8px;display:grid}.attendance-summary-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;overflow:hidden}.my-exception-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;gap:10px;padding:12px;display:grid}.my-exception-row strong,.my-exception-row small{display:block}.my-exception-row small{color:#59675d;overflow-wrap:anywhere}.exception-state-list{flex-wrap:wrap;gap:6px;display:flex}.attendance-summary-button{color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:minmax(110px,.8fr) minmax(170px,1fr) minmax(190px,1fr) minmax(190px,1fr);align-items:center;gap:10px;width:100%;padding:12px;display:grid}.attendance-summary-button:hover{background:#edf7ef}.attendance-summary-button strong,.attendance-summary-button small{display:block}.attendance-summary-button small{color:#59675d}.payroll-total-strip{background:#edf7ef;border:1px solid #23623d33;border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.payroll-total-strip span{color:#59675d;font-weight:800}.payroll-total-strip strong{color:#23623d;font-size:18px}.payroll-history-summary{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;display:grid}.payroll-history-summary article{background:#edf7ef;border:1px solid #23623d2e;border-radius:8px;gap:4px;min-width:0;padding:10px;display:grid}.payroll-history-summary span,.payroll-source{color:#59675d;font-size:12px;font-weight:750}.payroll-history-summary strong{color:#23623d;overflow-wrap:anywhere;font-size:16px}.payroll-history-list{gap:10px;display:grid}.payroll-history-row{background:#fff;border:1px solid #2a42341f;border-radius:8px;grid-template-columns:minmax(92px,.35fr) minmax(0,1fr);gap:10px;padding:12px;display:grid}.payroll-person strong,.payroll-person small,.payroll-source{display:block}.payroll-person small{color:#59675d}.payroll-amounts,.payroll-deductions{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;display:grid}.payroll-amounts span,.payroll-deductions span{color:#304137;overflow-wrap:anywhere;background:#f7f4ec;border:1px solid #2a423414;border-radius:8px;min-width:0;padding:7px;font-size:12px;font-weight:750}.payroll-amounts strong{margin-top:2px;font-size:14px;display:block}.payroll-deductions,.payroll-source{grid-column:2}.attendance-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.payroll-stats span{background:#fffdf7}.attendance-stats span{color:#304137;text-align:center;background:#f7f4ec;border:1px solid #2a423414;border-radius:8px;padding:6px 7px;font-size:12px;font-weight:800}.attendance-detail-list{border-top:1px solid #2a42341a;padding:10px}.attendance-detail-row{background:#fffdf7;border:1px solid #2a42341a;border-radius:8px;grid-template-columns:minmax(120px,1fr) repeat(4,minmax(90px,auto));align-items:center;gap:6px;padding:8px;display:grid}.attendance-detail-row span{color:#59675d;font-size:12px}.attendance-exception-box{background:#fff8ed;border:1px solid #8d2f242e;border-radius:8px;grid-column:1/-1;gap:8px;padding:8px;display:grid}.attendance-exception-row{grid-template-columns:minmax(160px,1fr) minmax(260px,2fr);align-items:center;gap:8px;display:grid}.attendance-exception-row small{color:#6a5d4f;margin-top:3px;font-size:12px;font-weight:700;display:block}.exception-actions{grid-template-columns:minmax(160px,1fr) auto auto;align-items:center;gap:8px;display:grid}.exception-actions input{min-width:0}.status-text-ok{font-weight:850;color:#23623d!important}.status-text-warn{font-weight:850;color:#8d2f24!important}.status-pill{color:#304137;white-space:nowrap;background:#eef2ed;border-radius:999px;padding:5px 9px;font-size:12px;font-weight:850}.status-pill.pending{color:#7a5200;background:#fff1bf}.status-pill.approved{color:#23623d;background:#dff3e4}.status-pill.rejected{color:#8d2f24;background:#ffe4df}.status-pill.changed{color:#583a94;background:#e8e2f7}.status-pill.cancelled{color:#665a4a;background:#ece7de}.status-pill.signed{color:#23623d;background:#edf7ef}.placeholder-band{background:#fffdf7;border:1px solid #2a42341f;border-radius:8px;align-items:flex-start;gap:12px;margin-top:14px;padding:18px;display:flex}.placeholder-band svg{color:#23623d;flex:none}button:disabled{cursor:not-allowed;opacity:.55}@media (width>=720px){main{padding:30px}.two,.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.module-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.module-card{gap:12px;min-height:142px;padding:18px}.module-card strong{font-size:16px}.module-card span,.module-card p{font-size:14px}.admin-menu{align-items:center;display:flex}.menu-toggle{display:none}.menu-items,.menu-items.open{flex-wrap:wrap;display:flex}.inline-head{grid-template-columns:1fr auto;align-items:center}.calendar-cell{min-height:124px;padding:8px}.employee-quick-panel{grid-template-columns:minmax(200px,.7fr) minmax(0,1fr);align-items:center}.employee-quick-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.data-row{grid-template-columns:1fr auto}.my-exception-row{grid-template-columns:minmax(210px,1fr) minmax(180px,auto)}.my-exception-row .exception-actions{grid-column:1/-1}.permission-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.admin-leave-row{grid-template-columns:1fr auto minmax(160px,230px) minmax(180px,260px) auto}.admin-leave-row input,.admin-leave-row .button-row,.admin-leave-row p{grid-column:auto}.balance-row{grid-template-columns:minmax(132px,.55fr) minmax(0,1fr) minmax(0,1fr)}.balance-card{grid-template-columns:44px minmax(72px,.7fr) minmax(112px,1fr) auto}}@media (width<=520px){main{padding:12px}.calendar-panel{padding:8px}.calendar-toolbar{grid-template-columns:minmax(72px,1fr) minmax(94px,1.1fr) minmax(72px,1fr)}.calendar-toolbar .secondary-action{min-height:34px;padding:0 8px}.calendar-toolbar strong{font-size:16px}.calendar-cell{gap:2px;min-height:70px;padding:4px}.calendar-day-number{font-size:12px}.calendar-chip{padding:2px 3px;font-size:10px}.calendar-warning-dot{padding:2px 3px;font-size:9px}.schedule-grid{gap:8px}.schedule-row{min-height:108px;padding:8px}.schedule-row strong{font-size:14px}.schedule-row small{font-size:11px}.schedule-row select{font-size:14px}.balance-card{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:6px;padding:8px}.balance-card label,.balance-usage,.balance-card button{grid-column:auto}.balance-card strong{font-size:14px}.balance-card label{font-size:12px}.balance-card input,.balance-card .secondary-action{min-height:34px}.balance-usage{grid-template-columns:1fr;gap:4px;padding:6px}.balance-usage span{font-size:12px;line-height:1.2}.balance-row{grid-template-columns:repeat(2,minmax(0,1fr))}.balance-person{grid-column:1/-1}.attendance-summary-button{grid-template-columns:1fr}.attendance-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.attendance-detail-row{grid-template-columns:1fr 1fr;align-items:start}.attendance-detail-row strong,.attendance-detail-row .status-text-ok,.attendance-detail-row .status-text-warn{grid-column:1/-1}.attendance-exception-row,.exception-actions,.template-actions,.leave-row-actions{grid-template-columns:1fr}.payroll-history-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.payroll-history-row{grid-template-columns:1fr}.payroll-amounts,.payroll-deductions{grid-template-columns:repeat(2,minmax(0,1fr))}.payroll-deductions,.payroll-source{grid-column:auto}.signature-canvas{height:150px}.brand-mark{width:48px;height:48px}.brand strong{font-size:16px}}
