@font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Black.ttf') format('truetype'); font-weight: 900; font-style: normal; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-BlackItalic.ttf') format('truetype'); font-weight: 900; font-style: italic; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Bold.ttf') format('truetype'); font-weight: 700; font-style: normal; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-BoldItalic.ttf') format('truetype'); font-weight: 700; font-style: italic; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-MediumItalic.ttf') format('truetype'); font-weight: 500; font-style: italic; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Regular.ttf') format('truetype'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Italic.ttf') format('truetype'); font-weight: 400; font-style: italic; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-Light.ttf') format('truetype'); font-weight: 300; font-style: normal; } @font-face { font-family: 'Poppins'; src: url('fonts/Poppins-LightItalic.ttf') format('truetype'); font-weight: 300; font-style: italic; } body { font-family: 'Poppins', sans-serif !important; } * { margin: 0; padding: 0; user-select: none; -webkit-touch-callout: none; -webkit-tap-highlight-color: transparent; } html, body { overscroll-behavior: none; } body { font-family: "Poppins", sans-serif; height: 100vh; overflow: hidden; } /* DESKTOP SECTION */ body.desktopBody { background: #2a377e; color: white; } div.dbox, div.dbox_mobile { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #4358ca8f; padding: 25px; border-radius: 50px; text-align: center; width: 500px; } div.dbox_mobile { width: 90%; max-width: 750px; color: white; border-radius: 10px; max-height: 475px; overflow: auto; } div.dbox>h1.title, div.dbox_mobile>h1.title { margin-bottom: 0px; } div.dbox>hr, div.dbox_mobile>hr { margin: 2rem 0; } div.dbox>.dbtn, div.dbox_mobile>.dbtn { border: none; border-radius: 50px; padding: 10px 20px; background: #f0f0f0; color: black; text-decoration: none; font-weight: 600; -webkit-appearance: button; } div.dbox>.dbtn:hover { background: #e0e0e0; cursor: pointer; } div.dfooter { position: fixed; bottom: 15px; left: 50%; transform: translateX(-50%); text-align: center; color: #ffffff90; font-size: 13px; width: 100%; } /* MOBILE SECTION */ .appBody { background-color: #10194b; max-width: 750px; min-width: 330px; margin: auto; display: flex; flex-direction: column; min-height: 100vh; } .header>.logo-section, .header>.menu-section { text-align: center; } .header>.logo-section, .footer>.copyright-section { background-color: #2a377e; padding: 15px 0; } .header>.menu-section { background-color: #3849a8; padding: 13px 0; } .header>.logo-section>img { width: 250px; } .header>.menu-section>.navLink { color: white; text-decoration: none; margin: 0 15px; } .header>.menu-section>.navLink.active { color: #2a377e; margin: 0; padding: 3px 15px; background: white; border-radius: 50px; font-weight: 500; } main { background-color: white; flex: 1; overflow: auto; padding-left: 0 !important; padding-right: 0 !important; } .titlePage { text-align: center; font-weight: 600; margin: 15px 0 20px; } .subtitlePage { text-align: center; font-weight: 500; margin: -15px 0 20px; } .linkBox { text-decoration: none; color: black; } .clickBox { width: 100%; border: 2px solid #2a377e; text-align: center; border-radius: 20px; font-weight: 500; /* margin-bottom: 10px; */ padding: 4px; } .clickBox.Squared { font-weight: 600; border: solid 4px #2a377e; } .clickBox>img { width: 80%; } .changelogTitle { font-weight: 600; margin: 0 0 15px; } .changelogList, .tec, .stationList { margin: 0 0 10px; text-align: left; hyphens: auto; } .stationList { text-align: center; } .stationCard>a.stationLink { padding: 0; } .stationCard>a.stationLink>img { width: 100%; border-radius: 20px; } /* .stationCard>.thematicBadge { position: relative; background: #f7b835; padding: 1px 5px; font-size: 0.8rem; border-radius: 27px; font-style: italic; font-weight: 600; top: 31px; left: 35px; margin: 0; } */ .stationCard.isthematic { text-align: right; margin-top: -24px; } .stationCard.isthematic:before { content: "Tematica"; position: relative; background: #f7b835; padding: 1px 5px; font-size: 0.8rem; border-radius: 27px; font-style: italic; font-weight: 600; top: 30px; right: 7px; margin: 0; } iframe.contentplayer { height: calc(100vh - 393px); width: 100%; max-width: 750px; } .footer_player { background: #f7b835; color: #2a377d; z-index: 90; width: 100%; max-width: 750px; height: 100px; padding: 20px; border-top: 1px solid #eee; flex: 1; align-content: end; } .footer_player>.row>.col-2>img { border-radius: 5px; } button#playPauseBtn, button#formatToggleBtn { background: none; border: none; } .footer, .header { z-index: 10000; } .footer>.menu-section { background: #3849a8; font-size: 0.7rem; padding: 7px 0; text-align: center; } .footer>.menu-section>a { color: white; text-decoration: none; margin: 0 5px; } .footer>.copyright-section { color: white; font-size: 0.8rem; text-align: center; padding: 10px; font-weight: 500; } @media (max-width: 450px) { .appBody { background-color: #2a377e; } } /* Loading spinner */ .loading { display: flex; justify-content: center; align-items: center; min-height: 200px; } .spinner { width: 40px; height: 40px; border: 4px solid rgba(0, 0, 0, 0.1); border-radius: 50%; border-top-color: #3498db; animation: spin 1s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Forza orientamento portrait - nasconde contenuto in landscape */ @media screen and (orientation: landscape) and (max-height: 450px) { body.appBody::after { content: "Ruota il dispositivo in verticale"; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #2a377e; color: white; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; font-weight: 600; z-index: 9999; text-align: center; padding: 20px; } body.appBody>* { display: none !important; } } /* PWA STYLES (Banner, Nav Button, and Instructions Modal) */ /* Hide all PWA install indicators when running as standalone installed app */ @media (display-mode: standalone) { .pwa-install-btn, .pwa-install-banner, .pwa-install-btn-nav { display: none !important; } } /* iOS navigation standalone fallback check */ @media (display-mode: standalone) { body.appBody { padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); } } /* PWA Install Banner Style */ .pwa-install-banner { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%) translateY(120px); width: 90%; max-width: 500px; background: rgba(24, 34, 92, 0.95); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 24px; padding: 16px; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5); z-index: 100000; display: flex; flex-direction: column; transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.4s; opacity: 0; color: white; box-sizing: border-box; } .pwa-install-banner.show { transform: translateX(-50%) translateY(0); opacity: 1; } .pwa-banner-content { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; } .pwa-banner-logo { width: 48px; height: 48px; border-radius: 12px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); flex-shrink: 0; } .pwa-banner-text { flex: 1; text-align: left; } .pwa-banner-title { font-weight: 700; font-size: 1rem; color: #fff; } .pwa-banner-desc { font-size: 0.75rem; color: rgba(255, 255, 255, 0.85); margin-top: 2px; line-height: 1.3; } .pwa-banner-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } .pwa-banner-btn { background: linear-gradient(135deg, #f7b835, #f5a623); color: #10194b; border: none; padding: 8px 16px; border-radius: 30px; font-weight: 700; font-size: 0.8rem; cursor: pointer; box-shadow: 0 4px 12px rgba(247, 184, 53, 0.3); transition: transform 0.2s, box-shadow 0.2s, background 0.2s; white-space: nowrap; } .pwa-banner-btn:hover { background: linear-gradient(135deg, #ffd05c, #ffb633); } .pwa-banner-btn:active { transform: scale(0.95); } .pwa-banner-close-btn { background: rgba(255, 255, 255, 0.1); border: none; color: white; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background 0.2s; } .pwa-banner-close-btn:hover { background: rgba(255, 255, 255, 0.2); } /* Nav Link Install Button */ .pwa-install-btn-nav { color: #f7b835 !important; font-weight: 700; border: 1px solid #f7b835; padding: 4px 12px !important; border-radius: 20px; display: inline-flex !important; align-items: center; gap: 4px; background: rgba(247, 184, 53, 0.1); transition: all 0.3s ease; } .pwa-install-btn-nav:hover { background: #f7b835 !important; color: #10194b !important; } /* PWA Instructions Modal Overlay */ .pwa-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); z-index: 110000; display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease; box-sizing: border-box; } .pwa-modal-overlay.show { opacity: 1; } .pwa-modal-content { background: #18225c; color: white; width: 90%; max-width: 420px; border-radius: 24px; border: 1px solid rgba(255, 255, 255, 0.15); box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5); transform: scale(0.9); transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); overflow: hidden; box-sizing: border-box; } .pwa-modal-overlay.show .pwa-modal-content { transform: scale(1); } .pwa-modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .pwa-modal-header h3 { font-size: 1.1rem; margin: 0; font-weight: 700; color: white; } .pwa-modal-close-btn-top { background: none; border: none; color: rgba(255, 255, 255, 0.6); cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; transition: color 0.2s; } .pwa-modal-close-btn-top:hover { color: white; } .pwa-modal-body { padding: 20px; text-align: left; } .pwa-modal-app-info { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); padding-bottom: 15px; } .pwa-modal-logo { width: 52px; height: 52px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); flex-shrink: 0; } .pwa-modal-steps { display: flex; flex-direction: column; gap: 16px; } .pwa-step { display: flex; gap: 12px; align-items: flex-start; } .pwa-step-num { background: #f7b835; color: #10194b; width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.8rem; flex-shrink: 0; margin-top: 2px; } .pwa-step-text { font-size: 0.85rem; line-height: 1.4; color: rgba(255, 255, 255, 0.9); } .pwa-step-text strong { color: #f7b835; } .pwa-inline-icon { vertical-align: middle; margin: 0 2px; background: rgba(255, 255, 255, 0.12); border-radius: 6px; padding: 2px 4px; display: inline-flex; align-items: center; justify-content: center; } @media (max-width: 480px) { .pwa-install-banner { width: 95%; bottom: 10px; padding: 12px; } .pwa-banner-content { gap: 8px; } .pwa-banner-desc { font-size: 0.7rem; } .pwa-banner-btn { padding: 6px 12px; font-size: 0.75rem; } } /* OFFLINE SCREEN STYLES */ .offline-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(16, 25, 75, 0.96); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); z-index: 999999; display: flex; justify-content: center; align-items: center; opacity: 0; visibility: hidden; transition: opacity 0.5s ease, visibility 0.5s ease; } .offline-overlay.active { opacity: 1; visibility: visible; } .offline-content { text-align: center; color: white; padding: 40px; max-width: 400px; width: 90%; font-family: 'Poppins', sans-serif; } .offline-icon { font-size: 80px; color: #ff5e5e; margin-bottom: 24px; animation: pulse-offline 2s infinite ease-in-out; display: inline-block; } .offline-title { font-size: 1.8rem; font-weight: 700; margin-bottom: 12px; letter-spacing: -0.5px; color: white; } .offline-desc { font-size: 1rem; color: rgba(255, 255, 255, 0.7); margin-bottom: 30px; line-height: 1.5; } .offline-btn { background: linear-gradient(135deg, #f7b835, #f5a623); color: #10194b; border: none; padding: 12px 30px; font-size: 0.95rem; font-weight: 700; border-radius: 50px; cursor: pointer; box-shadow: 0 4px 15px rgba(245, 166, 35, 0.4); transition: transform 0.2s, box-shadow 0.2s; display: inline-flex; align-items: center; justify-content: center; gap: 8px; text-decoration: none; } .offline-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(245, 166, 35, 0.6); color: #10194b; } .offline-btn:active { transform: translateY(0); } .offline-btn:disabled { opacity: 0.8; cursor: not-allowed; transform: none; box-shadow: none; } @keyframes pulse-offline { 0% { transform: scale(1); opacity: 0.8; } 50% { transform: scale(1.08); opacity: 1; } 100% { transform: scale(1); opacity: 0.8; } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .spinner-offline { display: inline-block; }