/* Private Android presentation only. No table column hiding or finance logic. */
.portal-android .android-sidebar-link{display:none!important}
.android-account-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}
.android-account-links .btn{min-height:44px}
.android-sidebar-link{display:block;color:#d9edc3;text-decoration:none;font-size:12px;padding:12px 4px;min-height:44px}
.sidebar-foot:has(.android-sidebar-link){flex-wrap:wrap}.sidebar-foot .android-sidebar-link{flex-basis:100%}
.login-support .android-login-link{font-size:13px;display:inline-flex;align-items:center;min-height:40px;margin-left:12px}
.portal-android .pwa-install,.portal-android .android-login-link{display:none!important}
.portal-android .android-native-note{display:block}
.android-native-note{display:none}
.android-download-page{background:#f4f7f5;color:#132c35;margin:0;padding:24px max(16px,env(safe-area-inset-right)) max(32px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));font-family:system-ui,sans-serif}
.android-card{box-sizing:border-box;width:100%;max-width:920px;margin:0 auto;background:white;border:1px solid #dce7e2;border-radius:24px;padding:clamp(20px,4vw,44px);box-shadow:0 12px 42px #132c3509}
.android-back{display:inline-flex;align-items:center;min-height:44px;color:#0a796b;text-decoration:none;margin-bottom:20px}
.android-hero{display:flex;align-items:center;gap:24px;margin-bottom:28px}.android-hero img{flex:none;border-radius:22px}.android-hero h1{font-size:clamp(26px,5vw,38px);line-height:1.15;margin:10px 0}
.android-card p,.android-card li{font-size:16px;line-height:1.65;color:#51666e;overflow-wrap:anywhere}
.android-card h2{font-size:19px;line-height:1.4;margin:0 0 10px}.android-card .btn{min-height:48px;white-space:normal;text-align:center;text-decoration:none}
.android-features{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.android-features section{padding:20px;background:#f5f8f6;border:1px solid #e5ece7;border-radius:16px}.android-features p{font-size:14px;margin:0}
.android-release{padding:24px 0;margin:8px 0 24px;border-bottom:1px solid #e5ece7}.android-version{display:block;font-size:14px;color:#52676f;margin-bottom:14px}.android-release details{margin-top:18px;font-size:13px}.android-release summary{min-height:44px;cursor:pointer;display:flex;align-items:center}.android-hash{display:block;overflow-wrap:anywhere;word-break:break-all;font-size:12px;line-height:1.7}
.android-notice{border-left:4px solid #0d8878;padding:20px;background:#edf6f1;border-radius:10px;margin:24px 0}.android-notice p{font-size:14px;margin-bottom:0}.android-card .android-footnote{font-size:13px;margin-top:24px}
.android-device{padding:22px;border:1px solid #dce7e2;border-radius:16px;margin:20px 0}
@media(max-width:620px){.android-hero{align-items:flex-start;flex-direction:column;gap:8px}.android-features{grid-template-columns:1fr}.android-card .primary{width:100%}.android-download-page{padding-top:16px}}
/* Native workspace: scalable text and content-driven heights. Android applies
   the user's font scale once in WebView; do not multiply it again in CSS/JS. */
.portal-android body{font-family:system-ui,-apple-system,"Segoe UI",sans-serif;font-size:1rem;line-height:1.55}
/* rem preserves user text scaling. Compact workspace overrides below never
   shrink touch targets or hide columns to make the screen appear to fit. */
.portal-android .page-heading h1,.portal-android .report-hero h1{font-size:clamp(1.375rem,1.7vw,1.5rem);line-height:1.3}
.portal-android .android-hero h1,.portal-android .android-card>h1,.portal-android .device-card h1{font-size:1.5rem;line-height:1.3;overflow-wrap:anywhere}
.portal-android .page-heading p,.portal-android .report-hero p,.portal-android .panel-head p,.portal-android .legend,.portal-android .breakdown-row,.portal-android .quick-item strong,.portal-android .note-card p,.portal-android .empty-state p{font-size:.875rem;line-height:1.5}
.portal-android .eyebrow,.portal-android .page-heading .eyebrow,.portal-android .nav-label{font-size:.75rem;line-height:1.5;letter-spacing:.08em}
.portal-android .btn,.portal-android .btn.small,.portal-android .report-action-group .btn,.portal-android .page-heading .actions>.btn{font-size:.875rem;min-height:48px;white-space:normal;overflow-wrap:anywhere}
.portal-android .icon-btn,.portal-android .topbar .icon-btn,.portal-android .topbar .user-menu{min-width:48px;min-height:48px}
.portal-android .topbar{height:auto;min-height:72px}
.portal-android .breadcrumb,.portal-android .topbar .breadcrumb b,.portal-android .user-menu{font-size:1rem;line-height:1.4}
.portal-android .topbar-left{flex:1 1 0}.portal-android .topbar-right{max-width:100%}
.portal-android .local-chip,.portal-android .app-footer,.portal-android .workspace-label small,.portal-android .sidebar-foot{font-size:.75rem}
.portal-android .nav-link{font-size:.875rem;min-height:48px;line-height:1.45}
.portal-android .nav-sub,.portal-android .workspace-label strong,.portal-android .android-sidebar-link{font-size:.875rem}
.portal-android .metric-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,10rem),1fr))}
.portal-android .metric{padding:.75rem;min-height:0;overflow-wrap:anywhere}
.portal-android .metric-top{font-size:.875rem;line-height:1.4;align-items:flex-start}
.portal-android .metric-value{font-size:1.75rem;line-height:1.25}
.portal-android .metric-note,.portal-android .mini-metric span,.portal-android .quick-item small{font-size:.8125rem;line-height:1.5}
.portal-android .metric-note{flex-wrap:wrap}.portal-android .metric-icon{flex:none}
.portal-android .mini-metrics{grid-template-columns:repeat(auto-fit,minmax(min(100%,7rem),1fr))}
.portal-android .mini-metric{border:1px solid #e4ebe8}.portal-android .mini-metric:before{display:none!important}
.portal-android .mini-metric b{font-size:1.375rem;line-height:1.4}
.portal-android .dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr))}
.portal-android .panel-head{flex-wrap:wrap}.portal-android .panel-head h3,.portal-android .table-head h3{font-size:1rem}
.portal-android .donut{width:10rem;height:10rem;max-width:100%}.portal-android .donut-inner{width:8rem;height:8rem;max-width:85%}
.portal-android .donut-inner b{font-size:1.8rem}.portal-android .donut-inner small{font-size:.8125rem}
.portal-android .report-tab-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,8rem),1fr))}
.portal-android .report-tab{font-size:.875rem;min-height:48px}
.portal-android .report-tabs-label,.portal-android .report-action-label,.portal-android .report-toolbar-note,.portal-android .table-head small,.portal-android .pagination{font-size:.8125rem;line-height:1.5}
.portal-android .table-wrap table,.portal-android .table-wrap .person strong{font-size:.875rem}
.portal-android .table-wrap th,.portal-android .table-wrap .person small,.portal-android .table-wrap .badge{font-size:.8125rem;line-height:1.5}
.portal-android .table-wrap td{line-height:1.5}.portal-android .table-wrap .btn{font-size:.875rem;min-height:48px}
.portal-android .table-wrap th.column-id,.portal-android .table-wrap td.column-id{max-width:none;min-width:4.5em}
.portal-android .table-wrap .cell-code{font-size:.8125rem}
.portal-android .table-navigator button,.portal-android .table-navigator input[type=range]{height:48px;min-height:48px}
.portal-android .table-navigator button{width:48px}.portal-android .table-navigator button svg{width:18px;height:18px}
.portal-android .form-grid,.portal-android .detail-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr))}
.portal-android .settings-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr))}
.portal-android .annual-totals,.portal-android .month-numbers{grid-template-columns:repeat(auto-fit,minmax(min(100%,8rem),1fr))}
.portal-android .year-months{grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr))}
.portal-android .annual-heading h2{font-size:1.375rem}.portal-android .year-month h3,.portal-android .month-numbers b{font-size:1rem}
.portal-android .annual-totals small,.portal-android .month-numbers small,.portal-android .annual-heading p,.portal-android .year-note{font-size:.8125rem;line-height:1.5}
.portal-android .annual-totals strong{font-size:1.375rem}
.portal-android .attendance-log,.portal-android .attendance-log th,.portal-android .attendance-log td{font-size:.875rem;min-width:5.5em;max-width:none}
.portal-android .attendance-log thead small,.portal-android .attendance-log-summary span{font-size:.8125rem}
.portal-android .form-grid label,.portal-android .filter-field label,.portal-android .detail-grid small,.portal-android .login-form form>label{font-size:.875rem;line-height:1.5}
/* Keep accessible hidden labels inside their own checkbox cell, not the outer
   dialog's scroll area. All permission columns remain horizontally reachable. */
