@font-face{font-family:Inter;src:url("/assets/fonts/inter/InterVariable.woff2") format("woff2");font-style:normal;font-weight:100 900;font-display:swap}
@font-face{font-family:Inter;src:url("/assets/fonts/inter/InterVariable-Italic.woff2") format("woff2");font-style:italic;font-weight:100 900;font-display:swap}
@font-face{font-family:"Source Han Sans TW";src:url("/assets/fonts/source-han-sans/SourceHanSansTW-VF.woff2") format("woff2");font-style:normal;font-weight:250 900;font-display:swap}
@font-face{font-family:"CFW Tabular Print";src:url("/assets/fonts/inter/CfwTabularPrint.woff2") format("woff2");font-style:normal;font-weight:100 900;font-display:swap}
@font-face{font-family:"CFW Tabular Print";src:url("/assets/fonts/inter/CfwTabularPrint-Italic.woff2") format("woff2");font-style:italic;font-weight:100 900;font-display:swap}
:root{--app-font:Inter,"Source Han Sans TW","Microsoft JhengHei",sans-serif;font-family:var(--app-font);color:#263544;background:#f4f6f8;font-size:18px;line-height:1.6;--primary:#1976d2;--border:#d4dde5}*{box-sizing:border-box}body{margin:0}a{color:#135da3}button,input{font:inherit}button,.button{border:0;border-radius:7px;background:var(--primary);color:white;padding:12px 22px;min-height:48px;cursor:pointer;text-decoration:none;display:inline-block;text-align:center}button:disabled{opacity:.65;cursor:wait}button.secondary{background:white;border:1px solid var(--border);color:#263544}button:hover,.button:hover{filter:brightness(.94)}:focus-visible{outline:3px solid #eb9b0e;outline-offset:3px}.hidden{display:none!important}.skip-link{position:absolute;top:-100px;background:white;padding:12px;z-index:20}.skip-link:focus{top:0}.topbar{background:#f0f0f0;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;padding:14px 30px;gap:15px;box-shadow:0 2px 6px #1b395414}.brand{display:flex;align-items:center;gap:14px;text-decoration:none;color:#21384c;font-weight:700;font-size:24px}.brand img{object-fit:contain}.header-actions{display:flex;align-items:center;gap:18px}main{max-width:1280px;margin:auto;padding:32px}.login-layout{display:flex;justify-content:center;align-items:center;flex:1;min-height:0}.login-identity{text-align:center;margin-bottom:28px}.login-identity img{display:block;margin:0 auto;object-fit:contain}.login-identity h1{font-size:32px;margin:16px 0 0}.card{background:white;border:1px solid var(--border);border-radius:12px;padding:28px;box-shadow:0 3px 15px #19334808}h1{font-size:30px;line-height:1.4;margin:0 0 16px}h2{font-size:24px;margin:0 0 12px}.login-card{max-width:480px;width:100%;margin:0 auto}.login-card label{display:block;font-weight:700;margin-top:18px}.login-card input:not([type=checkbox]){width:100%;border:1px solid #a6b5c3;border-radius:6px;padding:12px;background:white;color:#223548;font-size:20px;min-height:52px}.checkbox{display:flex!important;align-items:center;gap:10px;font-weight:400!important}.checkbox input{width:20px;height:20px}.login-card button{width:100%;margin-top:24px}.muted{color:#5b6d7e}.error{color:#a12626;min-height:1.6em;margin-bottom:0}.notice{border:1px solid #e5c17e;background:#fff7e7;padding:16px 20px;border-radius:8px;margin-bottom:24px}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:26px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px}dl{margin:0}dt{color:#617283;margin-top:14px}dd{margin:2px 0 0;font-size:20px}.table-wrap{overflow:auto;padding:0}table{border-collapse:collapse;width:100%;text-align:left;font-family:var(--app-font)}th,td{padding:14px 18px;border-bottom:1px solid #e1e7ed;vertical-align:middle}th{background:#edf3f9;white-space:nowrap}.state-panel{text-align:center;max-width:660px;margin:60px auto}.status-code{font-size:64px;color:var(--primary);font-weight:700;margin:0}@media(max-width:720px){.topbar{padding:12px 16px}.brand{font-size:20px;gap:8px}.brand img{width:42px;height:42px}.header-actions{gap:8px}main{padding:22px 16px}.login-identity{margin-bottom:24px}.login-identity img{width:76px;height:76px}.login-identity h1{font-size:26px;margin-top:12px}.card{padding:22px}.table-wrap{padding:0}.page-heading{align-items:stretch;flex-direction:column}.cards{grid-template-columns:1fr}h1{font-size:27px}}

/* Center the login card within the actual space below the header.
   A short viewport grows with the content instead of clipping the form. */
body:has(#login-panel:not(.hidden)){display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
body:has(#login-panel:not(.hidden)) .topbar{flex-shrink:0}
body:has(#login-panel:not(.hidden)) main{display:flex;flex-direction:column;flex:1;width:100%;margin:0 auto}

.logout-button{font-family:var(--app-font);font-size:18px;font-weight:600;line-height:1.4;padding:.65rem 1rem;min-height:48px;border-radius:8px;white-space:nowrap}.logout-button:hover{background:#edf4fb;border-color:var(--primary)}.password-card{max-width:580px;margin:0 auto}.password-card label{display:block;font-weight:600;margin-top:18px}.password-card input:not([type=checkbox]){display:block;width:100%;font-size:20px;padding:12px;border:1px solid #a6b5c3;border-radius:7px;min-height:52px}.password-card button{margin-top:12px}dd{overflow-wrap:anywhere}
.feature-links{margin-top:24px}.filter-form{display:flex;align-items:end;gap:16px;flex-wrap:wrap;margin-bottom:18px}.filter-form label{flex:1;min-width:180px}.filter-form input,.business-form input,.business-form select,.business-form textarea{display:block;width:100%;font:inherit;font-size:20px;border:1px solid #a6b5c3;border-radius:6px;padding:12px;min-height:52px;background:white;color:#263544}.business-actions{display:flex;gap:12px;flex-wrap:wrap;margin:18px 0}.row-actions{min-width:160px}.row-actions button{margin:4px}.edit-dialog{width:min(620px,calc(100% - 24px));max-height:80dvh;overflow:auto;padding:28px;border:1px solid var(--border);border-radius:12px;color:inherit}.edit-dialog::backdrop{background:#15273880}.business-form label{display:block;margin:16px 0;font-weight:600}.business-form input[readonly]{background:#f0f3f6}.data-table td{overflow-wrap:anywhere}.data-table td:last-child{font-family:inherit}@media(max-width:720px){.data-table thead{display:none}.data-table,.data-table tbody,.data-table tr,.data-table td{display:block;width:100%}.data-table tr{padding:14px 0;border-bottom:3px solid #d4dde5}.data-table td{border:0;padding:5px 18px}.data-table td::before{content:attr(data-label);display:block;font-weight:600;color:#617283}.edit-dialog{padding:20px}.filter-form button{width:100%}}
.filter-form select{display:block;width:100%;font:inherit;font-size:20px;border:1px solid #a6b5c3;border-radius:6px;padding:12px;min-height:52px;background:white;color:#263544}#business-panel h2{margin-top:24px}

.business-form input[type=checkbox]{display:inline-block;width:20px;min-height:20px;height:20px;padding:0;flex-shrink:0}

/* Original layout: 260px left navigation, independently scrolling content. */
.nav-group summary{cursor:pointer;padding:10px 18px;font-size:18px;min-height:48px;border-radius:6px}.nav-group summary:hover{background:#ffffff1a}.sidebar nav .nav-group a{padding-left:38px}.sidebar{touch-action:pan-y}#menu-edge{display:none;pointer-events:none}@media(max-width:959px){body:has(#sidebar:not(.hidden):not(.open)) #menu-edge{display:block;position:fixed;left:0;top:80px;bottom:0;width:48px;z-index:23;touch-action:pan-y}}@media(prefers-reduced-motion:reduce){.sidebar{transition:none!important}}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.topbar{position:sticky;top:0;z-index:30;min-height:80px}.topbar .brand{margin-right:auto}.menu-toggle{font-size:24px;padding:8px 14px;line-height:1}
.sidebar{position:fixed;left:0;top:80px;bottom:0;width:260px;overflow-y:auto;background:#193b67;color:white;z-index:25;transform:translateX(-100%);transition:transform .16s ease;padding:22px 12px}
.sidebar.open{transform:translateX(0)}.sidebar-brand{display:flex;align-items:center;flex-direction:column;gap:12px;padding:8px 4px 24px;font-size:22px}.sidebar nav a{display:block;padding:10px 18px;color:white;text-decoration:none;border-radius:6px;min-height:48px;font-size:18px}.sidebar nav a:hover{background:#ffffff1a}.sidebar nav a[aria-current=page]{background:#1976d2;font-weight:700}.menu-backdrop{position:fixed;inset:80px 0 0;border-radius:0;background:#10233866;z-index:24;padding:0;display:none}
body:has(#sidebar:not(.hidden)) main{max-width:none;min-width:0;width:auto;margin:0;padding:24px;overflow-wrap:anywhere}body:has(#sidebar.open:not(.hidden)) main{margin-left:260px}
@media(max-width:959px){.sidebar{width:min(260px,85vw)}.menu-backdrop:not(.hidden){display:block}body:has(#sidebar.open:not(.hidden)) main{margin-left:0}body:has(#sidebar:not(.hidden)) main{padding:18px 12px}.topbar{padding:12px;gap:8px}.brand{font-size:18px}.brand img{width:36px;height:36px}.menu-toggle{min-width:42px;padding:8px}.logout-button{padding:10px}.sidebar-brand img{width:90px;height:90px}}
@media print{.sidebar,.menu-toggle,.menu-backdrop,.header-actions{display:none!important}body:has(#sidebar.open) main{margin-left:0!important}}

.filter-field{flex:1;min-width:180px}.multi-select{position:relative;min-width:0;width:100%;margin-top:4px}.multi-select summary{list-style:none;background:white;border:1px solid #a6b5c3;border-radius:6px;font-size:20px;padding:12px 36px 12px 12px;min-height:56px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.multi-select summary::after{content:'⌄';position:absolute;right:12px;top:12px}.multi-select[open] summary::after{content:'⌃'}.multi-select-panel{position:absolute;top:100%;left:0;width:max(100%,290px);max-width:calc(100vw - 32px);z-index:20;border:1px solid #a6b5c3;border-radius:8px;background:white;box-shadow:0 8px 24px #17345033;padding:12px}.multi-select-list{max-height:280px;overflow:auto}.multi-select-option{display:flex!important;align-items:center;gap:10px;padding:8px 4px;min-height:44px;cursor:pointer;min-width:0!important}.multi-select-option[hidden]{display:none!important}.multi-select-option input{width:20px!important;min-height:20px!important;height:20px;padding:0!important;flex-shrink:0}.multi-select-actions{display:flex;gap:8px;margin:10px 0}.multi-select-actions button{font-size:18px;padding:8px;min-height:44px}.multi-select-panel p{margin:8px 0 0}.multi-select-panel input[type=search]{width:100%}.filter-form .multi-select-option{flex:none}.multi-select-panel label{font-weight:400}
@media(max-width:959px){.multi-select-panel{width:100%;min-width:0}.multi-select-list{max-height:35dvh}.multi-select-actions button{width:auto;flex:1}}

.table-pagination{display:flex;justify-content:flex-end;align-items:center;gap:8px;flex-wrap:wrap;padding:12px 16px;border-top:1px solid var(--border);background:white;font-size:18px}.table-pagination label{display:flex;align-items:center;gap:8px}.table-pagination select{font:inherit;border:1px solid var(--border);border-radius:6px;padding:8px;min-height:44px}.table-pagination button{min-width:44px;min-height:44px;padding:6px 12px}.data-table tr[hidden],.table-pagination[hidden]{display:none!important}
@media(min-width:960px){.data-table th,.data-table td{padding:10px 14px}.table-wrap{max-width:100%}}
@media(max-width:959px){.data-table thead{display:none}.data-table,.data-table tbody,.data-table tr,.data-table td{display:block;width:100%}.data-table tr{padding:14px 0;margin-bottom:16px;border:1px solid var(--border);border-radius:12px;background:white;box-shadow:0 3px 15px #19334808}.data-table td{border:0;padding:5px 18px}.data-table td::before{content:attr(data-label);display:block;font-weight:600;color:#617283}.table-wrap:has(.data-table){overflow:visible;background:transparent;border:0;box-shadow:none}.data-table tr{content-visibility:auto;contain-intrinsic-size:auto 300px}.table-pagination{display:none!important}}
/* Shared field grid: labels and controls align, at most four fields per row. */
.filter-form{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:18px 16px}
.filter-form>label,.filter-form>.filter-field{display:flex;flex-direction:column;justify-content:flex-end;min-width:0;margin:0;line-height:29px;font-weight:400;gap:6px}
.filter-form>.filter-field>span{display:block;min-height:29px}
.filter-form input:not([type=checkbox]),.filter-form select,.filter-form .multi-select summary{height:56px;min-height:56px;margin:0;padding:10px 12px;line-height:34px;font-size:20px}
.filter-form .multi-select{margin:0}.filter-form .multi-select summary{padding-right:36px}.filter-form>button{height:56px}
.filter-form .multi-select-option{line-height:1.6}.filter-form .multi-select-panel{line-height:1.6}
.sidebar{top:0;background:#193b67 url('/assets/sidebar-background.jpg') center/cover no-repeat;padding-top:34px;z-index:35}
.topbar{justify-content:flex-end}.menu-toggle{position:fixed;left:16px;top:12px;z-index:40}
body:has(#sidebar.open:not(.hidden)) .menu-toggle{left:274px}
.menu-backdrop{inset:0;z-index:34}
@media(max-width:1199px){.filter-form{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:599px){.filter-form{grid-template-columns:minmax(0,1fr)}}
@media(max-width:959px){body:has(#sidebar.open:not(.hidden)) .menu-toggle{left:min(274px,calc(85vw + 8px))}body:has(#sidebar:not(.hidden):not(.open)) #menu-edge{top:0}.sidebar{padding-top:24px}}

.holiday-report .data-table td{white-space:pre-line}.holiday-report h2{font-size:24px}
@media print{.no-print,.topbar,#notice,#menu-edge{display:none!important}main{padding:0!important}.holiday-report .table-wrap{overflow:visible}.holiday-report .data-table{display:table;font-size:12px}.holiday-report .data-table thead{display:table-header-group}.holiday-report .data-table tbody{display:table-row-group}.holiday-report .data-table tr{display:table-row;content-visibility:visible;box-shadow:none;break-inside:avoid}.holiday-report .data-table th,.holiday-report .data-table td{display:table-cell;width:auto;padding:3px;border:1px solid #888}.holiday-report .data-table td::before{display:none}@page{size:A4 landscape;margin:7mm}}

.attendance-flag { background:#e5e7eb; color:#162b42; }
.attendance-person { margin-block:20px; }
.attendance-person td { white-space:pre-line; }
.attendance-dialog { width:min(600px,calc(100vw - 32px)); max-height:80dvh; overflow:auto; border:1px solid #ccd6e2; border-radius:12px; padding:24px; color:inherit; background:#fff; }
.attendance-dialog::backdrop { background:#14293d88; }
.attendance-dialog form { display:flex; flex-direction:column; gap:20px; }
.attendance-dialog label { display:flex; flex-direction:column; gap:6px; }
.attendance-preview .business-actions label { display:flex; align-items:center; gap:8px; }
@media print {
 .attendance-person { break-after:page; border:0; box-shadow:none; margin:0; padding:0; }
 .attendance-person:last-child { break-after:auto; }
 .attendance-preview .table-wrap { overflow:visible; padding:0; border:0; }
 .attendance-preview table { display:table; width:100%; font-size:12px; }
 .attendance-preview thead { display:table-header-group; }
 .attendance-preview tbody { display:table-row-group; }
 .attendance-preview tr { display:table-row; break-inside:avoid; }
 .attendance-preview th,.attendance-preview td { display:table-cell; padding:3px; font-size:12px; }
 .attendance-preview td::before { display:none; }
 .attendance-preview h2 { font-size:18px; }
 .attendance-preview p { font-size:12px; }
}

.public-punch .topbar { display:none; }
.punch-card { max-width:480px; margin:0 auto 24px; text-align:center; }
.punch-card h1 { font-size:30px; margin:12px 0; }
.punch-site { font-size:26px; font-weight:700; }
.punch-clock { font-size:24px; font-variant-numeric:tabular-nums; }
.punch-distance { font-size:22px; }
.punch-buttons { display:flex; flex-direction:column; gap:16px; margin:20px auto; max-width:280px; }
.punch-buttons button { font-size:30px; min-height:64px; }
.punch-buttons .punch-start { background:red; border-color:red; color:#fff; }
.punch-buttons .punch-end { background:blue; border-color:blue; color:#fff; }
.punch-identity { display:flex; flex-direction:column; gap:16px; text-align:left; }
.punch-identity label { display:flex; flex-direction:column; gap:6px; }
.punch-history { max-width:900px; margin-inline:auto; }
.punch-recent{width:100%;max-width:600px;margin:15px auto;border-collapse:collapse;table-layout:fixed;font-size:20px;text-align:center;color:black}
.punch-recent th,.punch-recent td{padding:10px 2px;background:transparent;text-align:center;border:0;overflow-wrap:anywhere}
.punch-recent td{border-top:1px solid black;border-bottom:1px solid black}
.punch-recent th:first-child,.punch-recent td:first-child{color:red;width:42%}
.punch-recent th:last-child,.punch-recent td:last-child{color:blue;width:42%}

.punch-identity input,.attendance-dialog input,.attendance-dialog select { box-sizing:border-box; width:100%; min-height:56px; border:1px solid #9baec7; border-radius:6px; padding:10px 12px; font:inherit; background:#fff; color:inherit; }
.leave-detail{display:grid;grid-template-columns:minmax(7em,1fr) minmax(0,2fr);gap:.65rem 1rem;overflow-wrap:anywhere}
.leave-detail dt{font-weight:600}.leave-detail dd{margin:0;white-space:pre-wrap}
@media(max-width:480px){.leave-detail{grid-template-columns:1fr;gap:.3rem}.leave-detail dd{margin-bottom:.7rem}}
.leave-print{display:none}
@media print{
 @page leave-sheet{size:A4 portrait;margin:8mm}
 body.printing-leave #business-panel>:not(.leave-print){display:none!important}
 body.printing-leave main{margin:0!important;padding:0!important;max-width:none!important}
 .leave-print{display:grid;grid-template-rows:repeat(4,minmax(0,1fr));height:280mm;page:leave-sheet;color:#000;background:#fff;break-after:page}
 .leave-print:last-child{break-after:auto}
 .leave-print-internal{grid-template-rows:repeat(3,minmax(0,1fr))}
 .leave-print-copy{break-inside:avoid;margin:0;display:flex;align-items:center;min-height:0}
 .leave-print table{width:100%;table-layout:fixed;border-collapse:collapse;font-size:10.4pt}
 .leave-print th,.leave-print td{border:.65px solid #000;padding:1.5mm .6mm;overflow-wrap:anywhere;white-space:pre-wrap;line-height:1.3;background:#fff;color:#000}
 body.printing-leave{background:#fff}
 .leave-print-title th:first-child{font-size:18.2pt}.leave-print-title th{font-size:11pt}
}
.leave-filter>label{flex-direction:row;align-items:center;justify-content:flex-start;gap:12px}
.leave-filter>label>span{flex:0 0 5em;line-height:1.4}
.leave-filter>label>input:not([type=checkbox]),.leave-filter>label>select{flex:1;min-width:0;width:0}
.leave-edit-fields{grid-template-columns:minmax(0,1fr)!important}
.leave-edit-fields textarea{box-sizing:border-box;width:100%;height:56px;min-height:56px;border:1px solid #a6b5c3;border-radius:6px;padding:10px 12px;font:inherit;font-size:20px;background:white;color:inherit;resize:vertical}
.leave-count{font-size:24px;white-space:nowrap}.leave-count strong{font-weight:700}.leave-count .pending{color:red}
.data-table td.leave-manager{background:#DFFFDF}.data-table td.leave-supervisor{background:#D2E9FF}.data-table td.leave-hr{background:#FFF8D7}.data-table td.leave-highlight{background:#FFD2D2}
.leave-row-actions{display:flex;gap:8px;flex-wrap:wrap;min-width:240px;margin:0}

.leave-application-fields,.leave-application-balances{max-width:1100px;margin-inline:auto}
.leave-application-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.leave-application-fields>label{display:flex;align-items:center;gap:12px;min-width:0}
.leave-application-fields>label>span{flex:0 0 6em}
.leave-application-fields>label>input,.leave-application-fields>label>select{flex:1;min-width:0;height:56px;box-sizing:border-box}
.leave-application-fields>label>input[type=checkbox]{flex:0 0 24px;height:24px}
@media(max-width:650px){.leave-application-fields{grid-template-columns:minmax(0,1fr)}.leave-application-fields>label{gap:8px}.leave-application-fields>label>span{flex-basis:5em}}

.receipt-sign-card{max-width:760px;margin:0 auto}.receipt-sign-card p{font-size:24px;line-height:1.65}.signature-canvas{display:block;max-width:100%;width:600px;aspect-ratio:600/250;border:1px solid #7892ad;touch-action:none;background:white}.signature-preview{max-width:100%;height:auto}
.schedule-toolbar{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}.schedule-grid-wrap{overflow:auto;max-width:100%;border:1px solid #a4b6c9}.schedule-grid{border-collapse:collapse;width:max-content;min-width:100%;font-size:18px}.schedule-grid th,.schedule-grid td{border:1px solid #a4b6c9;text-align:center;white-space:pre-line;min-width:44px;padding:8px 5px}.schedule-grid th{position:sticky;top:0;background:#e5edf7;z-index:1}.schedule-grid td:first-child{min-width:150px}.schedule-grid td:nth-child(2){min-width:105px}.schedule-grid td span,.schedule-grid td strong{display:block}.schedule-grid [data-cell]{cursor:pointer;user-select:none}.schedule-grid .selected{background:#bbdefb!important;outline:2px solid #1976d2;outline-offset:-2px}.schedule-dialog{width:min(1100px,95vw);max-width:95vw;max-height:80dvh;overflow:auto}.schedule-dialog label{display:flex;align-items:center;gap:12px;margin:10px 0}.schedule-dialog label>input,.schedule-dialog label>select,.schedule-dialog label>textarea{flex:1;min-width:0}.schedule-dialog button{margin:5px}.schedule-person{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:12px;border:1px solid #b7c7da;margin:10px 0}.schedule-person label{flex:1 1 240px}.schedule-person .error{flex-basis:100%}.schedules-page section p{white-space:pre-line}
@media(max-width:700px){.schedule-person{display:block}.schedule-dialog{padding:14px}.schedule-dialog label{flex-wrap:wrap}.schedule-toolbar button{flex:1 1 130px}}
.schedule-warning{background:#ffcccc}
.schedules-page .filter-form>label{display:flex;align-items:center;gap:10px}.schedules-page .filter-form>label>input,.schedules-page .filter-form>label>select{flex:1;min-width:0}.schedules-page .filter-form>label>input[type=checkbox]{flex:0 0 24px;width:24px;height:24px}.schedule-leave-marker{display:block;padding:0;min-height:24px;font-size:22px;color:red;background:transparent;border:0;margin:auto}
.document-form{max-width:900px;margin-inline:auto}.document-form>label{display:flex;align-items:center;gap:14px;margin:14px 0}.document-form>label>span{flex:0 0 5em}.document-form>label>input,.document-form>label>select{flex:1;min-width:0}.document-file{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 0;border-bottom:1px solid #d1dce8}.document-file>span{overflow-wrap:anywhere;flex:1 1 180px}@media(max-width:500px){.document-form>label{gap:8px}.document-form input[type=file]{max-width:100%}}
.resume-consent{max-width:900px;margin:auto;font-size:18px;line-height:1.8}.resume-consent li{margin:18px 0}.resume-consent ol{padding-left:1.6em;list-style-type:cjk-ideographic}.resume-form{max-width:900px;margin:auto}.resume-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.resume-fields>label{display:flex;flex-direction:column;gap:8px;min-width:0}.resume-fields>label[hidden]{display:none}.resume-fields>label>span,.resume-form>label>span{font-size:24px}.resume-fields>label>input,.resume-fields>label>select,.resume-fields>label>.multi-select{width:100%;min-width:0}.resume-form>label{display:flex;flex-wrap:wrap;gap:12px;margin:24px 0}.resume-form input[type=file]{max-width:100%}.resume-photo{width:min(225px,100%);height:auto;aspect-ratio:3/4;max-width:240px;max-height:none;object-fit:cover;object-position:center}.resume-confirm{max-width:1000px}@media(max-width:760px){.resume-fields{grid-template-columns:minmax(0,1fr)}.resume-form{padding:16px}.resume-confirm .leave-detail{grid-template-columns:1fr}.resume-confirm .leave-detail dd{margin:0 0 12px}}
.document-counts{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:1rem 0;font-size:20px}
.resume-photo-controls{display:flex;flex-direction:column;align-items:flex-start;gap:12px;margin:12px 0 20px}.resume-photo-controls>.resume-photo{display:block;max-width:min(240px,100%)}.resume-photo-controls>.resume-photo[hidden]{display:none}
.resume-confirm .resume-preview-scroll{margin-bottom:16px}.resume-confirm .resume-sheet{width:1216px}
.resume-camera video{display:block;width:100%;max-height:60vh;object-fit:contain;background:#111}
/* Shared controls: every business form uses the same input and file-button treatment. */
#business-panel :is(input:not([type=checkbox]):not([type=radio]),select,textarea){font:inherit;font-size:20px;color:inherit;background:#fff;border:1px solid #a6b5c3;border-radius:6px;padding:10px 12px;min-height:56px;min-width:0;max-width:100%;box-sizing:border-box}
#business-panel input[type=file]{padding:0;line-height:54px;width:100%;overflow:hidden}
#business-panel input[type=file]::file-selector-button{font:inherit;color:white;background:#1976d2;border:0;padding:12px 16px;min-height:54px;margin-right:12px;cursor:pointer}
#business-panel :is(.filter-form,.business-form,.document-form,.document-edit-form,.resume-fields,.leave-application-fields,.attendance-dialog form,.punch-identity)>:is(label,.filter-field){display:grid;grid-template-columns:minmax(5em,7em) minmax(0,1fr);align-items:center;gap:10px;min-width:0;flex-direction:row;margin-block:8px;font-weight:400}
#business-panel :is(.filter-form,.business-form,.document-form,.document-edit-form,.resume-fields,.leave-application-fields)>:is(label,.filter-field)>:is(input,select,textarea,.multi-select){width:100%;min-width:0;margin:0}
#business-panel :is(.filter-form,.business-form,.document-form,.document-edit-form,.resume-fields,.leave-application-fields)>label>input:is([type=checkbox],[type=radio]){width:22px;height:22px;min-height:22px}
#business-panel .multi-select-option{display:flex!important;grid-template-columns:none!important;margin:0!important}
#business-panel .filter-form{align-items:center}
#business-panel .resume-fields>label[hidden]{display:none}
#business-panel p[role=status]:empty,#business-panel p.error:empty{display:none}
.job-totals{margin:20px 0}.job-totals h2{margin-top:0!important}
.document-counts .error{color:#f00}
button[data-tone=success]{background:#00a344;color:#fff;border-color:#00a344}
button[data-tone=danger]{background:#f44336;color:#fff;border-color:#f44336}
button[data-tone=warning]{background:#ff9800;color:#172b3c;border-color:#ff9800}
button[data-tone=neutral]{background:#fff;color:#263544;border-color:#bac9d6}
.punch-card{width:100%;max-width:480px}.punch-history{margin-top:24px;width:100%}
@media(max-width:1599px){#business-panel .filter-form{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:800px){#business-panel .filter-form{grid-template-columns:minmax(0,1fr)}}
@media(max-width:959px){.table-pagination{display:flex!important}.table-pagination>label,.table-pagination>button{display:none!important}}
@media(max-width:500px){#business-panel :is(.filter-form,.business-form,.document-form,.document-edit-form,.resume-fields,.leave-application-fields,.attendance-dialog form,.punch-identity)>:is(label,.filter-field){grid-template-columns:5em minmax(0,1fr);gap:8px}#business-panel .resume-fields>label>span{font-size:24px}#business-panel .filter-form>button{width:auto}.punch-card{padding:18px 12px}}
.resume-dialog{width:min(1320px,calc(100vw - 32px));max-width:calc(100vw - 32px)}
.resume-dialog .resume-preview-scroll{overflow-x:hidden;min-width:0}
.schedule-grid{width:100%;min-width:1250px;table-layout:fixed}
.schedule-grid caption{caption-side:top;background:#f3f3f3;border:1px solid #999;padding:6px;text-align:center;font-size:24px}.schedule-grid caption small{display:block;font-size:18px;font-weight:400}
.schedule-grid .schedule-name{width:132px}.schedule-grid .schedule-number{width:120px}.schedule-grid .schedule-day{width:32px}.schedule-grid .schedule-total{width:42px}.schedule-grid .schedule-seniority{width:120px}.schedule-grid .schedule-notes{width:145px}
.schedule-grid th,.schedule-grid td,.schedule-grid td:first-child,.schedule-grid td:nth-child(2){min-width:0;padding:5px 2px;border-color:#999;overflow-wrap:anywhere;white-space:pre-line;font-weight:400}
.schedule-grid th{position:static;background:#f3f3f3;font-weight:600}.schedule-grid th.schedule-vertical{writing-mode:vertical-rl;text-orientation:upright;letter-spacing:3px}
.schedule-grid tbody tr:nth-child(even){background:#fafafa}.schedule-grid td button.secondary{background:transparent;color:inherit;border:0;border-radius:0;padding:2px;min-width:0;min-height:30px;font-size:inherit;white-space:normal;overflow-wrap:anywhere}.schedule-grid td button.secondary:hover{background:#e3efff}
.schedule-explanation{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.7fr);gap:36px;margin:16px 0}.schedule-explanation>div{border:1px solid #999;min-width:0}.schedule-explanation h3{margin:0;padding:4px;text-align:center;background:#f3f3f3;border-bottom:1px solid #999;font-size:22px}.schedule-explanation table{width:100%;border-collapse:collapse}.schedule-explanation th,.schedule-explanation td{border:1px solid #aaa;padding:4px;text-align:center}.schedule-explanation p{white-space:pre-line;margin:8px;padding:4px;line-height:1.65}
@media(max-width:959px){.schedule-explanation{grid-template-columns:1fr;gap:16px}}
#business-panel input[type=file]{line-height:normal;height:56px}#business-panel input[type=file]::file-selector-button{line-height:1.3;vertical-align:middle;margin-top:0;margin-bottom:0}
#business-panel .resume-form>label{display:grid;grid-template-columns:7em minmax(0,1fr);align-items:center;gap:10px}#business-panel .resume-form>label>span{font-size:24px}
@media(max-width:500px){#business-panel .resume-form>label{grid-template-columns:5em minmax(0,1fr)}}
#business-panel input[type=file]{padding:0!important}
button[data-tone=primary]{background:#2196f3;border-color:#2196f3;color:#fff}button[data-tone=success]{background:#00c853;border-color:#00c853}
#business-panel input[type=file]::file-selector-button{background:#2196f3}
.schedule-grid .schedule-day{width:28px}
.password-card{display:grid;grid-template-columns:7em minmax(0,1fr);align-items:center;gap:12px}.password-card label{margin:0}.password-card p,.password-card button,.password-card .checkbox{grid-column:1/-1}.password-card input:not([type=checkbox]){min-width:0}
@media(max-width:500px){.password-card{grid-template-columns:5em minmax(0,1fr)}}
#business-panel label:not([hidden]):not(.multi-select-option):has(> :is(input:not([type=checkbox]):not([type=radio]),select,textarea,.multi-select)){display:grid;grid-template-columns:minmax(5em,7em) minmax(0,1fr);align-items:center;gap:10px;min-width:0;margin-block:8px}
#business-panel label>:is(input,select,textarea,.multi-select){min-width:0}
@media(max-width:500px){#business-panel label:not([hidden]):not(.multi-select-option):has(> :is(input:not([type=checkbox]):not([type=radio]),select,textarea,.multi-select)){grid-template-columns:5em minmax(0,1fr);gap:8px}}

/* Keep action controls legible and in one row, including mobile cards. */
.data-table td[data-label="操作"]{white-space:nowrap;overflow-wrap:normal;word-break:normal}
.data-table td[data-label="操作"] :is(button,a){white-space:nowrap;word-break:normal;overflow-wrap:normal;flex-shrink:0}
.data-table td[data-label="操作"]>div,.data-table .leave-row-actions{display:flex;flex-wrap:nowrap;gap:8px;width:max-content;margin:0}
@media(max-width:800px){.data-table td[data-label="操作"]{overflow-x:auto;max-width:100%;min-width:0}.data-table td[data-label="操作"]>div{max-width:none}}
.test-role{display:flex;align-items:center;gap:8px;margin:0 auto 0 0;white-space:nowrap;font-size:18px}
.test-role select{font:inherit;min-height:48px;max-width:200px;border:1px solid var(--border);border-radius:7px;background:white;padding:6px 10px}
@media(max-width:500px){.test-role{font-size:16px;gap:4px}.test-role select{max-width:110px;padding:6px 3px}}
@media print{.test-role{display:none!important}}
#business-panel[aria-label="請假整合"]{margin-top:0;padding-top:0}
.leave-application-host,.leave-application-host>.card{margin-top:0}
.leave-application-host{container-type:inline-size}
#feature-links a[data-pending-route]{display:flex;align-items:center;justify-content:space-between;gap:8px}
#feature-links .nav-pending{color:#ff7575;font-size:24px;font-weight:700;line-height:1;flex-shrink:0}
#feature-links .nav-pending[hidden]{display:none}
#business-panel[aria-label="請假整合"]>p:empty{display:none;margin:0;min-height:0}
.test-role{margin-left:60px}
body:has(#sidebar.open:not(.hidden)) .test-role{margin-left:310px}
@media(max-width:959px){.test-role,body:has(#sidebar.open:not(.hidden)) .test-role{margin-left:56px}body:has(#sidebar.open:not(.hidden)) .test-role{visibility:hidden}}
@media(max-width:500px){.test-role>span{display:none}.test-role select{max-width:150px}}

/* Filter rows: avoid adding label margins on top of the grid row gap. */
#business-panel .filter-form{row-gap:8px!important}
#business-panel .filter-form>:is(label,.filter-field){margin-block:0!important}
.receipt-feedback:empty{display:none}
.receipt-feedback{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:100;background:#166534;color:#fff;padding:12px 20px;border-radius:8px;box-shadow:0 4px 18px #0003;font-size:20px;max-width:calc(100vw - 24px);width:max-content;pointer-events:none}
@media print{.receipt-feedback{display:none!important}}
/* Legacy control nodes keep their live status colors and readable signal values. */
[hidden]{display:none!important}
.node-grid{display:flex;flex-wrap:wrap;gap:12px;padding:16px}
.node-tile{white-space:pre-line;min-width:140px;max-width:230px;min-height:96px;color:#172b3a;border:1px solid #aaa}
.node-tile small,.node-tile strong{display:block;font-size:18px}
.node-normal{background:#00ff00}.node-alarm{background:#ff0000;color:white}.node-warning{background:#ffff00}.node-offline{background:#808080;color:white}
.node-tile strong{background:#ff0000;color:white}
/* 2026-09-26: compact legacy controls, consistent selection and alignment. */
#business-panel button,.status-button{min-height:36px;padding:6px 12px;line-height:1.35;font-size:18px;width:auto;white-space:nowrap}
#business-panel .filter-form>button{justify-self:start;align-self:center;min-height:36px;height:auto;padding:6px 12px}
#business-panel button+button,#business-panel button+.button{margin-left:8px}
#business-panel :is(.business-actions,.leave-row-actions,.row-actions,.schedule-toolbar){display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#business-panel :is(.business-actions,.leave-row-actions,.row-actions,.schedule-toolbar)>button{margin:0}
#business-panel>button{margin:8px 8px 14px 0}
#business-panel .filter-form{gap:8px 16px}
#business-panel :is(.filter-form,.business-form,.leave-application-fields,.resume-fields)>:is(label,.filter-field){margin-block:2px}
select.picker-native{position:absolute!important;width:1px!important;height:1px!important;min-height:1px!important;padding:0!important;opacity:0;pointer-events:none}
.clear-control-host{position:relative}
:is(body,#business-panel) :is(input,textarea).has-field-clear{padding-right:38px!important}
#business-panel input[type=search]::-webkit-search-cancel-button{display:none}
:is(body,#business-panel) .time-date-clock>input:first-child.has-field-clear{padding-right:74px!important}
:is(body,#business-panel) summary.has-picker-clear{padding-right:72px!important}
:is(body,#business-panel) .field-clear{position:absolute;width:30px;min-width:30px;height:30px;min-height:30px;padding:0;margin:0!important;background:transparent!important;border:0;color:#3e6fbc!important;box-shadow:none;font-size:0;z-index:2;cursor:pointer}
.field-clear::before,.field-clear::after{content:'';position:absolute;left:8px;top:14px;width:14px;height:3px;background:currentColor;transform:rotate(45deg)}
.field-clear::after{transform:rotate(-45deg)}
.field-clear[hidden]{display:none!important}.field-clear:focus-visible{outline:2px solid #3e6fbc;outline-offset:-2px;border-radius:4px}
/* Dialog content reflows instead of introducing a horizontal scrollbar. */
dialog:not(.gallery-dialog){overflow-wrap:anywhere}
dialog:not(.gallery-dialog)>*{min-width:0;max-width:100%}
#business-panel dialog:not(.gallery-dialog) :is(.business-actions,.dialog-actions){flex-wrap:wrap!important;overflow:visible!important}
#business-panel dialog:not(.gallery-dialog) :is(.business-actions,.dialog-actions)>button{max-width:100%;white-space:normal!important;overflow-wrap:anywhere}
#business-panel dialog:not(.gallery-dialog) :is(.table-wrap,.data-table td){overflow:visible;min-width:0;max-width:100%}
.identity-nowrap{white-space:nowrap!important;word-break:normal!important;overflow-wrap:normal!important}
@media screen and (min-width:761px){
 #business-panel .resume-dialog .resume-preview-scroll{overflow:visible!important}
 .resume-dialog .resume-preview-scroll .resume-sheet{width:100%;min-width:0;max-width:100%}
 .resume-dialog .resume-photo-cell img{max-width:100%}
}
/* Business dates keep the picker icon; filter dates remain picker-only. */
:is(body,#business-panel) input.has-field-clear:is([type=date],[type=month],[type=week],[type=time],[type=datetime-local]){padding-right:74px!important}
@media print{.field-clear{display:none!important}}
.single-select{width:100%;min-width:0}.single-select summary{cursor:pointer}.single-select.disabled{opacity:.65;pointer-events:none}.single-select-list{max-height:280px;overflow:auto;display:flex;flex-direction:column;gap:3px}
.single-select-list .picker-option{background:#fff;color:#263544;border:0;text-align:left;white-space:normal;margin:0;width:100%;padding:8px 10px;min-height:40px}
.single-select-list .picker-option:hover,.single-select-list .picker-option[aria-pressed=true]{background:#e5effa;color:#172b3c}
#business-panel .single-select summary{min-height:56px;padding:10px 12px;font-size:20px;line-height:34px}
#business-panel .data-table th,#business-panel .data-table td{vertical-align:middle}
.data-table td:is([data-label="ID"],[data-label="單號"],[data-label*="時間"],[data-label*="日期"],[data-label*="手機"],[data-label*="電話"],[data-label*="車牌"],[data-label*="姓名"],[data-label*="人員"],[data-label*="案場"],[data-label*="編號"]){white-space:nowrap;word-break:normal;overflow-wrap:normal}
.data-table td[data-label="選取"]::before{content:none}.data-table td[data-label="選取"] label{margin:0}.data-table input[type=checkbox]{width:20px;height:20px;min-height:20px}
.status-button{display:inline-flex;align-items:center;border-radius:4px;border:1px solid transparent}.cash-pending{background:#00c853;color:#fff}.salary-pending{background:#f50057;color:#fff}.unsigned{background:#2196f3;color:#fff}
#business-panel .resume-fields{grid-template-columns:minmax(0,1fr)}
#business-panel .leave-application-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 18px;padding:18px}
#business-panel .leave-application-fields>label{grid-template-columns:6em minmax(0,1fr);margin:0}
#business-panel .leave-application-fields :is(input:not([type=checkbox]),select,.single-select summary){height:44px;min-height:44px;padding:5px 10px;line-height:32px}
#business-panel .document-edit-form>label{white-space:nowrap}
.schedule-grid th,.schedule-grid td{vertical-align:middle!important;text-align:center!important}
.schedule-grid td:nth-child(-n+2){overflow-wrap:normal;word-break:normal}.schedule-grid td:first-child span{display:block;white-space:nowrap}
.schedule-grid th.schedule-vertical{writing-mode:horizontal-tb;letter-spacing:0;line-height:1.5;word-break:break-all;padding:4px 10px}
#business-panel .schedule-grid td button{width:100%;min-height:36px;background:transparent;color:inherit;border:0;margin:0;padding:0}
.schedule-explanation{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr);gap:5%;align-items:start}.schedule-explanation>div{border:0}.schedule-explanation h3{border:1px solid #999;border-bottom:0}.schedule-explanation th,.schedule-explanation td{border:1px solid #999}
.schedule-explanation td.schedule-rule-text{text-align:left;white-space:pre-line;line-height:1.55;padding:5px 8px;font-size:18px}.schedule-explanation p:empty{display:none}
.schedule-dialog>div{display:flex;flex-direction:column;gap:12px}.schedule-dialog label{display:flex;align-items:center;gap:12px}.schedule-person{display:flex;align-items:center;gap:10px;padding:12px;border:1px solid #b6c3cf;border-radius:6px;margin:8px 0}.schedule-person label{flex:1;min-width:0}.drag-handle{cursor:grab;touch-action:none;font-size:26px;padding:4px;color:#607080}
#business-panel button.control-armed{background:#00ff00;color:#000;border-color:#00ff00;font-weight:bold}#business-panel button.control-disarmed{background:#ff0000;color:#fff;border-color:#ff0000;font-weight:bold}
#business-panel .control-state-button:disabled{opacity:1}
#business-panel .control-state-button:disabled:hover{filter:brightness(.94)}
.resume-camera button{margin-top:12px}.resume-camera [role=status]{text-align:center;font-weight:bold;font-size:30px}
@media(max-width:959px){.data-table:has(.selection-heading) thead{display:block}.data-table:has(.selection-heading) thead tr{border:0;padding:4px;margin:0}.data-table:has(.selection-heading) thead th:not(.selection-heading){display:none}.data-table .selection-heading{display:block;border:0}.data-table td{overflow-x:auto}.schedule-explanation{grid-template-columns:1fr;gap:20px}.schedule-person{flex-wrap:wrap}}
@media(max-width:650px){#business-panel .leave-application-fields{grid-template-columns:1fr}.schedule-dialog label{flex-wrap:wrap}}
#business-panel .filter-form>:is(label,.filter-field){margin-block:0}
.gallery-dialog{width:95vw;max-width:95vw;height:90dvh;max-height:90dvh}.pswp button{padding:0!important;min-height:0!important;margin:0!important;background:transparent!important}
.data-table th{white-space:nowrap}.data-table td:is([data-label*="上班"],[data-label*="下班"]){white-space:nowrap;overflow-wrap:normal}
#business-panel .data-table td[data-label="操作"]>div{flex-wrap:nowrap}
.document-edit-form h3{grid-column:1/-1;margin:12px 0 0}.schedule-person.dragging{opacity:.65;outline:2px solid #2196f3}
button[data-tone=warning]{color:#fff}
.schedule-rule-alert{color:red}
@media(min-width:1100px){#business-panel.schedules-page .filter-form{grid-template-columns:repeat(3,minmax(0,1fr))}}
#business-panel[aria-label^="公務車"] button[data-tone=primary]{background:#2563eb;border-color:#2563eb;color:white}#business-panel[aria-label^="公務車"] button[data-tone=danger]{background:#dc2626;border-color:#dc2626;color:white}
.pswp .pswp__button{width:50px!important;height:60px!important;min-width:50px!important}.pswp .pswp__button--arrow{width:60px!important;height:100px!important}
.gallery-missing{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:30px;color:white;text-align:center;font-size:22px}

/* 2026-09-26 original presentation parity: local component rules must win over generic buttons/forms. */
button:disabled{cursor:not-allowed}button:disabled:hover{filter:none}
#business-panel .punch-buttons>button{width:100%;margin:0;font-family:var(--app-font);font-size:30px;line-height:1.4}
#business-panel .multi-select summary{padding-right:38px}
.multi-select summary::after,.multi-select[open] summary::after{content:'';width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #757575;right:18px;top:50%;transform:translateY(-50%)}
.multi-select[open] summary::after{transform:translateY(-50%) rotate(180deg)}
.single-select-list{margin-top:10px;padding-top:2px}.multi-select-panel>input:focus-visible{outline-offset:0}
#business-panel .multi-select-option[hidden]{display:none!important}
#business-panel .filter-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px;grid-column:1/-1;margin:0;padding:0}
#business-panel .filter-actions>button{margin:0;width:auto;height:auto;min-height:36px}
#business-panel .filter-form>.compact-checkbox{display:flex;gap:8px;justify-content:flex-start;white-space:nowrap;grid-template-columns:none}
#business-panel .filter-form>.compact-checkbox>input[type=checkbox]{width:20px;height:20px;min-height:20px;flex:0 0 20px}
@media(min-width:1600px){#business-panel.schedules-page .filter-form{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(min-width:801px) and (max-width:1599px){#business-panel.schedules-page .filter-form{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:800px){#business-panel.schedules-page .filter-form{grid-template-columns:minmax(0,1fr)}}
#business-panel input[type=file]{padding:0;height:54px;min-height:54px;line-height:52px;vertical-align:middle}
#business-panel input[type=file]::file-selector-button{height:52px;min-height:52px;padding:0 16px;line-height:52px;vertical-align:top;margin:0 12px 0 0}
button[data-tone=info]{background:#e040fb;border-color:#e040fb;color:#fff}button[data-tone=accent]{background:#ff4081;border-color:#ff4081;color:#fff}
#business-panel[aria-label^="公務車"] button[data-tone=primary]{background:#2196f3;border-color:#2196f3}
#business-panel[aria-label^="公務車"] button[data-tone=danger]{background:#f44336;border-color:#f44336}
#business-panel .data-table td[data-label="操作"]{padding-right:18px;padding-left:18px}
#business-panel dialog:not(.gallery-dialog)>button:last-child{margin-top:16px}
#business-panel dialog:not(.gallery-dialog)>:is(div,form)>button:last-child{margin-top:12px}
#business-panel .resume-fields>label{grid-template-columns:max-content minmax(0,1fr)}
#business-panel .resume-fields>label>span{white-space:nowrap}
#business-panel .resume-form>button{margin:12px 8px 12px 0}
.resume-interview-editor{display:flex;flex-direction:column;gap:12px;margin-top:20px}.resume-interview-editor textarea{width:100%;min-height:130px;font:inherit;padding:12px;border:1px solid #a6b5c3;border-radius:6px}.resume-interview-editor button{align-self:flex-start}
.receipt-feedback,.ui-feedback{position:fixed;top:20px;bottom:auto;left:50%;transform:translateX(-50%);z-index:9999;max-width:calc(100vw - 32px);width:max-content;max-height:50dvh;overflow:auto;background:#166534;color:#fff;padding:12px 20px;border-radius:8px;box-shadow:0 4px 18px #0003;font-size:20px;white-space:pre-line}
.ui-feedback.error-feedback{background:#a12626}.validation-summary{color:#a12626;margin:12px 0}.validation-summary:empty{display:none} [aria-invalid=true]{outline:2px solid #d32f2f!important}
#business-panel .node-grid{display:grid;grid-template-columns:repeat(auto-fill,210px);justify-content:start;align-items:stretch;gap:12px}
#business-panel button.node-tile{width:210px;min-width:210px;max-width:210px;margin:0;white-space:pre-line;overflow-wrap:anywhere;word-break:break-word;min-height:110px;padding:10px;font:inherit}
#business-panel button.node-tile :is(small,strong){white-space:normal;overflow-wrap:anywhere}
.gallery-dialog{position:fixed;inset:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:0;border:0;border-radius:0;background:transparent;overflow:hidden;box-shadow:none}
.gallery-dialog::backdrop{background:transparent}
.pswp .pswp__top-bar{height:44px;background:rgba(0,0,0,.5)}.pswp .pswp__button:not(.pswp__button--arrow){height:44px!important;width:44px!important;min-width:44px!important}.pswp .pswp__counter{height:44px;line-height:44px;font-size:13px;margin:0 12px}.pswp .pswp__icn{top:6px;left:6px}
@media print{.ui-feedback,.validation-summary{display:none!important}.leave-print th,.leave-print td{border-width:1px}}

#business-panel .punch-buttons>button{font-family:var(--app-font)}
.clipboard-copy-source{position:fixed;left:-10000px;top:0}
.attendance-report-dialog{width:min(1250px,90vw);max-width:90vw;padding:20px}.attendance-person{margin:0}.attendance-person h2{font-size:22px;text-align:center}
.attendance-sheet-scroll{overflow:auto;max-width:100%}.attendance-sheet{width:1175px;table-layout:fixed;font-size:18px;color:#000}.attendance-sheet th,.attendance-sheet td{height:37.5px;padding:2px 4px;vertical-align:middle;text-align:center;border:0;border-top:1px solid black;border-bottom:1px solid black;white-space:pre-line;overflow-wrap:anywhere;background:white;font-family:inherit;font-size:18px}
.attendance-sheet th:nth-child(-n+2){width:36px}.attendance-sheet th:nth-child(3),.attendance-sheet th:nth-child(4){width:188px}.attendance-sheet th:last-child{width:230px}
.attendance-sheet .attendance-col-1{color:green}.attendance-sheet .attendance-weekend :is(.attendance-col-0,.attendance-col-1){color:red}.attendance-sheet .attendance-col-2{color:red}.attendance-sheet .attendance-col-3{color:blue}.attendance-sheet .attendance-col-5,.attendance-sheet .attendance-col-6{color:#000}.attendance-sheet td.attendance-flag{background:lightgray}
.attendance-row-actions{display:flex;flex-wrap:wrap;gap:5px;justify-content:center}#business-panel .attendance-row-actions>button{margin:0;padding:4px 8px;font-size:18px}
.attendance-print-meta,.attendance-signatures{display:flex;justify-content:space-between}.attendance-signatures span{width:50%;height:65px;padding-top:16px}.attendance-print-statement{font-size:20px;font-weight:700}
/* Legacy mobile attendance: compact stacked punches, teal schedule, centered dates and inline actions. */
@media screen and (max-width:760px){
 .attendance-sheet{width:560px}
 .attendance-sheet thead{display:none}
 .attendance-sheet tbody{display:block}
 .attendance-sheet tr{display:grid;grid-template-columns:30px 40px 255px 235px;grid-template-rows:repeat(5,min-content);align-content:center;border:0;border-bottom:1px solid #000;min-height:37.5px}
 .attendance-sheet tr:first-child{border-top:1px solid #000}
 .attendance-sheet td{height:auto;border:0;min-width:0;padding:0 4px;line-height:1.5}
 .attendance-sheet .attendance-col-0{grid-column:1;grid-row:1/6}
 .attendance-sheet .attendance-col-1{grid-column:2;grid-row:1/6}
 .attendance-sheet :is(.attendance-col-0,.attendance-col-1,.attendance-col-7){display:flex;align-items:center;justify-content:center}
 .attendance-sheet :is(.attendance-col-2,.attendance-col-3,.attendance-col-4,.attendance-col-5,.attendance-col-6){grid-column:3}
 .attendance-sheet .attendance-col-2{grid-row:1}
 .attendance-sheet .attendance-col-3{grid-row:2}
 .attendance-sheet .attendance-col-4{grid-row:3}
 .attendance-sheet .attendance-col-5{grid-row:4;color:#00695c}
 .attendance-sheet .attendance-col-6{grid-row:5;color:#795548}
 .attendance-sheet :is(.attendance-col-2,.attendance-col-3,.attendance-col-4,.attendance-col-5,.attendance-col-6):empty{display:none}
 .attendance-sheet .attendance-col-7{grid-column:4;grid-row:1/6;justify-content:flex-end}
 .attendance-row-actions{flex-direction:row;flex-wrap:nowrap}
 .attendance-row-actions>button{flex:none;white-space:nowrap}
}

@media print{.attendance-preview:empty{display:none}.attendance-person h2{font-size:38px}.attendance-sheet-scroll{overflow:visible}.attendance-preview .attendance-sheet{width:100%;table-layout:fixed}.attendance-preview .attendance-sheet th,.attendance-preview .attendance-sheet td{font-size:14px;border-top:1px solid black;border-bottom:1px solid black;border-left:0;border-right:0;padding:2px;height:auto}.attendance-preview .attendance-sheet th:nth-child(3),.attendance-preview .attendance-sheet th:nth-child(4){width:22%}.attendance-preview .attendance-sheet th:last-child{width:15%}}
.ui-feedback:empty{display:none}.inline-feedback{margin:0;min-height:0;pointer-events:none}

.cash-pending{background:#ff4081;color:white}.salary-pending{background:#ff4081;color:white}
.punch-recent th,.punch-recent td{white-space:nowrap;overflow-wrap:normal}.punch-recent th:nth-child(2),.punch-recent td:nth-child(2){width:70px}.punch-history{overflow-x:auto}.punch-recent{min-width:420px}
#business-panel dialog:not(.gallery-dialog)>button{margin-top:16px}
#notice:not(.hidden),#login-error:not(:empty),#password-error:not(:empty){position:fixed;top:20px;bottom:auto;left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100vw - 32px);z-index:9999;margin:0;padding:12px 20px;background:#fff7e7;border:1px solid #e5c17e;border-radius:8px;box-shadow:0 4px 18px #0003}
#business-panel.schedules-page .filter-form>label.compact-checkbox{display:flex;grid-template-columns:none;gap:8px;justify-content:flex-start}
.attendance-sheet th:nth-child(-n+2){width:50px}
/* Preview proportions: day/week 2, punches 8, leave 6, shift/notes 8, actions 10. */
@media screen and (min-width:761px){
 .attendance-report-dialog .attendance-sheet th:nth-child(-n+2){width:calc(100% * 2 / 52)}
 .attendance-report-dialog .attendance-sheet th:nth-child(3),.attendance-report-dialog .attendance-sheet th:nth-child(4){width:calc(100% * 8 / 52)}
 .attendance-report-dialog .attendance-sheet th:nth-child(5){width:calc(100% * 6 / 52)}
 .attendance-report-dialog .attendance-sheet th:nth-child(6){width:calc(100% * 8 / 52)}
 .attendance-report-dialog .attendance-sheet th:nth-child(7){width:calc(100% * 8 / 52)}
 .attendance-report-dialog .attendance-sheet th:nth-child(8){width:calc(100% * 10 / 52)}
}
@media screen{.attendance-report-dialog .attendance-sheet .attendance-col-5{white-space:nowrap;overflow-wrap:normal}}
@media print{
 @page attendance-sheet{size:A4 portrait;margin:10mm}
 .attendance-preview{page:attendance-sheet}
 .attendance-preview .attendance-person{width:1100px;zoom:.65;color:#000;print-color-adjust:exact}
 .attendance-preview .attendance-person h2{color:darkred;text-align:left;font-size:38px;margin:25px 0}
 .attendance-print-meta{color:darkred;font-size:18px;font-weight:700}
 .attendance-preview .attendance-sheet{width:1100px}
 .attendance-preview .attendance-sheet th,.attendance-preview .attendance-sheet td{font-size:18px;height:37.5px}
}
/* Legacy leave pages print 1px borders at 65% (general) / 77% (internal). */
@media print{.leave-print th,.leave-print td{border-width:.65px}.leave-print-internal th,.leave-print-internal td{border-width:.77px}}

/* Shared dropdowns also cover the toolbar and table pagination. */
.test-role .single-select{width:150px;margin:0}.test-role .single-select summary{font:inherit;min-height:48px;padding:7px 32px 7px 10px}
.test-role .multi-select-panel{left:0;right:auto}
.table-pagination .single-select{width:110px;margin:0}.table-pagination .single-select summary{font:inherit!important;min-height:44px!important;line-height:26px!important;padding:8px 30px 8px 10px!important}
.picker-floating:popover-open{position:fixed;inset:auto;margin:0;max-height:calc(100dvh - 16px);overflow:auto}
@media(max-width:500px){.test-role .single-select{width:130px}.test-role .multi-select-panel{width:240px}}

#notice{pointer-events:none}

/* The current route stands out against the original sidebar background image. */
.sidebar nav a[aria-current=page],.sidebar nav a[aria-current=page]:hover{background:#fff;color:#173d68;font-weight:700;box-shadow:inset 4px 0 0 #173d68}
.schedule-site-group{margin-bottom:28px;min-width:0}.schedule-site-group:last-child{margin-bottom:0}
@media screen and (min-width:701px){
 .schedule-grid-wrap{max-height:70dvh;isolation:isolate;scrollbar-gutter:auto}
 .schedule-grid{border-collapse:separate;border-spacing:0;--schedule-frozen-name-width:132px}
 .schedule-grid th,.schedule-grid td{border-width:0 1px 1px 0}
 .schedule-grid thead{position:sticky;top:0;z-index:4;background:#f3f3f3;box-shadow:0 1px #999}
 .schedule-grid tbody td:nth-child(-n+2){position:sticky;z-index:2;background:#fff}
 .schedule-grid tbody tr:nth-child(even) td:nth-child(-n+2){background:#fafafa}
 .schedule-grid tbody td:first-child,.schedule-grid thead tr:first-child th:first-child{left:0}
 .schedule-grid tbody td:nth-child(2),.schedule-grid thead tr:first-child th:nth-child(2){left:var(--schedule-frozen-name-width);box-shadow:1px 0 #999}
 .schedule-grid thead tr:first-child th:nth-child(-n+2){position:sticky;z-index:5;background:#f3f3f3}
}
@media print{.schedule-site-group{break-inside:avoid-page;page-break-inside:avoid}.schedule-grid-wrap{display:block!important;max-height:none;overflow:visible}.schedule-grid thead,.schedule-grid th,.schedule-grid td{position:static!important}}

/* Shared control corrections, 2026-09-26. */
.test-role .single-select{width:190px;flex:none}.test-role .single-select summary{padding-right:34px;min-height:52px;line-height:34px}
@media(max-width:500px){.test-role .single-select{width:160px}.test-role .single-select summary{font-size:17px}}
.single-select-list .picker-option,.single-select-list .picker-option+button{margin:0!important;flex-shrink:0;align-self:stretch;box-sizing:border-box}
#business-panel .table-pagination [role=status]{position:static;transform:none;box-shadow:none;background:transparent;color:inherit;padding:0;margin:0;max-height:none;max-width:none;font:inherit;pointer-events:auto}
#business-panel :is(.business-actions,.form-actions){display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#business-panel :is(.business-actions,.form-actions)>button{margin:0!important;width:auto;align-self:center}
.schedule-dialog{background:#fff;color:inherit;border:1px solid #ccd6e2;border-radius:12px;padding:24px}.schedule-dialog::backdrop{background:#14293d88}
.schedule-explanation>div>button{margin-top:14px!important}
#business-panel .schedule-dialog>.business-actions{flex-direction:row;margin-top:16px}
#business-panel .leave-application-fields>button[type=submit]{width:auto;justify-self:start;min-height:36px;padding:5px 12px;font-size:18px}
#business-panel input[type=file]{height:56px!important;min-height:56px!important;line-height:54px!important;padding:0!important;vertical-align:middle;box-sizing:border-box}
#business-panel input[type=file]::file-selector-button{height:54px!important;min-height:54px!important;line-height:54px!important;padding:0 14px!important;border:0!important;margin:0 12px 0 0!important;vertical-align:top;font:inherit;font-size:20px}
#business-panel .resume-fields>label{display:grid;grid-template-columns:9em minmax(0,1fr)!important;min-width:0}
#business-panel .resume-fields>label>span{white-space:nowrap;overflow:visible;font-size:20px}
@media(max-width:500px){#business-panel .resume-fields>label{grid-template-columns:7.2em minmax(0,1fr)!important;gap:6px}#business-panel .resume-fields>label>span{font-size:18px}}
.attendance-sheet,.attendance-sheet :is(th,td),.punch-recent,.punch-recent :is(th,td){font-family:var(--app-font);font-weight:400}
.attendance-sheet th,.punch-recent th{font-weight:700}
.data-table td[data-label="請假時間"]{white-space:pre-line}
.sidebar nav a:not([aria-current=page]):hover{background:rgba(255,255,255,.5)}

.system-information{padding:12px 18px;color:white}.system-information a{color:white;display:block;padding:12px 0}.system-information summary{cursor:pointer}

@media screen and (min-width:701px){.schedule-grid-wrap{max-height:none;overflow-x:auto;overflow-y:hidden}.schedule-grid thead{position:static}.schedule-floating-head{position:fixed;z-index:22;overflow:hidden;pointer-events:none;background:#f3f3f3}.schedule-floating-head .schedule-grid{min-width:0;margin:0}.schedule-floating-head thead{position:static}.schedule-floating-head th{position:relative!important;left:auto!important}}
.schedule-floating-head[hidden]{display:none!important}@media print{.schedule-floating-head{display:none!important}}

.data-table td{font-family:inherit}
.data-table{font-size:14px;line-height:1.43}.data-table th{font-weight:500}.data-table td{font-weight:400}
#business-panel:is([aria-label="員工清單"],[aria-label="案場清單"],[aria-label="英雄榜"]) .data-table{font-size:20px}
#business-panel:is([aria-label="發報查詢"],[aria-label="節點查看"]) .data-table{font-size:18px}
#business-panel .data-table td button{font-weight:500}
#business-panel:is([aria-label="檢視履歷"],[aria-label="假單簽核"],[aria-label="假單簽核-內勤"]) .data-table td button{font-size:14px}
#business-panel:is([aria-label="檢視履歷"],[aria-label="假單簽核"],[aria-label="假單簽核-內勤"]) .data-table td :is(.cash-pending,.salary-pending){font-size:14px}
#business-panel:is([aria-label="中控報表"],[aria-label="帳號管理"],[aria-label="檔案瀏覽"],[aria-label="班別管理"],[aria-label="節點編輯"]) .data-table td button{font-size:16px}
#business-panel .attendance-row-actions>button{font-size:14px;font-weight:500}
#business-panel[aria-label="打卡"] .punch-recent :is(th,td){font-size:18px;font-weight:700}
#business-panel[aria-label="打卡"] .punch-recent td:nth-child(2){font-size:16px}
#business-panel[aria-label="代班打卡"] .punch-recent :is(th,td){font-size:14px}
#business-panel[aria-label="代班打卡"] .punch-recent td{font-weight:400;border-top:0;border-bottom:1px solid #aaa}
@media print{
 html,body{background:#fff!important}
 .leave-print{--print-scale:.65;width:100%;height:280mm}
 .leave-print-internal{--print-scale:.77}
 .leave-print-copy{overflow:hidden;padding-inline:1px}.leave-print table{flex-shrink:0;width:100%;zoom:var(--print-scale);font-size:16pt}
 .leave-print table :is(th,td){border:0 solid #000!important;border-inline-width:1px!important;padding:calc(1.5mm / var(--print-scale)) calc(.6mm / var(--print-scale))}
 .leave-print-title th{font-size:18pt;text-align:right}.leave-print-title th:nth-child(2){font-size:16pt;text-align:center}.leave-print-title th:first-child{font-size:28pt;text-align:center}
}



/* 2026-09-26: schedule dialogs, notices, fixed resume previews and print layout. */
.leave-detail{align-items:center}.leave-detail dt,.leave-detail dd{margin:0}
#business-panel .schedule-person>label{grid-template-columns:3em minmax(0,1fr)!important;flex:1 1 280px;margin:0;gap:8px}
#business-panel .schedule-person>label:nth-of-type(2){flex:0 1 190px}
.schedule-person .single-select{width:100%}.schedule-person .error{margin:0}
@media(max-width:700px){.schedule-person{padding:10px;gap:8px}#business-panel .schedule-person>label,#business-panel .schedule-person>label:nth-of-type(2){flex:1 1 100%;width:100%}.schedule-person>.drag-handle{padding:0}.schedule-person>.error{font-size:16px}}
.schedule-batch-dialog{width:min(640px,95vw);min-height:min(660px,80dvh)}
#business-panel .schedule-dialog .business-actions{flex-direction:row;justify-content:flex-start;align-items:center}
#business-panel .schedule-dialog .business-actions>button{width:auto;flex:0 0 auto;margin:0!important}
.resume-dialog .resume-preview-scroll{overflow:auto!important;max-width:100%;min-width:0}.resume-preview-scroll .resume-sheet{zoom:1!important;min-width:1216px}
.resume-form .signature-canvas{cursor:default;touch-action:auto}
.data-table:has(td[data-label="操作"]) th:last-child{text-align:right}
.data-table td[data-label="操作"]{text-align:right}
.data-table td[data-label="操作"]>div{display:flex;justify-content:flex-end;align-items:center;gap:8px}
.feedback-expired{display:none!important}
.test-role{align-items:center;line-height:1.4}.test-role .single-select{align-self:center;display:block;margin-block:0}.test-role .single-select summary{display:flex;align-items:center;line-height:1.4;padding-block:8px;min-height:52px}
.attendance-sheet,.attendance-sheet :is(th,td){font-family:var(--app-font);font-weight:700}
.attendance-signatures{border:1px solid #000;margin-top:12px}.attendance-signatures span{display:block;width:50%;height:130px;padding:4px 0 0;text-align:center;color:darkred;font-size:20px;font-weight:700}.attendance-signatures span+span{border-left:1px solid #000}
@media print{
 .attendance-person,.attendance-sheet,.attendance-sheet :is(th,td){font-family:var(--app-font);font-weight:700}
 .attendance-preview .attendance-sheet thead th{border:0}.attendance-sheet thead th:nth-child(3){color:red}.attendance-sheet thead th:nth-child(4){color:blue}
 .attendance-preview .attendance-print-statement{font-size:20px;font-weight:700}
 .schedules-page>*:not(.schedule-content){display:none!important}
 /* Use the shared A4 landscape page: Chromium splits a caption from its table on named pages. */
 .schedules-page .schedule-content{zoom:.65;width:100%;font-family:var(--app-font);color:#333;print-color-adjust:exact;-webkit-print-color-adjust:exact}
 .schedules-page .schedule-site-group{break-after:page;break-inside:avoid-page}.schedules-page .schedule-site-group:last-child{break-after:auto}
 .schedules-page .schedule-grid-wrap{display:block!important;overflow:visible!important;border:0;max-height:none}
 .schedules-page .schedule-grid{width:100%!important;min-width:0!important;table-layout:fixed;font-family:inherit;font-size:18px}
 .schedules-page .schedule-grid tbody tr{break-inside:avoid;page-break-inside:avoid}
 .schedules-page .schedule-grid :is(th,td){min-width:0!important;width:auto;padding:3px 1px;border:1px solid #808080;position:static!important;vertical-align:middle;line-height:1.3;box-shadow:none!important}
 .schedules-page .schedule-grid caption{font-size:28px;padding:4px;border:1px solid #808080;background:#f3f3f3}.schedules-page .schedule-grid caption small{font-size:16px}
 .schedules-page .schedule-grid th{font-weight:700}.schedules-page .schedule-grid :is(th,td):nth-last-child(-n+6){font-size:16px}.schedules-page .schedule-grid thead tr:nth-child(2) th{font-size:18px}
 .schedules-page col.schedule-name{width:8%}.schedules-page col.schedule-number{width:7%}.schedules-page col.schedule-day{width:1.8%}.schedules-page col.schedule-total{width:2.3%}.schedules-page col.schedule-seniority{width:7.5%}.schedules-page col.schedule-notes{width:14.6%}
 .schedules-page .schedule-grid tbody td:nth-last-child(2){white-space:nowrap}.schedules-page .schedule-grid td.selected{outline:0;background:inherit!important}
 .schedules-page .schedule-grid td button{display:contents!important;color:inherit;font:inherit;border:0;background:none;box-shadow:none}
 .schedules-page .schedule-grid td .schedule-leave-marker{color:red}
 .schedules-page .schedule-floating-head,.schedules-page .schedule-explanation button{display:none!important}
 .schedules-page .schedule-explanation{display:grid!important;grid-template-columns:35% 60%;justify-content:space-between;gap:0;margin-top:12px;font-size:16px}
 .schedules-page .schedule-explanation h3{font-size:22px;margin:0;padding:3px;border:1px solid #808080;background:#f3f3f3}
 .schedules-page .schedule-explanation table{font-family:inherit}.schedules-page .schedule-explanation :is(th,td),.schedules-page .schedule-explanation td.schedule-rule-text{border:1px solid #808080;padding:3px;line-height:1.35;font-size:16px}
 .schedules-page .schedule-explanation td:last-child{font-family:inherit}.schedules-page .schedule-explanation p:empty{display:none}
}


@media print{body:has(.schedules-page),body:has(.schedules-page) main,.schedules-page{background:#fff!important}}

/* Keep the action group against the cell edge, including intrinsic-width flex groups. */
#business-panel .data-table td[data-label="操作"]>div{width:max-content;min-width:0;margin-left:auto;margin-right:0;justify-content:flex-end}
#business-panel .attendance-row-actions{justify-content:flex-end}
#business-panel .attendance-sheet:has(.attendance-col-7) th:last-child,#business-panel .attendance-sheet .attendance-col-7{text-align:right}
@media screen and (max-width:760px){#business-panel .attendance-row-actions{align-items:flex-end}}
.schedule-grid caption small{color:#795548;font-weight:400}
@media screen{
 .schedule-grid th{font-weight:700}.schedule-grid caption{font-size:28px}.schedule-grid caption small{font-size:16px}
 .schedule-grid tbody td:nth-last-child(-n+6),.schedule-grid thead tr:first-child th:nth-last-child(-n+6){font-size:16px}
 .schedule-explanation :is(th,td),.schedule-explanation td.schedule-rule-text{font-size:16px}
}
@media print{.schedule-grid caption small{color:#795548!important;print-color-adjust:exact;-webkit-print-color-adjust:exact}}

.document-preview-link{display:inline-flex;align-items:center;padding:6px 12px;border-radius:6px;background:#2196f3;color:white;white-space:nowrap;text-decoration:none}

/* Header controls share the actual header centre, including its responsive height. */
.topbar .menu-toggle{position:absolute;top:50%;transform:translateY(-50%);margin:0}
.topbar .test-role{align-self:center;margin-block:0}
.topbar .header-actions{align-self:center}
.picker-floating:popover-open{display:flex;flex-direction:column;gap:0;padding:12px;overflow:hidden}
.picker-floating>.single-select-list,.picker-floating>.multi-select-list{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain}
.picker-floating>input,.picker-floating>.multi-select-actions,.picker-floating>p{flex-shrink:0}
.schedule-grid th,.schedule-grid td,.schedule-grid td:first-child,.schedule-grid td:nth-child(2){padding-block:3px;line-height:1.3}
.schedule-grid .schedule-cell-shift{min-height:20px;display:flex;align-items:center;justify-content:center}
#business-panel .schedule-grid td .schedule-leave-marker{display:block;min-height:16px;height:16px;line-height:16px;font-size:20px;font-weight:bold;border-top:1px solid #bdbdbd;border-radius:0;margin:0;padding:0}
.data-table td[data-label="請假時間"]{white-space:nowrap}
#business-panel .receipt-verify-form>label{display:grid;grid-template-columns:minmax(0,1fr)!important;gap:8px;margin:0 0 16px;white-space:normal}
#business-panel .receipt-verify-form>label>input{width:100%;margin:0}
.job-totals p{margin:4px 0}.job-totals .job-saved-count{font-size:24px;font-weight:700}
.time-date-clock{display:block;position:relative;width:100%;min-width:0}
#business-panel .time-date-clock>input:first-child{width:100%;padding-right:42px;cursor:pointer}
.time-date-clock>input[type=date]{display:none}
#business-panel .time-date-clock>.time-source{position:absolute;inset:0;width:100%;height:100%;min-height:0;margin:0;opacity:0;z-index:1;cursor:pointer}
.time-date-clock:after{content:'';position:absolute;right:12px;top:50%;transform:translateY(-50%);width:20px;height:20px;pointer-events:none;background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23222' stroke-width='2'%3E%3Crect x='3' y='5' width='18' height='16' rx='1'/%3E%3Cpath d='M3 10h18M8 2v6M16 2v6'/%3E%3C/svg%3E")}
.time-date-clock.time-only-clock:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23222' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 6v6l4 2'/%3E%3C/svg%3E")}
@media(max-width:767px),(pointer:coarse){#business-panel .time-date-clock>input:first-child{padding-inline:8px 32px}}
@media(max-width:374px){#business-panel label:has(>.time-date-clock){grid-template-columns:minmax(0,1fr)!important;gap:4px}}
@container(max-width:900px){#business-panel .leave-application-fields{grid-template-columns:minmax(0,1fr)}}
.time-calendar-dialog{width:330px;max-width:calc(100vw - 24px);max-height:80dvh;border:1px solid #ccd6e2;border-radius:10px;padding:16px;color:inherit}
.time-calendar-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.time-calendar-header input{min-width:0;flex:1;width:160px;font:inherit}
#business-panel .time-calendar-header>input{height:44px;min-height:44px;margin:0;padding:4px 8px;line-height:normal}
#business-panel .time-calendar-header>button{display:flex;align-items:center;justify-content:center;flex:0 0 30px;width:30px;min-width:30px;height:44px;min-height:44px;margin:0!important;padding:0;line-height:1}
.time-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center;margin-bottom:12px}
#business-panel .time-calendar-grid button{display:flex;align-items:center;justify-content:center;min-width:0;width:100%;height:36px;min-height:36px;padding:0;margin:0!important;background:transparent;color:inherit;font-size:16px;line-height:1;border:0}
#business-panel .time-calendar-grid button[aria-pressed=true]{background:#2196f3;color:white}
[aria-label="假單簽核"] .data-table :is(th,td),[aria-label="假單簽核-內勤"] .data-table :is(th,td),[aria-label="假單檢視"] .data-table :is(th,td),[aria-label="簽收管理"] .data-table :is(th,td),[aria-label="請假整合"] .data-table :is(th,td){border-inline:1px solid #e1e7ed}
@media(min-width:768px) and (pointer:fine){
 .time-source{position:absolute!important;opacity:0;width:1px!important;height:1px!important;padding:0!important;pointer-events:none}
 .time-date-clock{display:block;position:relative;width:100%;min-width:0}
 #business-panel .time-date-clock>input:first-child{width:100%;padding-right:42px;cursor:pointer}
 #business-panel .time-date-clock>input[type=date]{position:absolute;right:4px;top:4px;bottom:4px;width:32px;min-width:0;padding:0;border:0;background:transparent;color:transparent;cursor:pointer;opacity:0}
 .time-date-clock>input[type=date]{display:block}
 .time-date-clock>input[type=date]::-webkit-datetime-edit{display:none}
 .time-date-clock>input[type=date]::-webkit-calendar-picker-indicator{margin:0;padding:4px;width:22px;cursor:pointer}
 .time-date-clock[aria-invalid]{outline:2px solid #b91c1c;border-radius:4px}
}
.time-clock-dialog{width:320px;max-width:calc(100vw - 24px);max-height:80dvh;padding:0;overflow:auto;border:0;border-radius:10px;box-shadow:0 12px 40px #14293d44}
#business-panel .time-clock-dialog:focus{outline:none}
#business-panel .time-clock-dialog>.time-picker-clear{margin:0 16px 16px!important}
.time-clock-header{background:#2196f3;color:white;padding:14px 16px}
.time-clock-tabs{display:flex;align-items:center;justify-content:center;font-size:40px}
#business-panel .time-clock-tabs button{font-size:40px;background:transparent;color:#c8e3ff;border:0;padding:0 4px;line-height:1.3;min-height:36px}
#business-panel .time-clock-tabs button[aria-pressed=true]{color:white}
.time-clock-periods{display:flex;flex-direction:column;align-items:stretch;justify-content:center;margin-left:12px;width:40px;gap:0}
#business-panel .time-clock-periods button{font-size:16px;padding:3px;min-height:28px;width:40px;margin:0;text-align:center;line-height:22px}
.time-clock-dial{position:relative;width:260px;height:260px;border-radius:50%;background:#eee;margin:20px auto;touch-action:none;user-select:none}
#business-panel .time-clock-number{position:absolute;transform:translate(-50%,-50%);width:36px;height:36px;min-height:36px;min-width:36px;margin:0;padding:0;border:0;border-radius:50%;background:transparent;color:#333;font-size:16px;z-index:1}
#business-panel .time-clock-number[aria-pressed=true]{background:#2196f3;color:white}
.time-clock-hand{position:absolute;left:129px;bottom:130px;width:2px;height:105px;background:#2196f3;transform-origin:center bottom;pointer-events:none}
.time-clock-hand:after{content:'';position:absolute;bottom:-3px;left:-3px;width:8px;height:8px;border-radius:50%;background:#2196f3}
.time-clock-hint{text-align:center;font-size:14px;margin:4px 12px 16px}
.holiday-report h2{text-align:center;font-size:28px;margin:12px 0}
.holiday-table-wrap{width:100%;overflow-x:auto}
.holiday-pay-table{width:100%;border-collapse:collapse;table-layout:auto;font-size:20px;line-height:1.4;background:white}
.holiday-pay-table th,.holiday-pay-table td{border:1px solid #808080;padding:5px 7px;text-align:center;vertical-align:middle;white-space:nowrap;font-family:inherit;overflow-wrap:normal}
.holiday-pay-table th{background:#f3f3f3;font-weight:bold}
.holiday-pay-table .holiday-left{text-align:center}
.holiday-pay-table .holiday-money,.holiday-pay-table .holiday-site{font-weight:bold}
.holiday-pay-table .holiday-total-row td{background:#fff8d7;font-weight:bold}
.holiday-pay-table .holiday-outside-rule{color:#795548}
.holiday-pay-table .holiday-punch{font-size:20px;line-height:1.35;white-space:pre-line;min-width:105px}
@media print{
 #business-panel.schedules-page .schedule-grid td .schedule-leave-marker{display:block!important;min-height:12px;height:12px;line-height:12px;font-size:14px;border-top:1px solid #bdbdbd}
 .holiday-report{zoom:.72;width:100%}
 .holiday-table-wrap{overflow:visible!important}.holiday-pay-table{font-size:20px;print-color-adjust:exact;-webkit-print-color-adjust:exact}
 .holiday-pay-table th,.holiday-pay-table td{padding:3px 4px}.holiday-pay-table .holiday-punch{font-size:20px;min-width:80px}
 .holiday-pay-table tr{break-inside:avoid}.holiday-pay-table thead{display:table-header-group}
}

/* Compact attendance and consistent dialog action rows. */
@media screen and (max-width:760px){
 .attendance-sheet tr{padding-block:4px;position:relative;min-height:46px}
 .attendance-sheet :is(.attendance-col-0,.attendance-col-1,.attendance-col-7){position:absolute;top:0;height:100%;box-sizing:border-box}
 .attendance-sheet .attendance-col-0{left:0;width:30px}
 .attendance-sheet .attendance-col-1{left:30px;width:40px}
 .attendance-sheet .attendance-col-7{right:0;width:235px}
 .attendance-sheet :is(.attendance-col-2,.attendance-col-3,.attendance-col-4,.attendance-col-5,.attendance-col-6){align-self:center}
}
#business-panel .schedule-grid td .schedule-leave-marker,.schedule-star{color:red!important}
.schedule-dialog{width:min(512px,calc(100vw - 32px))}
.schedule-batch-dialog{width:min(640px,calc(100vw - 32px))}
.schedule-roster-dialog{width:min(918px,calc(100vw - 32px))}
#business-panel .schedule-roster-dialog .schedule-person>label:nth-of-type(2){flex-basis:232px}
@media(max-width:700px){#business-panel .schedule-roster-dialog .schedule-person>label:nth-of-type(2){flex-basis:100%}}
#business-panel dialog:not(.gallery-dialog) .business-actions,#business-panel dialog:not(.gallery-dialog) .dialog-actions{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:8px;max-width:100%;overflow-x:auto;margin-top:16px}
#business-panel dialog:not(.gallery-dialog) :is(.business-actions,.dialog-actions)>button{width:auto;flex:0 0 auto;margin:0!important;white-space:nowrap}
#business-panel dialog.hero-export-dialog .business-actions{flex-wrap:wrap;overflow-x:visible}
.punch-card{padding-block:16px}.punch-card h1{margin:6px 0}
.punch-card :is(.punch-site,.punch-clock,.punch-distance){margin-block:10px}
.punch-card>img{height:60px;width:60px;object-fit:contain}
.punch-buttons{gap:14px;margin:14px auto;max-width:280px}
#business-panel .punch-buttons>button{min-height:54px;padding:6px 16px}
#business-panel .punch-buttons>button:disabled{background:#e0e0e0!important;color:#fff!important;opacity:1;cursor:default;box-shadow:none}
.punch-history{margin-top:10px}.punch-recent{margin-block:8px}.punch-recent th,.punch-recent td{padding-block:4px}
.nav-group>summary{display:flex;align-items:center;justify-content:space-between;list-style:none;gap:12px}
.nav-group>summary::-webkit-details-marker{display:none}
.nav-group>summary::after{content:"";display:block;width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);margin-left:auto;flex:none}
.nav-group[open]>summary::after{transform:rotate(45deg)}

/* Query/form parity and shared primary controls. */
:root{--primary:#2196f3}
.button,#password-panel button[type=submit]{background:var(--primary);color:#fff;min-height:36px;padding:5px 12px;font-size:18px;line-height:1.5}
#business-panel .leave-application-fields>button[type=submit]{align-self:center;justify-self:start;height:38px;min-height:38px;margin:8px 0}
input[type=number]{appearance:textfield;-moz-appearance:textfield}
input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.system-information>summary{display:flex;align-items:center;justify-content:space-between;list-style:none;gap:12px;cursor:pointer}
.system-information>summary::-webkit-details-marker{display:none}
.system-information>summary::after{content:"";display:block;width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);margin-left:auto;flex:none}
.system-information[open]>summary::after{transform:rotate(45deg)}
#business-panel .vehicle-edit-form{display:block;min-width:0}
#business-panel .vehicle-edit-form>label{display:grid;grid-template-columns:7em minmax(0,1fr);align-items:center;gap:10px;margin:12px 0;min-width:0;font-weight:400}
#business-panel .vehicle-edit-form>label>:is(input,select,textarea,.single-select){width:100%;min-width:0}
@media(max-width:500px){#business-panel .vehicle-edit-form>label{grid-template-columns:1fr;gap:4px}}
.resume-input-group{min-width:0;width:100%;grid-column:1/-1;border:3px dashed gray;border-radius:8px;margin:12px 0;padding:12px}
#business-panel .resume-input-group>label{display:grid;grid-template-columns:minmax(7em,10em) minmax(0,1fr);gap:10px;align-items:center;margin:8px 0}
#business-panel .resume-input-group>label>span{white-space:nowrap;font-size:24px}
.resume-service-heading{display:flex;align-items:center;gap:10px}.resume-service-heading button{min-width:36px;padding:3px 10px}
/* Reserve room for the 1216px sheet, dialog padding, borders and vertical scrollbar. */
.resume-dialog{width:min(1320px,calc(100vw - 32px));box-sizing:border-box}
.resume-dialog>:is(div,form,.single-select){min-width:0;max-width:100%}
.resume-dialog>.single-select{width:100%;margin-bottom:12px}
@media(max-width:500px){#business-panel .resume-input-group>label{grid-template-columns:7em minmax(0,1fr);gap:6px}.resume-input-group{padding:8px}}

#business-panel :is(.leave-application-fields>label,.resume-input-group,.resume-input-group>label)[hidden]{display:none!important}
@media print{
 .leave-print :is(table,tbody){border:0 solid #000}
 .leave-print tr{border:0 solid #000;border-block-width:1px}
 .leave-print .leave-print-id{color:red;print-color-adjust:exact;-webkit-print-color-adjust:exact}
}

/* Match the original paper geometry, including the scaled Bootstrap table borders. */
@media print{
 @page leave-sheet{size:A4 portrait;margin:12mm 12mm 5mm}
 .leave-print{--print-scale:.58;width:186mm;height:278mm;grid-template-rows:repeat(4,70mm)}
 .leave-print-internal{--print-scale:.69;padding-top:6mm;height:278mm;grid-template-rows:92mm 92mm 88mm}
 .leave-print-copy{display:block;position:relative;padding:0;overflow:hidden}
 .leave-print table{position:absolute;top:0;left:0;zoom:1;width:calc(100% / var(--print-scale));transform:scale(var(--copy-scale,var(--print-scale)));transform-origin:top left;font-size:16pt;margin:0}
 .leave-print table :is(th,td){padding:8px;line-height:1.5;vertical-align:middle;white-space:normal}
 .leave-print-title th:first-child{font-size:28pt}
 .leave-print-title th:nth-child(2){font-size:16pt}
 .leave-print-title th{font-size:18pt}
}
.maintenance-due{padding:12px 16px;background:#fff3cd;border:2px solid #c2410c;border-left-width:6px;border-radius:6px;color:#9a3412;font-weight:700}
#business-panel[aria-label^="公務車"] button[data-tone=primary]{background:var(--primary);border-color:var(--primary)}

.upload-previews{grid-column:1/-1;min-width:0;width:100%;margin:10px 0 16px;border:1px solid #ccd2d8;border-radius:6px;overflow:hidden;background:white;color:#343a40;font-size:16px}
.upload-preview-heading{padding:8px 12px;background:#f4f5f6;font-weight:700;border-bottom:1px solid #ccd2d8}
.upload-preview-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eee}
.upload-preview-row:last-child{border-bottom:0}
.upload-preview-image{width:72px;height:72px;object-fit:contain;border:1px solid #ddd;border-radius:4px;padding:3px;cursor:zoom-in;flex:none}
.upload-preview-details{min-width:0;flex:1;overflow-wrap:anywhere}.upload-preview-details>*{display:block}.upload-preview-details small{color:#667085}
.upload-preview-status{flex:none;background:#6c757d;color:white;border-radius:14px;padding:2px 8px;font-size:14px;font-weight:700}
.upload-preview-details .upload-preview-error{color:#b42318}
@media(max-width:420px){.upload-preview-row{flex-wrap:wrap}.upload-preview-details{flex-basis:calc(100% - 90px)}.upload-preview-status{margin-left:auto}}

@media print{.leave-print-internal table{table-layout:auto}.leave-print-internal table :is(th,td){white-space:nowrap}.leave-print-internal tr:nth-child(4) td:last-child{white-space:normal}}

#business-panel .vehicle-edit-form .vehicle-photo-limit{grid-column:2;color:#617283;font-size:14px}
@media(max-width:500px){#business-panel .vehicle-edit-form .vehicle-photo-limit{grid-column:1}}

#business-panel .filter-form>label.vehicle-mine{display:flex;align-items:center;justify-content:flex-start;gap:8px;min-width:0;width:max-content;max-width:100%;font-weight:400;white-space:nowrap}
#business-panel .filter-form>label.vehicle-mine>input[type=checkbox]{appearance:auto;display:inline-block;flex:0 0 20px;width:20px;height:20px;min-height:20px;margin:0;padding:0;border:0;border-radius:0;accent-color:#087cff}

.vehicle-status{display:inline-block;padding:6px 8px;border-radius:999px;font-size:14px;font-weight:700;line-height:1;white-space:nowrap;text-align:center;vertical-align:baseline}
.vehicle-status-open{background:#fef3c7;color:#92400e}.vehicle-status-closed{background:#dcfce7;color:#166534}



/* Single-line controls share the leave-application height; role controls and resizable textareas keep their own sizing. */
@media screen{
 :is(body,#business-panel) input:not([type=checkbox],[type=radio],[type=hidden],[type=range],[type=button],[type=submit],[type=reset],[type=image],[type=color]):not(.test-role *),
 :is(body,#business-panel) select:not(.picker-native):not(.test-role *),
 :is(body,#business-panel) .multi-select:not(.test-role *)>summary{
  box-sizing:border-box!important;height:44px!important;min-height:44px!important;max-height:44px!important;padding-block:5px!important;line-height:32px!important;
 }
 :is(body,#business-panel) input[type=file]:not(.test-role *){height:44px!important;min-height:44px!important;padding:0!important;line-height:42px!important}
 :is(body,#business-panel) input[type=file]:not(.test-role *)::file-selector-button{box-sizing:border-box!important;height:42px!important;min-height:42px!important;padding-block:0!important;line-height:42px!important;vertical-align:top!important}
}

/* Substitute identity is entered once, then shown as a compact editable summary. */
.substitute-identity-card{width:100%;max-width:480px;margin:0 auto;text-align:center;padding:22px 20px}
.substitute-identity-card h2{color:#2196f3;font-weight:400}.substitute-identity-card>p{font-size:16px;margin:12px 0 24px}
#business-panel .substitute-identity-card .punch-identity>label{display:flex;flex-direction:column;align-items:stretch;gap:5px;text-align:left;margin:0;font-size:16px}
.substitute-identity-card small{font-size:12px;color:#777}.substitute-identity-card .punch-identity>button{width:100%;margin:0}
.substitute-identity-summary{display:flex;align-items:center;justify-content:center;gap:10px;font-size:20px;margin-bottom:12px;overflow-wrap:anywhere}
#business-panel .substitute-identity-edit{flex:none;background:transparent;color:#2196f3;padding:4px 8px;min-height:32px;font-size:24px}
.substitute-punch-card>h1{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
#business-panel[aria-label="代班打卡"] .punch-recent :is(th,td){font-size:18px;font-weight:700}
#business-panel[aria-label="代班打卡"] .punch-recent td{border-top:1px solid black;border-bottom:1px solid black}
#business-panel[aria-label="代班打卡"] .punch-recent td:nth-child(2){font-size:16px}
.substitute-identity-card[hidden],.substitute-punch-card[hidden]{display:none!important}

/* Keep report contents inside the existing dialog width. */
@media screen{
 .attendance-report-dialog .attendance-sheet{width:100%;min-width:0;max-width:100%;table-layout:fixed}
 .attendance-report-dialog .attendance-sheet :is(th,td){font-size:18px;white-space:normal;overflow-wrap:anywhere;padding-inline:2px}
 .attendance-report-dialog .attendance-sheet :is(.attendance-col-2,.attendance-col-3,.attendance-col-5){white-space:normal;overflow-wrap:anywhere}
 #business-panel .attendance-report-dialog .attendance-row-actions{flex-wrap:wrap;min-width:0;max-width:100%;gap:4px}
 #business-panel .attendance-report-dialog .attendance-row-actions>button{font-size:14px;padding:4px 6px;min-width:0}
}
@media screen and (max-width:760px){
 .attendance-report-dialog .attendance-sheet tr{grid-template-columns:26px 28px minmax(0,1fr);grid-template-rows:repeat(6,min-content)}
 .attendance-report-dialog .attendance-sheet .attendance-col-7{grid-column:3;grid-row:6;justify-content:center;padding-block:4px}
 .attendance-report-dialog .attendance-sheet :is(.attendance-col-0,.attendance-col-1){grid-row:1/7}
 .attendance-report-dialog .attendance-sheet td{font-size:18px}
}
.resume-dialog>:is(div,form,.single-select){width:1216px;max-width:100%;margin-inline:auto}
.resume-dialog .resume-interview-editor{width:1216px;max-width:100%;box-sizing:border-box}
#business-panel .leave-application-fields>button[type=submit]{grid-column:1/-1;justify-self:end}
#business-panel .schedule-grid .schedule-note-cell,#business-panel .schedule-grid .schedule-note-cell button{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-width:100%;min-width:0}
.punch-card>h1{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}

@media screen and (max-width:760px){
 .attendance-report-dialog .attendance-sheet :is(.attendance-col-0,.attendance-col-1,.attendance-col-7){position:static;top:auto;left:auto;right:auto;width:auto;height:auto}
}

/* Shared spacing for normal and substitute attendance. */
.punch-card .punch-caption{margin:8px 0 0;font-size:18px;line-height:1.35}
.punch-card :is(.punch-site,.punch-distance,.punch-clock){margin:4px 0 8px;font-weight:700;line-height:1.35}
.punch-card>.error:empty,.punch-card>.muted:empty{display:none}

/* Consistent required-field feedback and compact resume editors. */
.required-mark,[data-password-rule].unmet,#password-match{color:red!important}
[data-password-rule]{color:#000}
#password-match:empty,.form-validation-message:empty{display:none}
.validation-summary,.form-validation-message{grid-column:1/-1;white-space:pre-line;max-width:100%;min-width:0;box-sizing:border-box}
#password-form>.validation-summary,#password-form>.form-validation-message{margin:0}
#business-panel:is([aria-label="打卡紀錄"],[aria-label="班別管理"],[aria-label="節點編輯"]) .data-table{font-size:15px}
#business-panel .resume-fields{gap:6px}
#business-panel .resume-fields>label,#business-panel .resume-input-group>label{margin-block:2px}
#business-panel .resume-fields>label>span{font-size:20px;white-space:normal}
#business-panel .resume-service-heading>button{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;min-width:34px;min-height:34px;max-height:34px;padding:0;border-radius:50%;font-size:24px;line-height:1;flex:none}
#business-panel .resume-service-heading>button[data-tone="danger"]{background:#f44336}
#business-panel .resume-service-heading>button[data-tone="primary"]{background:#2196f3}
@media(max-width:500px){#business-panel .resume-fields>label>span{font-size:18px}}

.schedule-grid th.schedule-holiday{color:red!important;print-color-adjust:exact;-webkit-print-color-adjust:exact}

.operation-log-detail pre{white-space:pre-wrap;overflow-wrap:anywhere;font-family:inherit;font-size:16px}.operation-log-detail{width:min(1000px,95vw)}#business-panel[aria-label="操作紀錄"] td[data-label="內容"]{white-space:pre-line;min-width:280px;max-width:550px;overflow-wrap:anywhere}


#business-panel .resume-input-group>label>span{font-size:20px;white-space:normal}.resume-input-group{margin-block:6px}
@media(max-width:500px){#business-panel .resume-input-group>label>span{font-size:18px}}

@media(max-width:500px){#business-panel .resume-editor .dialog-actions{gap:4px!important}#business-panel .resume-editor .dialog-actions>button{font-size:14px;padding:4px 6px;min-width:0;flex:0 0 auto}}

/* Match invalid picker outlines to their rounded visible controls. */
.multi-select[aria-invalid=true],.picker-native[aria-invalid=true]{outline:none!important}
.multi-select[aria-invalid=true]>summary,.picker-native[aria-invalid=true]+.single-select>summary{outline:2px solid #d32f2f!important;border-radius:6px}

/* Draw centered service controls independently of the text font baseline. */
#business-panel .resume-service-heading>button{position:relative;font-size:0}
#business-panel .resume-service-heading>button::before,#business-panel .resume-service-heading>button[data-tone="primary"]::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:currentColor;width:12px;height:2px;border:0;pointer-events:none}
#business-panel .resume-service-heading>button[data-tone="primary"]::after{width:2px;height:12px}
/* Match the leave approval editor's vertical field spacing. */
#business-panel .leave-application-fields{row-gap:8px}
#business-panel .leave-application-fields>label{margin-block:0!important}
#business-panel .leave-application-fields>label>.multi-select{margin:0}

/* Keep both recent-punch tables close to the original compact three-column layout. */
.punch-recent{min-width:0;max-width:360px;margin:8px auto;line-height:1.35}
#business-panel:is([aria-label="打卡"],[aria-label="代班打卡"]) .punch-recent :is(th,td){font-size:18px;padding:4px 1px;line-height:1.35}
.punch-recent :is(th,td):first-child,.punch-recent :is(th,td):last-child{width:auto}
.punch-recent :is(th,td):nth-child(2){width:50px}
#business-panel:is([aria-label="打卡"],[aria-label="代班打卡"]) .punch-recent td:nth-child(2){font-size:16px}
.punch-recent td.manual-punch{white-space:nowrap;overflow-wrap:normal}
@media(max-width:380px){#business-panel:is([aria-label="打卡"],[aria-label="代班打卡"]) .punch-recent td{font-size:16px}}
@media(max-width:350px){#business-panel:is([aria-label="打卡"],[aria-label="代班打卡"]) .punch-recent td:not(:nth-child(2)){font-size:14px}}

.punch-recent td{white-space:nowrap}

/* Shared viewport limit for every dialog except the fullscreen image viewer. */
dialog:not(.gallery-dialog){max-height:80dvh;overflow-y:auto;overflow-x:clip}
#business-panel .attendance-report-dialog .attendance-row-actions>button{min-height:33px;max-height:33px;height:33px}
@media screen and (min-width:761px){dialog.attendance-report-dialog{max-height:95dvh}}
@media screen and (max-width:760px){
 .attendance-report-dialog .attendance-sheet tr{grid-template-columns:30px 28px minmax(0,1fr)}
 .attendance-report-dialog .attendance-sheet .attendance-col-0{white-space:nowrap;overflow-wrap:normal;word-break:normal}
}
@media(max-width:760px){dialog.resume-dialog{overflow-x:auto}}
/* Lock the page while a modal is open, without changing its scroll position. */
@media screen{
 html:has(dialog:modal),body:has(dialog:modal){overflow:hidden;overscroll-behavior:none}
 dialog:modal{overscroll-behavior:contain}
}
/* Compact roster row frames while retaining control sizes. */
.schedule-roster-dialog .schedule-person{padding-block:4px}
.schedule-roster-dialog .schedule-person .single-select{margin-block:0;align-self:center}
.schedule-roster-dialog .schedule-person{position:relative;transition:background-color .15s,box-shadow .15s}
.schedule-roster-dialog .schedule-person.dragging{background:#e3f2fd;cursor:grabbing}
.schedule-person.drop-before{box-shadow:0 -3px #2196f3;background:#eef7ff}
.schedule-person.drop-after{box-shadow:0 3px #2196f3;background:#eef7ff}
.schedule-person[data-drop-label]::after{content:attr(data-drop-label);position:absolute;right:8px;z-index:2;background:#1565c0;color:white;font-size:14px;line-height:20px;padding:0 8px;border-radius:4px;pointer-events:none}
.schedule-person.drop-before::after{top:-12px}.schedule-person.drop-after::after{bottom:-12px}
@media(prefers-reduced-motion:reduce){.schedule-roster-dialog .schedule-person{transition:none}}
/* Full-width roster actions align with the personnel row frames. */
.schedule-roster-dialog>div:not(.business-actions)>button{margin-inline:0}
/* One outlined clear-filter style across every query form. */
#business-panel .filter-actions>button.filter-clear{background:#fff;color:#263544;border:1px solid #bac9d6;border-radius:7px;box-shadow:none;font-size:18px;font-weight:400;line-height:1.35;padding:6px 12px;min-height:36px;width:auto;margin:0}
.feedback-stack{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);overflow-y:auto;pointer-events:none}
.feedback-stack>.ui-feedback{position:static;inset:auto;transform:none;flex-shrink:0;margin:0;pointer-events:auto;max-width:100%;overflow-wrap:anywhere}
.feedback-stack{width:max-content}

/* Resume list matches the original gender-cell colors. */
.resume-sex-male{background-color:#D2E9FF}.resume-sex-other{background-color:#FFD2D2}
.resume-delete-dialog textarea{width:100%;min-height:120px;box-sizing:border-box}
@media screen{.attendance-print-host{display:none!important}}
@media print{.attendance-print-host{display:block}}

/* Apply the shared family to native controls without changing their size or weight. */
select,textarea,option,optgroup{font-family:var(--app-font)}
/* Chrome PDF maps Inter contextual punctuation alternates to private Unicode codes. */
@media print{body,body *{font-feature-settings:"calt" 0}}
/* Same Inter outlines; the OFL derivative maps tabular glyphs to real ASCII in PDFs. */
@media print{:root{--app-font:"CFW Tabular Print","Source Han Sans TW","Microsoft JhengHei",sans-serif}}
/* Keep all numeric glyphs aligned, including native controls and printed reports. */
*,::before,::after{font-variant-numeric:tabular-nums}

#password-form>.field-clear{grid-area:auto}

.schedule-grid thead th:not([rowspan]){white-space:nowrap;overflow-wrap:normal;word-break:normal}

@media screen and (min-width:960px){
 .leave-review-dialog{width:min(630px,calc(100% - 24px))}
 #business-panel .leave-review-dialog .data-table :is(th,td){white-space:nowrap;overflow-wrap:normal;word-break:normal}
 #business-panel .leave-review-dialog .leave-balances .data-table:has(th:nth-child(8)) :is(th,td){padding-inline:8px}
 #business-panel .leave-review-dialog .leave-balances .table-wrap{overflow:clip}
}

/* Lazy leave results keep desktop pagination and the original mobile card layout. */
@media screen and (max-width:959px){
 [data-lazy-table] .data-table tbody{display:flow-root;overflow-anchor:none}
 [data-lazy-table] .data-table tr:not(.virtual-spacer){content-visibility:visible;contain-intrinsic-size:none}
 [data-lazy-table] .data-table tr.virtual-spacer{display:block;margin:0;padding:0;border:0;border-radius:0;box-shadow:none;background:transparent;content-visibility:visible;contain-intrinsic-size:none;pointer-events:none}
}

/* Keep camera actions visible; the portrait preview uses the remaining space. */
#business-panel dialog.resume-camera[open]{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:12px;height:80dvh;max-height:80dvh;padding:16px;overflow:hidden}
#business-panel .resume-camera>h2,#business-panel .resume-camera>[role=status]{margin:0}
.resume-camera-frame{display:flex;align-items:center;justify-content:center;min-width:0;min-height:0}
#business-panel dialog.resume-camera .business-actions{flex-wrap:wrap!important;justify-content:center;margin:0;gap:8px}

/* Fill the native file control's content box rather than relying on a fixed button line box. */
@media screen{
 :is(body,#business-panel) input[type=file]:not(.test-role *){display:block;line-height:42px!important}
 :is(body,#business-panel) input[type=file]:not(.test-role *)::file-selector-button{display:inline-block;height:100%!important;min-height:0!important;line-height:42px!important;vertical-align:top!important}
}
.viewport-size{display:flex;flex-direction:column;flex:none;gap:0;margin-right:auto;font-size:12px;line-height:1.5;white-space:nowrap;min-width:62px}
.resume-original-images:empty{display:none}
.resume-original-images{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.resume-signature-dialog .signature-canvas{width:600px;max-width:100%;height:auto;touch-action:auto;cursor:default}
#business-panel .resume-photo-controls>button{margin-left:0}
.resume-photo-controls .signature-preview{width:600px;max-width:100%;height:auto}
.test-role:has(+.viewport-size:not(.hidden)){margin-right:0}
@media(max-width:500px){
 .topbar:has(.viewport-size:not(.hidden)){gap:6px}
 .topbar:has(.viewport-size:not(.hidden)) .test-role .single-select{width:clamp(80px,calc(100vw - 242px),160px)}
 .topbar:has(.viewport-size:not(.hidden)) .test-role .single-select summary{display:block;line-height:34px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}
@media(max-width:959px){body:has(#sidebar.open:not(.hidden)) .viewport-size{visibility:hidden}}
@media print{.viewport-size{display:none!important}}

.browser-check{max-width:760px}.browser-check p{overflow-wrap:anywhere}.browser-check-actions{display:flex;flex-wrap:wrap;gap:12px}.browser-check-actions .button,.browser-check-actions button{max-width:100%;white-space:normal}.browser-check input{width:100%;min-width:0}

/* LINE entry interstitial never exposes application chrome or login content. */
body.line-browser .topbar,body.line-browser .sidebar,body.line-browser #menu-toggle,body.line-browser #menu-edge,body.line-browser #menu-backdrop,body.line-browser .skip-link,body.line-browser #notice{display:none!important}
body.line-browser #main{margin-left:0;padding:24px 16px}
body.line-browser .browser-check{margin:0 auto}

.schedule-leave-details .leave-detail+.leave-detail{margin-top:24px;padding-top:24px;border-top:1px solid var(--border)}
