.pwa-card{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;border:1px solid #4d5a2a;background:linear-gradient(135deg,#232817,#1d2021)}
.pwa-card h2{margin:4px 0 6px;font-size:18px}.pwa-card p{margin:0;color:#c9ccc6;font-size:13px;line-height:1.6;word-break:keep-all}
.pwa-card-text{flex:1 1 240px;min-width:0}.pwa-card[data-pwa-card="home"]{margin-bottom:16px}.pwa-card-compact{margin-top:14px}
.pwa-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.pwa-actions .button,.pwa-actions button{white-space:nowrap}
.pwa-sheet-backdrop{position:fixed;inset:0;z-index:60;display:grid;place-items:end center;padding:16px;background:rgba(10,12,14,.66)}
.pwa-sheet{width:min(460px,100%);max-height:86vh;overflow:auto;padding:22px 22px 18px;border-radius:18px;background:#fff;color:#17191b;box-shadow:0 18px 50px rgba(0,0,0,.35)}
.pwa-sheet h2{margin:0 0 12px;font-size:19px;color:#17191b}.pwa-sheet ol{margin:0 0 12px;padding-left:20px;line-height:1.7;font-size:15px}.pwa-sheet li{margin:4px 0;word-break:keep-all}
.pwa-sheet .fine{color:#5d6361;font-size:13px;line-height:1.6;margin:0 0 14px}.pwa-sheet .pwa-actions{justify-content:flex-end}.pwa-sheet .text-action{color:#17191b}
@media(min-width:700px){.pwa-sheet-backdrop{place-items:center}}
.offline-page{margin:0;min-height:100vh;display:grid;place-items:center;background:#17191b;color:#f4f5f0;font-family:"Noto Sans KR","Malgun Gothic",sans-serif;text-align:center;padding:24px}
.offline-page main{max-width:360px}.offline-page img{border-radius:22px}.offline-page h1{font-size:21px;margin:18px 0 8px}.offline-page p{color:#a6aaa7;line-height:1.6;word-break:keep-all}
.offline-retry{display:inline-block;margin-top:14px;padding:12px 22px;border-radius:999px;background:#e4f630;color:#17191b;font-weight:700;text-decoration:none}
/* INFI8 store app (native-app.js sets html.infi8-app): Google blocks OAuth inside app WebViews, so its login is hidden there. */
.infi8-app a[href^="/auth/start/google"],.infi8-app [data-pwa-card]{display:none!important}
.infi8-app .social-login-item:has(> .google){display:none!important}

/* iOS store app (native-app.js coverSafeArea, 2026-10-13): viewport-fit=cover lets the sticky header sit right under the
   status bar, but it also turns on env(safe-area-inset-bottom) (home indicator, 34px). Keep the floating buttons and the
   comment box exactly where they are in the browser and in app 1.0 before this change. */
html.infi8-ios-fit .member-inquiry{bottom:98px}
html.infi8-ios-fit .booking-fab{bottom:100px}
html.infi8-ios-fit body.refined-member .comment-sheet .sheet-composer{padding-bottom:12px}