.portal-android .permission-toggle{position:relative;min-width:48px;min-height:48px}
.portal-android .field-help,.portal-android .login-form .trust-help{font-size:.8125rem;line-height:1.6}
.portal-android input:not([type=checkbox]):not([type=radio]):not([type=range]):not(.searchable-select-native),.portal-android select:not(.searchable-select-native),.portal-android textarea{font-size:1rem;min-height:3rem;height:auto;line-height:1.5}
.portal-android .searchable-select-list button{font-size:.9375rem;min-height:48px}
.portal-android .detail-grid strong,.portal-android .check-field>label{font-size:.9375rem}
.portal-android .modal-header h2{font-size:1.25rem;line-height:1.35}
.portal-android .login-form h2{font-size:1.5rem;line-height:1.35}
.portal-android .login-form>p,.portal-android .login-support p{font-size:.9375rem;line-height:1.6}
.portal-android .login-form .check-field>label{font-size:.875rem}
.portal-android .form-actions{flex-wrap:wrap}.portal-android dialog{scroll-padding-block:6rem}
.portal-android #main .month-picker input[type=month]{font-size:1rem;max-width:100%}
.portal-android .month-picker-readable>span{font-size:1rem;line-height:1.5}
@media(max-width:760px){
 .portal-android body{--mobile-nav-space:max(calc(66px + env(safe-area-inset-bottom)),var(--android-nav-height,0px))}
 .portal-android .topbar{flex-wrap:wrap;gap:8px}.portal-android .topbar-left{min-width:min(100%,140px)}
 .portal-android .topbar .breadcrumb{font-size:0}
 .portal-android .mini-metrics{grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr))}
 .portal-android #mobile-navigation:not([hidden]){min-height:calc(66px + env(safe-area-inset-bottom));flex-wrap:wrap}
 .portal-android #mobile-navigation a,.portal-android #mobile-navigation button{font-size:.75rem;min-width:max-content;min-height:54px;line-height:1.4}
 .portal-android #mobile-navigation span{white-space:nowrap}
 .portal-android #main{padding-bottom:5rem}
 .portal-android #mobile-menu-close{min-width:48px;min-height:48px;right:4px;top:8px}
 .portal-android .app-footer{flex-wrap:wrap}
}
@media(max-width:420px){
 /* Give the title a full line, leaving the close button a stable touch target. */
 .portal-android .modal-header{display:grid;grid-template-columns:minmax(0,1fr) 48px;gap:8px}
 .portal-android .modal-header>div{display:contents}
 .portal-android .modal-header .eyebrow{grid-column:1;grid-row:1;align-self:center;margin:0}
 .portal-android .modal-header .icon-btn{grid-column:2;grid-row:1}
 .portal-android .modal-header h2{grid-column:1/-1;grid-row:2}
}
/* Android compact workspace. All menu text can wrap; the WHOLE drawer scrolls
   on short/enlarged screens instead of leaving a zero-height navigation area.
   Keep it above the sticky topbar (75), table controls (95) and assistant. */
