/* GoAppsFW UI shell helpers: themes, page transitions, loader, login motion */
.go-page-enter { animation-duration: 220ms; animation-timing-function: ease-out; animation-fill-mode: backwards; }
.go-transition-fade { animation-name: goFadeIn; }
.go-transition-slide-up { animation-name: goSlideUp; }
.go-transition-slide-down { animation-name: goSlideDown; }
.go-transition-zoom-soft { animation-name: goZoomSoft; }
@keyframes goFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes goSlideUp { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }
@keyframes goSlideDown { from { opacity: 0; transform: translateY(-14px); } to { opacity: 1; transform: translateY(0); } }
@keyframes goZoomSoft { from { opacity: 0; transform: scale(.985); } to { opacity: 1; transform: scale(1); } }

.go-page-loader { position: fixed; inset: 0; z-index: 5000; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,.72); backdrop-filter: blur(3px); }
[data-bs-theme="dark"] .go-page-loader { background: rgba(0,0,0,.58); }
.go-loader-panel { min-width: 180px; padding: 1.5rem; border-radius: 1rem; text-align: center; background: var(--bs-body-bg); color: var(--bs-body-color); box-shadow: 0 1rem 3rem rgba(0,0,0,.18); }
.go-loader-dots, .go-loader-pulse, .go-loader-bar { display: none; }
.go-loader-style-dots .go-loader-spinner, .go-loader-style-pulse .go-loader-spinner, .go-loader-style-bar .go-loader-spinner { display: none; }
.go-loader-style-dots .go-loader-dots { display: inline-flex; gap: .35rem; }
.go-loader-dots span { width: .55rem; height: .55rem; border-radius: 999px; background: var(--bs-primary); animation: goDot 850ms infinite ease-in-out; }
.go-loader-dots span:nth-child(2) { animation-delay: 120ms; }
.go-loader-dots span:nth-child(3) { animation-delay: 240ms; }
@keyframes goDot { 0%, 80%, 100% { transform: scale(.7); opacity: .45; } 40% { transform: scale(1); opacity: 1; } }
.go-loader-style-pulse .go-loader-pulse { display: inline-block; width: 2.5rem; height: 2.5rem; border-radius: 999px; background: var(--bs-primary); animation: goPulse 950ms infinite ease-in-out; }
@keyframes goPulse { 0% { transform: scale(.65); opacity: .45; } 50% { transform: scale(1); opacity: .9; } 100% { transform: scale(.65); opacity: .45; } }
.go-loader-style-bar .go-loader-bar { display: block; width: 180px; height: .42rem; overflow: hidden; border-radius: 999px; background: var(--bs-secondary-bg); }
.go-loader-bar span { display: block; height: 100%; width: 42%; border-radius: inherit; background: var(--bs-primary); animation: goBar 1s infinite ease-in-out; }
@keyframes goBar { from { transform: translateX(-100%); } to { transform: translateX(260%); } }

