DP-Logopedicka-Platforma/css/pexeso.css
2026-04-23 15:41:11 +02:00

1653 lines
45 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ============================ */
/* ====== GLOBÁLNE ŠTÝLY ====== */
/* ============================ */
/* ================================================ */
/* Reset štýlov pre konzistenciu medzi prehliadačmi */
/* ================================================ */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ============================ */
/* Základné nastavenia pre body */
/* ============================ */
body {
margin: 0;
padding: 0;
min-height: 100vh;
font-family: "Luckiest Guy", sans-serif;
overflow-x: hidden;
background: var(--Backgrtound, url('../images/worlds/background.jpg')) lightgray 50% / cover no-repeat;
box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);
cursor: url('../images/cursor.png') 5 5, auto;
justify-content: center;
display: flex;
}
/* ============================= */
/* ========== LOADING ========== */
/* ============================= */
.loading-screen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #2c1810 0%, #1a0f08 100%);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.5s ease;
}
.loading-content {
text-align: center;
color: white;
}
.loading-logo {
margin-bottom: 2rem;
}
.loading-text-jozino {
display: flex;
width: 444px;
height: 43px;
transform: rotate(0.093deg);
flex-direction: column;
justify-content: flex-end;
flex-shrink: 0;
/* Štýlovanie textu */
color: #FFF;
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy", sans-serif;
font-size: 100px;
font-style: normal;
font-weight: 400;
line-height: 18px; /* 20% */
text-transform: uppercase;
margin-bottom: 0.5rem;
position: relative;
z-index: 10;
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
}
.loading-text-banik {
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy", sans-serif;
font-size: 45px;
font-style: normal;
font-weight: 400;
line-height: 100%;
text-align: center;
text-transform: uppercase;
/* Gradient pozadí pre text */
background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
position: relative;
z-index: 20;
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
}
.loading-spinner {
width: 50px;
height: 50px;
border: 4px solid rgba(236, 207, 23, 0.3);
border-top: 4px solid #ECCF17;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 1rem;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.loading-message {
font-family: "Luckiest Guy", sans-serif;
font-size: 22px;
color: #ECCF17;
animation: pulse 1.5s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.7; }
50% { opacity: 1; }
}
/* Hlavný kontajner pre progress bar */
/* Obsahuje progress bar a textové informácie */
.loading-progress-container {
width: 100%; /* Celá šírka */
max-width: 400px; /* Maximálna šírka 400px */
margin: 1.5rem auto 0; /* Vertikálny spacing a centrovanie */
}
/* Progress Bar (pozadie) */
/* Sivý pruh ktorý reprezentuje 0-100% */
.loading-progress-bar {
width: 100%; /* Celá šírka kontajnera */
height: 8px; /* Výška progress baru */
background-color: rgba(236, 207, 23, 0.2); /* Priehľadná žltá farba pozadia */
border-radius: 4px; /* Zaoblené rohy */
overflow: hidden; /* Skryje obsah mimo progress baru */
margin-bottom: 0.5rem; /* Spacing pod progress barom */
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); /* Vnútorný tieň pre 3D efekt */
}
/* Progress Fill (žltý pásik) */
/* Animovaný žltý pásik ktorý sa napĺňa */
.loading-progress-fill {
height: 100%; /* Celá výška progress baru */
width: 0%; /* Začína na 0% */
background: linear-gradient(90deg, #ECCF17 0%, #FFE55C 50%, #ECCF17 100%); /* Žltý gradient */
border-radius: 4px; /* Zaoblené rohy */
transition: width 0.3s ease; /* Plynulá animácia šírky */
box-shadow: 0 0 10px rgba(236, 207, 23, 0.5); /* Žltý svietiaci efekt */
}
/* Progress Text (percentá a detaily) */
/* Zobrazuje percento a počet načítaných zdrojov */
.loading-progress-text {
display: flex; /* Flexbox pre rozmiestnenie textu */
justify-content: space-between; /* Text na ľavej a pravej strane */
align-items: center; /* Vertikálne vycentrovanie */
font-family: "Luckiest Guy", sans-serif; /* Font rovnaký ako v hre */
color: #ECCF17; /* Žltá farba textu */
font-size: 14px; /* Veľkosť textu */
}
/* Progress Percentage (napr. "75%") */
/* Zobrazuje aktuálne percento načítania */
#loading-progress-percentage {
font-size: 16px; /* Väčší text pre percento */
font-weight: bold; /* Tučný text */
}
/* Progress Details (napr. "15/20 zdrojov") */
/* Zobrazuje počet načítaných zdrojov */
#loading-progress-details {
font-size: 12px; /* Menší text pre detaily */
opacity: 0.8; /* Mierne priehľadný text */
}
/* ============================ */
/* Horný, bočný menuu button */
/* ============================ */
#menuButton {
position: absolute;
top: 10px;
left: 10px;
width: 43px;
height: 43px;
border-radius: 50%;
background-image: url("../images/menubutton.png");
background-size: cover;
background-position: center;
border: none;
cursor: pointer;
outline: none;
z-index: 1000;
cursor: url('../images/active_cursor4.png') 5 5, pointer;
}
.kruhove-tlacidlo {
width: 43px;
height: 43px;
border-radius: 50%; /* Tvar kruhu */
background-image: url("../images/menubutton.png"); /* Cesta k obrázku, ktorý chceš použiť ako pozadie */
background-size: cover; /* Upravuje veľkosť obrázku na takú, aby pokrýval celé tlačidlo */
background-position: center; /* Zarovnáva obrázok na strede */
border: none; /* Bez ohraničenia */
cursor: pointer; /* Zmení kurzor na ukazovateľ, aby naznačil interaktívnosť */
outline: none; /* Odstráni ohraničenie po kliknutí */
cursor: url('../images/active_cursor4.png') 5 5, pointer;
}
.kruhove-tlacidlo:focus {
outline: none; /* Odstráni ohraničenie po získaní zaostrenia */
}
/* ============================= */
/* ========== MODALY ========= */
/* ============================= */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.14);
backdrop-filter: blur(9px);
z-index: 1000;
transition: all 0.3s ease;
}
.modal.modal-open {
background: rgba(0, 0, 0, 0.14);
backdrop-filter: blur(9px);
}
.execise-window{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 70%;
height: 80%;
max-width: 450px;
max-height: 500px;
min-width: 400px;
min-height: 450px;
background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat;
/* Vnútorný obsah */
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 2rem 3rem;
box-sizing: border-box;
border: 4px solid #ECCF17;
border-radius: 30px;
/* Animácie */
transition: all 0.4s ease;
}
/* Vysledok element - skrytý na začiatku */
.vysledok {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.85);
backdrop-filter: blur(5px);
display: none; /* PRIDANÉ: skrytý na začiatku */
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 1000;
border-radius: 30px;
overflow: hidden;
}
/* Keď sa zobrazuje výsledok */
.vysledok.show {
display: flex;
}
/* Kontajner pre obsah vysledku */
.vysledok center {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
/* Obrázok výsledku */
.vysledok img {
max-width: 300px !important;
max-height: 250px !important;
width: auto !important;
height: auto !important;
object-fit: contain;
}
/* Správy v rámci vysledku */
.vysledok .attempt-message,
.vysledok .success-message {
margin-top: 20px;
z-index: 1001;
}
/* Style pre recove cvicenie */
.cvicenie-content {
padding: 10px;
display: flex;
gap: 10px;
flex-direction: column;
}
.cvicenie-text {
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy";
font-size: 45px;
font-style: normal;
font-weight: 400;
text-transform: uppercase;
display: flex;
justify-content: center;
flex-direction: column;
}
.cvicenie-text p {
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
padding-top: 15px;
}
.cvicenie-text button {
width: auto;
max-height: 200px;
display: block;
}
.cvicenie-text img{
min-width: 100px;
max-width: 300px;
max-height: 200px;
max-width: 253px;
height: 200px;
width: auto;
}
/* Štýl div kontajnera pred a po nahravani */
.tlacidlo {
cursor: url('../images/active_cursor4.png') 5 5, pointer;
outline: none; /* Odstráňte ohraničenie */
transition: transform 0.2s ease; /* Animácia pre plynulé zväčšenie */
width: 253px;
height: 69px;
flex-shrink: 0;
border-radius: 30px;
border: 4px solid #1A511D;
background: linear-gradient(0deg, #15981E 0%, #0F1 100%);
position: relative;
justify-content: center;
display: flex;
align-items: center;
}
.tlacidlo button {
background-color: transparent;
border: none
}
.tlacidlo a {
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy";
font-size: 40px;
font-style: normal;
font-weight: 400;
text-transform: uppercase;
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.tlacidlo:hover {
background-color: rgba(255, 228, 196, 0);
transform: scale(0.98);
border: 4px solid #9A0003;
background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%);
}
.tlacidlo:active {
background-color: rgba(255, 228, 196, 0);
transform: scale(0.98);
border: 4px solid #9A0003;
background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%);
}
/* Štýl div kontajnera počas nahrávania */
.tlacidlo.recording {
background: linear-gradient(135deg, #e74c3c, #c0392b);
transform: scale(0.98);
animation: recording-pulse 1s ease-in-out infinite alternate;
}
.tlacidlo.recording button {
background: transparent !important;
cursor: not-allowed !important;
}
.tlacidlo.recording button a {
color: #fff !important;
text-shadow: 0 1px 2px rgba(0,0,0,0.5);
}
/* Pulzovanie celého div-u */
@keyframes recording-pulse {
0% {
box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7);
opacity: 1;
}
100% {
box-shadow: 0 0 0 10px rgba(231, 76, 60, 0);
opacity: 0.9;
}
}
/* Style pre posluchove cvicenie */
.cvicenie {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.14);
backdrop-filter: blur(9px);
z-index: 1000;
transition: all 0.3s ease;
}
.cvicenie-content-2 {
padding: 20px;
display: flex;
gap: 5px;
flex-direction: column;
justify-content: center;
}
.cvicenie-content-2 p {
color: #FFF;
text-align: center;
font-family: "Luckiest Guy", sans-serif;
font-size: 22px;
font-style: normal;
font-weight: 100;
line-height: normal;
margin: 0;
padding: 0px 10px;
letter-spacing: 1.6px;
}
.cvicenie-content-2 h1 {
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy";
font-size: 40px;
font-style: normal;
font-weight: 400;
text-transform: uppercase;
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.buttonsContainer {
gap: 10px;
}
#buttonsContainer img {
width: 50px; /* Prispôsobte veľkosť podľa potreby */
padding: 2px;
height: 50px;
cursor: url('../images/active_cursor4.png') 5 5, pointer;
}
.buttonsContainer:hover img {
scale: 0.98;
}
/* Modal pre pauzu/back to menu */
.main-menu ul {
list-style: none;
padding: 0;
margin: 0;
}
.main-menu li {
margin-bottom: 1rem;
}
/* Štýlovanie menu tlačidiel */
.menu-button {
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
cursor: pointer;
position: relative;
/* Rozměry tlačidla podľa Figma */
width: 250px;
height: 64px;
flex-shrink: 0;
border-radius: 30px;
/* Tieň pre tlačidlá */
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
/* Štandardné neaktívne tlačidlo */
border: 4px solid #AC3F0B;
background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat;
/* Prechod pre animácie */
transition: all 0.3s ease;
/* Text štýlovanie */
font-family: "Luckiest Guy", sans-serif;
font-size: 32px;
font-style: normal;
font-weight: 400;
line-height: 20px; /* 50% */
text-transform: uppercase;
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
/* Základná farba textu pre neaktívne tlačidlá */
color: #FFF;
cursor: url('../images/active_cursor4.png') 5 5, pointer;
z-index: 10000;
}
/* Hover efekt pre menu tlačidlá */
.menu-button:hover {
box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3);
border: 4px solid #ECCF17;
scale: 0.98;
}
/* Aktívne tlačidlo pri stlačení */
.menu-button:active {
transform: rotate(0.093deg) translateY(0) scale(0.98);
filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3));
}
/*Modal pre endgame - game over*/
.stats{
padding-bottom: 15px;
justify-content: center;
align-items: center;
}
.stats a {
text-align: center;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy";
font-size: 24px;
font-style: normal;
font-weight: 400;
line-height: 20px; /* 50% */
text-transform: uppercase;
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.stats span {
color: #FFF;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
font-family: "Luckiest Guy";
font-size: 24px;
font-style: normal;
font-weight: 400;
line-height: normal;
justify-content: center;
display: inline-flex;
align-items: center;
gap: 4px;
}
.stats img {
width: 24px;
height: 24px;
}
/* Hviezdy v modali */
.modal-stars {
display: flex;
gap: 5px;
justify-content: center;
margin-top: -15px;
}
.modal-stars img {
width: 50px;
height: 50px;
}
.gameend{
height: auto;
width: auto;
position: relative;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
}
/*Dialogové okno pre menu */
.dialogove-okno {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.14);
backdrop-filter: blur(9px);
z-index: 1000;
transition: all 0.3s ease;
}
.close {
position: absolute;
top: 20px;
right: 30px;
color: #FFF;
text-align: center;
font-family: "Luckiest Guy", sans-serif;
font-size: 64px;
font-style: normal;
font-weight: 400;
line-height: normal;
cursor: url('../images/active_cursor4.png') 5 5, pointer;
z-index: 1001;
transition: transform 0.4s ease;
}
.close:hover {
transform: rotate(15deg) scale(1.05);
}
#blur-background {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
backdrop-filter: blur(4px); /* Rozmazanie všetkého pod #blur-background */
z-index: 999;
}
.cvicenie-open #blur-background {
filter: blur(4px) grayscale(50%); /* Aplikuj rozmazanie a zosvetlenie pozadia, keď je dialogové okno otvorené */
}
/* ============================= */
/* ========= OKNO HRY ======== */
/* ============================= */
.main-container {
width: 100%;
margin: 0 auto;
background-color: #17284900;
display: flex;
flex-direction: column;
align-items: center;
grid-template-columns: 800px 300px;
justify-content: center;
text-align: center;
gap: 20px;
align-content: center;
}
/* ============================= */
/* ======== HORNÝ PANEL ======== */
/* ============================= */
.top-panel {
display: flex;
align-items: center;
justify-content: center;
gap: 40px;
height: 80px;
flex-shrink: 0;
}
.panel-item {
width: 253px;
height: 69px;
border-radius: 30px;
border: 4px solid #AC3F0B;
background-image: url('../images/pozadie_button_mobile_2.png');
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
color: #FFF;
text-align: center;
text-transform: uppercase;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
}
/* Stredný panel - PEXESO s odlišným borderom a textom */
.game-title {
border: 4px solid #ECCF17 !important;
}
.game-title span {
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: unset;
}
/* ============================= */
/* ========== CANVAS ========== */
/* ============================= */
.content-section {
display: flex;
justify-content: flex-start;
align-items: flex-start;
gap: 20px;
max-width: 1200px;
flex-wrap: wrap;
flex-direction: row;
align-content: center;
margin: 0;
background-color: #17284900;
}
/* Hlavný herný canvas */
/* Hlavný herný canvas */
/* Zmena z flexbox na CSS Grid - karty sa budú rozmiestňovať cez
grid-template-columns definovaný v pravidlách .cards-N nižšie. */
#gameCanvas {
background-image: url("../images/pozadie.jpg");
min-width: 800px; /* Desktopová veľkosť */
min-height: 800px;
max-width: 800px;
max-height: 800px;
/* === GRID NASTAVENIE === */
display: grid; /* Mriežkový layout pre karty */
gap: 1.5%; /* Medzera medzi kartami (% zo šírky canvasu) */
padding: 2%; /* Vnútorný odstup od okrajov canvasu */
align-content: center; /* Vertikálne vycentrovanie gridu ak je menší */
justify-content: center; /* Horizontálne vycentrovanie */
align-items: stretch; /* Karty vyplnia výšku bunky */
justify-items: stretch; /* Karty vyplnia šírku bunky */
/* === VZHĽAD === */
overflow: hidden;
border-radius: 10px;
border: 4px solid #AC3F0B;
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
transition: all 0.4s ease;
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
/* === BOX-SIZING === */
/* Padding sa počíta dovnútra - canvas zostane presne 800x800 */
box-sizing: border-box;
}
/* =========================================== */
/* ZÁKLADNÉ NASTAVENIE KARTY */
/* Toto je predvolené nastavenie pre karty */
/* =========================================== */
/* =========================================== */
/* ZÁKLADNÉ NASTAVENIE KARTY */
/* Karta vyplní bunku gridu cez 100% šírky. */
/* Aspect-ratio 1/1 zabezpečí štvorec. */
/* container-type umožňuje používať cqw units */
/* (napr. font-size: 20cqw = 20% šírky karty) */
/* =========================================== */
.card-container {
display: flex; /* Flexbox pre centrovanie obsahu vnútri */
width: 100%; /* Vyplní celú šírku gridovej bunky */
height: auto; /* Výška sa dopočíta z aspect-ratio */
aspect-ratio: 1 / 1; /* Karta je vždy štvorec */
/* Container Queries - umožňuje cqw units pre obsah karty */
container-type: inline-size; /* 1cqw = 1% šírky karty */
background-image: url('../images/pozadie_button_mobile_2.png');
border: 2px solid #ECCF17 !important;
border-radius: 10px;
/* Centrované vnútro */
flex-direction: column; /* Obrázok nad textom */
align-items: center; /* Horizontálne vycentrovanie */
justify-content: center; /* Vertikálne vycentrovanie */
/* Animácie */
transition: all 0.5s ease;
/* 3D efekt pre flip */
perspective: 1000px;
transform-style: preserve-3d;
position: relative;
/* Box-sizing zabezpečí že border je započítaný v rozmere */
box-sizing: border-box;
}
.card-container:hover {
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
box-shadow: 0 0 20px 2px #ECCF17 inset;
cursor: url('../images/active_cursor4.png') 5 5, pointer;
scale: 0.98;
}
/* ===== ANIMÁCIA OTÁČANIA KARIET ===== */
.card-container.flipping {
transform: rotateY(90deg) scale(1.05);
transition: transform 0.3s ease;
}
/* ===== ANIMÁCIA PRE NESPRÁVNE PÁRY (TRASENIE) ===== */
@keyframes wrongMatch {
0% { transform: translateX(0); }
25% { transform: translateX(-5px); }
75% { transform: translateX(5px); }
100% { transform: translateX(0); }
}
.card-container.wrong-match {
animation: wrongMatch 0.5s ease;
border-color: #ff4757 !important;
box-shadow: 0 0 15px 2px rgba(255, 71, 87, 0.5) inset !important;
}
/* ===== ANIMÁCIA PRE SPRÁVNU ODPOVEĎ (NÁJDENÝ PÁR) ===== */
@keyframes correctMatch {
0% {
border-color: #16B921;
box-shadow: 0 0 15px 2px rgba(22, 185, 33, 0.3) inset;
}
50% {
border-color: #1ED929;
box-shadow: 0 0 25px 4px rgba(30, 217, 41, 0.6) inset;
transform: scale(1.08);
}
100% {
border-color: #16B921;
box-shadow: 0 0 15px 2px rgba(22, 185, 33, 0.3) inset;
transform: scale(1.02);
}
}
.card-container.correct-match {
animation: correctMatch 0.6s ease;
}
/* =========================================== */
/* OBRÁZKY A TEXT V KARTÁCH */
/* Všetko v relatívnych jednotkách: */
/* - obrázok: 55% rozmerov karty */
/* - text: cqw = % šírky karty */
/* Takto sa automaticky škáluje s veľkosťou */
/* karty bez potreby rôznych pravidiel. */
/* =========================================== */
.card-container img {
width: 55%; /* 55% šírky karty */
height: 55%; /* 55% výšky karty */
object-fit: contain; /* Zachová pomer strán obrázku */
}
/* Text na rubovej strane karty (PEXESO) - väčší */
.card-container span {
font-size: 20cqw; /* 20% šírky karty (napr. 160px karta = 32px font) */
/* Farebný gradient (nezmenené) */
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: unset;
/* Text nesmie pretekať kartu */
max-width: 90%; /* Max 90% šírky karty */
overflow: hidden; /* Skryje pretekajúci text */
text-overflow: ellipsis; /* "..." ak je text príliš dlhý */
white-space: nowrap; /* Neláme text */
padding: 0 5%; /* Malý odstup od okrajov */
}
/* Text po otočení karty (konkrétne slovo) - menší aby sa zmestil */
.card-container.flipped span {
font-size: 11cqw; /* 11% šírky karty (pre dlhšie slová) */
}
/* =========================================== */
/* Blikanie času v posledných 10 sekundách */
/* =========================================== */
#game-time.time-warning {
animation: time-blink 0.5s ease-in-out infinite;
}
@keyframes time-blink {
0%, 100% {
color: #ffffff;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}
50% {
color: #ff0000;
text-shadow: 0 0 10px rgba(255, 0, 0, 0.8),
2px 2px 4px rgba(0, 0, 0, 0.5);
}
}
.time-display {
transition: color 0.3s ease;
}
/* Červené upozornenie keď ostáva málo času */
.time-display.warning {
color: #ff6b6b !important;
animation: timePulse 1s ease-in-out infinite;
}
@keyframes timePulse {
0%, 100% {
transform: scale(1);
text-shadow: 0 0 10px rgba(255, 107, 107, 0.5);
}
50% {
transform: scale(1.1);
text-shadow: 0 0 20px rgba(255, 107, 107, 0.8);
}
}
/* =========================================== */
/* ===== PAUSE MENU ===== */
/* =========================================== */
/* Hlavný container pause menu */
.pause-modal {
display: none; /* Skrytý na začiatku */
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.14);
backdrop-filter: blur(9px);
z-index: 1000;
transition: all 0.3s ease;
}
/* Overlay (tmavé pozadie) */
.pause-modal-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
/* Samotný modal box */
.pause-modal-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 2;
/* Rovnaké rozmery ako execise-window */
width: 70%;
max-width: 450px;
min-width: 400px;
/* DÔLEŽITÉ: Používame ROVNAKÉ pozadie ako ostatné modaly */
background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat;
/* Rovnaký border ako ostatné modaly */
border: 4px solid #ECCF17;
border-radius: 30px;
/* Padding */
padding: 2rem 3rem;
box-sizing: border-box;
/* Animácie */
transition: all 0.4s ease;
}
/* Header pause menu */
.pause-modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
padding-bottom: 0;
position: relative;
}
/* Nadpis "PAUZA" */
.pause-modal-header h2 {
font-family: 'Luckiest Guy', sans-serif;
font-size: 64px;
font-style: normal;
font-weight: 400;
line-height: normal;
text-transform: uppercase;
margin: 0;
padding: 0;
/* Gradient text ako ostatné texty */
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
/* Text stroke */
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
}
/* Close button (X) - ROVNAKÝ ako v pôvodnom .close */
.pause-close-btn {
position: absolute;
top: -20px;
right: -10px;
background: none;
border: none;
padding: 0;
margin: 0;
/* Text štýl */
color: #FFF;
text-align: center;
font-family: "Luckiest Guy", sans-serif;
font-size: 64px;
font-style: normal;
font-weight: 400;
line-height: normal;
/* Cursor */
cursor: url('../images/active_cursor4.png') 5 5, pointer;
/* Animácie */
transition: transform 0.4s ease;
z-index: 1001;
}
.pause-close-btn:hover {
transform: rotate(15deg) scale(1.05);
}
/* Body pause menu */
.pause-modal-body {
padding: 10px 0;
}
/* Menu navigácia */
.pause-menu {
margin: 0;
padding: 0;
}
.pause-menu ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 15px;
}
.pause-menu li {
margin: 0;
padding: 0;
}
.pause-button {
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
position: relative;
/* Rozmery tlačidla */
width: 100%;
min-width: 250px;
height: 64px;
flex-shrink: 0;
border-radius: 30px;
/* Tieň */
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
/* Border a pozadie - ROVNAKÉ ako ostatné tlačidlá */
border: 4px solid #AC3F0B;
background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat;
/* Prechod pre animácie */
transition: all 0.3s ease;
/* Text štýlovanie - ROVNAKÉ ako menu-button */
font-family: "Luckiest Guy", sans-serif;
font-size: 32px;
font-style: normal;
font-weight: 400;
line-height: 20px;
text-transform: uppercase;
text-align: center;
/* Text stroke */
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
/* Farba textu - BIELA ako v originálnych tlačidlách */
color: #FFF;
/* Cursor */
cursor: url('../images/active_cursor4.png') 5 5, pointer;
z-index: 10000;
}
.pause-button:hover {
box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3);
border: 4px solid #ECCF17;
transform: scale(0.98);
}
.pause-button:active {
transform: translateY(0) scale(0.98);
filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3));
}
/* =============================================== */
/* side panel s hráčmi */
/* =============================================== */
.side-panel {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20px;
width: 300px;
min-height: 800px;
max-height: 800px;
}
.players-panel {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
width: 100%;
min-height: 158px;
border-radius: 30px;
border: 4px solid #AC3F0B;
background-image: url('../images/pozadie_button_mobile_2.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
padding: 20px;
box-sizing: border-box;
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
}
.players-panel :active {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
width: 100%;
min-height: 158px;
background-image: url('../images/pozadie_button_mobile_2.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
padding: 20px;
box-sizing: border-box;
filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30));
border-radius: 30px;
border: 4px solid #ECCF17;
box-shadow: 0 0 20px 2px #ECCF17 inset;
}
.players-panel span {
font-size: 60px;
color: #FFF;
text-align: center;
text-transform: uppercase;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #000;
}
.players-panel h1 {
font-size: 40px;
margin: 0;
padding: 0;
}
.players-panel .name {
background: linear-gradient(180deg, #EF0 0%, #FFD900 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: unset;
}
.player-1 .name {
background: linear-gradient(176deg, #00E5FF 3.52%, #2494A1 96.48%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.player-2 .name {
background: linear-gradient(176deg, #1EFF00 3.52%, #8EE046 96.48%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.player-3 .name {
background: linear-gradient(176deg, #5579D4 3.52%, #008CFF 96.48%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.player-4 .name {
background: linear-gradient(176deg, #D455D2 3.52%, #F0D 96.48%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
/* ==========================================
POČÍTADLO VYBRANÝCH SLOV - "Vybraných: X / 14 slov"
========================================== */
.selection-counter {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 12px 20px;
margin-bottom: 15px;
background: rgba(255, 255, 255, 0.1);
border: 2px solid rgba(236, 207, 23, 0.3);
border-radius: 12px;
font-family: "Luckiest Guy", sans-serif;
transition: all 0.3s ease;
}
.counter-label {
color: rgba(255, 255, 255, 0.8);
font-size: 16px;
-webkit-text-stroke: 0.5px #000;
}
.counter-value {
color: #ECCF17;
font-size: 28px;
font-weight: bold;
-webkit-text-stroke: 1px #000;
transition: all 0.3s ease;
}
.counter-separator {
color: rgba(255, 255, 255, 0.6);
font-size: 20px;
}
.counter-max {
color: rgba(255, 255, 255, 0.8);
font-size: 20px;
-webkit-text-stroke: 0.5px #000;
}
.counter-suffix {
color: rgba(255, 255, 255, 0.8);
font-size: 16px;
-webkit-text-stroke: 0.5px #000;
}
/* Stavy počítadla */
.selection-counter.too-few {
border-color: rgba(255, 71, 87, 0.6);
background: rgba(255, 71, 87, 0.1);
}
.selection-counter.too-few .counter-value {
color: #ff4757;
}
.selection-counter.ok {
border-color: rgba(76, 209, 55, 0.6);
background: rgba(76, 209, 55, 0.1);
}
.selection-counter.ok .counter-value {
color: #4CD137;
}
.selection-counter.at-max {
border-color: rgba(255, 165, 0, 0.8);
background: rgba(255, 165, 0, 0.15);
}
.selection-counter.at-max .counter-value {
color: #FFA500;
}
/* Upozornenie o limite */
.pexeso-selection-limit-warning {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 10000;
background: linear-gradient(135deg, #FFA500 0%, #FF8C00 100%);
border: 4px solid #AC3F0B;
border-radius: 20px;
padding: 25px 40px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
animation: slideInBounce 0.5s ease-out;
opacity: 1;
transition: opacity 0.5s ease;
}
.warning-content {
display: flex;
align-items: center;
gap: 15px;
}
.warning-icon {
font-size: 40px;
}
.warning-text {
color: #FFFFFF;
font-family: "Luckiest Guy", sans-serif;
font-size: 24px;
font-weight: bold;
-webkit-text-stroke: 2px #AC3F0B;
text-shadow: 3px 3px 6px rgba(0, 0, 0, 0.5);
}
@keyframes slideInBounce {
0% {
transform: translate(-50%, -150%);
opacity: 0;
}
60% {
transform: translate(-50%, -45%);
opacity: 1;
}
80% {
transform: translate(-50%, -52%);
}
100% {
transform: translate(-50%, -50%);
}
}
/* =============================================== */
/* GRID ROZLOŽENIE PRE KAŽDÝ POČET KARIET */
/* Definuje iba počet stĺpcov - šírka karty sa */
/* automaticky vypočíta z gridu (1fr = 1 podiel). */
/* Veľkosť karty, obrázku a textu je riešená cez */
/* aspect-ratio a cqw v .card-container vyššie. */
/* =============================================== */
/* 4 karty = 2 stĺpce (2×2) */
#gameCanvas.cards-4 { grid-template-columns: repeat(2, 1fr); }
/* 6 kariet = 3 stĺpce (3×2) */
#gameCanvas.cards-6 { grid-template-columns: repeat(3, 1fr); }
/* 8 kariet = 4 stĺpce (4×2) */
#gameCanvas.cards-8 { grid-template-columns: repeat(4, 1fr); }
/* 10 kariet = 5 stĺpcov (5×2) */
#gameCanvas.cards-10 { grid-template-columns: repeat(4, 1fr); }
/* 12 kariet = 4 stĺpce (4×3) */
#gameCanvas.cards-12 { grid-template-columns: repeat(4, 1fr); }
/* 14 kariet = 7 stĺpcov (7×2) */
#gameCanvas.cards-14 { grid-template-columns: repeat(4, 1fr); }
/* 16 kariet = 4 stĺpce (4×4) - ŠTANDARDNÁ VEĽKOSŤ */
#gameCanvas.cards-16 { grid-template-columns: repeat(4, 1fr); }
/* 18 kariet = 6 stĺpcov (6×3) */
#gameCanvas.cards-18 { grid-template-columns: repeat(5, 1fr); }
/* 20 kariet = 5 stĺpcov (5×4) */
#gameCanvas.cards-20 { grid-template-columns: repeat(5, 1fr); }
/* 22-24 kariet = 6 stĺpcov (6×4, 22 bude mať 2 prázdne bunky) */
#gameCanvas.cards-22,
#gameCanvas.cards-23,
#gameCanvas.cards-24 { grid-template-columns: repeat(5, 1fr); }
/* 25 kariet = 5 stĺpcov (5×5) */
#gameCanvas.cards-25 { grid-template-columns: repeat(5, 1fr); }
/* 26-28 kariet = 7 stĺpcov */
#gameCanvas.cards-26,
#gameCanvas.cards-27,
#gameCanvas.cards-28 { grid-template-columns: repeat(6, 1fr); }
/* 30 kariet = 6 stĺpcov (6×5) */
#gameCanvas.cards-29,
#gameCanvas.cards-30 { grid-template-columns: repeat(6, 1fr); }
/* 32-34 kariet = 7 stĺpcov */
#gameCanvas.cards-31,
#gameCanvas.cards-32,
#gameCanvas.cards-33,
#gameCanvas.cards-34 { grid-template-columns: repeat(7, 1fr); }
/* 36 kariet = 6 stĺpcov (6×6) */
#gameCanvas.cards-35,
#gameCanvas.cards-36 { grid-template-columns: repeat(7, 1fr); }
/* 38-41 kariet = 7 stĺpcov */
#gameCanvas.cards-37,
#gameCanvas.cards-38,
#gameCanvas.cards-39,
#gameCanvas.cards-40,
#gameCanvas.cards-41 { grid-template-columns: repeat(7, 1fr); }
/* ============================================================ */
/* ==== RESPONZÍVNY LAYOUT ==== */
/* ============================================================ */
@media (max-width: 1199px), (max-height: 899px) {
.main-container {
width: 100%; /* Plná šírka viewportu */
padding: 8px; /* Odstup od okrajov obrazovky */
gap: 10px; /* Menšia medzera medzi sekciami */
}
/* -------------------------------------------------------- */
/* HORNÝ PANEL (čas / PEXESO / pokusy) */
/* -------------------------------------------------------- */
.top-panel {
width: 100%; /* Plná šírka rodiča */
max-width: 800px; /* Ale nie širší ako canvas */
height: auto; /* Výška podľa obsahu */
gap: 10px; /* Menší rozostup medzi boxmi */
flex-wrap: nowrap; /* Ostanú v jednom riadku */
justify-content: space-between; /* Rovnomerne rozložené */
}
/* Jednotlivé boxy v hornom paneli (čas, názov hry, pokusy) */
.panel-item {
flex: 1 1 0; /* Rovnaký podiel priestoru */
min-width: 0; /* Dovolí flex-u zmrštiť box */
max-width: 240px; /* Horný limit pre širšie obrazovky */
width: auto; /* Prepis desktopovej fixnej šírky 253px */
height: 56px; /* Nižší box ako na desktope */
font-size: 28px; /* Menší text */
border-width: 3px; /* Tenší border */
}
/* -------------------------------------------------------- */
/* CONTENT SECTION */
/* Zmena z riadku [canvas | panel] na stĺpec [canvas] */
/* [panel] */
/* -------------------------------------------------------- */
.content-section {
flex-direction: column; /* Stĺpec namiesto riadku */
align-items: center; /* Vycentrovať deti */
width: 100%; /* Plná šírka */
max-width: 800px; /* Ale maximálne ako canvas */
gap: 10px; /* Medzera medzi canvasom a panelom */
flex-wrap: nowrap; /* Neumožniť wrap - stĺpec je jasný */
}
/* -------------------------------------------------------- */
/* GAME CANVAS - RESPONZÍVNY */
/* Canvas je vždy štvorec (aspect-ratio 1:1). */
/* Jeho šírka sa vypočíta ako menšia z: */
/* - 100% šírky rodiča */
/* - dostupnej výšky viewportu mínus rezervácia (240px */
/* na top-panel + side-panel + gaps + padding) */
/* Takto sa canvas vždy zmestí na obrazovku bez scrollovania*/
/* -------------------------------------------------------- */
#gameCanvas {
min-width: 0;
min-height: 0;
width: min(calc(100vw - 20px), calc(100dvh - 200px), 800px);
height: min(calc(100vw - 20px), calc(100dvh - 200px), 800px);
}
/* -------------------------------------------------------- */
/* SIDE PANEL (hráči) */
/* Namiesto stĺpca vedľa canvasu - riadok pod canvasom */
/* -------------------------------------------------------- */
.side-panel {
width: 100%; /* Plná šírka rodiča */
max-width: 800px; /* Ako canvas */
min-height: auto; /* Zrušíme 800px z desktopu */
max-height: unset; /* Zrušíme 800px z desktopu */
flex-direction: row; /* Vedľa seba, nie pod sebou */
flex-wrap: wrap; /* Povoliť zalomenie na nový riadok */
justify-content: center; /* Vycentrovanie hráčov */
gap: 10px; /* Menšia medzera medzi hráčmi */
}
/* Panel jedného hráča - kompaktnejší, 2-4 sa zmestia vedľa seba */
.players-panel {
width: auto; /* Šírka podľa obsahu */
min-width: 140px; /* Ale aspoň 140px široký */
max-width: 200px; /* Max 200px široký */
flex: 1 1 auto; /* Povolený rast aj zmrštenie */
min-height: 80px; /* Nižšia min. výška */
padding: 8px 12px; /* Menší vnútorný padding */
}
/* Meno hráča - menší font */
.players-panel h1 {
font-size: 22px;
}
/* Skóre hráča - menší font */
.players-panel span {
font-size: 32px;
}
}
/* ============================================================ */
/* ==== DROBNÉ ÚPRAVY PRE ÚZKE OBRAZOVKY (< 768px) ==== */
/* ==== Tieto sú o modálnych oknách, NIE o layoute ==== */
/* ============================================================ */
@media (max-width: 768px) {
/* Pause modal a cvičenie okno - zmestia sa aj na telefón */
.execise-window,
.pause-modal-content {
min-width: 90%; /* Zrušenie fixnej šírky */
width: 90%; /* 90% šírky obrazovky */
max-height: 90vh; /* Max 90% výšky viewportu */
overflow-y: auto; /* Scroll ak je obsah dlhý */
padding: 1.5rem 1rem; /* Menší padding */
}
/* Nadpis "PAUZA" - menší font na telefóne */
.pause-modal-header h2 {
font-size: 40px;
}
/* Tlačidlá v modáloch - plná šírka */
.tlacidlo,
.menu-button,
.pause-button {
width: 100%; /* Plná šírka */
min-width: unset; /* Zruš fixnú min šírku */
height: 55px; /* Nižšie */
font-size: 24px; /* Menší text */
}
/* Nadpis "PEXESO" v hornom paneli - menší */
.game-title span {
font-size: 24px;
}
}
@media (max-width: 480px) {
.loading-progress-container {
max-width: 300px;
}
.loading-progress-text {
font-size: 12px;
}
#loading-progress-percentage {
font-size: 14px;
}
#loading-progress-details {
font-size: 10px;
}
.pause-modal-content {
width: 95%;
min-width: 280px;
padding: 1rem 1.5rem;
}
.pause-modal-header h2 {
font-size: 36px;
}
.pause-close-btn {
font-size: 40px;
}
.pause-button {
font-size: 20px;
height: 48px;
min-width: 180px;
}
#menuButton, .kruhove-tlacidlo {
width: 35px;
height: 35px;
top: 5px;
left: 5px;
}
.cvicenie-text p, .loading-text-jozino {
font-size: 30px;
}
.cvicenie-text img {
max-height: 120px;
}
}