.portal-android body{font-size:.875rem}
.portal-android #sidebar{z-index:110;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.portal-android #sidebar .brand,.portal-android .workspace-label,.portal-android .sidebar-foot{flex-shrink:0}
.portal-android #navigation{flex:1 0 auto;overflow:visible;min-height:0}
.portal-android .nav-link{font-size:.8125rem;line-height:1.5;min-height:48px;padding:8px 10px;gap:10px;max-width:100%}
.portal-android .nav-link>span{min-width:0;white-space:normal;overflow-wrap:anywhere}
.portal-android .nav-link .icon{flex:none}
.portal-android .nav-sub{font-size:.8125rem;margin-left:18px;padding-left:12px}
.portal-android .nav-label{font-size:.6875rem;letter-spacing:.06em}
.portal-android #sidebar .brand{gap:8px;padding:10px 8px;margin-bottom:12px}
.portal-android #sidebar .brand-mark{flex:none;width:40px;min-width:40px;height:40px;font-size:.875rem}
.portal-android #sidebar .brand-mark:not(:has(img)){width:auto;min-width:40px;height:auto;min-height:40px;padding:8px 6px;overflow:visible}
.portal-android #sidebar .brand-copy{flex:1;max-width:none;font-size:.8125rem;line-height:1.45;letter-spacing:0}
.portal-android #brand-context{max-width:none;font-size:.6875rem;letter-spacing:.04em}
.portal-android .workspace-label{padding:10px;gap:8px;margin-bottom:12px}
.portal-android .workspace-label strong{font-size:.8125rem}.portal-android .workspace-label small{font-size:.6875rem}
.portal-android .workspace-avatar,.portal-android .avatar,.portal-android .table-wrap .avatar{flex:0 0 auto;width:auto;min-width:30px;height:auto;min-height:30px;padding:6px;font-size:.6875rem;line-height:1.4}
.portal-android .sidebar-foot{padding-top:10px;font-size:.6875rem}
.portal-android .page-heading h1,.portal-android .report-hero h1{font-size:1.25rem;line-height:1.3;letter-spacing:-.3px}
.portal-android .page-heading p,.portal-android .report-hero p,.portal-android .panel-head p,.portal-android .metric-top{font-size:.8125rem}
.portal-android .btn,.portal-android .btn.small,.portal-android .report-action-group .btn,.portal-android .page-heading .actions>.btn,.portal-android .table-wrap .btn{font-size:.8125rem;min-height:48px;padding:8px 10px}
.portal-android .metric-value{font-size:1.5rem}.portal-android .metric-note{font-size:.75rem}
.portal-android .panel-head h3,.portal-android .table-head h3{font-size:.9375rem}
.portal-android .table-wrap table,.portal-android .table-wrap .person strong{font-size:.8125rem}
.portal-android .table-wrap th,.portal-android .table-wrap .person small,.portal-android .table-wrap .badge,.portal-android .table-wrap .cell-code{font-size:.75rem}
.portal-android .table-wrap th,.portal-android .table-wrap td{padding:8px 10px}
.portal-android .table-wrap .person{min-width:0;white-space:normal;overflow-wrap:anywhere}
.portal-android .table-wrap .row-actions{gap:6px}
.portal-android .filter-field label,.portal-android .form-grid label,.portal-android .detail-grid small{font-size:.8125rem}
.portal-android .field-help,.portal-android .table-head small,.portal-android .pagination{font-size:.75rem}
.portal-android input:not([type=checkbox]):not([type=radio]):not([type=range]):not(.searchable-select-native),.portal-android select:not(.searchable-select-native),.portal-android textarea{font-size:.9375rem;min-height:48px}
.portal-android .modal-header h2{font-size:1.125rem}
@media(max-width:760px){
 .portal-android body.nav-open #nav-overlay{z-index:105}
 .portal-android #sidebar{width:min(320px,calc(100vw - 24px));padding:12px;scroll-padding-block:60px 16px}
 .portal-android #mobile-menu-close{position:sticky;inset:0 auto auto;align-self:flex-end;flex:none;margin-bottom:-48px;background:#15323b;z-index:3}
 .portal-android #sidebar .brand{margin:0 48px 12px 0}
 .portal-android .topbar{min-height:60px;padding-block:6px}
 .portal-android .topbar .breadcrumb b{font-size:.875rem}
 .portal-android .page-heading,.portal-android .report-hero,.portal-android .filters,.portal-android .panel-head,.portal-android .panel-body,.portal-android .table-head,.portal-android .report-tabs,.portal-android .report-toolbar{padding:12px}
 .portal-android .page-heading,.portal-android .report-hero,.portal-android .filters{margin-bottom:12px}
 .portal-android .page-heading .actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));gap:8px}
 .portal-android .page-heading .actions>.month-picker{grid-column:1/-1}
 .portal-android .pagination{padding:10px;gap:8px}.portal-android .pagination .actions{gap:6px}
 .portal-android .form-grid,.portal-android .detail-grid{gap:14px}
 .portal-android #modal-body,.portal-android .modal-header{padding:12px}
}
@media(min-width:360px) and (max-width:760px){
 .portal-android #main:has([data-action="employee-roster"]) .filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
 .portal-android #main:has([data-action="employee-roster"]) .filter-field{min-width:0}
 .portal-android #main:has([data-action="employee-roster"]) .filter-search,.portal-android #main:has([data-action="employee-roster"]) .filters>.btn{grid-column:1/-1}
}
/* Native-only, short composited transitions. Quiet refresh never restarts them. */
@media(prefers-reduced-motion:no-preference){
 .portal-android #main>.fade-in{animation:android-page-in 180ms ease-out both}
 .portal-android dialog[open]{animation:android-dialog-in 160ms ease-out}
 .portal-android .btn,.portal-android .icon-btn,.portal-android #mobile-navigation a,.portal-android #mobile-navigation button{transition:transform 100ms ease,background-color 140ms ease}
 .portal-android .btn:active,.portal-android .icon-btn:active,.portal-android #mobile-navigation a:active,.portal-android #mobile-navigation button:active{transform:scale(.98)}
 .android-download-page .android-hero{animation:android-page-in 220ms ease-out both}
}
@keyframes android-page-in{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
@keyframes android-dialog-in{from{opacity:.6;transform:translateY(8px) scale(.99)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.portal-android *, .android-download-page *{animation-duration:0s!important;transition-duration:0s!important;scroll-behavior:auto!important}}
@media print{.android-account-links,.android-sidebar-link{display:none!important}}
