I spent a lot of time customizing the cas-overlay.
I hope this structure can help some people.
src
└── main
└── resources
├── cas_audit.log
├── cas.log
├── esig.properties
├── messages_fr.properties
├── messages.properties
├── perfStats.log
├── services
├── static
│ └── themes
│ └── esig
│ ├── css
│ │ └── cas.css
│ ├── images
│ │ ├── apereo-logo.png
│ │ ├── cas-logo.png
│ │ └── logo.png
│ └── js
│ └── cas.js
└── templates
├── esig
│ ├── casAcceptableUsagePolicyView.html
│ ├── casAccountDisabledView.html
│ ├── casAccountLockedView.html
│ ├── casAuthenticationBlockedView.html
│ ├── casAuthyLoginView.html
│ ├── casAzureAuthenticatorLoginView.html
│ ├── casBadHoursView.html
│ ├── casBadWorkstationView.html
│ ├── casConfirmLogoutView.html
│ ├── casConfirmView.html
│ ├── casConsentLogoutView.html
│ ├── casConsentReviewView.html
│ ├── casConsentView.html
│ ├── casDuoLoginView.html
│ ├── casExpiredPassView.html
│ ├── casGenericSuccessView.html
│ ├── casGoogleAuthenticatorLoginView.html
│ ├── casGoogleAuthenticatorRegistrationView.html
│ ├── casGuaDisplayUserGraphicsView.html
│ ├── casGuaGetUserIdView.html
│ ├── casInterruptView.html
│ ├── casLoginMessageView.html
│ ├── casLoginView.html
│ ├── casLogoutView.html
│ ├── casMfaRegisterDeviceView.html
│ ├── casMustChangePassView.html
│ ├── casPac4jStopWebflow.html
│ ├── casPasswordUpdateSuccessView.html
│ ├── casPropagateLogoutView.html
│ ├── casRadiusLoginView.html
│ ├── casResetPasswordErrorView.html
│ ├── casResetPasswordSendInstructionsView.html
│ ├── casResetPasswordSentInstructionsView.html
│ ├── casResetPasswordVerifyQuestionsView.html
│ ├── casRiskAuthenticationBlockedView.html
│ ├── casServiceErrorView.html
│ ├── casSurrogateAuthnListView.html
│ ├── casSwivelLoginView.html
│ ├── casU2fLoginView.html
│ ├── casU2fRegistrationView.html
│ ├── casYubiKeyLoginView.html
│ ├── casYubiKeyRegistrationView.html
│ ├── error
│ │ ├── 401.html
│ │ ├── 403.html
│ │ ├── 404.html
│ │ ├── 405.html
│ │ └── 423.html
│ ├── error.html
│ ├── layout.html
│ ├── monitoring
│ │ ├── attrresolution.html
│ │ ├── layout.html
│ │ ├── viewAuthenticationEvents.html
│ │ ├── viewConfig.html
│ │ ├── viewConfigMetadata.html
│ │ ├── viewDashboard.html
│ │ ├── viewLoggingConfig.html
│ │ ├── viewSsoSessions.html
│ │ ├── viewStatistics.html
│ │ └── viewTrustedDevices.html
│ └── protocol
│ ├── 2.0
│ │ ├── casProxyFailureView.html
│ │ ├── casProxySuccessView.html
│ │ ├── casServiceValidationFailure.html
│ │ └── casServiceValidationSuccess.html
│ ├── 3.0
│ │ ├── casServiceValidationFailure.html
│ │ └── casServiceValidationSuccess.html
│ ├── casAcceptableUsagePolicyView.html
│ ├── casAccountDisabledView.html
│ ├── casAccountLockedView.html
│ ├── casAuthenticationBlockedView.html
│ ├── casAuthyLoginView.html
│ ├── casAzureAuthenticatorLoginView.html
│ ├── casBadHoursView.html
│ ├── casBadWorkstationView.html
│ ├── casConfirmLogoutView.html
│ ├── casConfirmView.html
│ ├── casConsentLogoutView.html
│ ├── casConsentReviewView.html
│ ├── casConsentView.html
│ ├── casDuoLoginView.html
│ ├── casExpiredPassView.html
│ ├── casGenericSuccessView.html
│ ├── casGoogleAuthenticatorLoginView.html
│ ├── casGoogleAuthenticatorRegistrationView.html
│ ├── casGuaDisplayUserGraphicsView.html
│ ├── casGuaGetUserIdView.html
│ ├── casInterruptView.html
│ ├── casLoginMessageView.html
│ ├── casLoginView.html
│ ├── casLogoutView.html
│ ├── casMfaRegisterDeviceView.html
│ ├── casMustChangePassView.html
│ ├── casPac4jStopWebflow.html
│ ├── casPasswordUpdateSuccessView.html
│ ├── casPostResponseView.html
│ ├── casPropagateLogoutView.html
│ ├── casRadiusLoginView.html
│ ├── casResetPasswordErrorView.html
│ ├── casResetPasswordSendInstructionsView.html
│ ├── casResetPasswordSentInstructionsView.html
│ ├── casResetPasswordVerifyQuestionsView.html
│ ├── casRiskAuthenticationBlockedView.html
│ ├── casServiceErrorView.html
│ ├── casSurrogateAuthnListView.html
│ ├── casSwivelLoginView.html
│ ├── casU2fLoginView.html
│ ├── casU2fRegistrationView.html
│ ├── casYubiKeyLoginView.html
│ ├── casYubiKeyRegistrationView.html
│ ├── error.html
│ ├── layout.html
│ ├── oauth
│ │ └── confirm.html
│ ├── oidc
│ │ └── confirm.html
│ └── openid
│ ├── casOpenIdAssociationSuccessView.html
│ ├── casOpenIdServiceFailureView.html
│ ├── casOpenIdServiceSuccessView.html
│ └── user.html
└── fragments
├── bottom.html
├── cas-resources-list.html
├── cookies.html
├── defaultauthn.html
├── footerButtons.html
├── footer.html
├── head.html
├── insecure.html
├── loginform.html
├── loginProviders.html
├── loginsidebar.html
├── logo.html
├── modal.html
├── pwdupdateform.html
├── serviceui.html
└── top.html
Bold is folder
esig.properties contains :
standard.custom.css.file=/themes/esig/css/cas.css
cas.javascript.file=/themes/esig/js/cas.js
I hope this can help you !!!