/** * PWA Styles * ========== */ /* Install Button */ .install-button { display: flex; align-items: center; gap: 0.5rem; margin-right: 1rem; font-size: 0.875rem; } .install-button svg { width: 16px; height: 16px; } /* Install Banner */ .pwa-install-banner { position: fixed; bottom: -100%; left: 0; right: 0; background: var(--bg-primary); border-top: 1px solid var(--border-color); box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); transition: bottom 0.3s ease; z-index: 1000; } .pwa-install-banner.show { bottom: 0; } .install-banner-content { display: flex; align-items: center; gap: 1rem; padding: 1.5rem; max-width: 600px; margin: 0 auto; position: relative; } .install-banner-icon { flex-shrink: 0; color: var(--primary-color); } .install-banner-text h3 { margin: 0 0 0.25rem 0; font-size: 1.125rem; font-weight: 600; } .install-banner-text p { margin: 0; color: var(--text-secondary); font-size: 0.875rem; } .install-banner-actions { display: flex; gap: 0.75rem; margin-left: auto; } .install-banner-close { position: absolute; top: 0.5rem; right: 0.5rem; background: none; border: none; font-size: 1.5rem; line-height: 1; color: var(--text-secondary); cursor: pointer; padding: 0.5rem; opacity: 0.6; } .install-banner-close:hover { opacity: 1; } /* iOS Install Instructions */ .ios-install-instructions { position: fixed; bottom: -100%; left: 0; right: 0; background: var(--bg-primary); border-top: 1px solid var(--border-color); box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); transition: bottom 0.3s ease; z-index: 1000; text-align: center; padding: 2rem; } .ios-install-instructions.show { bottom: 0; } .ios-install-content h3 { margin: 0 0 1rem 0; font-size: 1.25rem; font-weight: 600; } .ios-install-content p { margin: 0 0 1.5rem 0; color: var(--text-secondary); } .ios-share-icon { display: inline-block; background: var(--bg-secondary); padding: 0.25rem 0.5rem; border-radius: 4px; font-weight: bold; } /* Offline indicator enhancement */ body.offline { position: relative; } body.offline::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.05); pointer-events: none; z-index: 9999; } /* Mobile responsive */ @media (max-width: 768px) { .install-button span { display: none; } .install-banner-content { flex-direction: column; text-align: center; } .install-banner-actions { margin-left: 0; width: 100%; } .install-banner-actions button { flex: 1; } .install-banner-close { top: 1rem; right: 1rem; } } /* Standalone mode adjustments */ @media (display-mode: standalone) { /* Adjust for missing browser chrome */ .header { padding-top: env(safe-area-inset-top); } .main-content { padding-bottom: env(safe-area-inset-bottom); } }