.go-login-page { min-height: 100vh; }
.go-login-gradient { background: linear-gradient(135deg, #0d6efd, #6610f2, #20c997); background-size: 300% 300%; animation: goGradientMove 14s ease infinite; }
@keyframes goGradientMove { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
.go-login-gradient .card, .go-login-floating-shapes .card, .go-login-glass .card { animation: goLoginRise 320ms ease-out both; }
@keyframes goLoginRise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
.go-login-floating-shapes { background: radial-gradient(circle at 15% 20%, rgba(13,110,253,.22), transparent 28%), radial-gradient(circle at 82% 18%, rgba(32,201,151,.22), transparent 24%), radial-gradient(circle at 50% 90%, rgba(102,16,242,.18), transparent 30%), var(--bs-body-bg); }
.go-login-glass { background: linear-gradient(135deg, rgba(13,110,253,.35), rgba(32,201,151,.24)), var(--bs-body-bg); }
.go-login-glass .card { background: rgba(255,255,255,.78); backdrop-filter: blur(12px); }
[data-bs-theme="dark"] .go-login-glass .card { background: rgba(20,24,31,.78); }
@media (prefers-reduced-motion: reduce) { .go-page-enter, .go-login-gradient, .go-login-gradient .card, .go-login-floating-shapes .card, .go-login-glass .card, .go-loader-dots span, .go-loader-pulse, .go-loader-bar span { animation: none !important; } }

/* Dark-mode hardening for legacy Bootstrap utility classes used by the shell. */
[data-bs-theme="dark"] body.bg-light,
[data-bs-theme="dark"] .bg-light {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
}
[data-bs-theme="dark"] .bg-white,
[data-bs-theme="dark"] .sidebar.bg-white {
  background-color: var(--bs-tertiary-bg) !important;
  color: var(--bs-body-color) !important;
}
[data-bs-theme="dark"] .border-end,
[data-bs-theme="dark"] .border,
[data-bs-theme="dark"] .border-top,
[data-bs-theme="dark"] .border-bottom,
[data-bs-theme="dark"] .border-start {
  border-color: var(--bs-border-color) !important;
}
[data-bs-theme="dark"] .card,
[data-bs-theme="dark"] .modal-content,
[data-bs-theme="dark"] .dropdown-menu {
  background-color: var(--bs-body-bg);
  color: var(--bs-body-color);
}
[data-bs-theme="dark"] .table {
  --bs-table-bg: transparent;
  --bs-table-color: var(--bs-body-color);
  --bs-table-border-color: var(--bs-border-color);
}
[data-bs-theme="dark"] .text-muted {
  color: var(--bs-secondary-color) !important;
}
[data-bs-theme="dark"] .nav-link,
[data-bs-theme="dark"] .nav-link:visited {
  color: var(--bs-body-color);
}
[data-bs-theme="dark"] .nav-link:hover,
[data-bs-theme="dark"] .nav-link.active {
  color: var(--bs-link-color);
}
[data-bs-theme="dark"] .form-control,
[data-bs-theme="dark"] .form-select,
[data-bs-theme="dark"] .input-group-text {
  background-color: var(--bs-body-bg);
  color: var(--bs-body-color);
  border-color: var(--bs-border-color);
}
[data-bs-theme="dark"] .form-control::placeholder {
  color: var(--bs-secondary-color);
}

/* Dark-mode navigation tree hardening. The shell has legacy text-dark classes in sidebar links. */
[data-bs-theme="dark"] .sidebar .text-dark,
[data-bs-theme="dark"] .sidebar .nav-tree-main.text-dark,
[data-bs-theme="dark"] .sidebar .nav-link.text-dark,
[data-bs-theme="dark"] .sidebar .nav-toggle-btn,
[data-bs-theme="dark"] .sidebar .nav-toggle-btn .nav-tree-main,
[data-bs-theme="dark"] .sidebar .nav-title,
[data-bs-theme="dark"] .sidebar .nav-icon-slot,
[data-bs-theme="dark"] .sidebar .nav-icon-slot i {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .sidebar .nav-link:hover,
[data-bs-theme="dark"] .sidebar .nav-toggle-btn:hover {
  background-color: rgba(255,255,255,.075) !important;
  color: var(--bs-link-color) !important;
}

[data-bs-theme="dark"] .sidebar .nav-link.active,
[data-bs-theme="dark"] .sidebar .nav-link.active .nav-title,
[data-bs-theme="dark"] .sidebar .nav-link.active .nav-icon-slot,
[data-bs-theme="dark"] .sidebar .nav-link.active i {
  color: #fff !important;
}

[data-bs-theme="dark"] .sidebar .nav-chevron-slot i,
[data-bs-theme="dark"] .sidebar .text-muted {
  color: var(--bs-secondary-color) !important;
}

/* Dark-mode hardening for custom/non-Bootstrap panels used by tools such as layout_editor. */
[data-bs-theme="dark"] .goapps-layout-board,
[data-bs-theme="dark"] .layout-editor-board,
[data-bs-theme="dark"] .layout-editor-panel,
[data-bs-theme="dark"] .go-custom-panel,
[data-bs-theme="dark"] .go-preview-panel {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .goapps-layout-board .group-shell,
[data-bs-theme="dark"] .goapps-layout-board .field-item,
[data-bs-theme="dark"] .layout-editor-board .group-shell,
[data-bs-theme="dark"] .layout-editor-board .field-item,
[data-bs-theme="dark"] .go-custom-panel,
[data-bs-theme="dark"] .go-preview-panel,
[data-bs-theme="dark"] .custom-modal,
[data-bs-theme="dark"] .custom-modal-content,
[data-bs-theme="dark"] .custom-dialog,
[data-bs-theme="dark"] .custom-dialog-content,
[data-bs-theme="dark"] .popup-panel,
[data-bs-theme="dark"] .floating-panel,
[data-bs-theme="dark"] .overlay-panel {
  background: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .goapps-layout-board .group-head,
[data-bs-theme="dark"] .layout-editor-board .group-head,
[data-bs-theme="dark"] .custom-modal-header,
[data-bs-theme="dark"] .custom-dialog-header,
[data-bs-theme="dark"] .popup-panel-header {
  background: var(--bs-tertiary-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .goapps-layout-board .field-item:hover,
[data-bs-theme="dark"] .layout-editor-board .field-item:hover {
  background: var(--bs-secondary-bg) !important;
}

[data-bs-theme="dark"] .goapps-layout-board .text-dark,
[data-bs-theme="dark"] .goapps-layout-board .field-meta,
[data-bs-theme="dark"] .layout-editor-board .text-dark,
[data-bs-theme="dark"] .layout-editor-board .field-meta,
[data-bs-theme="dark"] .go-custom-panel .text-dark,
[data-bs-theme="dark"] .go-preview-panel .text-dark {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .goapps-layout-board .text-muted,
[data-bs-theme="dark"] .layout-editor-board .text-muted,
[data-bs-theme="dark"] .go-custom-panel .text-muted,
[data-bs-theme="dark"] .go-preview-panel .text-muted {
  color: var(--bs-secondary-color) !important;
}

[data-bs-theme="dark"] #layoutPreviewText,
[data-bs-theme="dark"] #layoutPreviewText .bg-white,
[data-bs-theme="dark"] #layoutPreviewText .bg-light,
[data-bs-theme="dark"] .layout-preview,
[data-bs-theme="dark"] .layout-preview .bg-white,
[data-bs-theme="dark"] .layout-preview .bg-light {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] #layoutPreviewText .border,
[data-bs-theme="dark"] .layout-preview .border,
[data-bs-theme="dark"] .goapps-layout-board .border,
[data-bs-theme="dark"] .layout-editor-board .border {
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .modal-backdrop {
  background-color: #000 !important;
}

/* Dark-mode hardening for Module Builder custom modal wrappers. */
[data-bs-theme="dark"] .mb-overlay,
[data-bs-theme="dark"] #modalBackdrop.mb-overlay {
  background: rgba(0,0,0,.72) !important;
}

[data-bs-theme="dark"] .mb-modal,
[data-bs-theme="dark"] #moduleModalWrap.mb-modal,
[data-bs-theme="dark"] #fieldModalWrap.mb-modal {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .mb-modal .modal-content,
[data-bs-theme="dark"] #moduleModalWrap .modal-content,
[data-bs-theme="dark"] #fieldModalWrap .modal-content {
  --bs-modal-bg: var(--bs-body-bg) !important;
  --bs-modal-color: var(--bs-body-color) !important;
  --bs-modal-border-color: var(--bs-border-color) !important;
  --bs-modal-header-border-color: var(--bs-border-color) !important;
  --bs-modal-footer-border-color: var(--bs-border-color) !important;
  background: var(--bs-body-bg) !important;
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
  box-shadow: 0 1rem 3rem rgba(0,0,0,.55) !important;
}

[data-bs-theme="dark"] .mb-modal .modal-header,
[data-bs-theme="dark"] .mb-modal .modal-body,
[data-bs-theme="dark"] .mb-modal .modal-footer,
[data-bs-theme="dark"] #moduleModalWrap .modal-header,
[data-bs-theme="dark"] #moduleModalWrap .modal-body,
[data-bs-theme="dark"] #moduleModalWrap .modal-footer,
[data-bs-theme="dark"] #fieldModalWrap .modal-header,
[data-bs-theme="dark"] #fieldModalWrap .modal-body,
[data-bs-theme="dark"] #fieldModalWrap .modal-footer {
  background: var(--bs-body-bg) !important;
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .modal-header,
[data-bs-theme="dark"] #moduleModalWrap .modal-header,
[data-bs-theme="dark"] #fieldModalWrap .modal-header {
  border-bottom-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .modal-footer,
[data-bs-theme="dark"] #moduleModalWrap .modal-footer,
[data-bs-theme="dark"] #fieldModalWrap .modal-footer {
  border-top-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .modal-title,
[data-bs-theme="dark"] .mb-modal .form-label,
[data-bs-theme="dark"] .mb-modal label,
[data-bs-theme="dark"] .mb-modal .form-check-label,
[data-bs-theme="dark"] .mb-modal .field-summary-code,
[data-bs-theme="dark"] #moduleModalWrap .modal-title,
[data-bs-theme="dark"] #fieldModalWrap .modal-title {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-text,
[data-bs-theme="dark"] .mb-modal .text-muted,
[data-bs-theme="dark"] #moduleModalWrap .form-text,
[data-bs-theme="dark"] #fieldModalWrap .form-text {
  color: var(--bs-secondary-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-control,
[data-bs-theme="dark"] .mb-modal .form-select,
[data-bs-theme="dark"] .mb-modal textarea,
[data-bs-theme="dark"] #moduleModalWrap .form-control,
[data-bs-theme="dark"] #fieldModalWrap .form-control,
[data-bs-theme="dark"] #fieldModalWrap .form-select,
[data-bs-theme="dark"] #fieldModalWrap textarea {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-control:focus,
[data-bs-theme="dark"] .mb-modal .form-select:focus,
[data-bs-theme="dark"] .mb-modal textarea:focus {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-primary) !important;
}

[data-bs-theme="dark"] .mb-modal .form-control::placeholder,
[data-bs-theme="dark"] .mb-modal textarea::placeholder {
  color: var(--bs-secondary-color) !important;
}

[data-bs-theme="dark"] .mb-modal .btn-close,
[data-bs-theme="dark"] #moduleModalWrap .btn-close,
[data-bs-theme="dark"] #fieldModalWrap .btn-close {
  filter: invert(1) grayscale(100%) brightness(200%) !important;
  opacity: .85 !important;
}

[data-bs-theme="dark"] .mb-modal .alert-light,
[data-bs-theme="dark"] .mb-modal .bg-light,
[data-bs-theme="dark"] .mb-modal .bg-white,
[data-bs-theme="dark"] #moduleModalWrap .bg-light,
[data-bs-theme="dark"] #moduleModalWrap .bg-white,
[data-bs-theme="dark"] #fieldModalWrap .bg-light,
[data-bs-theme="dark"] #fieldModalWrap .bg-white {
  background-color: var(--bs-tertiary-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}


/* ==========================================================
   GoAppsFW login split layout
   ========================================================== */
.go-login-split {
    min-height: 100vh;
    background: var(--bs-body-bg);
    color: var(--bs-body-color);
}
.go-login-shell {
    min-height: 100vh;
    display: grid;
    grid-template-columns: minmax(320px, 42vw) 1fr;
}
.go-login-brand-panel {
    position: relative;
    overflow: hidden;
    min-height: 100vh;
    padding: clamp(2rem, 5vw, 4.5rem);
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    color: #fff;
    background:
        radial-gradient(circle at 20% 15%, rgba(255,255,255,.22), transparent 28%),
        radial-gradient(circle at 85% 85%, rgba(255,255,255,.14), transparent 30%),
        linear-gradient(135deg, var(--go-brand-start, #0b2447), var(--go-brand-end, #19376d));
}
.go-login-gradient .go-login-brand-panel {
    background-size: 220% 220%;
    animation: goGradientMove 16s ease infinite;
}
.go-login-brand-panel::after {
    content: "";
    position: absolute;
    width: 26rem;
    height: 26rem;
    right: -8rem;
    bottom: -8rem;
    border-radius: 50%;
    background: rgba(255,255,255,.12);
}
.go-login-brand-inner,
.go-login-brand-footer {
    position: relative;
    z-index: 1;
}
.go-login-logo-box {
    width: 96px;
    height: 96px;
    border-radius: 28px;
    background: rgba(255,255,255,.92);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 22px 60px rgba(0,0,0,.22);
    margin-bottom: 2rem;
}
.go-login-logo-box img {
    max-width: 74px;
    max-height: 74px;
    object-fit: contain;
}
.go-login-logo-placeholder {
    color: var(--go-brand-start, #0b2447);
    font-size: 2.4rem;
}
.go-login-kicker {
    display: inline-flex;
    align-items: center;
    border: 1px solid rgba(255,255,255,.3);
    border-radius: 999px;
    padding: .35rem .85rem;
    font-size: .8rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: rgba(255,255,255,.82);
    margin-bottom: 1.25rem;
}
.go-login-brand-copy h1 {
    font-size: clamp(2.4rem, 4.5vw, 4.6rem);
    line-height: .95;
    font-weight: 800;
    letter-spacing: -.055em;
    margin: 0 0 1rem;
}
.go-login-brand-copy p {
    max-width: 36rem;
    font-size: clamp(1rem, 1.4vw, 1.3rem);
    color: rgba(255,255,255,.78);
    margin: 0;
}
.go-login-brand-footer {
    color: rgba(255,255,255,.72);
    font-size: .88rem;
}
.go-login-form-panel {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(1.5rem, 4vw, 4rem);
    background:
        radial-gradient(circle at 85% 15%, rgba(var(--bs-primary-rgb), .10), transparent 28%),
        var(--bs-body-bg);
}
.go-login-form-wrap {
    width: min(100%, 440px);
}
.go-login-form-card {
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: 30px;
    padding: clamp(1.5rem, 3vw, 2.4rem);
    box-shadow: 0 28px 90px rgba(0,0,0,.12);
    animation: goLoginRise 360ms ease-out both;
}
[data-bs-theme="dark"] .go-login-form-card {
    background: var(--bs-tertiary-bg);
    box-shadow: 0 28px 90px rgba(0,0,0,.45);
}
.go-login-form-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.5rem;
}
.go-login-form-header h2 {
    font-size: clamp(2rem, 4vw, 3.2rem);
    line-height: 1;
    font-weight: 800;
    letter-spacing: -.045em;
    margin: 0 0 .5rem;
}
.go-login-form-header p {
    color: var(--bs-secondary-color);
    margin: 0;
}
.go-login-form-card .form-label {
    font-weight: 650;
}
.go-login-form-card .input-group-text {
    background: var(--bs-tertiary-bg);
    color: var(--bs-secondary-color);
    border-color: var(--bs-border-color);
}
.go-login-form-card .form-control {
    border-color: var(--bs-border-color);
}
.go-login-form-card .btn-primary {
    border-radius: 999px;
    font-weight: 700;
    padding-block: .8rem;
}
.go-login-divider {
    position: relative;
    text-align: center;
    margin: 1.35rem 0;
    color: var(--bs-secondary-color);
    font-size: .82rem;
}
.go-login-divider::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--bs-border-color);
}
.go-login-divider span {
    position: relative;
    z-index: 1;
    padding: 0 .75rem;
    background: var(--bs-body-bg);
}
[data-bs-theme="dark"] .go-login-divider span {
    background: var(--bs-tertiary-bg);
}
@media (max-width: 991.98px) {
    .go-login-shell {
        grid-template-columns: 1fr;
    }
    .go-login-brand-panel {
        min-height: auto;
        padding: 2rem;
        border-bottom-left-radius: 32px;
        border-bottom-right-radius: 32px;
    }
    .go-login-logo-box {
        width: 76px;
        height: 76px;
        border-radius: 22px;
        margin-bottom: 1.25rem;
    }
    .go-login-logo-box img {
        max-width: 58px;
        max-height: 58px;
    }
    .go-login-brand-copy h1 {
        font-size: 2.4rem;
    }
    .go-login-form-panel {
        min-height: auto;
        padding: 1.5rem;
    }
}
@media (max-width: 575.98px) {
    .go-login-form-card {
        border-radius: 22px;
    }
    .go-login-form-panel {
        padding: 1rem;
    }
}

/* Dark-mode icon picker compatibility */
[data-bs-theme="dark"] .icon-picker-overlay {
    background: rgba(0, 0, 0, .68) !important;
}

[data-bs-theme="dark"] .icon-picker-panel {
    background: var(--bs-body-bg) !important;
    color: var(--bs-body-color) !important;
    border: 1px solid var(--bs-border-color) !important;
    box-shadow: 0 1rem 3rem rgba(0, 0, 0, .55) !important;
}

[data-bs-theme="dark"] .icon-picker-head,
[data-bs-theme="dark"] .icon-picker-foot {
    background: var(--bs-tertiary-bg) !important;
    color: var(--bs-body-color) !important;
    border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .icon-picker-body {
    background: var(--bs-body-bg) !important;
    color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .icon-picker-btn {
    background: var(--bs-tertiary-bg) !important;
    color: var(--bs-body-color) !important;
    border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .icon-picker-btn:hover,
[data-bs-theme="dark"] .icon-picker-btn:focus {
    background: rgba(var(--bs-primary-rgb), .18) !important;
    color: var(--bs-body-color) !important;
    border-color: rgba(var(--bs-primary-rgb), .6) !important;
    box-shadow: 0 0 0 .2rem rgba(var(--bs-primary-rgb), .2) !important;
}

[data-bs-theme="dark"] .icon-picker-name,
[data-bs-theme="dark"] #icon_picker_title,
[data-bs-theme="dark"] #icon_picker_status {
    color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .icon-preview-box,
[data-bs-theme="dark"] .input-group-text.icon-preview-box {
    background: var(--bs-tertiary-bg) !important;
    color: var(--bs-body-color) !important;
    border-color: var(--bs-border-color) !important;
}

/* ==========================================================
   GoAppsFW login compact + animation setting refinement
   ========================================================== */
.go-login-none,
.go-login-none .go-login-brand-panel,
.go-login-none .go-login-form-card {
  animation: none !important;
}

.go-login-none .go-login-brand-panel {
  background:
    radial-gradient(circle at 20% 15%, rgba(255,255,255,.16), transparent 28%),
    linear-gradient(135deg, var(--go-brand-start, #0b2447), var(--go-brand-end, #19376d));
}

.go-login-floating-shapes .go-login-brand-panel {
  background:
    radial-gradient(circle at 18% 18%, rgba(255,255,255,.28), transparent 24%),
    radial-gradient(circle at 82% 22%, rgba(32,201,151,.30), transparent 26%),
    radial-gradient(circle at 56% 88%, rgba(102,16,242,.24), transparent 30%),
    linear-gradient(135deg, var(--go-brand-start, #0b2447), var(--go-brand-end, #19376d));
}

.go-login-floating-shapes .go-login-logo-box {
  animation: goLoginFloat 5.5s ease-in-out infinite;
}

.go-login-glass .go-login-form-card {
  background: rgba(255,255,255,.78);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}

[data-bs-theme="dark"] .go-login-glass .go-login-form-card {
  background: rgba(21,25,32,.78);
}

@keyframes goLoginFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

.go-login-sso-on .go-login-form-wrap,
.go-login-msg-on .go-login-form-wrap {
  width: min(100%, 410px);
}

.go-login-sso-on .go-login-form-card,
.go-login-msg-on .go-login-form-card {
  padding: clamp(1.1rem, 2.2vw, 1.65rem);
  border-radius: 24px;
}

.go-login-sso-on .go-login-form-header,
.go-login-msg-on .go-login-form-header {
  margin-bottom: 1rem;
}

.go-login-sso-on .go-login-form-header h2,
.go-login-msg-on .go-login-form-header h2 {
  font-size: clamp(1.65rem, 3vw, 2.45rem);
}

.go-login-sso-on .go-login-form-header p,
.go-login-msg-on .go-login-form-header p {
  font-size: .9rem;
}

.go-login-sso-on .go-login-form-card .mb-3,
.go-login-msg-on .go-login-form-card .mb-3 {
  margin-bottom: .85rem !important;
}

.go-login-sso-on .go-login-form-card .mb-4,
.go-login-msg-on .go-login-form-card .mb-4 {
  margin-bottom: 1rem !important;
}

.go-login-sso-on .go-login-form-card .input-group-lg > .form-control,
.go-login-sso-on .go-login-form-card .input-group-lg > .input-group-text,
.go-login-msg-on .go-login-form-card .input-group-lg > .form-control,
.go-login-msg-on .go-login-form-card .input-group-lg > .input-group-text {
  padding: .55rem .85rem;
  font-size: 1rem;
  min-height: 2.85rem;
}

.go-login-sso-on .go-login-form-card .btn-lg,
.go-login-msg-on .go-login-form-card .btn-lg {
  padding-top: .62rem;
  padding-bottom: .62rem;
  font-size: 1rem;
}

.go-login-sso-on .go-login-divider,
.go-login-msg-on .go-login-divider {
  margin: .9rem 0;
}

.go-login-sso-on .go-login-form-card .alert,
.go-login-msg-on .go-login-form-card .alert {
  padding: .62rem .75rem;
  margin-bottom: .8rem;
  font-size: .9rem;
  line-height: 1.28;
}

.go-login-sso-on .go-login-form-card .d-grid.gap-2 {
  gap: .45rem !important;
}

.go-login-sso-on .go-login-form-card .btn-success,
.go-login-sso-on .go-login-form-card .btn-outline-warning {
  padding-top: .52rem;
  padding-bottom: .52rem;
}

@media (max-height: 760px) and (min-width: 992px) {
  .go-login-brand-panel {
    padding-top: 2rem;
    padding-bottom: 2rem;
  }
  .go-login-logo-box {
    width: 76px;
    height: 76px;
    border-radius: 22px;
    margin-bottom: 1.15rem;
  }
  .go-login-logo-box img {
    max-width: 58px;
    max-height: 58px;
  }
  .go-login-brand-copy h1 {
    font-size: clamp(2rem, 3.7vw, 3.8rem);
  }
  .go-login-brand-copy p {
    font-size: 1rem;
  }
  .go-login-form-panel {
    padding-top: 1.5rem;
    padding-bottom: 1.5rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .go-login-floating-shapes .go-login-logo-box {
    animation: none !important;
  }
}


/* ==========================================================
   GoAppsFW navigation layout variants
   ========================================================== */
.go-nav-layout-menubar main,
.go-nav-layout-topnav main {
    min-width: 0;
}

.go-topnav-shell {
    position: relative;
    z-index: 1020;
}

.go-topnav-shell .dropdown-menu {
    max-height: min(70vh, 520px);
    overflow-y: auto;
}

.go-menubar-shell {
    position: relative;
    z-index: 1030;
    min-height: 38px;
    overflow: visible;
}

.go-menubar-shell .container-fluid {
    overflow: visible;
}

.go-menubar {
    display: flex;
    align-items: stretch;
    gap: .15rem;
    min-height: 38px;
    overflow: visible;
}

.go-menubar-item {
    position: relative;
    flex: 0 0 auto;
}

.go-menubar-button,
.go-menubar-group,
.go-menubar-direct {
    border: 0;
    background: transparent;
    color: var(--bs-body-color);
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: .35rem .75rem;
    font-size: .925rem;
    white-space: nowrap;
    border-radius: .35rem .35rem 0 0;
}

.go-menubar-group {
    cursor: default;
}

.go-menubar-button:hover,
.go-menubar-button:focus,
.go-menubar-button.is-active,
.go-menubar-item:hover > .go-menubar-group,
.go-menubar-group.is-active,
.go-menubar-direct:hover,
.go-menubar-direct:focus,
.go-menubar-direct.is-active {
    background: var(--bs-primary-bg-subtle);
    color: var(--bs-primary-text-emphasis);
    outline: 0;
}

.go-menubar-menu,
.go-menubar-submenu {
    display: none;
    position: absolute;
    min-width: 240px;
    max-width: 340px;
    background: var(--bs-body-bg);
    color: var(--bs-body-color);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 .75rem 1.5rem rgba(0,0,0,.18);
    border-radius: .5rem;
    padding: .35rem;
    z-index: 1040;
}

.go-menubar-menu {
    top: 100%;
    left: 0;
}

.go-menubar-subitem {
    position: relative;
}

.go-menubar-submenu {
    top: -.35rem;
    left: calc(100% - 1px);
}

.go-menubar-item:hover > .go-menubar-menu,
.go-menubar-item.is-open > .go-menubar-menu,
.go-menubar-subitem:hover > .go-menubar-submenu,
.go-menubar-subitem.is-open > .go-menubar-submenu {
    display: block;
}

.go-menubar-link,
.go-menubar-subbutton,
.go-menubar-subgroup {
    width: 100%;
    border: 0;
    background: transparent;
    color: var(--bs-body-color);
    text-decoration: none;
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .45rem .65rem;
    border-radius: .35rem;
    font-size: .925rem;
    text-align: left;
    white-space: nowrap;
}

.go-menubar-link {
    justify-content: flex-start;
}

.go-menubar-subbutton,
.go-menubar-subgroup {
    justify-content: space-between;
}

.go-menubar-subgroup {
    cursor: default;
}

.go-menubar-subgroup > span {
    display: inline-flex;
    align-items: center;
    min-width: 0;
}

.go-menubar-link:hover,
.go-menubar-link:focus,
.go-menubar-link.is-active,
.go-menubar-subbutton:hover,
.go-menubar-subbutton:focus,
.go-menubar-subbutton.is-active,
.go-menubar-subitem:hover > .go-menubar-subgroup,
.go-menubar-subgroup.is-active {
    background: var(--bs-primary-bg-subtle);
    color: var(--bs-primary-text-emphasis);
    outline: 0;
}

[data-bs-theme="dark"] .go-menubar-menu,
[data-bs-theme="dark"] .go-menubar-submenu {
    box-shadow: 0 .75rem 1.5rem rgba(0,0,0,.55);
}

@media (max-width: 991.98px) {
    .go-menubar {
        flex-wrap: nowrap;
        padding-bottom: .15rem;
    }

    .go-menubar-menu,
    .go-menubar-submenu {
        position: fixed;
        left: .75rem;
        right: .75rem;
        top: 96px;
        max-width: none;
        max-height: calc(100vh - 120px);
        overflow-y: auto;
    }

    .go-menubar-submenu {
        top: auto;
        left: 0;
        right: auto;
        position: static;
        margin: .25rem 0 .25rem .75rem;
        box-shadow: none;
        border-style: dashed;
    }

    .go-menubar-subitem.is-open > .go-menubar-submenu {
        display: block;
    }
}

/* GoAppsFW generated module print helper: prints only marked module content when body.goapps-printing is set. */
@media print {
  body.goapps-printing * {
    visibility: hidden !important;
  }
  body.goapps-printing .goapps-print-area,
  body.goapps-printing .goapps-print-area * {
    visibility: visible !important;
  }
  body.goapps-printing .goapps-print-area {
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 100% !important;
    background: #fff !important;
  }
  body.goapps-printing .btn,
  body.goapps-printing .modal,
  body.goapps-printing .modal-backdrop {
    display: none !important;
  }
}

/* Dark-mode table header hardening.
   Generated/framework lists often use Bootstrap .table-light for header rows.
   In dark mode, force .table-light to use dark-theme variables instead of Bootstrap light header. */
[data-bs-theme="dark"] .table-light {
  --bs-table-color: var(--bs-body-color);
  --bs-table-bg: rgba(255,255,255,.06);
  --bs-table-border-color: var(--bs-border-color);
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}
[data-bs-theme="dark"] .table-light > tr > th,
[data-bs-theme="dark"] .table-light > tr > td,
[data-bs-theme="dark"] thead.table-light > tr > th,
[data-bs-theme="dark"] thead.table-light > tr > td,
[data-bs-theme="dark"] tr.table-light > th,
[data-bs-theme="dark"] tr.table-light > td {
  color: var(--bs-body-color) !important;
  background-color: rgba(255,255,255,.06) !important;
  border-color: var(--bs-border-color) !important;
}

/* ==========================================================
   GoAppsFW theme-normalization layer for restored/generated modules
   ----------------------------------------------------------
   Purpose:
   Keep module files neutral. Some generated/admin modules still use
   legacy Bootstrap light helpers or small inline/custom styles
   (for example bg-light, bg-white, table-light, text-dark, hardcoded
   #fff panel backgrounds). These rules remap those visual helpers to
   the active GoAppsFW theme without editing each module page.
   ========================================================== */
[data-bs-theme="dark"] .bg-light:not(body),
[data-bs-theme="dark"] .alert-light,
[data-bs-theme="dark"] .list-group-item.bg-light,
[data-bs-theme="dark"] .card.bg-light,
[data-bs-theme="dark"] .modal-content.bg-light {
  background-color: var(--bs-tertiary-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .bg-white:not(.go-login-logo-box),
[data-bs-theme="dark"] .card.bg-white,
[data-bs-theme="dark"] .modal-content.bg-white,
[data-bs-theme="dark"] .list-group-item.bg-white,
[data-bs-theme="dark"] .table-responsive.bg-white,
[data-bs-theme="dark"] .border.bg-white {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .text-dark,
[data-bs-theme="dark"] .link-dark {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .table-light {
  --bs-table-bg: var(--bs-tertiary-bg);
  --bs-table-color: var(--bs-body-color);
  --bs-table-border-color: var(--bs-border-color);
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .table > :not(caption) > * > * {
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .card-header,
[data-bs-theme="dark"] .card-footer,
[data-bs-theme="dark"] .accordion-button,
[data-bs-theme="dark"] .accordion-header,
[data-bs-theme="dark"] .list-group-item {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .card-header.bg-light,
[data-bs-theme="dark"] .card-footer.bg-light,
[data-bs-theme="dark"] .accordion-button:not(.collapsed),
[data-bs-theme="dark"] .list-group-item-action:hover,
[data-bs-theme="dark"] .list-group-item-action:focus {
  background-color: var(--bs-tertiary-bg) !important;
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .btn-outline-dark {
  --bs-btn-color: var(--bs-body-color);
  --bs-btn-border-color: var(--bs-border-color);
  --bs-btn-hover-color: var(--bs-body-bg);
  --bs-btn-hover-bg: var(--bs-body-color);
  --bs-btn-hover-border-color: var(--bs-body-color);
  --bs-btn-active-color: var(--bs-body-bg);
  --bs-btn-active-bg: var(--bs-body-color);
  --bs-btn-active-border-color: var(--bs-body-color);
  --bs-btn-disabled-color: var(--bs-secondary-color);
  --bs-btn-disabled-border-color: var(--bs-border-color);
}

[data-bs-theme="dark"] code,
[data-bs-theme="dark"] pre,
[data-bs-theme="dark"] kbd,
[data-bs-theme="dark"] samp {
  color: var(--bs-body-color);
}

/* Legacy/custom panels with hardcoded white/light inline styles.
   CSS !important beats normal inline color/background declarations while
   leaving intentional image/gradient backgrounds alone unless they use a
   literal white/light solid color. */
[data-bs-theme="dark"] [style*="background:#fff"],
[data-bs-theme="dark"] [style*="background: #fff"],
[data-bs-theme="dark"] [style*="background-color:#fff"],
[data-bs-theme="dark"] [style*="background-color: #fff"],
[data-bs-theme="dark"] [style*="background:white"],
[data-bs-theme="dark"] [style*="background: white"],
[data-bs-theme="dark"] [style*="background-color:white"],
[data-bs-theme="dark"] [style*="background-color: white"],
[data-bs-theme="dark"] [style*="background:#f8f9fa"],
[data-bs-theme="dark"] [style*="background: #f8f9fa"],
[data-bs-theme="dark"] [style*="background-color:#f8f9fa"],
[data-bs-theme="dark"] [style*="background-color: #f8f9fa"],
[data-bs-theme="dark"] [style*="background:#ffffff"],
[data-bs-theme="dark"] [style*="background: #ffffff"],
[data-bs-theme="dark"] [style*="background-color:#ffffff"],
[data-bs-theme="dark"] [style*="background-color: #ffffff"] {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] [style*="color:#212529"],
[data-bs-theme="dark"] [style*="color: #212529"],
[data-bs-theme="dark"] [style*="color:#000"],
[data-bs-theme="dark"] [style*="color: #000"],
[data-bs-theme="dark"] [style*="color:black"],
[data-bs-theme="dark"] [style*="color: black"] {
  color: var(--bs-body-color) !important;
}

/* The module defines .mb-modal with page-level CSS, so use high specificity
   and theme variables here. */
[data-bs-theme="dark"] .mb-modal .modal-content,
[data-bs-theme="dark"] #moduleModalWrap.mb-modal .modal-content,
[data-bs-theme="dark"] #fieldModalWrap.mb-modal .modal-content,
[data-bs-theme="dark"] .mb-modal .modal-header,
[data-bs-theme="dark"] .mb-modal .modal-body,
[data-bs-theme="dark"] .mb-modal .modal-footer,
[data-bs-theme="dark"] #moduleModalWrap .modal-header,
[data-bs-theme="dark"] #moduleModalWrap .modal-body,
[data-bs-theme="dark"] #moduleModalWrap .modal-footer,
[data-bs-theme="dark"] #fieldModalWrap .modal-header,
[data-bs-theme="dark"] #fieldModalWrap .modal-body,
[data-bs-theme="dark"] #fieldModalWrap .modal-footer {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-label,
[data-bs-theme="dark"] .mb-modal label,
[data-bs-theme="dark"] .mb-modal .modal-title,
[data-bs-theme="dark"] .mb-modal .form-check-label,
[data-bs-theme="dark"] .mb-modal .field-summary-code {
  color: var(--bs-body-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-control,
[data-bs-theme="dark"] .mb-modal .form-select,
[data-bs-theme="dark"] .mb-modal textarea {
  background-color: var(--bs-body-bg) !important;
  color: var(--bs-body-color) !important;
  border-color: var(--bs-border-color) !important;
}

[data-bs-theme="dark"] .mb-modal .form-text,
[data-bs-theme="dark"] .mb-modal .text-muted {
  color: var(--bs-secondary-color) !important;
}

[data-bs-theme="dark"] .mb-modal .btn-close {
  filter: invert(1) grayscale(100%) brightness(200%) !important;
  opacity: .85 !important;
}
