{"id":14,"date":"2026-09-01T06:44:05","date_gmt":"2026-09-01T06:44:05","guid":{"rendered":"https:\/\/lista.wp-dev.ug.edu.pl\/?page_id=14"},"modified":"2026-09-01T08:17:59","modified_gmt":"2026-09-01T08:17:59","slug":"14-2","status":"publish","type":"page","link":"https:\/\/lista.wp-dev.ug.edu.pl\/?page_id=14","title":{"rendered":"Lista przeboj\u00f3w"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n<div id=\"mors-app\" class=\"mors-app bg-[#F5F5F5] text-[#1E293B] min-h-screen flex flex-col selection:bg-[#a1daf8] selection:text-[#00214d]\">\n\n  <!-- ================= TOP ON-AIR NOTIFICATION BAR ================= -->\n  <aside aria-label=\"Informacja o audycji\" class=\"mors-chrome bg-[#032c73] text-white border-b border-[#0041d2]\/40 py-2 px-4 text-xs font-body\">\n    <div class=\"max-w-7xl mx-auto flex flex-wrap items-center justify-between gap-3\">\n      <div class=\"flex items-center gap-2.5\">\n        <span class=\"flex h-2.5 w-2.5 relative\">\n          <span class=\"animate-ping absolute inline-flex h-full w-full bg-[#EF305E] opacity-75\"><\/span>\n          <span class=\"relative inline-flex h-2.5 w-2.5 bg-[#EF305E]\"><\/span>\n        <\/span>\n        <span class=\"font-headings font-bold text-white uppercase tracking-wider text-[11px] bg-[#EF305E] px-2 py-0.5\">ON-AIR<\/span>\n        <span class=\"text-[#a1daf8] hidden sm:inline\">\u2022<\/span>\n        <span class=\"text-slate-200 hidden sm:inline\">Audycja podsumowuj\u0105ca: <strong class=\"text-white font-semibold\">w ka\u017cdy Pi\u0105tek o 18:00 na antenie Radia MORS<\/strong><\/span>\n      <\/div>\n\n      <div class=\"flex items-center gap-4 text-slate-200\">\n        <div id=\"live-pulse-badge\" class=\"flex items-center gap-1.5 transition-transform duration-300\">\n          <i data-lucide=\"radio\" class=\"w-3.5 h-3.5 text-[#a1daf8]\"><\/i>\n          <span>G\u0142os\u00f3w \u0142\u0105cznie: <strong id=\"header-total-votes\" class=\"text-white font-mono font-bold\">0<\/strong><\/span>\n        <\/div>\n        <span class=\"hidden md:inline text-slate-400\">\u2022<\/span>\n        <div class=\"hidden md:flex items-center gap-1.5 text-slate-200\">\n          <i data-lucide=\"clock\" class=\"w-3.5 h-3.5 text-[#FEC001]\"><\/i>\n          <span>Koniec g\u0142osowania: <strong id=\"header-countdown\" class=\"text-[#FEC001] font-mono font-bold\">--<\/strong><\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/aside>\n\n  <!-- ================= MAIN HEADER & SUB-NAVIGATION ================= -->\n  <header class=\"mors-chrome bg-white border-b border-[#D9D9D9] sticky top-0 z-30 shadow-sm\">\n    <div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3.5 flex flex-col md:flex-row items-center justify-between gap-4\">\n\n      <div class=\"flex items-center gap-3\">\n        <div class=\"w-10 h-10 bg-[#0041d2] flex items-center justify-center text-white shadow-sm p-2 flex-shrink-0\">\n          <div class=\"flex items-end gap-0.5 h-4\">\n            <div class=\"w-1 bg-white ug-eq-1\"><\/div>\n            <div class=\"w-1 bg-white ug-eq-2\"><\/div>\n            <div class=\"w-1 bg-white ug-eq-3\"><\/div>\n            <div class=\"w-1 bg-white ug-eq-4\"><\/div>\n          <\/div>\n        <\/div>\n        <div>\n          <div class=\"flex items-center gap-2\">\n            <h1 class=\"ug-h4 !text-xl !font-bold !text-[#032c73]\">Lista Przeboj\u00f3w Radia MORS<\/h1>\n            <span id=\"header-edition-num\" class=\"ug-tag ug-tag-sail text-[11px] font-bold\">#--<\/span>\n          <\/div>\n          <p class=\"ug-small !text-xs !text-[#647391]\">OFICJALNE NOTOWANIE MUZYCZNE UNIWERSYTETU GDA\u0143SKIEGO<\/p>\n        <\/div>\n      <\/div>\n\n      <nav class=\"flex flex-wrap items-center gap-1.5\" aria-label=\"G\u0142\u00f3wna nawigacja\">\n        <button data-tab=\"chart\" class=\"nav-tab-btn px-4 py-2 text-xs sm:text-sm font-headings font-semibold transition-all flex items-center gap-2 bg-[#0041d2] text-white shadow-sm border border-[#0041d2]\">\n          <i data-lucide=\"list-ordered\" class=\"w-4 h-4\"><\/i>\n          <span>Notowanie (TOP 20)<\/span>\n        <\/button>\n        <button data-tab=\"waiting\" class=\"nav-tab-btn px-4 py-2 text-xs sm:text-sm font-headings font-semibold text-[#032c73] hover:bg-[#e5f5fd] hover:text-[#0041d2] border border-transparent transition-all flex items-center gap-2\">\n          <i data-lucide=\"inbox\" class=\"w-4 h-4\"><\/i>\n          <span>Poczekalnia <span id=\"waiting-count-badge\" class=\"hidden sm:inline\">(25)<\/span><\/span>\n        <\/button>\n        <button data-tab=\"admin\" class=\"nav-tab-btn px-3 sm:px-4 py-2 text-xs sm:text-sm font-headings font-semibold text-[#032c73] hover:bg-[#e5f5fd] hover:text-[#0041d2] border border-transparent transition-all flex items-center gap-2\">\n          <i data-lucide=\"shield-check\" class=\"w-4 h-4 text-[#0041d2]\"><\/i>\n          <span>Panel Redaktora<\/span>\n        <\/button>\n      <\/nav>\n\n    <\/div>\n  <\/header>\n\n  <!-- ================= 24H COOLDOWN STATUS BANNER ================= -->\n  <section id=\"voter-lock-banner\" aria-label=\"Status blokady 24h\" class=\"hidden bg-[#FFFBEB] border-b border-[#FEC001] py-3.5 px-4 shadow-sm\">\n    <div class=\"max-w-7xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-3 text-xs sm:text-sm\">\n      <div class=\"flex items-center gap-3\">\n        <div class=\"p-2 bg-[#FEC001]\/20 text-[#B45309] border border-[#FEC001]\/40\">\n          <i data-lucide=\"lock\" class=\"w-5 h-5\"><\/i>\n        <\/div>\n        <div>\n          <span class=\"font-headings font-bold text-[#92400E]\">G\u0142osowa\u0142e\u015b w ci\u0105gu ostatnich 24 godzin!<\/span>\n          <p class=\"text-[#78350F] text-xs\">Zgodnie z regulaminem radia mo\u017cesz odda\u0107 3 g\u0142osy raz na dob\u0119. Kolejny g\u0142os za: <strong id=\"cooldown-timer-text\" class=\"font-mono font-bold text-[#92400E]\">--:--:--<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"flex items-center gap-2\">\n        <button onclick=\"app.openSocialShareModal()\" class=\"btn-ug-outlined btn-ug-sm !py-1.5 !px-3 !text-xs\">\n          <i data-lucide=\"image\" class=\"w-3.5 h-3.5\"><\/i> Karta g\u0142osu\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ================= MAIN CONTENT VIEWS ================= -->\n  <main class=\"flex-grow max-w-7xl w-full mx-auto px-4 sm:px-6 lg:px-8 py-8 pb-32\">\n\n    <!-- ================= VIEW 1: G\u0141\u00d3WNE NOTOWANIE (TOP 20) ================= -->\n    <section id=\"view-chart\" class=\"space-y-6\">\n      <div class=\"flex flex-col md:flex-row md:items-center justify-between gap-4 p-5 bg-white border border-[#D9D9D9] shadow-sm\">\n        <div>\n          <h2 class=\"ug-h2 !text-2xl !font-bold !text-[#032c73] flex items-center gap-2\">\n            G\u0142\u00f3wne Notowanie <span class=\"text-[#0041d2]\">TOP 20<\/span>\n          <\/h2>\n          <p class=\"ug-body !text-sm !text-[#647391] mt-1\">\n            Wybierz <strong>do 3 swoich faworyt\u00f3w<\/strong> (z notowania lub poczekalni). G\u0142osowanie odnawia si\u0119 co 24 godziny.\n          <\/p>\n        <\/div>\n        <div class=\"flex flex-wrap items-center gap-3\">\n          <div class=\"flex items-center gap-2 px-3 py-1.5 bg-[#e5f5fd] border border-[#0041d2]\/20 text-xs text-[#032c73]\">\n            <i data-lucide=\"shield-check\" class=\"w-4 h-4 text-[#1BA345]\"><\/i>\n            <span>Weryfikacja: <strong>Cloudflare Turnstile<\/strong><\/span>\n          <\/div>\n          <div class=\"flex items-center gap-2 px-3 py-1.5 bg-[#e5f5fd] border border-[#0041d2]\/20 text-xs text-[#032c73]\">\n            <i data-lucide=\"vote\" class=\"w-4 h-4 text-[#0041d2]\"><\/i>\n            <span>Zasada: <strong>3 g\u0142osy \/ 24h<\/strong><\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div id=\"chart-tracks-container\"><\/div>\n    <\/section>\n\n    <!-- ================= VIEW 2: POCZEKALNIA ================= -->\n    <section id=\"view-waiting\" class=\"hidden space-y-6\">\n      <div class=\"p-6 md:p-8 bg-[#032c73] text-white border border-[#0041d2] shadow-md\">\n        <div class=\"flex flex-col lg:flex-row items-center justify-between gap-6\">\n          <div>\n            <div class=\"inline-flex items-center gap-2 px-3 py-1 bg-[#0041d2] text-white text-xs font-headings font-semibold uppercase tracking-wider mb-2\">\n              <i data-lucide=\"sparkles\" class=\"w-3.5 h-3.5 text-[#a1daf8]\"><\/i> Poczekalnia do Listy Przeboj\u00f3w\n            <\/div>\n            <h2 class=\"ug-h2 !text-white !text-2xl md:!text-3xl mt-1\">25 Nowych Propozycji<\/h2>\n            <p class=\"text-slate-200 text-sm mt-1.5 max-w-2xl font-body\">\n              Utwory zg\u0142oszone przez s\u0142uchaczy oraz redakcj\u0119 muzyczn\u0105 Radia MORS Uniwersytetu Gda\u0144skiego. Dwa utwory z najwi\u0119ksz\u0105 liczb\u0105 g\u0142os\u00f3w awansuj\u0105 bezpo\u015brednio do Notowania G\u0142\u00f3wnego w najbli\u017cszy pi\u0105tek!\n            <\/p>\n          <\/div>\n          <div class=\"flex items-center gap-3\">\n            <div class=\"text-center p-4 bg-[#00214d] border border-white\/10 min-w-[120px]\">\n              <div id=\"waiting-total-count\" class=\"text-3xl font-headings font-bold text-[#a1daf8]\">25<\/div>\n              <div class=\"text-[11px] text-slate-300 uppercase font-headings font-semibold mt-0.5\">Utwor\u00f3w w puli<\/div>\n            <\/div>\n            <div class=\"text-center p-4 bg-[#00214d] border border-white\/10 min-w-[120px]\">\n              <div class=\"text-3xl font-headings font-bold text-white\">TOP 2<\/div>\n              <div class=\"text-[11px] text-slate-300 uppercase font-headings font-semibold mt-0.5\">Awans do TOP20<\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div id=\"waiting-tracks-container\"><\/div>\n    <\/section>\n\n    <!-- ================= VIEW 3: PANEL ADMINISTRATORA (CMS) ================= -->\n    <section id=\"view-admin\" class=\"hidden space-y-8\">\n\n      <!-- ===== PODSEKCJA: Panel redaktora (dodawanie utworu) ===== -->\n      <div id=\"admin-section-dashboard\" class=\"space-y-8 \">\n\n      <div class=\"grid grid-cols-1 gap-6\">\n        <div class=\"p-6 ug-card space-y-5\">\n          <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73] flex items-center gap-2\">\n            <i data-lucide=\"upload-cloud\" class=\"w-5 h-5 text-[#0041d2]\"><\/i>\n            <span>Dodaj nowy utw\u00f3r (.WAV \/ .MP3)<\/span>\n          <\/h3>\n\n          <div id=\"admin-audio-dropzone\" class=\"border-2 border-dashed border-[#D9D9D9] hover:border-[#0041d2] p-6 text-center cursor-pointer transition-all bg-[#F5F5F5] group\">\n            <input type=\"file\" id=\"admin-file-input\" accept=\".wav,.mp3,audio\/wav,audio\/mpeg\" class=\"hidden\" \/>\n            <div class=\"w-12 h-12 bg-[#e5f5fd] text-[#0041d2] flex items-center justify-center mx-auto mb-3 group-hover:scale-105 transition-transform\">\n              <i data-lucide=\"music\" class=\"w-6 h-6\"><\/i>\n            <\/div>\n            <p class=\"text-sm font-headings font-semibold text-[#032c73]\">Przeci\u0105gnij plik audio lub <span class=\"text-[#0041d2] underline\">wybierz z dysku<\/span><\/p>\n            <p class=\"ug-small !text-xs !text-[#647391] mt-1\">Obs\u0142ugiwane formaty: <strong>.WAV<\/strong> lub <strong>.MP3<\/strong>. Max 15 MB (zale\u017cnie od limitu uploadu serwera).<\/p>\n          <\/div>\n\n          <div id=\"admin-upload-status\" class=\"hidden p-4 bg-[#e5f5fd] border border-[#0041d2]\/30 space-y-2\">\n            <div class=\"flex items-center justify-between text-xs\">\n              <span class=\"text-[#0041d2] font-semibold flex items-center gap-1.5\">\n                <i data-lucide=\"loader-2\" class=\"w-3.5 h-3.5 animate-spin\"><\/i> Wgrywanie pliku audio...\n              <\/span>\n              <span class=\"text-[#032c73] font-mono font-bold\">100%<\/span>\n            <\/div>\n            <div class=\"w-full h-2 bg-[#D9D9D9] overflow-hidden\">\n              <div id=\"admin-upload-progress\" class=\"h-full bg-[#0041d2] w-0 transition-all duration-300\"><\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n            <div class=\"ug-form-group\">\n              <label class=\"ug-form-label\">Tytu\u0142 utworu<\/label>\n              <input type=\"text\" id=\"admin-input-title\" placeholder=\"np. Ba\u0142tycki Sztorm\" class=\"ug-input\" \/>\n            <\/div>\n            <div class=\"ug-form-group\">\n              <label class=\"ug-form-label\">Wykonawca \/ Zesp\u00f3\u0142<\/label>\n              <input type=\"text\" id=\"admin-input-artist\" placeholder=\"np. Neon Wave\" class=\"ug-input\" \/>\n            <\/div>\n            <div class=\"ug-form-group\">\n              <label class=\"ug-form-label\">Docelowa sekcja<\/label>\n              <select id=\"admin-input-target\" class=\"ug-select\">\n                <option value=\"waiting\">Poczekalnia (Uzupe\u0142nij do 25 utwor\u00f3w)<\/option>\n                <option value=\"chart\">Notowanie G\u0142\u00f3wne (TOP 20)<\/option>\n              <\/select>\n            <\/div>\n            <div class=\"ug-form-group\">\n              <label class=\"ug-form-label\">Czas trwania (min:sek)<\/label>\n              <input type=\"text\" id=\"admin-input-duration\" value=\"3:30\" class=\"ug-input\" \/>\n            <\/div>\n          <\/div>\n\n          <div class=\"p-4 bg-[#F5F5F5] border border-[#D9D9D9] space-y-3\">\n            <div class=\"flex items-center justify-between\">\n              <label class=\"ug-form-label !mb-0 flex items-center gap-1.5\">\n                <i data-lucide=\"image\" class=\"w-4 h-4 text-[#0041d2]\"><\/i>\n                <span>Ok\u0142adka utworu \/ singla (.JPG, .PNG, .WEBP)<\/span>\n              <\/label>\n              <span class=\"ug-small !text-[11px]\">Format 1:1, Max 2 MB<\/span>\n            <\/div>\n\n            <div class=\"flex flex-col sm:flex-row items-center gap-4\">\n              <div class=\"relative w-24 h-24 bg-[#00214d] flex items-center justify-center text-white border border-[#D9D9D9] flex-shrink-0 overflow-hidden shadow-sm\">\n                <img decoding=\"async\" id=\"admin-cover-preview-img\" src=\"\" alt=\"Podgl\u0105d ok\u0142adki\" class=\"hidden w-full h-full object-cover\" \/>\n                <div id=\"admin-cover-placeholder\" class=\"text-center p-2\">\n                  <i data-lucide=\"disc\" class=\"w-6 h-6 text-[#a1daf8] mx-auto mb-1\"><\/i>\n                  <span class=\"text-[9px] text-slate-300 font-headings block\">Brak pliku<\/span>\n                <\/div>\n              <\/div>\n\n              <div id=\"admin-cover-dropzone\" class=\"flex-grow w-full border-2 border-dashed border-[#D9D9D9] hover:border-[#0041d2] p-4 text-center cursor-pointer transition-all bg-white group\">\n                <input type=\"file\" id=\"admin-cover-file-input\" accept=\"image\/jpeg,image\/png,image\/webp,image\/jpg\" class=\"hidden\" \/>\n                <p class=\"text-xs font-headings font-semibold text-[#032c73]\">Kliknij lub upu\u015b\u0107 grafik\u0119 ok\u0142adki<\/p>\n                <p class=\"ug-small !text-[11px] text-[#647391] mt-0.5\">Automatyczne przyci\u0119cie do 600\u00d7600 px i kompresja WebP<\/p>\n              <\/div>\n\n              <button type=\"button\" id=\"admin-cover-remove-btn\" onclick=\"app.removePendingCover()\" class=\"hidden btn-ug-outlined btn-ug-sm !text-[#EF305E] !border-[#EF305E]\/40 hover:!bg-[#EF305E]\/10\" title=\"Usu\u0144 wybran\u0105 ok\u0142adk\u0119\">\n                <i data-lucide=\"trash-2\" class=\"w-4 h-4\"><\/i>\n              <\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"flex justify-end pt-2\">\n            <button onclick=\"app.submitNewTrackFromAdmin()\" class=\"btn-ug-primary\">\n              <i data-lucide=\"plus-circle\" class=\"w-4 h-4\"><\/i>\n              <span>Zapisz i dodaj do listy<\/span>\n            <\/button>\n          <\/div>\n        <\/div>\n\n      <\/div>\n\n      <!-- Skr\u00f3t -->\n      <div class=\"grid grid-cols-2 sm:grid-cols-3 gap-3 text-xs font-body\">\n        <div class=\"p-4 bg-white border border-[#D9D9D9] shadow-sm\">\n          <div class=\"text-[#647391]\">Bie\u017c\u0105ce notowanie<\/div>\n          <strong id=\"dash-edition-num\" class=\"text-[#032c73] text-lg font-headings font-bold\">#--<\/strong>\n        <\/div>\n        <div class=\"p-4 bg-white border border-[#D9D9D9] shadow-sm\">\n          <div class=\"text-[#647391]\">Utwor\u00f3w w notowaniu<\/div>\n          <strong id=\"dash-chart-count\" class=\"text-[#0041d2] text-lg font-headings font-bold\">0<\/strong>\n        <\/div>\n        <div class=\"p-4 bg-white border border-[#D9D9D9] shadow-sm\">\n          <div class=\"text-[#647391]\">Utwor\u00f3w w poczekalni<\/div>\n          <strong id=\"dash-waiting-count\" class=\"text-[#0041d2] text-lg font-headings font-bold\">0<\/strong>\n        <\/div>\n      <\/div>\n\n      <!-- Wszystkie utwory (Notowanie & Poczekalnia) na jednej li\u015bcie -->\n      <div class=\"p-6 ug-card\">\n        <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73] mb-1 flex items-center gap-2\">\n          <i data-lucide=\"list-music\" class=\"w-5 h-5 text-[#0041d2]\"><\/i>\n          <span>Wszystkie utwory (Notowanie & Poczekalnia)<\/span>\n        <\/h3>\n        <p class=\"ug-small !text-xs !text-[#647391] mb-4\">Utwory z notowania mo\u017cesz przeci\u0105ga\u0107 (uchwyt \u22ee\u22ee), aby zmieni\u0107 ich kolejno\u015b\u0107.<\/p>\n        <div class=\"overflow-x-auto\">\n          <table class=\"w-full text-left\">\n            <thead>\n              <tr class=\"border-b border-[#D9D9D9] text-[11px] text-[#647391] uppercase font-headings font-bold\">\n                <th class=\"p-3\">Tytu\u0142<\/th>\n                <th class=\"p-3\">Wykonawca<\/th>\n                <th class=\"p-3\">Sekcja<\/th>\n                <th class=\"p-3\">G\u0142osy<\/th>\n                <th class=\"p-3 text-right\">Akcje<\/th>\n              <\/tr>\n            <\/thead>\n            <tbody id=\"admin-tracks-table-body\"><\/tbody>\n          <\/table>\n        <\/div>\n      <\/div>\n\n      <\/div><!-- \/#admin-section-dashboard -->\n\n      <!-- ===== PODSEKCJA: Ustawienia listy ===== -->\n      <div id=\"admin-section-settings\" class=\"space-y-6 hidden\">\n        <div class=\"p-6 ug-card space-y-5\">\n          <div class=\"flex items-center gap-2\">\n            <i data-lucide=\"settings\" class=\"w-5 h-5 text-[#0041d2]\"><\/i>\n            <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73]\">Ustawienia listy przeboj\u00f3w<\/h3>\n          <\/div>\n\n          <div class=\"grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs font-body\">\n            <div class=\"p-3 bg-[#F5F5F5] border border-[#D9D9D9]\">\n              <div class=\"text-[#647391]\">Notowanie<\/div>\n              <strong id=\"settings-edition-num\" class=\"text-[#032c73] text-base font-headings font-bold\">#--<\/strong>\n            <\/div>\n            <div class=\"p-3 bg-[#F5F5F5] border border-[#D9D9D9]\">\n              <div class=\"text-[#647391]\">Status<\/div>\n              <strong id=\"settings-edition-status\" class=\"text-[#0041d2] font-semibold\">--<\/strong>\n            <\/div>\n            <div class=\"p-3 bg-[#F5F5F5] border border-[#D9D9D9]\">\n              <div class=\"text-[#647391]\">Koniec g\u0142osowania<\/div>\n              <strong id=\"settings-edition-ends\" class=\"text-[#032c73] font-mono font-semibold\">--<\/strong>\n            <\/div>\n            <div class=\"p-3 bg-[#F5F5F5] border border-[#D9D9D9]\">\n              <div class=\"text-[#647391]\">G\u0142os\u00f3w \u0142\u0105cznie<\/div>\n              <strong id=\"settings-edition-votes\" class=\"text-[#032c73] font-mono font-semibold\">0<\/strong>\n            <\/div>\n          <\/div>\n\n          <div class=\"pt-2 border-t border-[#D9D9D9] flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3\">\n            <div>\n              <div class=\"font-headings font-bold text-sm text-[#032c73]\">Zamkni\u0119cie i reset notowania<\/div>\n              <p class=\"ug-small !text-xs !text-[#647391]\">Archiwizuje bie\u017c\u0105ce notowanie, promuje utwory z poczekalni, zeruje g\u0142osy i otwiera nowe notowanie.<\/p>\n            <\/div>\n            <button onclick=\"app.openResetChartModal()\" class=\"btn-ug-primary !bg-[#EF305E] !border-[#EF305E] hover:!bg-[#d9224e] !text-white text-xs sm:text-sm flex-shrink-0\">\n              <i data-lucide=\"refresh-cw\" class=\"w-4 h-4\"><\/i>\n              <span>Zamknij i zresetuj notowanie<\/span>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div><!-- \/#admin-section-settings -->\n\n    <\/section>\n\n  <\/main>\n\n  <!-- ================= STICKY FLOATING VOTING DRAWER ================= -->\n  <aside id=\"voting-drawer\" aria-label=\"Pasek oddawania g\u0142osu\" class=\"fixed bottom-0 left-0 right-0 z-40 bg-white border-t border-[#0041d2]\/30 px-4 py-3.5 shadow-ug-lg transition-transform duration-300 translate-y-full\">\n    <div class=\"max-w-7xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-4\">\n\n      <div class=\"flex items-center gap-4 w-full sm:w-auto\">\n        <div class=\"relative flex-shrink-0\">\n          <div class=\"w-12 h-12 bg-[#0041d2] flex items-center justify-center font-headings font-bold text-white text-base shadow-sm\">\n            <span id=\"drawer-vote-count\">0 \/ 3<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"min-w-0\">\n          <div class=\"flex items-center gap-2\">\n            <span class=\"font-headings font-bold text-[#032c73] text-sm\">Twoja karta do g\u0142osowania<\/span>\n            <span class=\"ug-tag ug-tag-sail text-[10px] font-bold\">Max 3 utwory<\/span>\n          <\/div>\n          <p class=\"ug-small !text-xs !text-[#647391] truncate\">Wybierz jeszcze utwory lub zatwierd\u017a sw\u00f3j g\u0142os na 24h.<\/p>\n          <div class=\"w-48 h-2 bg-[#D9D9D9] mt-1.5 overflow-hidden\">\n            <div id=\"drawer-progress-fill\" class=\"h-full bg-[#0041d2] transition-all duration-300 w-0\"><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"flex items-center gap-3 w-full sm:w-auto justify-end\">\n        <button onclick=\"app.openSubmitVoteModal()\" id=\"drawer-submit-btn\" class=\"btn-ug-primary w-full sm:w-auto !py-3 !px-6 !text-sm\">\n          <span>Zatwierd\u017a sw\u00f3j g\u0142os (0\/3)<\/span>\n          <i data-lucide=\"arrow-right\" class=\"w-4 h-4\"><\/i>\n        <\/button>\n      <\/div>\n\n    <\/div>\n  <\/aside>\n\n  <!-- ================= PERSISTENT MINI AUDIO PLAYER ================= -->\n  <aside id=\"mini-audio-player\" aria-label=\"Odtwarzacz pr\u00f3bek audio\" class=\"fixed bottom-20 sm:bottom-24 right-4 z-40 bg-white border border-[#0041d2]\/30 p-3.5 shadow-ug-lg flex items-center gap-4 transition-transform duration-300 translate-y-full\">\n    <div class=\"w-10 h-10 bg-[#0041d2] flex items-center justify-center flex-shrink-0 text-white\">\n      <i data-lucide=\"disc-3\" class=\"w-6 h-6 animate-spin\"><\/i>\n    <\/div>\n    <div class=\"min-w-0 pr-2\">\n      <div id=\"player-track-title\" class=\"font-headings font-bold text-xs text-[#032c73] truncate max-w-[160px]\">Odtwarzanie pr\u00f3bki...<\/div>\n      <div id=\"player-track-artist\" class=\"ug-small truncate max-w-[160px]\">Radio MORS 30s Snippet<\/div>\n    <\/div>\n    <button onclick=\"app.stopAudio()\" id=\"player-play-toggle\" class=\"p-2 bg-[#e5f5fd] hover:bg-[#a1daf8] text-[#0041d2]\" title=\"Zatrzymaj ods\u0142uch\">\n      <i data-lucide=\"square\" class=\"w-4 h-4\"><\/i>\n    <\/button>\n  <\/aside>\n\n  <!-- ================= MODAL 0: LOGOWANIE ADMINISTRATORA \/ REDAKCJI ================= -->\n  <div id=\"admin-login-modal\" class=\"hidden fixed inset-0 z-50 ug-modal-backdrop flex items-center justify-center p-4\">\n    <div class=\"bg-white border-2 border-[#0041d2] p-6 sm:p-8 max-w-md w-full shadow-ug-lg space-y-5\">\n\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <div class=\"p-2.5 bg-[#00214d] text-white\">\n            <i data-lucide=\"shield-check\" class=\"w-6 h-6\"><\/i>\n          <\/div>\n          <div>\n            <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73]\">Logowanie Redakcji<\/h3>\n            <p class=\"ug-small\">Radio MORS \u2022 Uniwersytet Gda\u0144ski<\/p>\n          <\/div>\n        <\/div>\n        <button onclick=\"app.closeAdminLoginModal()\" class=\"text-[#647391] hover:text-[#032c73] p-1\">\n          <i data-lucide=\"x\" class=\"w-5 h-5\"><\/i>\n        <\/button>\n      <\/div>\n\n      <div class=\"space-y-3.5\">\n        <div class=\"ug-form-group\">\n          <label class=\"ug-form-label\">Adres e-mail w domenie UG<\/label>\n          <div class=\"relative\">\n            <input type=\"email\" id=\"admin-login-email\" placeholder=\"redakcja@mors.ug.edu.pl\" value=\"redakcja@mors.ug.edu.pl\" class=\"ug-input pl-9\" \/>\n            <i data-lucide=\"mail\" class=\"w-4 h-4 text-[#647391] absolute left-3 top-3.5\"><\/i>\n          <\/div>\n        <\/div>\n\n        <div class=\"ug-form-group\">\n          <label class=\"ug-form-label\">Has\u0142o dost\u0119pu<\/label>\n          <div class=\"relative\">\n            <input type=\"password\" id=\"admin-login-password\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\" value=\"RadioMORS2026!\" class=\"ug-input pl-9\" \/>\n            <i data-lucide=\"key\" class=\"w-4 h-4 text-[#647391] absolute left-3 top-3.5\"><\/i>\n          <\/div>\n        <\/div>\n\n        <div class=\"p-3 bg-[#e5f5fd] border border-[#0041d2]\/30 flex items-center justify-between\">\n          <span class=\"ug-small !text-[11px]\">Konto testowe redaktora:<\/span>\n          <button type=\"button\" onclick=\"app.fillDemoAdminCredentials()\" class=\"text-xs font-headings font-bold text-[#0041d2] hover:underline\">\n            Uzupe\u0142nij dane demo\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"flex items-center justify-end gap-3 pt-2\">\n        <button onclick=\"app.closeAdminLoginModal()\" class=\"btn-ug-outlined btn-ug-sm\">\n          Anuluj\n        <\/button>\n        <button onclick=\"app.submitAdminLogin()\" class=\"btn-ug-primary\">\n          <i data-lucide=\"log-in\" class=\"w-4 h-4\"><\/i>\n          <span>Zaloguj si\u0119<\/span>\n        <\/button>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n\n  <!-- ================= MODAL 1: WERYFIKACJA & ZATWIERDZENIE G\u0141OSU ================= -->\n  <div id=\"vote-verify-modal\" class=\"hidden fixed inset-0 z-50 ug-modal-backdrop flex items-center justify-center p-4\">\n    <div class=\"bg-white border border-[#D9D9D9] p-6 sm:p-8 max-w-lg w-full shadow-ug-lg space-y-6\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <div class=\"p-2.5 bg-[#e5f5fd] text-[#0041d2] border border-[#0041d2]\/20\">\n            <i data-lucide=\"vote\" class=\"w-6 h-6\"><\/i>\n          <\/div>\n          <div>\n            <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73]\">Potwierd\u017a sw\u00f3j g\u0142os<\/h3>\n            <p id=\"modal-edition-label\" class=\"ug-small\">Lista Przeboj\u00f3w Radia MORS<\/p>\n          <\/div>\n        <\/div>\n        <button onclick=\"app.closeSubmitVoteModal()\" class=\"text-[#647391] hover:text-[#032c73] p-1\">\n          <i data-lucide=\"x\" class=\"w-5 h-5\"><\/i>\n        <\/button>\n      <\/div>\n\n      <div class=\"space-y-2\">\n        <label class=\"ug-form-label\">Wybrane utwory:<\/label>\n        <div id=\"modal-selected-tracks-list\" class=\"space-y-2 max-h-48 overflow-y-auto\"><\/div>\n      <\/div>\n\n      <div class=\"p-4 bg-[#F5F5F5] border border-[#D9D9D9] flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <input type=\"checkbox\" id=\"turnstile-check\" checked class=\"w-5 h-5 accent-[#0041d2] cursor-pointer\" \/>\n          <div>\n            <div class=\"text-xs font-headings font-bold text-[#032c73] flex items-center gap-1.5\">\n              <span>Weryfikacja s\u0142uchacza<\/span>\n              <i data-lucide=\"shield-check\" class=\"w-3.5 h-3.5 text-[#1BA345]\"><\/i>\n            <\/div>\n            <p class=\"ug-small !text-[11px]\">Zabezpieczenie przed botami (Cloudflare Turnstile)<\/p>\n          <\/div>\n        <\/div>\n        <div class=\"text-[10px] text-[#647391] font-mono\">ID: 8f3e..2b1c<\/div>\n      <\/div>\n\n      <div class=\"p-3 bg-[#FFFBEB] border border-[#FEC001]\/50 text-xs text-[#92400E] flex items-start gap-2\">\n        <i data-lucide=\"alert-triangle\" class=\"w-4 h-4 flex-shrink-0 mt-0.5 text-[#B45309]\"><\/i>\n        <span>Po zatwierdzeniu Tw\u00f3j g\u0142os zostanie zapisany, a kolejna mo\u017cliwo\u015b\u0107 g\u0142osowania odblokuje si\u0119 dok\u0142adnie za 24 godziny.<\/span>\n      <\/div>\n\n      <div class=\"flex items-center justify-end gap-3 pt-2\">\n        <button onclick=\"app.closeSubmitVoteModal()\" class=\"px-4 py-2.5 text-[#647391] hover:text-[#032c73] text-xs font-headings font-semibold\">\n          Anuluj\n        <\/button>\n        <button onclick=\"app.confirmAndCastVotes()\" class=\"btn-ug-primary\">\n          <span>Zatwierd\u017a i oddaj g\u0142os<\/span>\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- ================= MODAL 2: SOCIAL MEDIA SHARE STUDIO ================= -->\n  <div id=\"social-share-modal\" class=\"hidden fixed inset-0 z-50 ug-modal-backdrop flex items-center justify-center p-4 overflow-y-auto\">\n    <div class=\"bg-white border border-[#D9D9D9] p-6 sm:p-8 max-w-2xl w-full shadow-ug-lg space-y-6 my-8\">\n\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <div class=\"p-2.5 bg-[#e5f5fd] text-[#0041d2] border border-[#0041d2]\/20\">\n            <i data-lucide=\"share-2\" class=\"w-6 h-6\"><\/i>\n          <\/div>\n          <div>\n            <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73]\">Centrum Udost\u0119pniania Wynik\u00f3w<\/h3>\n            <p class=\"ug-small\">Poka\u017c znajomym na kogo g\u0142osujesz w Radiu MORS!<\/p>\n          <\/div>\n        <\/div>\n        <button onclick=\"app.closeSocialShareModal()\" class=\"text-[#647391] hover:text-[#032c73] p-1\">\n          <i data-lucide=\"x\" class=\"w-5 h-5\"><\/i>\n        <\/button>\n      <\/div>\n\n      <div class=\"flex flex-col sm:flex-row items-center gap-6\">\n        <div class=\"relative w-48 sm:w-56 h-[340px] sm:h-[390px] overflow-hidden shadow-md border-2 border-[#0041d2] flex-shrink-0 bg-[#00214d]\">\n          <canvas id=\"social-share-canvas\" class=\"w-full h-full object-contain\"><\/canvas>\n          <div class=\"absolute bottom-2 right-2 px-2 py-0.5 bg-black\/60 text-[9px] font-mono text-[#a1daf8]\">\n            1080x1920 HD\n          <\/div>\n        <\/div>\n\n        <div class=\"space-y-3 w-full\">\n          <p class=\"ug-body !text-xs !text-[#647391]\">\n            Wygenerowali\u015bmy dedykowan\u0105 kart\u0119 graficzn\u0105 w formacie <strong>Instagram Stories \/ TikTok \/ Facebook<\/strong> w oficjalnej kolorystyce Uniwersytetu Gda\u0144skiego.\n          <\/p>\n\n          <button onclick=\"app.downloadSocialCard()\" class=\"btn-ug-primary w-full !text-xs sm:!text-sm\">\n            <i data-lucide=\"download\" class=\"w-4 h-4\"><\/i> Pobierz grafik\u0119 (PNG)\n          <\/button>\n\n          <button onclick=\"app.shareViaWebShare()\" class=\"btn-ug-outlined w-full !text-xs sm:!text-sm\">\n            <i data-lucide=\"share\" class=\"w-4 h-4\"><\/i> Udost\u0119pnij bezpo\u015brednio\n          <\/button>\n\n          <div class=\"pt-2 border-t border-[#D9D9D9] text-[11px] text-[#647391] space-y-1\">\n            <p>\u2022 Otaguj nas: <strong class=\"text-[#0041d2]\">@radiomors_ug<\/strong><\/p>\n            <p>\u2022 U\u017cyj hashtagu: <strong class=\"text-[#032c73]\">#ListaPrzebojowMORS #UniwersytetGda\u0144ski<\/strong><\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"flex justify-end\">\n        <button onclick=\"app.closeSocialShareModal()\" class=\"px-5 py-2 bg-[#F5F5F5] hover:bg-[#D9D9D9] text-[#032c73] text-xs font-headings font-semibold\">\n          Zamknij\n        <\/button>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n  <!-- ================= MODAL 3: POTWIERDZENIE RESETU NOTOWANIA (ADMIN) ================= -->\n  <div id=\"admin-reset-modal\" class=\"hidden fixed inset-0 z-50 ug-modal-backdrop flex items-center justify-center p-4\">\n    <div class=\"bg-white border border-[#EF305E]\/40 p-6 sm:p-8 max-w-md w-full shadow-ug-lg space-y-5\">\n      <div class=\"flex items-center gap-3\">\n        <div class=\"p-3 bg-[#EF305E]\/10 text-[#EF305E] border border-[#EF305E]\/20\">\n          <i data-lucide=\"alert-octagon\" class=\"w-6 h-6\"><\/i>\n        <\/div>\n        <div>\n          <h3 class=\"ug-h4 !text-lg !font-bold !text-[#032c73]\">Zamkni\u0119cie i Reset Notowania<\/h3>\n          <p class=\"ug-small !text-[#EF305E]\">Operacja nieodwracalna<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"ug-body !text-xs !text-[#647391] space-y-2\">\n        <p>Ta operacja wykona nast\u0119puj\u0105ce kroki:<\/p>\n        <ul class=\"list-disc pl-4 space-y-1 text-[#1E293B]\">\n          <li>Zliczy ostateczne g\u0142osy w bie\u017c\u0105cym notowaniu.<\/li>\n          <li>Wyliczy nowe pozycje (awans TOP 2 z Poczekalni do Notowania).<\/li>\n          <li>Zarchiwizuje wyniki bie\u017c\u0105cego wydania.<\/li>\n          <li>Zresetuje g\u0142osy do 0 i otworzy kolejne notowanie.<\/li>\n          <li>Odblokuje mo\u017cliwo\u015b\u0107 ponownego g\u0142osowania dla wszystkich s\u0142uchaczy.<\/li>\n        <\/ul>\n      <\/div>\n\n      <div class=\"flex items-center justify-end gap-3 pt-2\">\n        <button onclick=\"app.closeResetChartModal()\" class=\"px-4 py-2 text-[#647391] hover:text-[#032c73] text-xs font-headings font-semibold\">\n          Anuluj\n        <\/button>\n        <button onclick=\"app.executeResetChart()\" class=\"btn-ug-primary !bg-[#EF305E] !border-[#EF305E] hover:!bg-[#d9224e]\">\n          <i data-lucide=\"check\" class=\"w-4 h-4\"><\/i> Potwierd\u017a i zresetuj\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Toast Notification Container -->\n  <div id=\"toast-container\" class=\"fixed top-5 right-5 z-50 flex flex-col gap-2 max-w-sm w-full pointer-events-none\"><\/div>\n\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":2,"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":17,"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions\/17"}],"wp:attachment":[{"href":"https:\/\/lista.wp-dev.ug.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}