diff options
| -rw-r--r-- | base.css | 183 | ||||
| -rw-r--r-- | chart/index.html | 9 | ||||
| -rw-r--r-- | chart/styles.css | 168 | ||||
| -rw-r--r-- | index.html | 1 | ||||
| -rw-r--r-- | styles.css | 585 |
5 files changed, 387 insertions, 559 deletions
diff --git a/base.css b/base.css new file mode 100644 index 0000000..dc8d1f0 --- /dev/null +++ b/base.css @@ -0,0 +1,183 @@ +/* Morse Hero Base Styles */ +:root { + --primary-color: #3498db; + --primary-dark: #2980b9; + --secondary-color: #f39c12; + --secondary-dark: #e67e22; + --accent-color: #e74c3c; + --accent-dark: #c0392b; + --success-color: #2ecc71; + --success-dark: #27ae60; + --bg-dark: #2c3e50; + --bg-darker: #1a2530; + --bg-light: #34495e; + --text-light: #ecf0f1; + --text-dim: rgba(255, 255, 255, 0.7); + --border-radius-sm: 12px; + --border-radius-md: 20px; + --border-radius-lg: 30px; + --shadow-sm: 0 4px 6px rgba(0, 0, 0, 0.1); + --shadow-md: 0 10px 20px rgba(0, 0, 0, 0.15); + --shadow-lg: 0 15px 30px rgba(0, 0, 0, 0.2); + --transition-fast: 0.2s ease; + --transition-normal: 0.3s ease; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: 'Poppins', 'Fredoka', sans-serif; + margin: 0; + padding: 0; + background: radial-gradient(ellipse at top, var(--bg-dark) 0%, var(--bg-darker) 100%); + color: var(--text-light); + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 18px; + line-height: 1.6; +} + +.container { + max-width: 900px; + margin: 0 auto; + padding: 30px 20px; + text-align: center; + width: 100%; +} + +h1 { + color: var(--secondary-color); + text-shadow: 3px 3px 0px rgba(0, 0, 0, 0.3), + 0 0 15px rgba(243, 156, 18, 0.5); + margin-bottom: 20px; + font-family: 'Fredoka', sans-serif; + font-weight: 600; + position: relative; + display: inline-block; +} + +h1::after { + content: ""; + position: absolute; + bottom: -10px; + left: 50%; + transform: translateX(-50%); + width: 60px; + height: 4px; + background: linear-gradient(90deg, var(--accent-color), var(--secondary-color)); + border-radius: 2px; +} + +button { + cursor: pointer; + font-family: 'Poppins', 'Fredoka', sans-serif; + transition: all var(--transition-normal); + font-weight: 600; + letter-spacing: 1px; + text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.2); + border: none; + outline: none; + position: relative; + overflow: hidden; +} + +button::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + opacity: 0; + transition: opacity var(--transition-fast); +} + +button:hover::after { + opacity: 1; +} + +.title-link { + color: inherit; + text-decoration: none; + transition: all var(--transition-normal); + position: relative; + display: inline-block; +} + +.title-link:hover { + color: var(--secondary-color); + text-shadow: 0 0 15px rgba(243, 156, 18, 0.6); +} + +.footer { + margin-top: 40px; + padding: 20px; + text-align: center; + font-size: 16px; + color: var(--text-dim); + width: 100%; + border-top: 1px solid rgba(255, 255, 255, 0.1); +} + +.footer a { + color: var(--primary-color); + text-decoration: none; + font-weight: bold; + transition: color var(--transition-normal); + position: relative; +} + +.footer a::after { + content: ''; + position: absolute; + width: 100%; + transform: scaleX(0); + height: 2px; + bottom: -2px; + left: 0; + background-color: var(--primary-color); + transform-origin: bottom right; + transition: transform 0.3s ease-out; +} + +.footer a:hover { + color: var(--secondary-color); +} + +.footer a:hover::after { + transform: scaleX(1); + transform-origin: bottom left; +} + +/* Common Media Queries */ +@media (max-width: 768px) { + .container { + padding: 20px 15px; + } + + h1 { + font-size: 36px; + } + + button { + font-size: 16px; + } +} + +@media (max-width: 480px) { + h1 { + font-size: 28px; + } + + .container { + padding: 15px 10px; + } +}
\ No newline at end of file diff --git a/chart/index.html b/chart/index.html index 3059b2f..de53cd9 100644 --- a/chart/index.html +++ b/chart/index.html @@ -18,13 +18,16 @@ <meta name="theme-color" content="#2c3e50"> <script src="https://cdn.usefathom.com/script.js" data-site="NEBPAKSA" defer></script> <script src="https://cwjs.mastercw.com/cw.min.js"></script> - + <!-- Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600&family=Poppins:wght@400;600;700&display=swap" rel="stylesheet"> - + <link + href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600&family=Poppins:wght@400;600;700&display=swap" + rel="stylesheet"> + <!-- Main Stylesheet --> + <link rel="stylesheet" href="../base.css"> <link rel="stylesheet" href="styles.css"> </head> diff --git a/chart/styles.css b/chart/styles.css index 4f6de23..279d421 100644 --- a/chart/styles.css +++ b/chart/styles.css @@ -1,79 +1,7 @@ /* Morse Hero Chart Styles */ -:root { - --primary-color: #3498db; - --primary-dark: #2980b9; - --secondary-color: #f39c12; - --secondary-dark: #e67e22; - --accent-color: #e74c3c; - --accent-dark: #c0392b; - --success-color: #2ecc71; - --success-dark: #27ae60; - --bg-dark: #2c3e50; - --bg-darker: #1a2530; - --bg-light: #34495e; - --text-light: #ecf0f1; - --text-dim: rgba(255, 255, 255, 0.7); - --border-radius-sm: 12px; - --border-radius-md: 20px; - --border-radius-lg: 30px; - --shadow-sm: 0 4px 6px rgba(0, 0, 0, 0.1); - --shadow-md: 0 10px 20px rgba(0, 0, 0, 0.15); - --shadow-lg: 0 15px 30px rgba(0, 0, 0, 0.2); - --transition-fast: 0.2s ease; - --transition-normal: 0.3s ease; -} - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -body { - font-family: 'Poppins', 'Fredoka', sans-serif; - margin: 0; - padding: 0; - background: radial-gradient(ellipse at top, var(--bg-dark) 0%, var(--bg-darker) 100%); - color: var(--text-light); - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: 18px; - line-height: 1.6; -} - -.container { - max-width: 900px; - margin: 0 auto; - padding: 30px 20px; - text-align: center; - width: 100%; -} h1 { font-size: 48px; - margin-bottom: 20px; - color: var(--secondary-color); - text-shadow: 3px 3px 0px rgba(0, 0, 0, 0.3), - 0 0 15px rgba(243, 156, 18, 0.5); - font-family: 'Fredoka', sans-serif; - font-weight: 600; - position: relative; - display: inline-block; -} - -h1::after { - content: ""; - position: absolute; - bottom: -10px; - left: 50%; - transform: translateX(-50%); - width: 60px; - height: 4px; - background: linear-gradient(90deg, var(--accent-color), var(--secondary-color)); - border-radius: 2px; } h2 { @@ -176,105 +104,29 @@ h2 { box-shadow: var(--shadow-sm); } -.title-link { - color: inherit; - text-decoration: none; - transition: all var(--transition-normal); - position: relative; - display: inline-block; -} - -.title-link:hover { - color: var(--secondary-color); - text-shadow: 0 0 15px rgba(243, 156, 18, 0.6); -} - -.footer { - margin-top: 40px; - padding: 20px; - text-align: center; - font-size: 16px; - color: var(--text-dim); - width: 100%; - border-top: 1px solid rgba(255, 255, 255, 0.1); -} - -.footer a { - color: var(--primary-color); - text-decoration: none; - font-weight: bold; - transition: color var(--transition-normal); - position: relative; -} - -.footer a::after { - content: ''; - position: absolute; - width: 100%; - transform: scaleX(0); - height: 2px; - bottom: -2px; - left: 0; - background-color: var(--primary-color); - transform-origin: bottom right; - transition: transform 0.3s ease-out; -} - -.footer a:hover { - color: var(--secondary-color); -} - -.footer a:hover::after { - transform: scaleX(1); - transform-origin: bottom left; -} - @media (max-width: 768px) { - .container { - padding: 20px 15px; - } - - h1 { - font-size: 40px; - } - - h2 { - font-size: 28px; - } - .morse-grid { - grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); gap: 15px; } - + .morse-item { padding: 15px 10px; } - + .character { font-size: 28px; } -} - -@media (max-width: 480px) { + + .morse { + font-size: 16px; + } + h1 { - font-size: 32px; + font-size: 36px; } - + h2 { font-size: 24px; } - - .morse-grid { - grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); - gap: 10px; - } - - .character { - font-size: 24px; - } - - .morse { - font-size: 16px; - } } @@ -27,6 +27,7 @@ rel="stylesheet"> <!-- Main Stylesheet --> + <link rel="stylesheet" href="base.css"> <link rel="stylesheet" href="styles.css"> </head> @@ -1,82 +1,17 @@ /* Morse Hero Main Styles */ -:root { - --primary-color: #3498db; - --primary-dark: #2980b9; - --secondary-color: #f39c12; - --secondary-dark: #e67e22; - --accent-color: #e74c3c; - --accent-dark: #c0392b; - --success-color: #2ecc71; - --success-dark: #27ae60; - --bg-dark: #2c3e50; - --bg-darker: #1a2530; - --bg-light: #34495e; - --text-light: #ecf0f1; - --text-dim: rgba(255, 255, 255, 0.7); - --border-radius-sm: 12px; - --border-radius-md: 20px; - --border-radius-lg: 30px; - --shadow-sm: 0 4px 6px rgba(0, 0, 0, 0.1); - --shadow-md: 0 10px 20px rgba(0, 0, 0, 0.15); - --shadow-lg: 0 15px 30px rgba(0, 0, 0, 0.2); - --transition-fast: 0.2s ease; - --transition-normal: 0.3s ease; -} - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -body { - font-family: 'Poppins', 'Fredoka', sans-serif; - margin: 0; - padding: 0; - background: radial-gradient(ellipse at top, var(--bg-dark) 0%, var(--bg-darker) 100%); - color: var(--text-light); - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: 18px; - line-height: 1.6; -} - -.container { - max-width: 900px; - margin: 0 auto; - padding: 30px 20px; - text-align: center; - width: 100%; -} h1 { - color: var(--secondary-color); - text-shadow: - 0 0 15px rgba(243, 156, 18, 0.4), - 3px 3px 0px rgba(231, 76, 60, 0.6); font-size: 4.5em; - margin-bottom: 20px; margin-top: 0.5rem; letter-spacing: 2px; font-weight: 700; - font-family: 'Fredoka', sans-serif; - position: relative; - display: inline-block; + text-shadow: + 0 0 15px rgba(243, 156, 18, 0.4), + 3px 3px 0px rgba(231, 76, 60, 0.6); } h1::after { - content: ""; - position: absolute; - bottom: -10px; - left: 50%; - transform: translateX(-50%); width: 80px; - height: 4px; - background: linear-gradient(90deg, var(--accent-color), var(--secondary-color)); - border-radius: 2px; } .game-container { @@ -107,35 +42,6 @@ h1::after { margin-top: 40px; } -button { - cursor: pointer; - font-family: 'Poppins', 'Fredoka', sans-serif; - transition: all var(--transition-normal); - font-weight: 600; - letter-spacing: 1px; - text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.2); - border: none; - outline: none; - position: relative; - overflow: hidden; -} - -button::after { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); - opacity: 0; - transition: opacity var(--transition-fast); -} - -button:hover::after { - opacity: 1; -} - .start-button { background: linear-gradient(145deg, var(--accent-color) 0%, #c0392b 100%); color: white; @@ -200,7 +106,7 @@ button:hover::after { background: linear-gradient(145deg, var(--success-color), var(--success-dark)); box-shadow: 0 8px 0 var(--success-dark), 0 0 30px rgba(46, 204, 113, 0.5); - animation: pulse-green 0.8s infinite alternate; + animation: pulse 0.5s; } .option-button.incorrect { @@ -243,201 +149,9 @@ button:hover::after { transition: transform 0.05s, box-shadow 0.05s; } -@keyframes pulse-green { - from { - box-shadow: 0 8px 0 var(--success-dark), 0 0 20px rgba(46, 204, 113, 0.5); - } - - to { - box-shadow: 0 8px 0 var(--success-dark), 0 0 40px rgba(46, 204, 113, 0.8); - } -} - -@keyframes shake { - - 0%, - 100% { - transform: translateX(0); - } - - 20%, - 60% { - transform: translateX(-10px); - } - - 40%, - 80% { - transform: translateX(10px); - } -} - -.progress-container { - background-color: rgba(255, 255, 255, 0.1); - border-radius: 20px; - height: 10px; - width: 100%; - margin: 20px 0; - overflow: hidden; - position: relative; -} - -.progress-bar { - background: linear-gradient(90deg, var(--primary-color), var(--secondary-color)); - height: 100%; - border-radius: 20px; - transition: width 0.5s ease; -} - -.score-display { - font-size: 24px; - font-weight: bold; - margin: 15px 0; - color: var(--secondary-color); -} - -.controls { - display: flex; - justify-content: center; - gap: 20px; - margin-top: 30px; -} - -.control-button { - background: linear-gradient(145deg, var(--bg-light), #2d3e50); - color: var(--text-light); - border-radius: var(--border-radius-sm); - padding: 12px 25px; - font-size: 16px; - box-shadow: var(--shadow-sm); - transition: all var(--transition-normal); - display: flex; - align-items: center; - justify-content: center; - gap: 8px; -} - -.control-button:hover { - transform: translateY(-3px); - box-shadow: var(--shadow-md); - background: linear-gradient(145deg, #3a5269, var(--bg-light)); -} - -.control-button:active { - transform: translateY(1px); - box-shadow: var(--shadow-sm); -} - -.play-again-button { - background: linear-gradient(145deg, var(--secondary-color), var(--secondary-dark)); - color: white; - border-radius: var(--border-radius-md); - padding: 15px 30px; - font-size: 20px; - margin-top: 20px; - box-shadow: 0 6px 0 var(--secondary-dark), - var(--shadow-md); -} - -.play-again-button:hover { - transform: translateY(-5px); - box-shadow: 0 11px 0 var(--secondary-dark), - var(--shadow-lg); -} - -.play-again-button:active { - transform: translateY(3px); - box-shadow: 0 3px 0 var(--secondary-dark), - var(--shadow-sm); -} - -.title-link { - color: inherit; - text-decoration: none; - transition: all var(--transition-normal); - position: relative; - display: inline-block; -} - -.title-link:hover { - color: var(--secondary-color); - text-shadow: 0 0 15px rgba(243, 156, 18, 0.6); -} - -.footer { - margin-top: 40px; - padding: 20px; - text-align: center; - font-size: 16px; - color: var(--text-dim); - width: 100%; - border-top: 1px solid rgba(255, 255, 255, 0.1); -} - -.footer a { - color: var(--primary-color); - text-decoration: none; - font-weight: bold; - transition: color var(--transition-normal); - position: relative; -} - -.footer a::after { - content: ''; - position: absolute; - width: 100%; - transform: scaleX(0); - height: 2px; - bottom: -2px; - left: 0; - background-color: var(--primary-color); - transform-origin: bottom right; - transition: transform 0.3s ease-out; -} - -.footer a:hover { - color: var(--secondary-color); -} - -.footer a:hover::after { - transform: scaleX(1); - transform-origin: bottom left; -} - -.instructions { - background-color: rgba(255, 255, 255, 0.05); - border-radius: var(--border-radius-md); - padding: 25px; - margin-bottom: 30px; - text-align: left; - box-shadow: var(--shadow-sm); - border-left: 4px solid var(--primary-color); -} - -.instructions h2 { - color: var(--secondary-color); - margin-bottom: 15px; - font-size: 24px; -} - -.instructions p { - margin-bottom: 10px; - font-size: 16px; - line-height: 1.6; -} - -.instructions ul { - margin-left: 20px; - margin-bottom: 10px; -} - -.instructions li { - margin-bottom: 5px; -} - .chart-link { - margin-top: 25px; + margin-top: 20px; font-size: 18px; - display: inline-block; } .chart-link a { @@ -447,6 +161,11 @@ button:hover::after { position: relative; } +.chart-link a:hover { + color: var(--secondary-color); + text-decoration: underline; +} + .chart-link a::after { content: ''; position: absolute; @@ -460,10 +179,6 @@ button:hover::after { transition: transform 0.3s ease-out; } -.chart-link a:hover { - color: var(--secondary-color); -} - .chart-link a:hover::after { transform: scaleX(1); transform-origin: bottom left; @@ -616,7 +331,13 @@ button:hover::after { 0 0 10px rgba(243, 156, 18, 0.3); } -/* Settings */ +.score-display { + font-size: 24px; + font-weight: bold; + margin: 15px 0; + color: var(--secondary-color); +} + .settings { background: linear-gradient(145deg, rgba(52, 73, 94, 0.7) 0%, rgba(44, 62, 80, 0.7) 100%); padding: 25px; @@ -663,6 +384,11 @@ button:hover::after { margin-left: 30px; } +.hint-icon { + display: inline-block; + margin-right: 8px; +} + .hint-setting input[type="checkbox"] { width: 20px; height: 20px; @@ -671,146 +397,209 @@ button:hover::after { margin-right: 8px; } -.chart-link a { - color: var(--primary-color); - text-decoration: none; +.controls { + display: flex; + justify-content: center; + gap: 20px; + margin-top: 30px; +} + +.control-button { + background: linear-gradient(145deg, var(--bg-light), #2d3e50); + color: var(--text-light); + border-radius: var(--border-radius-sm); + padding: 12px 25px; + font-size: 16px; + box-shadow: var(--shadow-sm); transition: all var(--transition-normal); + display: flex; + align-items: center; + justify-content: center; + gap: 8px; } -.chart-link a:hover { - color: var(--secondary-color); - text-decoration: underline; +.control-button:hover { + transform: translateY(-3px); + box-shadow: var(--shadow-md); + background: linear-gradient(145deg, #3a5269, var(--bg-light)); } -@media (max-width: 768px) { - .container { - padding: 20px 15px; - } +.control-button:active { + transform: translateY(1px); + box-shadow: var(--shadow-sm); +} - h1 { - font-size: 3.5em; - } +.play-again-button { + background: linear-gradient(145deg, var(--secondary-color), var(--secondary-dark)); + color: white; + border-radius: var(--border-radius-md); + padding: 15px 30px; + font-size: 20px; + margin-top: 20px; + box-shadow: 0 6px 0 var(--secondary-dark), + var(--shadow-md); +} - .game-container { - padding: 30px 20px; - } +.play-again-button:hover { + transform: translateY(-5px); + box-shadow: 0 11px 0 var(--secondary-dark), + var(--shadow-lg); +} - .options { - gap: 15px; - } +.play-again-button:active { + transform: translateY(3px); + box-shadow: 0 3px 0 var(--secondary-dark), + var(--shadow-sm); +} - .option-button { - font-size: 28px; - padding: 20px 10px; - min-height: 110px; - } +.progress-container { + background-color: rgba(255, 255, 255, 0.1); + border-radius: 20px; + height: 10px; + width: 100%; + margin: 20px 0; + overflow: hidden; + position: relative; +} - .start-button { - font-size: 26px; - padding: 18px 30px; - max-width: 250px; - } +.progress-bar { + background: linear-gradient(90deg, var(--primary-color), var(--secondary-color)); + height: 100%; + border-radius: 20px; + transition: width 0.5s ease; +} - #startScreen { - padding: 30px 20px; - margin: 30px 0; - } +.instructions { + background-color: rgba(255, 255, 255, 0.05); + border-radius: var(--border-radius-md); + padding: 25px; + margin-bottom: 30px; + text-align: left; + box-shadow: var(--shadow-sm); + border-left: 4px solid var(--primary-color); +} - #startScreen p { - font-size: 24px; - margin-bottom: 30px; - } +.instructions h2 { + color: var(--secondary-color); + margin-bottom: 15px; + font-size: 24px; +} - #startScreen .chart-link { - max-width: 250px; - } +.instructions p { + margin-bottom: 10px; + font-size: 16px; + line-height: 1.6; +} - #startScreen .chart-link a { - padding: 10px 20px; - font-size: 16px; - } +.instructions ul { + margin-left: 20px; + margin-bottom: 10px; +} - .settings { - padding: 20px 15px; - } +.instructions li { + margin-bottom: 5px; +} - .settings label { - font-size: 18px; +@keyframes pulse { + 0% { + box-shadow: 0 8px 0 var(--success-dark), 0 0 20px rgba(46, 204, 113, 0.5); } - - .settings select { - padding: 10px 15px; - font-size: 16px; + 50% { + box-shadow: 0 8px 0 var(--success-dark), 0 0 40px rgba(46, 204, 113, 0.8); } - - .hint-setting { - margin-left: 15px; + 100% { + box-shadow: 0 8px 0 var(--success-dark), 0 0 20px rgba(46, 204, 113, 0.5); } } -@media (max-width: 480px) { - h1 { - font-size: 2.8em; +@keyframes shake { + 0%, 100% { + transform: translateX(0); + } + 20%, 60% { + transform: translateX(-10px); + } + 40%, 80% { + transform: translateX(10px); } +} + +/* Game Area */ +#gameArea { + display: none; +} + +/* When game is active, JavaScript will override this */ +body.game-active #gameArea { + display: block; +} +body.game-active #startScreen { + display: none; +} + +@media (max-width: 768px) { + .game-container { + padding: 30px 20px; + } + .options { grid-template-columns: 1fr; + gap: 20px; } - + .option-button { - font-size: 24px; - min-height: 90px; + font-size: 30px; + padding: 20px 15px; + min-height: 110px; } - + + h1 { + font-size: 3.5em; + } + .start-button { - font-size: 22px; - padding: 15px 25px; - max-width: 220px; - margin-bottom: 20px; + font-size: 28px; + padding: 15px 40px; } - - #startScreen { - padding: 25px 15px; - margin: 20px 0; + + .score-container { + flex-direction: column; + align-items: center; } - - #startScreen p { - font-size: 20px; - margin-bottom: 25px; + + .score-widget { + margin-bottom: 15px; } - - #startScreen .chart-link { - max-width: 220px; + + .settings-toggle { + margin-left: 0; + margin-top: 10px; } +} - #startScreen .chart-link a { - padding: 8px 16px; - font-size: 15px; +@media (max-width: 480px) { + .game-container { + padding: 25px 15px; } - - .settings { - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 15px; + + .option-button { + font-size: 24px; + padding: 15px 10px; + min-height: 90px; } - + + h1 { + font-size: 2.8em; + } + + .start-button { + font-size: 24px; + padding: 12px 30px; + } + .hint-setting { margin-left: 0; margin-top: 10px; } -} - -/* Game Area */ -#gameArea { - display: none; -} - -/* When game is active, JavaScript will override this */ -body.game-active #gameArea { - display: block; -} - -body.game-active #startScreen { - display: none; }
\ No newline at end of file |
