summaryrefslogtreecommitdiff
path: root/styles.css
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2025-03-04 22:57:03 +0100
committerYuval Adam <_@yuv.al>2025-03-04 22:57:03 +0100
commit7594c37f28cdaf58a718d2e981000cb2a3a3e7e5 (patch)
treeb237cd8a15433c981279bec2150482de11799d73 /styles.css
parent812a1f0c307f23922e939107018191c39b770e24 (diff)
Split styles and redesign
Diffstat (limited to 'styles.css')
-rw-r--r--styles.css816
1 files changed, 816 insertions, 0 deletions
diff --git a/styles.css b/styles.css
new file mode 100644
index 0000000..d2891d5
--- /dev/null
+++ b/styles.css
@@ -0,0 +1,816 @@
+/* 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;
+}
+
+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 {
+ background: linear-gradient(145deg, var(--bg-dark) 0%, var(--bg-darker) 100%);
+ border-radius: var(--border-radius-lg);
+ padding: 40px;
+ box-shadow: var(--shadow-lg);
+ border: none;
+ position: relative;
+ overflow: hidden;
+}
+
+.game-container::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 5px;
+ background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
+ z-index: 1;
+}
+
+.options {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 30px;
+ 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;
+ border: none;
+ padding: 20px 50px;
+ font-size: 32px;
+ font-weight: 700;
+ border-radius: var(--border-radius-lg);
+ cursor: pointer;
+ transition: all var(--transition-normal);
+ box-shadow: var(--shadow-md);
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin-bottom: 30px;
+ width: 100%;
+ max-width: 300px;
+ position: relative;
+ z-index: 1;
+}
+
+.start-button:hover {
+ transform: translateY(-5px);
+ box-shadow: var(--shadow-lg);
+ background: linear-gradient(145deg, #e74c3c 0%, var(--accent-color) 100%);
+}
+
+.start-button:active {
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-sm);
+}
+
+.option-button {
+ background: linear-gradient(145deg, var(--primary-color), var(--primary-dark));
+ color: white;
+ border-radius: var(--border-radius-md);
+ font-size: 36px;
+ padding: 25px 15px;
+ box-shadow: 0 8px 0 var(--primary-dark),
+ var(--shadow-md);
+ min-height: 130px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ z-index: 1;
+}
+
+.option-button:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 13px 0 var(--primary-dark),
+ var(--shadow-lg);
+}
+
+.option-button:active {
+ transform: translateY(3px);
+ box-shadow: 0 5px 0 var(--primary-dark),
+ var(--shadow-sm);
+}
+
+.option-button.correct {
+ 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;
+}
+
+.option-button.incorrect {
+ background: linear-gradient(145deg, var(--accent-color), var(--accent-dark));
+ box-shadow: 0 8px 0 var(--accent-dark),
+ 0 0 30px rgba(231, 76, 60, 0.5);
+ animation: shake 0.5s;
+}
+
+.char-display {
+ font-size: 38px;
+ font-weight: bold;
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
+}
+
+.morse-hint {
+ display: block;
+ font-size: 18px;
+ margin-top: 10px;
+ color: var(--text-dim);
+ font-family: monospace;
+ letter-spacing: 2px;
+}
+
+.key-label {
+ position: absolute;
+ top: 8px;
+ right: 12px;
+ font-size: 14px;
+ color: var(--text-dim);
+ font-family: monospace;
+ background-color: rgba(0, 0, 0, 0.2);
+ padding: 2px 8px;
+ border-radius: 10px;
+}
+
+.key-pressed {
+ transform: translateY(3px) !important;
+ box-shadow: 0 5px 0 var(--primary-dark) !important;
+ 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;
+ font-size: 18px;
+ display: inline-block;
+}
+
+.chart-link a {
+ color: var(--primary-color);
+ text-decoration: none;
+ transition: all var(--transition-normal);
+ position: relative;
+}
+
+.chart-link 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;
+}
+
+.chart-link a:hover {
+ color: var(--secondary-color);
+}
+
+.chart-link a:hover::after {
+ transform: scaleX(1);
+ transform-origin: bottom left;
+ background-color: var(--secondary-color);
+}
+
+#startScreen {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: linear-gradient(145deg, var(--bg-dark) 0%, var(--bg-darker) 100%);
+ border-radius: var(--border-radius-lg);
+ padding: 40px 30px;
+ margin: 40px 0;
+ position: relative;
+ border: 2px dashed rgba(52, 152, 219, 0.3);
+ box-shadow: var(--shadow-md);
+}
+
+#startScreen::before {
+ content: '';
+ position: absolute;
+ left: 50%;
+ top: -2px;
+ transform: translateX(-50%);
+ width: 80%;
+ height: 4px;
+ background: linear-gradient(90deg, rgba(52, 152, 219, 0) 0%, rgba(52, 152, 219, 0.8) 50%, rgba(52, 152, 219, 0) 100%);
+ border-radius: 2px;
+}
+
+#startScreen p {
+ font-size: 28px;
+ font-weight: 600;
+ color: var(--text-light);
+ margin-bottom: 40px;
+ text-shadow: var(--text-shadow);
+}
+
+#startScreen .chart-link {
+ margin-top: 0;
+ width: 100%;
+ max-width: 300px;
+}
+
+#startScreen .chart-link a {
+ display: block;
+ width: 100%;
+ padding: 12px 25px;
+ background: linear-gradient(145deg, rgba(52, 152, 219, 0.2) 0%, rgba(52, 152, 219, 0.3) 100%);
+ border-radius: var(--border-radius-md);
+ color: var(--text-light);
+ font-size: 18px;
+ font-weight: 600;
+ text-decoration: none;
+ transition: all var(--transition-normal);
+ border: 1px solid rgba(52, 152, 219, 0.3);
+ box-shadow: var(--shadow-sm);
+ box-sizing: border-box;
+}
+
+#startScreen .chart-link a:hover {
+ background: linear-gradient(145deg, rgba(52, 152, 219, 0.3) 0%, rgba(52, 152, 219, 0.4) 100%);
+ transform: translateY(-3px);
+ box-shadow: var(--shadow-md);
+ color: var(--primary-color);
+ border-color: rgba(52, 152, 219, 0.5);
+}
+
+.score-container {
+ margin-bottom: 20px;
+ width: 100%;
+}
+
+.score-widget {
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: var(--border-radius-md);
+ padding: 15px;
+ box-shadow: var(--shadow-sm);
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.score-info {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-right: 15px;
+ min-width: 100px;
+}
+
+.score-label {
+ font-size: 18px;
+ margin-bottom: 5px;
+ color: var(--text-dim);
+}
+
+.score-value {
+ font-size: 24px;
+ font-weight: bold;
+ color: var(--secondary-color);
+}
+
+.score-tracker {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 5px;
+ max-width: 100%;
+ margin-top: 5px;
+}
+
+.score-dot {
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ margin: 2px;
+ transition: all 0.3s ease;
+}
+
+.score-dot.correct {
+ background-color: var(--success-color);
+ box-shadow: 0 0 5px rgba(46, 204, 113, 0.7);
+}
+
+.score-dot.incorrect {
+ background-color: var(--accent-color);
+ box-shadow: 0 0 5px rgba(231, 76, 60, 0.7);
+}
+
+.feedback {
+ height: 40px;
+ margin-top: 30px;
+ font-weight: bold;
+ font-size: 28px;
+ color: var(--secondary-color);
+ text-shadow: 0 0 10px rgba(243, 156, 18, 0.5);
+}
+
+.score {
+ font-size: 32px;
+ font-weight: bold;
+ color: var(--secondary-color);
+ margin-bottom: 30px;
+ text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.3),
+ 0 0 10px rgba(243, 156, 18, 0.3);
+}
+
+/* Settings */
+.settings {
+ background: linear-gradient(145deg, rgba(52, 73, 94, 0.7) 0%, rgba(44, 62, 80, 0.7) 100%);
+ padding: 25px;
+ border-radius: var(--border-radius-md);
+ margin-top: 30px;
+ font-size: 20px;
+ border: none;
+ box-shadow: var(--shadow-md);
+}
+
+.settings label {
+ font-size: 20px;
+ margin-right: 15px;
+ color: var(--primary-color);
+ font-weight: 600;
+}
+
+.settings select {
+ padding: 12px 20px;
+ font-size: 18px;
+ border-radius: var(--border-radius-sm);
+ border: 2px solid var(--primary-dark);
+ background-color: rgba(44, 62, 80, 0.7);
+ color: var(--text-light);
+ font-family: 'Poppins', sans-serif;
+ cursor: pointer;
+ box-shadow: var(--shadow-sm);
+ transition: all var(--transition-normal);
+}
+
+.settings select:hover {
+ border-color: var(--primary-color);
+ box-shadow: 0 0 10px rgba(52, 152, 219, 0.3);
+}
+
+.settings select:focus {
+ outline: none;
+ border-color: var(--secondary-color);
+ box-shadow: 0 0 15px rgba(243, 156, 18, 0.3);
+}
+
+.hint-setting {
+ display: inline-block;
+ margin-left: 30px;
+}
+
+.hint-setting input[type="checkbox"] {
+ width: 20px;
+ height: 20px;
+ vertical-align: middle;
+ cursor: pointer;
+ margin-right: 8px;
+}
+
+.chart-link a {
+ color: var(--primary-color);
+ text-decoration: none;
+ transition: all var(--transition-normal);
+}
+
+.chart-link a:hover {
+ color: var(--secondary-color);
+ text-decoration: underline;
+}
+
+@media (max-width: 768px) {
+ .container {
+ padding: 20px 15px;
+ }
+
+ h1 {
+ font-size: 3.5em;
+ }
+
+ .game-container {
+ padding: 30px 20px;
+ }
+
+ .options {
+ gap: 15px;
+ }
+
+ .option-button {
+ font-size: 28px;
+ padding: 20px 10px;
+ min-height: 110px;
+ }
+
+ .start-button {
+ font-size: 26px;
+ padding: 18px 30px;
+ max-width: 250px;
+ }
+
+ #startScreen {
+ padding: 30px 20px;
+ margin: 30px 0;
+ }
+
+ #startScreen p {
+ font-size: 24px;
+ margin-bottom: 30px;
+ }
+
+ #startScreen .chart-link {
+ max-width: 250px;
+ }
+
+ #startScreen .chart-link a {
+ padding: 10px 20px;
+ font-size: 16px;
+ }
+
+ .settings {
+ padding: 20px 15px;
+ }
+
+ .settings label {
+ font-size: 18px;
+ }
+
+ .settings select {
+ padding: 10px 15px;
+ font-size: 16px;
+ }
+
+ .hint-setting {
+ margin-left: 15px;
+ }
+}
+
+@media (max-width: 480px) {
+ h1 {
+ font-size: 2.8em;
+ }
+
+ .options {
+ grid-template-columns: 1fr;
+ }
+
+ .option-button {
+ font-size: 24px;
+ min-height: 90px;
+ }
+
+ .start-button {
+ font-size: 22px;
+ padding: 15px 25px;
+ max-width: 220px;
+ margin-bottom: 20px;
+ }
+
+ #startScreen {
+ padding: 25px 15px;
+ margin: 20px 0;
+ }
+
+ #startScreen p {
+ font-size: 20px;
+ margin-bottom: 25px;
+ }
+
+ #startScreen .chart-link {
+ max-width: 220px;
+ }
+
+ #startScreen .chart-link a {
+ padding: 8px 16px;
+ font-size: 15px;
+ }
+
+ .settings {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 15px;
+ }
+
+ .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