summaryrefslogtreecommitdiff
path: root/src/styles.css
diff options
context:
space:
mode:
Diffstat (limited to 'src/styles.css')
-rw-r--r--src/styles.css856
1 files changed, 822 insertions, 34 deletions
diff --git a/src/styles.css b/src/styles.css
index 50ebaea..b2a0e62 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -21,6 +21,11 @@
--shadow-lg: 0 15px 30px rgba(0, 0, 0, 0.2);
--transition-fast: 0.2s ease;
--transition-normal: 0.3s ease;
+ --card-bg: rgba(52, 73, 94, 0.6);
+ --card-border: rgba(255, 255, 255, 0.1);
+ --header-height: 70px;
+ --footer-height: 100px;
+ --glow-color: rgba(243, 156, 18, 0.6);
}
* {
@@ -34,6 +39,7 @@ body {
margin: 0;
padding: 0;
background: radial-gradient(ellipse at top, var(--bg-dark) 0%, var(--bg-darker) 100%);
+ background-attachment: fixed;
color: var(--text-light);
min-height: 100vh;
display: flex;
@@ -42,14 +48,31 @@ body {
justify-content: center;
font-size: 18px;
line-height: 1.6;
+ position: relative;
+ overflow-x: hidden;
+}
+
+body::before {
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: url('/img/morse-pattern.svg') repeat;
+ opacity: 0.03;
+ z-index: -1;
+ pointer-events: none;
}
.container {
- max-width: 900px;
+ max-width: 1000px;
margin: 0 auto;
padding: 30px 20px;
text-align: center;
width: 100%;
+ position: relative;
+ z-index: 1;
}
button {
@@ -63,6 +86,7 @@ button {
outline: none;
position: relative;
overflow: hidden;
+ box-shadow: var(--shadow-md);
}
button::after {
@@ -81,16 +105,44 @@ button:hover::after {
opacity: 1;
}
+button:active {
+ transform: translateY(2px);
+ box-shadow: var(--shadow-sm);
+}
+
.title-link {
text-decoration: none;
transition: all var(--transition-normal);
position: relative;
display: inline-block;
+ font-size: 3rem;
+ font-weight: 700;
+ margin-bottom: 1rem;
+ color: var(--text-light);
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
+ letter-spacing: 2px;
}
.title-link:hover {
color: var(--secondary-color);
- text-shadow: 0 0 15px rgba(243, 156, 18, 0.6);
+ text-shadow: 0 0 15px var(--glow-color);
+}
+
+.title-link::after {
+ content: "";
+ position: absolute;
+ bottom: -5px;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 0;
+ height: 3px;
+ background: var(--secondary-color);
+ transition: width var(--transition-normal);
+ box-shadow: 0 0 10px var(--glow-color);
+}
+
+.title-link:hover::after {
+ width: 80%;
}
.footer {
@@ -99,42 +151,12 @@ button:hover::after {
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;
+ background: linear-gradient(to top, rgba(26, 37, 48, 0.8), transparent);
+ backdrop-filter: blur(5px);
}
-/* Morse Hero Main Styles */
-
h1 {
font-size: 5.5em;
margin-top: 0.5rem;
@@ -910,4 +932,770 @@ body.game-active #startScreen {
transform: scaleX(1);
transform-origin: bottom left;
background-color: var(--secondary-color);
+}
+
+.option-button {
+ background: linear-gradient(145deg, var(--primary-color), var(--primary-dark));
+ color: white;
+ border-radius: var(--border-radius-md);
+ font-size: 36px;
+ padding: 20px;
+ margin: 10px;
+ width: calc(50% - 20px);
+ height: 120px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ overflow: hidden;
+ transition: all var(--transition-normal);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ box-shadow: var(--shadow-md), inset 0 1px rgba(255, 255, 255, 0.15);
+}
+
+.option-button:hover {
+ transform: translateY(-3px);
+ box-shadow: var(--shadow-lg), inset 0 1px rgba(255, 255, 255, 0.15);
+}
+
+.option-button:active {
+ transform: translateY(1px);
+ box-shadow: var(--shadow-sm), inset 0 1px rgba(255, 255, 255, 0.15);
+}
+
+.option-button.correct {
+ background: linear-gradient(145deg, var(--success-color), var(--success-dark));
+ animation: correct-pulse 1s infinite;
+}
+
+.option-button.incorrect {
+ background: linear-gradient(145deg, var(--accent-color), var(--accent-dark));
+ animation: incorrect-shake 0.5s;
+}
+
+/* Start screen styles */
+#startScreen {
+ max-width: 600px;
+ margin: 0 auto;
+ padding: 30px;
+ background: var(--card-bg);
+ border-radius: var(--border-radius-lg);
+ box-shadow: var(--shadow-lg);
+ border: 1px solid var(--card-border);
+ backdrop-filter: blur(10px);
+ animation: fadeIn 0.8s ease-out;
+}
+
+#startScreen p {
+ font-size: 1.3rem;
+ margin-bottom: 1.5rem;
+ color: var(--text-light);
+ line-height: 1.6;
+}
+
+.start-button {
+ background: linear-gradient(145deg, var(--secondary-color), var(--secondary-dark));
+ color: white;
+ font-size: 1.5rem;
+ padding: 15px 40px;
+ border-radius: var(--border-radius-md);
+ margin: 20px 0;
+ position: relative;
+ overflow: hidden;
+ transition: all var(--transition-normal);
+ box-shadow: var(--shadow-md), 0 0 15px rgba(243, 156, 18, 0.3);
+}
+
+.start-button:hover {
+ transform: translateY(-3px) scale(1.05);
+ box-shadow: var(--shadow-lg), 0 0 20px rgba(243, 156, 18, 0.5);
+}
+
+.start-button:active {
+ transform: translateY(1px);
+}
+
+.chart-link {
+ margin-top: 20px;
+}
+
+.chart-link a {
+ color: var(--text-light);
+ text-decoration: none;
+ font-weight: 600;
+ transition: all var(--transition-normal);
+ position: relative;
+ padding: 5px 10px;
+ border-radius: var(--border-radius-sm);
+}
+
+.chart-link a::after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background: var(--primary-color);
+ transform: scaleX(0);
+ transform-origin: right;
+ transition: transform var(--transition-normal);
+}
+
+.chart-link a:hover {
+ color: var(--primary-color);
+}
+
+.chart-link a:hover::after {
+ transform: scaleX(1);
+ transform-origin: left;
+}
+
+/* Game area styles */
+#gameArea {
+ animation: fadeIn 0.5s ease-out;
+}
+
+.game-container {
+ background: var(--card-bg);
+ border-radius: var(--border-radius-lg);
+ padding: 30px;
+ margin: 20px 0;
+ box-shadow: var(--shadow-lg);
+ border: 1px solid var(--card-border);
+ backdrop-filter: blur(10px);
+}
+
+/* Chart page styles */
+.chart-section {
+ background: var(--card-bg);
+ border-radius: var(--border-radius-lg);
+ padding: 30px;
+ margin: 30px 0;
+ box-shadow: var(--shadow-lg);
+ border: 1px solid var(--card-border);
+ backdrop-filter: blur(10px);
+ animation: fadeIn 0.5s ease-out;
+}
+
+.chart-section h2 {
+ margin-bottom: 20px;
+ color: var(--secondary-color);
+ font-weight: 600;
+ position: relative;
+ display: inline-block;
+}
+
+.chart-section h2::after {
+ content: "";
+ position: absolute;
+ bottom: -5px;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 50px;
+ height: 3px;
+ background: var(--secondary-color);
+ border-radius: 3px;
+}
+
+/* New animations */
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes correct-pulse {
+ 0% {
+ box-shadow: 0 0 0 0 rgba(46, 204, 113, 0.4);
+ }
+
+ 70% {
+ box-shadow: 0 0 0 15px rgba(46, 204, 113, 0);
+ }
+
+ 100% {
+ box-shadow: 0 0 0 0 rgba(46, 204, 113, 0);
+ }
+}
+
+@keyframes incorrect-shake {
+
+ 0%,
+ 100% {
+ transform: translateX(0);
+ }
+
+ 20%,
+ 60% {
+ transform: translateX(-5px);
+ }
+
+ 40%,
+ 80% {
+ transform: translateX(5px);
+ }
+}
+
+/* Media queries for responsiveness */
+@media (max-width: 768px) {
+ .title-link {
+ font-size: 2.5rem;
+ }
+
+ .option-button {
+ font-size: 28px;
+ height: 100px;
+ }
+
+ .chart-section {
+ padding: 20px;
+ }
+}
+
+@media (max-width: 480px) {
+ .title-link {
+ font-size: 2rem;
+ }
+
+ .option-button {
+ font-size: 24px;
+ height: 90px;
+ width: calc(50% - 10px);
+ margin: 5px;
+ }
+
+ .start-button {
+ font-size: 1.2rem;
+ padding: 12px 30px;
+ }
+}
+
+/* Hero content styles */
+.hero-content {
+ text-align: center;
+}
+
+.hero-content h2 {
+ font-size: 1.8rem;
+ margin-bottom: 1rem;
+ color: var(--secondary-color);
+ font-weight: 600;
+}
+
+.hero-content > p {
+ font-size: 1.2rem;
+ margin-bottom: 2rem;
+ max-width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* Feature grid */
+.feature-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+ margin: 30px 0;
+}
+
+.feature-item {
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: var(--border-radius-md);
+ padding: 20px;
+ transition: all var(--transition-normal);
+ border: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+.feature-item:hover {
+ transform: translateY(-5px);
+ box-shadow: var(--shadow-md);
+ background: rgba(255, 255, 255, 0.1);
+ border-color: rgba(255, 255, 255, 0.1);
+}
+
+.feature-icon {
+ font-size: 2rem;
+ margin-bottom: 10px;
+}
+
+.feature-item h3 {
+ font-size: 1.2rem;
+ margin-bottom: 10px;
+ color: var(--primary-color);
+}
+
+.feature-item p {
+ font-size: 0.9rem;
+ color: var(--text-dim);
+}
+
+/* CTA container */
+.cta-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 15px;
+ margin: 30px 0;
+}
+
+.button-morse {
+ display: block;
+ font-size: 0.8rem;
+ margin-top: 5px;
+ opacity: 0.8;
+}
+
+.how-to-play-button {
+ background: transparent;
+ color: var(--text-light);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ padding: 10px 20px;
+ border-radius: var(--border-radius-md);
+ font-size: 1rem;
+ transition: all var(--transition-normal);
+}
+
+.how-to-play-button:hover {
+ background: rgba(255, 255, 255, 0.1);
+ border-color: rgba(255, 255, 255, 0.3);
+}
+
+/* How to play section */
+.how-to-play {
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: var(--border-radius-md);
+ padding: 20px;
+ margin: 20px 0;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ animation: fadeIn 0.5s ease-out;
+}
+
+.how-to-play h3 {
+ font-size: 1.3rem;
+ margin-bottom: 15px;
+ color: var(--primary-color);
+}
+
+.how-to-play ol {
+ text-align: left;
+ padding-left: 30px;
+ margin-bottom: 20px;
+}
+
+.how-to-play li {
+ margin-bottom: 10px;
+ color: var(--text-light);
+}
+
+.morse-fact {
+ background: rgba(52, 152, 219, 0.1);
+ border-radius: var(--border-radius-sm);
+ padding: 15px;
+ border-left: 3px solid var(--primary-color);
+ text-align: left;
+}
+
+.morse-fact h4 {
+ color: var(--primary-color);
+ margin-bottom: 5px;
+ font-size: 1.1rem;
+}
+
+.morse-fact p {
+ font-size: 0.9rem;
+ color: var(--text-dim);
+}
+
+/* Game instructions */
+.game-instructions {
+ margin-bottom: 20px;
+ padding-bottom: 20px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.game-instructions p {
+ margin-bottom: 15px;
+}
+
+.replay-button {
+ background: linear-gradient(145deg, var(--primary-color), var(--primary-dark));
+ color: white;
+ padding: 8px 15px;
+ border-radius: var(--border-radius-sm);
+ font-size: 0.9rem;
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.replay-icon {
+ font-size: 1.2rem;
+}
+
+/* Settings styles */
+.settings {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ gap: 20px;
+ margin-top: 20px;
+ padding-top: 20px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.setting-group {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.reset-button {
+ background: linear-gradient(145deg, var(--accent-color), var(--accent-dark));
+ color: white;
+ padding: 8px 15px;
+ border-radius: var(--border-radius-sm);
+ font-size: 0.9rem;
+}
+
+.keyboard-tip {
+ margin-top: 20px;
+ font-size: 0.9rem;
+ color: var(--text-dim);
+ font-style: italic;
+}
+
+/* Enhanced footer */
+.footer {
+ margin-top: 60px;
+ padding: 40px 20px 20px;
+}
+
+.footer-content {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ gap: 30px;
+ margin-bottom: 30px;
+ text-align: left;
+}
+
+.footer-section {
+ flex: 1;
+ min-width: 250px;
+}
+
+.footer-section h3 {
+ font-size: 1.2rem;
+ margin-bottom: 15px;
+ color: var(--text-light);
+ position: relative;
+ display: inline-block;
+}
+
+.footer-section h3::after {
+ content: "";
+ position: absolute;
+ bottom: -5px;
+ left: 0;
+ width: 30px;
+ height: 2px;
+ background: var(--primary-color);
+}
+
+.footer-section p {
+ color: var(--text-dim);
+ line-height: 1.6;
+}
+
+.footer-section ul {
+ list-style: none;
+ padding: 0;
+}
+
+.footer-section li {
+ margin-bottom: 10px;
+}
+
+.footer-section a {
+ color: var(--primary-color);
+ text-decoration: none;
+ transition: all var(--transition-normal);
+ position: relative;
+}
+
+.footer-section a::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ transform: scaleX(0);
+ height: 1px;
+ bottom: -2px;
+ left: 0;
+ background-color: var(--primary-color);
+ transform-origin: bottom right;
+ transition: transform 0.3s ease-out;
+}
+
+.footer-section a:hover {
+ color: var(--secondary-color);
+}
+
+.footer-section a:hover::after {
+ transform: scaleX(1);
+ transform-origin: bottom left;
+}
+
+.footer-bottom {
+ padding-top: 20px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ text-align: center;
+}
+
+.footer-bottom p {
+ margin-bottom: 10px;
+}
+
+.footer-bottom a {
+ color: var(--primary-color);
+ text-decoration: none;
+ font-weight: 600;
+ transition: color var(--transition-normal);
+}
+
+.footer-bottom a:hover {
+ color: var(--secondary-color);
+}
+
+/* Media queries for responsiveness */
+@media (max-width: 768px) {
+ .feature-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .footer-content {
+ flex-direction: column;
+ }
+
+ .hero-content > p {
+ max-width: 100%;
+ }
+}
+
+/* Chart page specific styles */
+.page-intro {
+ text-align: center;
+ margin-bottom: 30px;
+}
+
+.page-intro h2 {
+ font-size: 2rem;
+ color: var(--secondary-color);
+ margin-bottom: 15px;
+ font-weight: 600;
+}
+
+.page-intro p {
+ font-size: 1.1rem;
+ max-width: 700px;
+ margin: 0 auto;
+ color: var(--text-dim);
+}
+
+.morse-info-card {
+ background: var(--card-bg);
+ border-radius: var(--border-radius-lg);
+ padding: 30px;
+ margin: 30px 0;
+ box-shadow: var(--shadow-lg);
+ border: 1px solid var(--card-border);
+ backdrop-filter: blur(10px);
+ animation: fadeIn 0.5s ease-out;
+ text-align: left;
+}
+
+.morse-info-card h3 {
+ font-size: 1.5rem;
+ margin-bottom: 15px;
+ color: var(--primary-color);
+}
+
+.morse-info-card p {
+ line-height: 1.7;
+ margin-bottom: 20px;
+}
+
+.morse-tips {
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: var(--border-radius-md);
+ padding: 20px;
+ border-left: 3px solid var(--secondary-color);
+}
+
+.morse-tips h4 {
+ color: var(--secondary-color);
+ margin-bottom: 15px;
+ font-size: 1.2rem;
+}
+
+.morse-tips ul {
+ padding-left: 20px;
+}
+
+.morse-tips li {
+ margin-bottom: 10px;
+ color: var(--text-dim);
+}
+
+.morse-history {
+ background: var(--card-bg);
+ border-radius: var(--border-radius-lg);
+ padding: 30px;
+ margin: 30px 0;
+ box-shadow: var(--shadow-lg);
+ border: 1px solid var(--card-border);
+ backdrop-filter: blur(10px);
+ animation: fadeIn 0.5s ease-out;
+ text-align: left;
+}
+
+.morse-history h3 {
+ font-size: 1.5rem;
+ margin-bottom: 20px;
+ color: var(--primary-color);
+ text-align: center;
+}
+
+.history-content {
+ display: flex;
+ flex-direction: column;
+ gap: 15px;
+}
+
+.history-content p {
+ line-height: 1.7;
+ color: var(--text-dim);
+}
+
+.morse-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
+ gap: 15px;
+ margin: 20px 0;
+}
+
+.morse-item {
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: var(--border-radius-md);
+ padding: 15px 10px;
+ cursor: pointer;
+ transition: all var(--transition-normal);
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ overflow: hidden;
+}
+
+.morse-item:hover {
+ transform: translateY(-3px);
+ background: rgba(255, 255, 255, 0.1);
+ box-shadow: var(--shadow-md);
+ border-color: rgba(255, 255, 255, 0.1);
+}
+
+.morse-item.playing {
+ background: rgba(52, 152, 219, 0.2);
+ border-color: var(--primary-color);
+ box-shadow: 0 0 15px rgba(52, 152, 219, 0.3);
+ animation: pulse 1s infinite;
+}
+
+.morse-item .character {
+ font-size: 1.8rem;
+ font-weight: 600;
+ margin-bottom: 5px;
+}
+
+.morse-item .morse {
+ font-size: 1rem;
+ color: var(--text-dim);
+ letter-spacing: 1px;
+}
+
+.back-link {
+ margin: 40px 0;
+ text-align: center;
+}
+
+.back-link a {
+ display: inline-block;
+ background: linear-gradient(145deg, var(--primary-color), var(--primary-dark));
+ color: white;
+ padding: 12px 25px;
+ border-radius: var(--border-radius-md);
+ text-decoration: none;
+ font-weight: 600;
+ transition: all var(--transition-normal);
+ box-shadow: var(--shadow-md);
+}
+
+.back-link a:hover {
+ transform: translateY(-3px);
+ box-shadow: var(--shadow-lg);
+}
+
+.back-link a:active {
+ transform: translateY(1px);
+ box-shadow: var(--shadow-sm);
+}
+
+@media (max-width: 768px) {
+ .morse-grid {
+ grid-template-columns: repeat(auto-fill, minmax(70px, 1fr));
+ gap: 10px;
+ }
+
+ .morse-item .character {
+ font-size: 1.5rem;
+ }
+
+ .morse-item .morse {
+ font-size: 0.9rem;
+ }
+
+ .morse-info-card,
+ .morse-history,
+ .chart-section {
+ padding: 20px;
+ }
+}
+
+@media (max-width: 480px) {
+ .morse-grid {
+ grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
+ gap: 8px;
+ }
+
+ .morse-item {
+ padding: 10px 5px;
+ }
+
+ .morse-item .character {
+ font-size: 1.3rem;
+ }
+
+ .morse-item .morse {
+ font-size: 0.8rem;
+ }
} \ No newline at end of file