:root { --app-bg: #edf3f8; --app-height: 100dvh; --app-keyboard-offset: 0px; --app-bottom-nav-height: calc(76px + env(safe-area-inset-bottom)); --app-surface: rgba(255, 255, 255, 0.94); --app-surface-strong: #ffffff; --app-border: rgba(203, 213, 225, 0.9); --app-text: #0f172a; --app-muted: #64748b; --app-primary: #0f6cbd; --app-primary-strong: #114c8b; --app-accent: #f97316; --app-success: #15803d; --app-warning: #d97706; --app-danger: #c2410c; --app-shadow: 0 20px 40px rgba(15, 23, 42, 0.08); --app-radius-xl: 28px; --app-radius-lg: 22px; --app-radius-md: 16px; --app-radius-sm: 12px; --app-font: Aptos, "Segoe UI Variable", "Trebuchet MS", sans-serif; } * { box-sizing: border-box; } html, body { min-height: 100%; height: 100%; } body { margin: 0; min-height: var(--app-height); font-family: var(--app-font); color: var(--app-text); background: radial-gradient(circle at top, rgba(14, 116, 144, 0.14), transparent 22%), linear-gradient(180deg, #f7fafc 0%, var(--app-bg) 100%); } a { text-decoration: none; } #app { min-height: var(--app-height); } .mobile-splash-screen { position: relative; min-height: var(--app-height); display: grid; place-items: center; overflow: hidden; padding: 1.4rem; background: radial-gradient(circle at top, rgba(34, 193, 195, 0.18), transparent 25%), linear-gradient(160deg, #0d223a 0%, #10375c 50%, #145da0 100%); } .mobile-splash-orb { position: absolute; border-radius: 999px; filter: blur(12px); opacity: 0.55; animation: splashFloat 5s ease-in-out infinite; } .mobile-splash-orb-a { width: 180px; height: 180px; top: -36px; right: -30px; background: rgba(34, 193, 195, 0.32); } .mobile-splash-orb-b { width: 220px; height: 220px; bottom: -80px; left: -70px; background: rgba(15, 108, 189, 0.28); animation-delay: -2s; } .mobile-splash-card { position: relative; z-index: 1; width: min(100%, 420px); padding: 1.5rem 1.35rem; border-radius: 30px; text-align: center; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.16); backdrop-filter: blur(18px); box-shadow: 0 24px 60px rgba(2, 8, 23, 0.28); animation: splashCardIn .7s ease both; } .mobile-splash-logo-shell, .mobile-login-brandmark { display: grid; place-items: center; margin-bottom: 1rem; } .mobile-splash-logo, .mobile-login-logo { width: min(100%, 220px); height: auto; filter: drop-shadow(0 18px 28px rgba(15, 23, 42, 0.16)); } .mobile-splash-title { color: #fff; font-size: 1.45rem; font-weight: 800; letter-spacing: -0.03em; } .mobile-splash-subtitle { margin-top: 0.45rem; color: rgba(226,232,240,0.86); font-size: 0.9rem; font-weight: 600; } .mobile-splash-loader { display: inline-flex; align-items: center; gap: 0.45rem; margin-top: 1.2rem; padding: 0.55rem 0.8rem; border-radius: 999px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.16); } .mobile-splash-loader span { width: 8px; height: 8px; border-radius: 999px; background: #fff; animation: splashPulse 1.2s ease-in-out infinite; } .mobile-splash-loader span:nth-child(2) { animation-delay: .18s; } .mobile-splash-loader span:nth-child(3) { animation-delay: .36s; } .mobile-shell { min-height: var(--app-height); display: flex; flex-direction: column; } .mobile-shell.is-form-focus { background: radial-gradient(circle at top, rgba(14, 116, 144, 0.08), transparent 18%), linear-gradient(180deg, #f8fbfe 0%, #eef4f8 100%); } .mobile-topbar { position: sticky; top: 0; z-index: 30; padding: 1rem 1rem 0.8rem; background: linear-gradient(140deg, rgba(255,255,255,0.95) 0%, rgba(241,245,249,0.98) 100%); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(203, 213, 225, 0.75); } .mobile-topbar.is-compact { padding: 0.85rem 0.9rem 0.7rem; } .mobile-brand-row { display: grid; grid-template-columns: auto 1fr auto; gap: 0.85rem; align-items: center; } .mobile-brand-left, .mobile-topbar-actions { display: flex; align-items: center; gap: 0.65rem; } .mobile-topbar-spacer { display: inline-block; width: 42px; height: 42px; } .mobile-brand-mark { width: 60px; height: 60px; border-radius: 18px; display: inline-flex; align-items: center; justify-content: center; padding: 0.3rem; background: rgba(255,255,255,0.92); box-shadow: 0 18px 30px rgba(15, 108, 189, 0.18); } .mobile-brand-logo { width: 100%; height: auto; } .mobile-brand-copy { min-width: 0; } .mobile-kiosk-tools { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--app-border); } .mobile-kiosk-tools-title { margin-bottom: 0.75rem; color: var(--app-muted); font-size: 0.84rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; } .mobile-kiosk-tools-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0.75rem; } .mobile-brand-title { font-size: 1.15rem; font-weight: 800; letter-spacing: -0.02em; } .mobile-brand-subtitle { color: var(--app-muted); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; } .mobile-icon-btn, .mobile-logout-btn { width: 42px; height: 42px; border: 0; border-radius: 14px; color: var(--app-primary-strong); background: rgba(15, 108, 189, 0.08); position: relative; } .mobile-notification-badge { position: absolute; top: -5px; right: -3px; min-width: 20px; height: 20px; padding: 0 0.35rem; border-radius: 999px; background: linear-gradient(135deg, #dc2626 0%, #f97316 100%); color: #fff; font-size: 0.7rem; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; box-shadow: 0 10px 18px rgba(220, 38, 38, 0.25); } .mobile-operator-chip { display: inline-flex; align-items: center; gap: 0.55rem; margin-top: 0.9rem; padding: 0.7rem 0.95rem; border-radius: 999px; background: rgba(255,255,255,0.92); border: 1px solid rgba(203, 213, 225, 0.9); color: var(--app-muted); font-size: 0.82rem; font-weight: 700; box-shadow: 0 10px 22px rgba(15, 23, 42, 0.05); } .mobile-operator-chip i { color: var(--app-primary); } .mobile-notification-panel { margin-top: 0.9rem; padding: 0.95rem; border-radius: 22px; background: rgba(255,255,255,0.98); border: 1px solid rgba(203, 213, 225, 0.92); box-shadow: 0 18px 36px rgba(15, 23, 42, 0.08); } .mobile-notification-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.85rem; } .mobile-notification-item { width: 100%; display: grid; grid-template-columns: auto 1fr; gap: 0.8rem; padding: 0.85rem; border-radius: 18px; border: 1px solid rgba(203, 213, 225, 0.88); background: rgba(248,250,252,0.95); text-align: left; color: var(--app-text); } .mobile-notification-item.is-read { opacity: 0.72; } .mobile-notification-item-icon { width: 42px; height: 42px; border-radius: 14px; display: inline-flex; align-items: center; justify-content: center; background: rgba(15, 108, 189, 0.08); color: var(--app-primary); } .mobile-notification-item-copy { display: grid; gap: 0.25rem; } .mobile-notification-item-copy strong { font-size: 0.92rem; line-height: 1.2; } .mobile-notification-item-copy span { font-size: 0.8rem; color: var(--app-muted); line-height: 1.35; } .mobile-notification-item.tone-danger .mobile-notification-item-icon { background: rgba(220, 38, 38, 0.08); color: #dc2626; } .mobile-notification-item.tone-warning .mobile-notification-item-icon { background: rgba(217, 119, 6, 0.12); color: #d97706; } .mobile-notification-item.tone-success .mobile-notification-item-icon { background: rgba(21, 128, 61, 0.1); color: #15803d; } .mobile-main { flex: 1 1 auto; min-height: 0; padding: 1rem 1rem calc(var(--app-bottom-nav-height) + 1rem); overflow-y: auto; -webkit-overflow-scrolling: touch; scroll-padding-top: 1rem; scroll-padding-bottom: calc(var(--app-keyboard-offset) + 7rem); } .mobile-shell.is-form-focus .mobile-main { padding: 0.85rem 0.85rem 1rem; } .mobile-view, .screen-stack { display: grid; gap: 1rem; min-width: 0; } .mobile-status.alert { border-radius: var(--app-radius-md); border: 0; box-shadow: var(--app-shadow); } .mobile-bottom-nav { position: sticky; bottom: 0; z-index: 30; display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; padding: 0.85rem 1rem calc(0.85rem + env(safe-area-inset-bottom)); min-height: var(--app-bottom-nav-height); background: rgba(248, 250, 252, 0.96); backdrop-filter: blur(18px); border-top: 1px solid rgba(203, 213, 225, 0.86); transition: transform 0.18s ease, opacity 0.18s ease; } .mobile-shell.is-form-focus .mobile-topbar-actions, .mobile-shell.is-form-focus .mobile-operator-chip, .mobile-shell.is-form-focus .mobile-bottom-nav { display: none !important; } .mobile-shell.is-form-focus .mobile-brand-row { grid-template-columns: auto 1fr; gap: 0.7rem; } .mobile-shell.is-form-focus .mobile-brand-title { font-size: 1.02rem; } .mobile-bottom-link { display: grid; place-items: center; gap: 0.22rem; min-height: 54px; border-radius: 18px; color: var(--app-muted); font-size: 0.76rem; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; background: rgba(255,255,255,0.88); border: 1px solid rgba(203, 213, 225, 0.9); } .mobile-bottom-link i { font-size: 1rem; } .mobile-bottom-link.active { color: #fff; background: linear-gradient(135deg, #0f6cbd 0%, #1382c5 55%, #22c1c3 100%); border-color: transparent; box-shadow: 0 14px 24px rgba(15, 108, 189, 0.25); } .mobile-route-card, .mobile-map-card { padding: 1rem; border-radius: 20px; background: rgba(255,255,255,0.94); border: 1px solid rgba(203, 213, 225, 0.92); box-shadow: 0 16px 34px rgba(15, 23, 42, 0.08); } .mobile-route-card-empty { border-style: dashed; color: var(--app-muted); } .mobile-route-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.9rem; } .mobile-route-actions { display: flex; flex-wrap: wrap; gap: 0.65rem; margin-top: 0.9rem; } .mobile-map-frame-wrap { overflow: hidden; border-radius: 18px; border: 1px solid rgba(203, 213, 225, 0.92); background: linear-gradient(180deg, rgba(241,245,249,0.85) 0%, rgba(255,255,255,0.95) 100%); } .mobile-map-frame { display: block; width: 100%; height: 220px; border: 0; } .mobile-map-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.85rem; margin-top: 0.75rem; font-size: 0.82rem; color: var(--app-muted); } .mobile-map-meta a { font-weight: 700; text-decoration: none; } .mobile-route-status { margin-bottom: 0.75rem; padding: 0.72rem 0.85rem; border-radius: 14px; font-size: 0.82rem; font-weight: 700; background: rgba(148, 163, 184, 0.12); color: var(--app-muted); } .mobile-route-status.tone-success { background: rgba(21, 128, 61, 0.12); color: #166534; } .mobile-route-status.tone-warning { background: rgba(217, 119, 6, 0.12); color: #b45309; } .mobile-route-status.tone-danger { background: rgba(220, 38, 38, 0.1); color: #b91c1c; } .mobile-map-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.7rem; margin-bottom: 0.8rem; } .mobile-map-stat { padding: 0.8rem; border-radius: 16px; background: rgba(248,250,252,0.98); border: 1px solid rgba(203, 213, 225, 0.88); display: grid; gap: 0.22rem; } .mobile-map-stat-wide { grid-column: 1 / -1; } .mobile-map-stat-label { font-size: 0.74rem; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; color: var(--app-muted); } .mobile-map-stat strong { font-size: 0.92rem; line-height: 1.3; } .mobile-login-screen { min-height: var(--app-height); padding: 1.4rem; display: grid; place-items: center; align-content: center; overflow-y: auto; -webkit-overflow-scrolling: touch; } .mobile-login-card { width: min(100%, 440px); padding: 1.35rem; border-radius: 28px; background: linear-gradient(180deg, rgba(255,255,255,0.98) 0%, rgba(248,250,252,0.98) 100%); border: 1px solid rgba(203, 213, 225, 0.92); box-shadow: var(--app-shadow); } .mobile-activation-success-card { overflow: hidden; position: relative; } .activation-success-stage { position: relative; display: grid; place-items: center; padding: 1.4rem 0 0.8rem; isolation: isolate; } .activation-success-halo { position: absolute; border-radius: 999px; filter: blur(8px); opacity: 0.75; animation: activationSuccessFloat 3.6s ease-in-out infinite; } .activation-success-halo-a { width: 160px; height: 160px; background: radial-gradient(circle, rgba(34, 197, 94, 0.36) 0%, rgba(34, 197, 94, 0) 72%); transform: translate(-18px, -6px); } .activation-success-halo-b { width: 128px; height: 128px; background: radial-gradient(circle, rgba(14, 165, 233, 0.3) 0%, rgba(14, 165, 233, 0) 74%); transform: translate(26px, 22px); animation-delay: -1.4s; } .activation-success-seal { position: relative; width: 96px; height: 96px; border-radius: 28px; display: grid; place-items: center; color: #fff; font-size: 2rem; background: linear-gradient(135deg, #16a34a 0%, #22c55e 52%, #14b8a6 100%); box-shadow: 0 24px 48px rgba(22, 163, 74, 0.26); animation: activationSuccessPop 0.7s cubic-bezier(.18,.89,.32,1.28) both; z-index: 1; } .activation-success-hero { background: radial-gradient(circle at top right, rgba(134, 239, 172, 0.2), transparent 28%), linear-gradient(135deg, #14532d 0%, #15803d 42%, #0f766e 100%); } .activation-success-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.8rem; margin-top: 0.4rem; } .activation-success-meta > div { padding: 0.9rem; border-radius: 18px; background: rgba(241, 245, 249, 0.9); border: 1px solid rgba(203, 213, 225, 0.92); display: grid; gap: 0.2rem; } .activation-success-label { font-size: 0.7rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: var(--app-muted); } @keyframes activationSuccessPop { 0% { transform: scale(0.6) rotate(-12deg); opacity: 0; } 70% { transform: scale(1.06) rotate(2deg); opacity: 1; } 100% { transform: scale(1) rotate(0deg); opacity: 1; } } @keyframes activationSuccessFloat { 0%, 100% { transform: translate3d(-8px, -4px, 0) scale(1); } 50% { transform: translate3d(10px, 8px, 0) scale(1.06); } } .mobile-trial-card { position: relative; margin-bottom: 1rem; padding: 1rem; border-radius: 22px; background: linear-gradient(135deg, rgba(13, 42, 74, 0.98) 0%, rgba(16, 78, 139, 0.95) 55%, rgba(32, 137, 169, 0.94) 100%); color: #fff; overflow: hidden; box-shadow: 0 22px 40px rgba(16, 37, 63, 0.24); animation: trialCardPulse 2.8s ease-in-out infinite; } .mobile-trial-card::after { content: ''; position: absolute; inset: -20% auto auto 35%; width: 180px; height: 180px; background: radial-gradient(circle, rgba(255,255,255,0.24) 0%, rgba(255,255,255,0) 68%); pointer-events: none; } .mobile-trial-card.is-expired { background: linear-gradient(135deg, rgba(104, 22, 22, 0.98) 0%, rgba(163, 34, 34, 0.96) 58%, rgba(220, 38, 38, 0.9) 100%); animation-duration: 1.8s; } .mobile-trial-card-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.75rem; position: relative; z-index: 1; } .mobile-trial-badge { display: inline-flex; align-items: center; gap: 0.45rem; padding: 0.42rem 0.7rem; border-radius: 999px; background: rgba(255,255,255,0.16); border: 1px solid rgba(255,255,255,0.2); font-size: 0.72rem; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; } .mobile-trial-meta, .mobile-trial-timer, .mobile-trial-progress { position: relative; z-index: 1; } .mobile-trial-timer { margin-top: 0.9rem; font-size: 1.3rem; font-weight: 900; letter-spacing: 0.04em; text-align: center; padding: 0.85rem; border-radius: 18px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.14); backdrop-filter: blur(10px); animation: trialDigitsGlow 1.3s ease-in-out infinite alternate; } .mobile-trial-progress { margin-top: 0.8rem; height: 10px; border-radius: 999px; background: rgba(255,255,255,0.16); overflow: hidden; } .mobile-trial-progress span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #fde68a 0%, #f59e0b 50%, #fb7185 100%); box-shadow: 0 0 18px rgba(251, 113, 133, 0.55); transition: width 0.8s ease; } .mobile-trial-meta { margin-top: 0.7rem; font-size: 0.8rem; color: rgba(255,255,255,0.86); } @keyframes trialCardPulse { 0% { transform: translateY(0); box-shadow: 0 18px 34px rgba(16, 37, 63, 0.22); } 50% { transform: translateY(-2px); box-shadow: 0 26px 44px rgba(16, 37, 63, 0.3); } 100% { transform: translateY(0); box-shadow: 0 18px 34px rgba(16, 37, 63, 0.22); } } @keyframes trialDigitsGlow { from { box-shadow: inset 0 0 0 rgba(255,255,255,0.06); } to { box-shadow: inset 0 0 24px rgba(255,255,255,0.14); } } .mobile-login-brandmark { padding: 0.65rem; border-radius: 22px; background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.16); } .screen-hero, .mobile-panel, .report-panel, .report-summary-card, .report-step-panel, .report-upload-card, .report-item-card, .report-signature-card, .report-material-card, .mobile-list-card { border-radius: var(--app-radius-lg); background: linear-gradient(180deg, rgba(255,255,255,0.98) 0%, rgba(248,250,252,0.98) 100%); border: 1px solid var(--app-border); box-shadow: var(--app-shadow); } .screen-hero { padding: 1.15rem; background: radial-gradient(circle at top right, rgba(34, 193, 195, 0.18), transparent 28%), linear-gradient(135deg, #10375c 0%, #145da0 48%, #1f9db5 100%); color: #fff; overflow: hidden; } .screen-hero h1, .screen-hero h2, .screen-hero h3, .screen-hero h4, .screen-hero h5, .screen-hero h6 { color: inherit; } .screen-hero-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.65rem; margin-top: 1rem; } .screen-hero-pill { display: inline-flex; align-items: center; gap: 0.45rem; width: fit-content; max-width: 100%; padding: 0.42rem 0.72rem; border-radius: 999px; background: rgba(255,255,255,0.14); border: 1px solid rgba(255,255,255,0.16); font-size: 0.72rem; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; } .screen-hero-kpi { padding: 0.78rem 0.85rem; border-radius: 18px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.12); } .screen-hero-kpi-label { display: block; font-size: 0.68rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.8; } .screen-hero-kpi-value { display: block; margin-top: 0.18rem; font-size: 0.92rem; font-weight: 800; } .mobile-list-card { padding: 1rem; } .mobile-proximity-card { position: relative; overflow: hidden; border-width: 1px; transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; } .mobile-proximity-card::after { content: ''; position: absolute; inset: 0; pointer-events: none; border-radius: inherit; border: 1px solid transparent; transition: border-color 0.2s ease; } .mobile-proximity-card.is-maintenance { background: linear-gradient(180deg, rgba(255, 245, 245, 0.98) 0%, rgba(254, 242, 242, 0.98) 100%); border-color: rgba(248, 113, 113, 0.8); box-shadow: 0 16px 34px rgba(185, 28, 28, 0.16); animation: proximityMaintenancePulse 1.25s ease-in-out infinite; } .mobile-proximity-card.is-maintenance::after { border-color: rgba(220, 38, 38, 0.45); animation: proximityMaintenanceBorder 1.25s ease-in-out infinite; } .mobile-proximity-alert-badge { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.45); animation: proximityBadgeBlink 1.1s ease-in-out infinite; } @keyframes proximityMaintenancePulse { 0%, 100% { transform: translateY(0); box-shadow: 0 16px 34px rgba(185, 28, 28, 0.14); } 50% { transform: translateY(-2px); box-shadow: 0 22px 44px rgba(185, 28, 28, 0.24); } } @keyframes proximityMaintenanceBorder { 0%, 100% { opacity: 0.35; } 50% { opacity: 1; } } @keyframes proximityBadgeBlink { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.68; transform: scale(1.04); } } .mobile-dashboard-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.9rem; } .mobile-dashboard-grid-secondary { grid-template-columns: 1.1fr 0.9fr; } .mobile-dashboard-panel { padding: 1rem; } .mobile-dashboard-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; } .mobile-dashboard-metric-card { display: grid; gap: 0.85rem; } .mobile-dashboard-metric-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .mobile-dashboard-metric-icon, .mobile-dashboard-recent-icon { width: 46px; height: 46px; border-radius: 16px; display: inline-flex; align-items: center; justify-content: center; background: rgba(15, 108, 189, 0.08); color: var(--app-primary); font-size: 1.05rem; } .mobile-dashboard-metric-value { font-size: 2rem; font-weight: 800; letter-spacing: -0.04em; } .mobile-dashboard-priority-item { display: flex; align-items: flex-start; gap: 0.7rem; padding: 0.85rem; border-radius: 18px; background: rgba(248,250,252,0.94); border: 1px solid rgba(203, 213, 225, 0.88); color: var(--app-text); } .mobile-dashboard-priority-item i { margin-top: 0.15rem; color: var(--app-accent); } .mobile-dashboard-recent { display: grid; grid-template-columns: auto 1fr auto; gap: 0.8rem; align-items: center; padding: 0.85rem; border-radius: 18px; background: rgba(248,250,252,0.94); border: 1px solid rgba(203, 213, 225, 0.88); color: inherit; } .mobile-dashboard-recent-copy { display: grid; gap: 0.2rem; min-width: 0; } .mobile-dashboard-recent-copy strong, .mobile-dashboard-recent-meta { font-size: 0.9rem; font-weight: 800; } .mobile-dashboard-recent-copy span { font-size: 0.8rem; color: var(--app-muted); line-height: 1.35; } .mobile-dashboard-recent-meta { color: var(--app-primary-strong); text-align: right; font-size: 0.8rem; } .mobile-list-card-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; } .mobile-ticket-title { font-size: 1rem; font-weight: 800; letter-spacing: -0.01em; } .mobile-ticket-subtitle { color: var(--app-muted); font-size: 0.84rem; } .mobile-badge-row { display: flex; flex-wrap: wrap; gap: 0.45rem; } .mobile-soft-badge { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.34rem 0.62rem; border-radius: 999px; background: rgba(15, 108, 189, 0.08); color: var(--app-primary-strong); border: 1px solid rgba(15, 108, 189, 0.1); font-size: 0.72rem; font-weight: 800; } .mobile-list-actions { display: grid; grid-template-columns: 1fr auto; gap: 0.65rem; align-items: center; } .mobile-cta { min-height: 46px; border-radius: 16px; border: 0; font-weight: 800; letter-spacing: 0.01em; } .report-screen { display: grid; gap: 1rem; } .report-screen .btn, .mobile-list-card .btn, .mobile-login-card .btn { min-height: 46px; border-radius: 16px; font-weight: 800; } .report-summary-card, .report-panel, .report-step-panel, .report-signature-card, .report-item-card, .report-upload-card, .report-material-card { padding: 1rem; } .report-summary-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.7rem; } .report-summary-block { padding: 0.78rem 0.85rem; border-radius: 16px; background: rgba(241, 245, 249, 0.9); border: 1px solid rgba(226, 232, 240, 0.95); } .report-summary-block-label { display: block; font-size: 0.68rem; color: var(--app-muted); text-transform: uppercase; letter-spacing: 0.08em; font-weight: 800; } .report-summary-block-value { display: block; margin-top: 0.2rem; font-size: 0.88rem; font-weight: 800; overflow-wrap: anywhere; } .report-step-toolbar { display: flex; align-items: center; justify-content: flex-start; gap: 0.75rem; margin-bottom: 0; flex-wrap: wrap; } .report-step-toolbar-label { font-size: 0.72rem; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; color: var(--app-muted); } .report-step-toolbar-current { margin-top: 0.12rem; font-size: 0.9rem; font-weight: 800; color: var(--app-text); } @media (max-width: 480px) { .report-step-nav { grid-template-columns: repeat(2, minmax(0, 1fr)); } .report-step-toggle { width: 100%; } } .report-step-panel[hidden] { display: none !important; } .report-panel-title { display: flex; align-items: center; justify-content: space-between; gap: 0.65rem; margin-bottom: 0.9rem; } .report-panel-title-main { font-size: 1rem; font-weight: 800; letter-spacing: -0.02em; } .report-panel-subtitle { margin-top: 0.2rem; color: var(--app-muted); font-size: 0.82rem; } .report-inline-grid, .report-grid-2, .report-grid-3 { display: grid; gap: 0.75rem; } .report-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .report-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .report-radio-grid, .report-check-grid, .report-satisfaction-grid { display: grid; gap: 0.6rem; } .report-satisfaction-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .report-choice, .report-check-card, .report-satisfaction-card { position: relative; } .report-choice input, .report-check-card input, .report-satisfaction-card input { position: absolute; inset: 0; opacity: 0; pointer-events: none; } .report-choice-label, .report-check-label, .report-satisfaction-label { width: 100%; min-height: 68px; padding: 0.8rem 0.9rem; border-radius: 18px; border: 1px solid rgba(203, 213, 225, 0.92); background: rgba(255,255,255,0.88); display: flex; align-items: center; gap: 0.75rem; color: var(--app-text); font-weight: 700; } .report-choice input:checked + .report-choice-label, .report-check-card input:checked + .report-check-label, .report-satisfaction-card input:checked + .report-satisfaction-label { border-color: rgba(15, 108, 189, 0.34); background: linear-gradient(180deg, rgba(239,246,255,0.98) 0%, rgba(255,255,255,0.98) 100%); box-shadow: 0 14px 26px rgba(15, 108, 189, 0.08); } .report-choice-icon, .report-check-icon, .report-satisfaction-icon { width: 42px; height: 42px; flex: 0 0 42px; border-radius: 14px; display: inline-flex; align-items: center; justify-content: center; color: var(--app-primary); background: rgba(15, 108, 189, 0.08); } .report-satisfaction-icon { font-size: 1.15rem; } .report-choice-text, .report-satisfaction-text { display: flex; flex-direction: column; gap: 0.1rem; } .report-choice-caption, .report-satisfaction-caption { color: var(--app-muted); font-size: 0.76rem; font-weight: 600; } .report-item-card, .report-material-card { display: grid; gap: 0.75rem; background: rgba(248,250,252,0.92); } .report-item-card-header, .report-material-card-header { display: flex; align-items: center; justify-content: space-between; gap: 0.65rem; } .report-upload-list, .report-thumb-list { display: flex; flex-wrap: wrap; gap: 0.6rem; } .report-upload-note-card { padding: 0.7rem; border-radius: 18px; background: rgba(248,250,252,0.94); border: 1px solid rgba(203, 213, 225, 0.92); min-width: 140px; max-width: 164px; } .report-photo-comment { min-height: 76px; font-size: 0.82rem; } .report-thumb { position: relative; width: 74px; height: 74px; border-radius: 18px; overflow: hidden; border: 1px solid rgba(203, 213, 225, 0.92); background: #e2e8f0; } .report-thumb img { width: 100%; height: 100%; object-fit: cover; } .report-canvas { width: 100%; height: auto; border-radius: 18px; border: 1px dashed rgba(148, 163, 184, 0.82); background: linear-gradient(180deg, rgba(255,255,255,0.96) 0%, rgba(248,250,252,0.98) 100%); } .report-gps-card { display: flex; gap: 0.85rem; align-items: flex-start; padding: 0.9rem; border-radius: 18px; background: rgba(239,246,255,0.9); border: 1px solid rgba(147,197,253,0.34); } .report-gps-icon { width: 44px; height: 44px; border-radius: 14px; display: inline-flex; align-items: center; justify-content: center; color: #fff; background: linear-gradient(135deg, #0f6cbd 0%, #22c1c3 100%); } .report-action-bar { position: sticky; bottom: 5.25rem; z-index: 20; padding: 0.75rem; border-radius: 20px; background: rgba(255,255,255,0.92); backdrop-filter: blur(18px); border: 1px solid rgba(203, 213, 225, 0.88); box-shadow: 0 14px 24px rgba(15, 23, 42, 0.1); } .report-action-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.55rem; } .report-action-grid.report-action-grid-main { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 0.55rem; } .report-action-bar .btn { min-height: 44px; padding-inline: 0.55rem; font-size: 0.88rem; } .report-signature-card, .report-upload-card, .report-panel, .report-summary-card { overflow: hidden; } .report-back-link { display: inline-flex; align-items: center; gap: 0.45rem; color: rgba(255,255,255,0.86); font-weight: 700; } .report-empty-state { text-align: center; padding: 1.2rem; color: var(--app-muted); } .report-empty-state-icon { width: 60px; height: 60px; margin: 0 auto 0.75rem; border-radius: 20px; display: inline-flex; align-items: center; justify-content: center; background: rgba(15,108,189,0.08); color: var(--app-primary); font-size: 1.25rem; } .form-control, .form-select { min-height: 48px; font-size: 16px; border-radius: 16px; border-color: rgba(203, 213, 225, 0.92); box-shadow: inset 0 1px 0 rgba(255,255,255,0.75); } .form-control, .form-select, textarea, input, select { scroll-margin-top: 7rem; scroll-margin-bottom: 7rem; } .form-control:focus, .form-select:focus { border-color: rgba(15, 108, 189, 0.45); box-shadow: 0 0 0 0.22rem rgba(15, 108, 189, 0.12); } .btn-primary { background: linear-gradient(135deg, #0f6cbd 0%, #1482c7 100%); border-color: transparent; } .btn-success { background: linear-gradient(135deg, #15803d 0%, #16a34a 100%); border-color: transparent; } .btn-warning { color: #fff; background: linear-gradient(135deg, #d97706 0%, #f59e0b 100%); border-color: transparent; } .btn-outline-secondary, .btn-outline-primary, .btn-outline-danger { background: rgba(255,255,255,0.92); } .text-body-secondary, .text-muted { color: var(--app-muted) !important; } body.keyboard-open .mobile-bottom-nav { transform: translateY(calc(100% + env(safe-area-inset-bottom))); opacity: 0; pointer-events: none; } body.keyboard-open .mobile-main { padding-bottom: calc(var(--app-keyboard-offset) + 1.25rem); } body.keyboard-open .mobile-login-screen { place-items: start center; align-content: start; padding-top: 0.75rem; padding-bottom: calc(var(--app-keyboard-offset) + 1.25rem); } body.keyboard-open .mobile-login-card { width: min(100%, 100%); } input, textarea, select, [contenteditable="true"] { scroll-margin-top: 1rem; scroll-margin-bottom: calc(var(--app-keyboard-offset) + 6rem); } body.keyboard-open .mobile-topbar { position: relative; padding-bottom: 0.65rem; } body.keyboard-open .mobile-operator-chip { display: none; } body.keyboard-open .report-action-bar { position: static; bottom: auto; margin-top: 1rem; } @media (max-height: 740px) { .mobile-topbar { padding-top: 0.75rem; } .mobile-brand-mark { width: 52px; height: 52px; } .mobile-brand-title { font-size: 1.02rem; } .mobile-brand-subtitle { font-size: 0.72rem; } .mobile-operator-chip { margin-top: 0.65rem; padding: 0.6rem 0.8rem; } } @media (max-width: 390px) { .report-step-nav, .report-summary-grid, .report-grid-2, .report-grid-3, .report-satisfaction-grid, .screen-hero-meta, .report-action-grid.report-action-grid-main, .mobile-dashboard-grid, .mobile-dashboard-grid-secondary, .mobile-dashboard-actions { grid-template-columns: 1fr; } .mobile-main { padding-inline: 0.85rem; } .mobile-brand-row { grid-template-columns: 1fr; } .mobile-brand-copy { order: 3; } .mobile-topbar-actions { justify-content: flex-end; } .mobile-dashboard-recent { grid-template-columns: auto 1fr; } .mobile-dashboard-recent-meta { grid-column: 2; text-align: left; } } @keyframes splashPulse { 0%, 80%, 100% { transform: scale(0.72); opacity: 0.45; } 40% { transform: scale(1); opacity: 1; } } @keyframes splashFloat { 0%, 100% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(12px) translateX(6px); } } @keyframes splashCardIn { from { opacity: 0; transform: translateY(18px) scale(.98); } to { opacity: 1; transform: translateY(0) scale(1); } } /* ── Bannière résumé étude — phase installation raccordement ── */ .study-summary-banner { background: linear-gradient(135deg, #e8f4fd 0%, #d1ecf1 100%); border: 1px solid #bee5eb; border-left: 4px solid #17a2b8; border-radius: 8px; padding: 12px 14px; margin-bottom: 12px; } .study-summary-banner-title { font-size: 0.85rem; font-weight: 700; color: #0c5460; margin-bottom: 10px; letter-spacing: 0.02em; text-transform: uppercase; } .study-summary-banner-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; } .study-summary-item { display: flex; flex-direction: column; gap: 2px; } .study-summary-label { font-size: 0.7rem; color: #5a7980; font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em; } .study-summary-value { font-size: 0.82rem; color: #0c5460; font-weight: 600; } .study-summary-detail { font-size: 0.72rem; color: #5a7980; margin-top: 1px; } .study-summary-comment { margin-top: 8px; padding-top: 8px; border-top: 1px solid #bee5eb; font-size: 0.78rem; color: #3d6b73; font-style: italic; }