Email Confirmation
We are confirming your account.
@@ -19,7 +20,7 @@ Confirming your email, please wait...diff --git a/public/css/responsive.css b/public/css/responsive.css new file mode 100644 index 0000000..a60b21b --- /dev/null +++ b/public/css/responsive.css @@ -0,0 +1,482 @@ +/* Mobile-first usability layer for the AccManager application. */ + +html { + min-width: 320px; + overflow-x: hidden; + -webkit-text-size-adjust: 100%; +} + +body { + min-width: 320px; +} + +button, +a, +input, +select, +textarea { + -webkit-tap-highlight-color: transparent; +} + +.table-wrap, +.overflow-x-auto { + overscroll-behavior-x: contain; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 900px) { + body.app-shell, + #appMain, + #mainContent { + min-height: 0; + } + + body.mobile-nav-open { + overflow: hidden; + } + + #appSidebar { + padding-top: env(safe-area-inset-top); + padding-bottom: env(safe-area-inset-bottom); + } + + #appSidebar nav { + min-height: 0; + overflow-y: auto; + overscroll-behavior: contain; + padding-bottom: 1rem; + -webkit-overflow-scrolling: touch; + } + + #appMain > header { + min-height: 3.5rem; + height: auto; + padding-top: max(0.35rem, env(safe-area-inset-top)); + padding-bottom: 0.35rem; + } + + #mobileMenuBtn, + #profileBtn, + #logoutBtn, + #pendingAssetRequestsBtn { + min-width: 2.75rem; + min-height: 2.75rem; + touch-action: manipulation; + } + + #pendingAssetRequestsBtn { + justify-content: center; + } + + #mainContent > [class*="-page"] { + width: 100%; + min-width: 0; + padding: 0.875rem; + gap: 0; + } + + .dashboard-page { + padding-bottom: calc(0.875rem + env(safe-area-inset-bottom)) !important; + } + + .dashboard-header, + .page-header { + margin-bottom: 0.875rem; + } + + .dashboard-header > div, + .page-header > div { + min-width: 0; + } + + .dashboard-header h1, + .page-header h1, + .users-page h1 { + font-size: 1.35rem; + line-height: 1.25; + overflow-wrap: anywhere; + } + + .dashboard-header p, + .page-header p, + .users-page h1 + p { + margin-top: 0.25rem; + font-size: 0.75rem; + line-height: 1.4; + } + + .dashboard-actions, + .asset-header-actions, + .consumable-header-actions { + max-width: 100%; + } + + .page-header > button, + .dashboard-actions > button, + .page-header .asset-header-actions > button, + .page-header .consumable-header-actions > button { + min-height: 2.75rem; + justify-content: center; + touch-action: manipulation; + } + + .page-filters, + .users-controls { + margin-bottom: 0.875rem; + } + + .page-filters > *, + .users-controls > * { + min-width: 0; + max-width: 100%; + } + + .page-filters > div, + .users-controls > div { + align-items: stretch; + flex-direction: column; + gap: 0.35rem; + } + + .page-filters input, + .page-filters select, + .users-controls input, + .users-controls select, + .modal-content input, + .modal-content select, + .modal-content textarea { + width: 100%; + min-height: 2.75rem; + font-size: 1rem; + } + + .dashboard-stats, + .apps-stats { + gap: 0.75rem; + } + + .dashboard-stats > *, + .apps-stats > * { + min-width: 0; + } + + .table-wrap { + min-width: 0; + scrollbar-width: thin; + } + + /* Tables are progressively enhanced with data labels by app.js. */ + #mainContent table.mobile-card-table:not(.keep-table-mobile) { + display: block; + width: 100%; + min-width: 0 !important; + border-collapse: separate; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > thead { + display: none; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 0.75rem; + padding: 0.75rem; + background: rgb(248 250 252 / 0.72); + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr { + display: grid; + width: 100%; + min-width: 0; + overflow: hidden; + border: 1px solid #e2e8f0; + border-radius: 0.75rem; + background: #fff; + box-shadow: 0 1px 2px rgb(15 23 42 / 0.05); + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr:hover { + background: #fff; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td { + position: static !important; + z-index: auto !important; + display: grid; + grid-template-columns: minmax(5.75rem, 36%) minmax(0, 1fr); + align-items: start; + gap: 0.75rem; + width: auto !important; + min-width: 0 !important; + max-width: none !important; + padding: 0.65rem 0.75rem; + border: 0; + border-bottom: 1px solid #f1f5f9; + background: transparent !important; + box-shadow: none !important; + color: #334155; + text-align: left !important; + white-space: normal !important; + overflow-wrap: anywhere; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td:last-child { + border-bottom: 0; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td::before { + content: attr(data-label); + color: #64748b; + font-size: 0.625rem; + font-weight: 800; + line-height: 1.35; + letter-spacing: 0.06em; + text-transform: uppercase; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td[colspan] { + display: block; + padding: 1.5rem 1rem; + text-align: center !important; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td[colspan]::before { + content: none; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td > * { + min-width: 0; + max-width: 100%; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td .truncate { + white-space: normal; + overflow-wrap: anywhere; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td .inline-flex { + flex-wrap: wrap; + justify-content: flex-start; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) button, + #mainContent .asset-mobile-card button, + #mainContent .consumable-mobile-card button { + min-width: 2.5rem; + min-height: 2.5rem; + touch-action: manipulation; + } + + .page-pager { + width: 100%; + padding: 0.75rem !important; + padding-bottom: max(0.75rem, env(safe-area-inset-bottom)) !important; + line-height: 1.4; + } + + .page-pager > div, + .page-pager > span { + max-width: 100%; + } + + .page-pager button { + min-width: 2.75rem; + min-height: 2.5rem; + touch-action: manipulation; + } + + .modal-backdrop { + padding-top: env(safe-area-inset-top); + } + + .modal-backdrop .modal-content { + max-width: none !important; + max-height: calc(100dvh - 0.75rem - env(safe-area-inset-top)) !important; + margin: 0.375rem !important; + margin-bottom: 0 !important; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + overscroll-behavior: contain; + -webkit-overflow-scrolling: touch; + } + + .modal-content > .p-6, + .modal-content > form.p-6, + .modal-content > form > .p-6 { + padding: 1rem !important; + } + + .modal-content > .px-6, + .modal-content > form > .px-6 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .modal-content .grid-cols-2, + .modal-content .grid-cols-4 { + grid-template-columns: minmax(0, 1fr); + } + + .modal-content h2, + .modal-content h3 { + overflow-wrap: anywhere; + } + + .modal-content > .flex:last-child, + .modal-content > form > .flex:last-child, + .modal-content > form > div > .flex:last-child { + flex-wrap: wrap; + } + + .modal-content > .flex:last-child > button, + .modal-content > form > .flex:last-child > button, + .modal-content > form > div > .flex:last-child > button { + min-height: 2.75rem; + flex: 1 1 8rem; + } + + .modal-content .overflow-x-auto table { + min-width: 42rem !important; + } + + #NotiflixNotifyWrap { + right: 0.5rem !important; + left: 0.5rem !important; + width: auto !important; + max-width: none !important; + } +} + +@media (max-width: 560px) { + #appMain > header .topbar-actions { + gap: 0.25rem; + } + + #pendingAssetRequestsBtn > span:not(.material-symbols-outlined):not(#pendingAssetRequestsBadge) { + display: none; + } + + #pendingAssetRequestsBtn, + #profileBtn, + #logoutBtn, + #mobileMenuBtn { + padding-right: 0.625rem; + padding-left: 0.625rem; + } + + #mainContent > [class*="-page"] { + padding: 0.75rem; + } + + .dashboard-stats, + .apps-stats { + grid-template-columns: minmax(0, 1fr) !important; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody { + padding: 0.625rem; + } + + #mainContent table.mobile-card-table:not(.keep-table-mobile) > tbody > tr > td { + grid-template-columns: minmax(5rem, 34%) minmax(0, 1fr); + gap: 0.625rem; + padding: 0.625rem; + } + + .modal-backdrop .modal-content { + width: 100% !important; + margin-right: 0 !important; + margin-left: 0 !important; + } +} + +/* Login, registration, password recovery and email verification. */ +body.auth-page, +body.verify-page { + min-height: 100dvh; + overflow-x: hidden; +} + +.auth-shell, +.verify-shell { + min-height: 100dvh; + padding-top: max(1rem, env(safe-area-inset-top)); + padding-bottom: max(1rem, env(safe-area-inset-bottom)); +} + +@media (max-width: 560px) { + .auth-shell, + .verify-shell { + align-items: flex-start; + padding-right: 0.75rem; + padding-left: 0.75rem; + } + + .auth-card, + .verify-card { + padding: 1.25rem !important; + border-radius: 1rem; + } + + .auth-card .auth-heading { + margin-bottom: 1.5rem; + } + + .auth-card .auth-icon { + width: 3.25rem; + height: 3.25rem; + } + + .auth-card h1, + .verify-card h1 { + font-size: 1.35rem; + line-height: 1.25; + } + + .auth-card input:not([type="checkbox"]), + .auth-card select, + .auth-card textarea { + min-height: 2.75rem; + font-size: 1rem; + } + + .auth-card button, + .verify-card a { + min-height: 2.75rem; + touch-action: manipulation; + } + + .auth-card .remember-row, + .verify-card .verify-actions { + align-items: stretch; + flex-direction: column; + } + + .auth-card .remember-row > div { + min-height: 2.25rem; + } + + .auth-card .remember-row > button { + align-self: flex-start; + min-height: 2.25rem; + } + + .verify-card .verify-actions > a { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + } +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + scroll-behavior: auto !important; + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + } +} diff --git a/public/index.html b/public/index.html index c8fbb5d..23b5399 100644 --- a/public/index.html +++ b/public/index.html @@ -1,6 +1,8 @@
+ +We are confirming your account.
@@ -19,7 +20,7 @@ Confirming your email, please wait...