Glow
+ + + -Forgot Password
-Enter your email address and we’ll send you reset instructions.
+ +Reset Your Password
+Enter your email to receive a password reset link.
+diff --git a/users_microservice/src/main/java/com/users/application/controllers/PagesController.java b/users_microservice/src/main/java/com/users/application/controllers/PagesController.java index 495d2911..5c694b68 100644 --- a/users_microservice/src/main/java/com/users/application/controllers/PagesController.java +++ b/users_microservice/src/main/java/com/users/application/controllers/PagesController.java @@ -15,7 +15,7 @@ public String index(){ @GetMapping("/sign-up") public String signupPage() { - return "home/sign-up"; // looks for signup.html in src/main/resources/templates + return "home/registration"; // looks for signup.html in src/main/resources/templates } @GetMapping("/reset") diff --git a/users_microservice/src/main/resources/static/css/styles.css b/users_microservice/src/main/resources/static/css/styles.css new file mode 100644 index 00000000..88bebf3e --- /dev/null +++ b/users_microservice/src/main/resources/static/css/styles.css @@ -0,0 +1,213 @@ +:root { + --black: #000000; + --dark-grey: #111111; + --dark-orange: #e65100; + --light-orange: #ffb74d; + --light-green: #81c784; + --focus-green: #4caf50; + --pink: #ff69b4; + --light-grey: #f8f9fa; + --medium-grey: #e9ecef; + --nav-height: 70px; +} + +body { + background-color: #ffffff; + color: #111111; + font-family: 'Space Grotesk', system-ui, sans-serif; + line-height: 1.6; + scroll-behavior: smooth; + padding-top: var(--nav-height); +} + +section { + padding-top: 3.5rem; + padding-bottom: 4rem; +} + +.section-grey, +.section-medium { + border: 2px solid var(--pink); + border-radius: 12px; + background-color: var(--light-grey); + margin: 0 auto 2rem auto; + max-width: 1400px; +} + +.section-medium { + background-color: var(--medium-grey); +} + +.card { + background-color: #ffffff; + border: 2px solid var(--pink) !important; + border-radius: 10px; + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.card:hover { + transform: translateY(-6px); + box-shadow: 0 12px 24px rgba(255,105,180,0.25); +} + +.btn-black, +.btn-primary-custom { + background-color: var(--black); + color: #ffffff; + border: 2px solid var(--black); + font-weight: 600; + transition: all 0.3s ease; +} + +.btn-black:hover, +.btn-primary-custom:hover { + background-color: var(--light-orange); + color: #222222; + border-color: var(--light-orange); + transform: translateY(-2px); + box-shadow: 0 8px 20px rgba(255,183,77,0.4); +} + +.btn-login { + background-color: #ffffff; + color: var(--dark-grey); + border: 2px solid var(--dark-grey); + font-weight: 500; + transition: all 0.3s ease; + padding: 0.375rem 1rem; +} + +.btn-login:hover { + background-color: var(--dark-orange); + color: white; + border-color: var(--dark-orange); + transform: translateY(-2px); +} + +.btn-learn-more { + background-color: var(--light-orange); + color: white; + border: 2px solid var(--focus-green); + font-weight: 600; + transition: all 0.3s ease; + box-shadow: 0 4px 12px rgba(129, 199, 132, 0.25); +} + +.btn-learn-more:hover { + background-color: #ff9800; + border-color: #388e3c; + color: white; + transform: translateY(-3px) scale(1.05); + box-shadow: 0 12px 28px rgba(76, 175, 80, 0.35); +} + +.btn-learn-more:focus { + outline: none; + box-shadow: 0 0 0 0.3rem rgba(76, 175, 80, 0.4); +} + +.nav-link { + color: var(--black) !important; + font-weight: 500; + position: relative; + padding-bottom: 0.6rem; + transition: color 0.25s ease; +} + +.nav-link:hover, +.nav-link.active { + color: var(--black) !important; +} + +.nav-link::after { + content: ''; + position: absolute; + bottom: 0; + left: 5%; + width: 0; + height: 3px; + background-color: var(--light-green); + border-radius: 3px; + transition: width 0.35s ease, left 0.35s ease; +} + +.nav-link.active::after, +.nav-link:hover::after { + width: 90%; + left: 5%; +} + +.form-control:focus, +.form-control:active { + border-color: var(--focus-green) !important; + box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.25) !important; + outline: none; +} + +.form-label { + transition: color 0.2s ease; +} + +.form-group:focus-within .form-label { + color: var(--focus-green) !important; + font-weight: 500; +} + +h1, h2, h3, h4 { + font-weight: 700; + color: var(--black); +} + +nav { + border-bottom: 3px solid var(--pink); + background-color: #ffffff; +} + +.hero { + min-height: 70vh; + display: flex; + align-items: center; + border-bottom: 4px solid var(--pink); + margin-bottom: 3rem; + padding: 5rem 0 4rem; + background-color: #fff; +} + +.hero-text h1 { + color: var(--dark-orange); + font-size: 4.5rem; + line-height: 1.1; +} + +.hero-img img { + max-width: 100%; + height: auto; + border-radius: 16px; + border: 3px solid var(--pink); + box-shadow: 0 12px 32px rgba(0,0,0,0.15); +} + +@media (max-width: 991px) { + .hero-text { + text-align: center; + margin-bottom: 3rem; + } + .hero-img { + text-align: center; + } +} + +.feature-img { + max-height: 160px; + object-fit: cover; + border-radius: 8px; + border: 1px solid var(--pink); + margin-bottom: 1.25rem; +} + +footer { + background-color: var(--light-grey); + border-top: 4px solid var(--pink); + padding: 3rem 0 2rem; + color: var(--black); +} \ No newline at end of file diff --git a/users_microservice/src/main/resources/static/css/templatemo-606-string-master.css b/users_microservice/src/main/resources/static/css/templatemo-606-string-master.css deleted file mode 100644 index 87cdf00d..00000000 --- a/users_microservice/src/main/resources/static/css/templatemo-606-string-master.css +++ /dev/null @@ -1,1733 +0,0 @@ -@charset "utf-8"; -/* CSS Document - -TemplateMo 606 String Master - -https://templatemo.com/tm-606-string-master - -*/ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - --bg-dark: darkblue; - --bg-card: seagreen; - --bg-elevated: #242424; - --accent: #f59e0b; - --accent-light: #fbbf24; - --accent-dark: #d97706; - --text-primary: orange; - --text-secondary: azure; - --text-muted: White; - --border: #2e2e2e; -} - -html { - scroll-behavior: smooth; -} - -body { - font-family: 'Space Grotesk', sans-serif; - background: var(--bg-white); - color: var(--text-primary); - line-height: 1.6; -} -/* Centering via container */ -.form-container { - display: flex; - justify-content: center; - align-items: center; - height: 46vh; /* full viewport height */ -} - - -.contact-form { - - background-color: forestgreen; - border: 2px solid orange; - padding: 20px; - border-radius: 8px; - width: 550px; - box-shadow: 0 4px 6px rgba(0,0,0,0.1); -} - -.contact-form h2 { - text-align: center; - margin-bottom: 20px; - color: #333; -} - -.contact-form label { - display: block; - margin-bottom: 5px; - font-weight: bold; - color: white; -} - -.contact-form input, -.contact-form textarea { - width: 100%; - padding: 8px; - margin-bottom: 15px; - border: 1px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - height:57px; - font-size:20px; -} - -.contact-form button { - width: 100%; - padding: 10px; - background-color: orange; - border: none; - border-radius: 4px; - color: white; - font-size: 26px; - cursor: pointer; - height:63px; -} - -.contact-form button:hover { - background-color: darkorange; -} - -/* Popup overlay */ -.popup { - display: none; /* hidden by default */ - position: fixed; - top: 0; left: 0; - width: 100%; height: 100%; - background: rgba(0,0,0,0.5); /* semi-transparent background */ - justify-content: center; - align-items: center; - z-index: 999; -} - -/* Popup box */ -.popup-content { - background: #ffffff; - border: 3px solid orange; - border-radius: 8px; - padding: 20px; - width: 500px; - height: 200px; - text-align: center; - box-shadow: 0 4px 10px rgba(0,0,0,0.3); - color: forestgreen; -} - -.error-message { - color: red; - font-weight: bold; -} - -.input-error { - border: 2px solid red !important; -} - - -.ok-btn { - margin-top: 20px; - padding: 12px 30px; - background: orange; /* vibrant orange background */ - border: none; - border-radius: 25px; /* pill-shaped button */ - color: white; /* white text */ - font-size: 16px; - font-weight: bold; - cursor: pointer; - box-shadow: 0 4px 6px rgba(0,0,0,0.2); /* subtle shadow */ - transition: all 0.3s ease; /* smooth hover effect */ -} - -.ok-btn:hover { - background: darkorange; /* darker orange on hover */ - transform: scale(1.05); /* slight zoom effect */ -} - -.ok-btn:active { - transform: scale(0.95); /* press-down effect */ -} -/* Slider viewport */ -.slider { - position: relative; - height: 387px; - width: 526px; /* adjust as needed */ - overflow: hidden; /* show only one slide at a time */ - margin: auto; - border: 3px solid orange; - border-radius: 8px; -} - -/* Slides strip */ -.slides { - display: flex; /* lay images in a row */ - transition: transform 1s ease-in-out; /* smooth slide */ -} - -/* Each image occupies exactly one viewport */ -.slides img { - flex: 0 0 100%; /* each slide = 100% of slider width */ - width: 100%; - height: 100%; - object-fit: cover; /* fill nicely without distortion */ - display: block; /* avoid inline spacing issues */ -} - -/* Navigation buttons */ -.prev, .next { - position: absolute; - top: 50%; - transform: translateY(-50%); - background: green; - color: white; - border: none; - padding: 10px 14px; - cursor: pointer; - font-size: 18px; - border-radius: 50%; - z-index: 2; -} - -.prev { left: 10px; } -.next { right: 10px; } - -.prev:hover, .next:hover { - background: darkgreen; -} - -/* Navigation */ -nav { - position: fixed; - top: 0; - left: 0; - right: 0; - z-index: 1000; - background: rgba(13, 13, 13, 0.9); - backdrop-filter: blur(20px); - border-bottom: 1px solid var(--border); -} - -.nav-container { - max-width: 1200px; - margin: 0 auto; - padding: 1rem 2rem; - display: flex; - justify-content: space-between; - align-items: center; -} - -.logo { - font-size: 1.5rem; - font-weight: 700; - color: var(--text-primary); - text-decoration: none; - display: flex; - align-items: center; - gap: 0.5rem; - - -} - -.logo-img{ -width: 110px; - height: 110px; - display: inline-block; - -} -.logo-img2{ -width: 750px; - height: 750px; - display: inline-block; - -} - -.logo-icon { - width: 32px; - height: 32px; - background: var(--accent); - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; -} - -.nav-links { - display: flex; - gap: 2rem; - list-style: none; -} - -.nav-links a { - color: burlywood; - text-decoration: none; - font-size: 0.95rem; - font-weight: 500; - transition: color 0.2s; -} - -.nav-links a:hover { - color: var(--accent); -} - -.nav-cta { - background: var(--accent); - color: white; - padding: 0.6rem 1.5rem; - border-radius: 8px; - text-decoration: none; - font-weight: 600; - font-size: 0.9rem; - transition: all 0.2s; -} - -.nav-cta span { - display: inline; - background: transparent; - padding: 0; -} - -.nav-cta:hover { - background: var(--accent-light); - transform: translateY(-1px); -} - -/* Hero Section */ -.hero { - /* min-height: 100vh; */ - /* Uncomment for full-screen hero */ - display: flex; - align-items: center; - padding: 8rem 2rem 4rem; - position: relative; - overflow: hidden; -} - -.hero::before { - content: ''; - position: absolute; - top: -50%; - right: -20%; - width: 80%; - height: 150%; - background: radial-gradient(ellipse, rgba(245, 158, 11, 0.08) 0%, transparent 70%); - pointer-events: none; -} - -.hero-container { - max-width: 1200px; - margin: 0 auto; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - align-items: center; -} - -.hero-content { - position: relative; - z-index: 1; -} - -.hero-badge { - display: inline-flex; - align-items: center; - gap: 0.5rem; - background: var(--bg-card); - border: 1px solid var(--border); - padding: 0.5rem 1rem; - border-radius: 100px; - font-size: 0.85rem; - color: var(--text-secondary); - margin-bottom: 1.5rem; -} - -.hero-badge span { - color: var(--accent); -} - -.hero h1 { - font-size: clamp(2.5rem, 5vw, 4rem); - font-weight: 700; - line-height: 1.1; - margin-bottom: 1.5rem; - letter-spacing: -0.02em; - color: green; - margin: 32px 0px; - -} - -.hero h1 .highlight { - color: var(--accent); -} - -.hero-description { - font-size: 1.15rem; - color: var(--text-secondary); - margin-bottom: 2rem; - max-width: 480px; - color: black; - -} - -.hero-buttons { - display: flex; - gap: 1rem; - margin-bottom: 3rem; -} - -.btn-primary { - background: var(--accent); - color: white; - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; -} - -.btn-primary:hover { - background: var(--accent-light); - transform: translateY(-2px); - box-shadow: 0 10px 30px rgba(245, 158, 11, 0.3); -} - -.btn-secondary { - background: transparent; - color: var(--text-primary); - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - border: 1px solid var(--border); - transition: all 0.2s; -} - -.btn-secondary:hover { - border-color: var(--text-secondary); - background: var(--bg-card); -} - -.hero-stats { - display: flex; - gap: 3rem; -} - -.stat { - text-align: left; -} - -.stat-value { - font-size: 2rem; - font-weight: 700; - color: var(--text-primary); -} - -.stat-label { - font-size: 0.85rem; - color: black; -} - -/* Guitar Section */ -.guitar-wrapper { - position: relative; - z-index: 1; - height:387px; -} - -.guitar-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 20px; - padding: 1.5rem; - box-shadow: 0 25px 50px rgba(0, 0, 0, 0.5); -} - -.guitar-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; - padding-bottom: 1rem; - border-bottom: 1px solid var(--border); -} - -.guitar-title { - font-size: 0.9rem; - font-weight: 600; - color: var(--text-secondary); -} - -.guitar-controls { - display: flex; - gap: 0.5rem; -} - -.chord-btn { - background: var(--bg-elevated); - border: 1px solid var(--border); - color: var(--text-primary); - padding: 0.4rem 0.8rem; - border-radius: 6px; - font-size: 0.8rem; - font-family: inherit; - font-weight: 500; - cursor: pointer; - transition: all 0.15s; -} - -.chord-btn:hover { - background: var(--accent); - color: var(--bg-dark); - border-color: var(--accent); -} - -.chord-btn.active { - background: var(--accent); - color: var(--bg-dark); - border-color: var(--accent); -} - -/* Mini Guitar Fretboard */ -.guitar-neck { - position: relative; - overflow: hidden; - border-radius: 8px; -} - -.fretboard { - background: - repeating-linear-gradient(90deg, - transparent 0px, - rgba(60, 30, 20, 0.15) 1px, - transparent 2px, - transparent 6px), - linear-gradient(180deg, - #3d2517 0%, - #2a1810 20%, - #1f120b 50%, - #2a1810 80%, - #3d2517 100%); - border-radius: 6px; - border: 3px solid #1a0f08; - border-top: none; -} - -.nut { - height: 10px; - background: linear-gradient(180deg, - #f5f5dc 0%, - #d4cba8 50%, - #c9c098 100%); - border-radius: 6px 6px 0 0; -} - -.fretboard-grid { - display: grid; - grid-template-columns: repeat(8, 1fr); - grid-template-rows: repeat(6, 32px); - position: relative; -} - -.string-labels { - position: absolute; - left: -28px; - top: 0; - height: calc(6 * 32px); - display: flex; - flex-direction: column; -} - -.string-label { - height: 32px; - display: flex; - align-items: center; - justify-content: center; - font-size: 0.7rem; - color: var(--text-muted); - font-weight: 500; -} - -.fret { - position: relative; - border-right: 2px solid #c0a080; - border-bottom: 1px solid rgba(200, 200, 200, 0.4); - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.1s; -} - -.fret:hover { - background: rgba(245, 158, 11, 0.15); -} - -.fret::after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - pointer-events: none; -} - -/* String thickness - thicker for lower strings */ -.fret[data-string="0"]::after { - height: 1px; - background: linear-gradient(90deg, - rgba(200, 180, 160, 0.4), - rgba(240, 220, 200, 0.7), - rgba(200, 180, 160, 0.4)); -} - -.fret[data-string="1"]::after { - height: 1px; - background: linear-gradient(90deg, - rgba(200, 180, 160, 0.4), - rgba(240, 220, 200, 0.7), - rgba(200, 180, 160, 0.4)); -} - -.fret[data-string="2"]::after { - height: 2px; - background: linear-gradient(90deg, - rgba(190, 170, 150, 0.5), - rgba(230, 210, 190, 0.8), - rgba(190, 170, 150, 0.5)); -} - -.fret[data-string="3"]::after { - height: 2px; - background: linear-gradient(90deg, - rgba(180, 160, 140, 0.5), - rgba(220, 200, 180, 0.8), - rgba(180, 160, 140, 0.5)); -} - -.fret[data-string="4"]::after { - height: 3px; - background: linear-gradient(90deg, - rgba(160, 140, 120, 0.5), - rgba(200, 180, 160, 0.85), - rgba(160, 140, 120, 0.5)); - box-shadow: 0 0 2px rgba(200, 180, 160, 0.3); -} - -.fret[data-string="5"]::after { - height: 4px; - background: linear-gradient(90deg, - rgba(150, 130, 110, 0.5), - rgba(190, 170, 150, 0.9), - rgba(150, 130, 110, 0.5)); - box-shadow: 0 0 3px rgba(190, 170, 150, 0.4); -} - -.note-marker { - width: 18px; - height: 18px; - background: var(--accent); - border-radius: 50%; - display: none; - align-items: center; - justify-content: center; - font-size: 0.5rem; - font-weight: 700; - color: var(--bg-dark); - z-index: 2; - box-shadow: 0 2px 8px rgba(245, 158, 11, 0.5); -} - -.note-marker.show { - display: flex; -} - -.note-marker.playing { - animation: notePulse 0.3s ease; -} - -@keyframes notePulse { - 0% { - transform: scale(1); - } - - 50% { - transform: scale(1.3); - } - - 100% { - transform: scale(1); - } -} -.contact-form input:focus, -.contact-form textarea:focus { - border: 2px solid orange; /* green border when active */ - outline: none; /* remove default browser outline */ -} - -.fret-marker { - position: absolute; - width: 8px; - height: 8px; - background: rgba(255, 255, 255, 0.15); - border-radius: 50%; - pointer-events: none; -} - -.guitar-footer { - margin-top: 1rem; - padding-top: 1rem; - border-top: 1px solid var(--border); - display: flex; - flex-direction: column; - gap: 0.75rem; -} - -.guitar-footer-row { - display: flex; - justify-content: space-between; - align-items: center; -} - -.guitar-hint { - font-size: 0.75rem; - color: var(--text-muted); -} - -.footer-controls { - display: flex; - align-items: center; - gap: 1rem; -} - -.clear-btn { - background: var(--bg-elevated); - border: 1px solid var(--border); - color: var(--text-secondary); - padding: 0.3rem 0.6rem; - border-radius: 5px; - font-size: 0.7rem; - font-family: inherit; - cursor: pointer; - transition: all 0.15s; -} - -.clear-btn:hover { - background: var(--border); - color: var(--text-primary); -} - -.sound-toggle { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.8rem; - color: var(--text-secondary); -} - -.toggle-switch { - width: 36px; - height: 20px; - background: var(--bg-elevated); - border-radius: 10px; - position: relative; - cursor: pointer; - transition: background 0.2s; -} - -.toggle-switch.active { - background: var(--accent); -} - -.toggle-switch::after { - content: ''; - position: absolute; - width: 16px; - height: 16px; - background: var(--text-primary); - border-radius: 50%; - top: 2px; - left: 2px; - transition: transform 0.2s; -} - -.toggle-switch.active::after { - transform: translateX(16px); -} - -/* Song Player */ -.song-player { - display: flex; - align-items: center; - gap: 0.75rem; - background: var(--bg-elevated); - border-radius: 8px; - padding: 0.5rem 0.75rem; -} - -.play-btn { - width: 32px; - height: 32px; - background: var(--accent); - border: none; - border-radius: 50%; - color: var(--bg-dark); - font-size: 0.9rem; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.15s; - flex-shrink: 0; -} - -.play-btn:hover { - background: var(--accent-light); - transform: scale(1.05); -} - -.play-btn.playing { - background: var(--accent-dark); -} - -.song-info { - flex: 1; - min-width: 0; -} - -.song-title { - font-size: 0.75rem; - font-weight: 600; - color: var(--text-primary); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.song-progress { - width: 100%; - height: 3px; - background: var(--border); - border-radius: 2px; - margin-top: 4px; - overflow: hidden; -} - -.song-progress-bar { - height: 100%; - background: var(--accent); - width: 0%; - transition: width 0.1s linear; -} - -.song-select { - background: var(--bg-dark); - border: 1px solid var(--border); - color: var(--text-secondary); - padding: 0.3rem 0.5rem; - border-radius: 5px; - font-size: 0.7rem; - font-family: inherit; - cursor: pointer; -} - -.song-select:focus { - outline: none; - border-color: var(--accent); -} - -/* Features Section */ -.features { - padding: 6rem 2rem; - background: var(--bg-card); -} - -.section-container { - max-width: 1200px; - margin: 0 auto; -} - -.section-header { - text-align: center; - margin-bottom: 4rem; -} - -.section-label { - font-size: 0.85rem; - color: var(--accent); - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.1em; - margin-bottom: 1rem; -} - -.section-title { - font-size: clamp(2rem, 4vw, 3rem); - font-weight: 700; - margin-bottom: 1rem; - letter-spacing: -0.02em; -} - -.section-description { - font-size: 1.1rem; - color: black; - max-width: 600px; - margin: 0 auto; -} - -.features-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 2rem; -} - -.feature-card { - background: var(--bg-dark); - border: 1px solid var(--border); - border-radius: 16px; - padding: 2rem; - transition: all 0.3s; -} - -.feature-card:hover { - border-color: var(--accent); - transform: translateY(-4px); -} - -.feature-icon { - width: 56px; - height: 56px; - background: var(--bg-elevated); - border-radius: 14px; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1.5rem; - color: var(--accent); - transition: all 0.3s; -} - -.feature-card:hover .feature-icon { - background: var(--accent); - color: var(--bg-dark); -} - -.feature-card h3 { - font-size: 1.25rem; - font-weight: 600; - margin-bottom: 0.75rem; -} - -.feature-card p { - color: var(--text-secondary); - font-size: 0.95rem; -} - -/* Pricing Section */ -.pricing { - padding: 6rem 2rem; -} - -.billing-toggle { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; - margin-bottom: 3rem; - background: var(--bg-card); - padding: 0.5rem; - border-radius: 12px; - width: fit-content; - margin-left: auto; - margin-right: auto; - border: 1px solid var(--border); -} - -.billing-option { - padding: 0.75rem 1.5rem; - border-radius: 8px; - font-size: 0.9rem; - font-weight: 500; - color: var(--text-secondary); - cursor: pointer; - transition: all 0.2s; - position: relative; - background: transparent; - border: none; - font-family: inherit; -} - -.billing-option:hover { - color: var(--text-primary); -} - -.billing-option.active { - background: var(--accent); - color: var(--bg-dark); -} - -.billing-option .discount-badge { - position: absolute; - top: -8px; - right: -8px; - background: #22c55e; - color: #fff; - font-size: 0.65rem; - font-weight: 700; - padding: 0.2rem 0.4rem; - border-radius: 4px; -} - -.pricing-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 2rem; -} - -.pricing-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 20px; - padding: 2.5rem; - position: relative; - transition: all 0.3s; -} - -.pricing-card:hover { - transform: translateY(-4px); -} - -.pricing-card.featured { - border-color: var(--accent); - box-shadow: 0 0 40px rgba(245, 158, 11, 0.15); -} - -.pricing-card.featured::before { - content: 'Most Popular'; - position: absolute; - top: -12px; - left: 50%; - transform: translateX(-50%); - background: var(--accent); - color: var(--bg-dark); - padding: 0.3rem 1rem; - border-radius: 100px; - font-size: 0.75rem; - font-weight: 600; -} - -.pricing-name { - font-size: 1.1rem; - font-weight: 600; - color: var(--text-secondary); - margin-bottom: 0.5rem; -} - -.pricing-price { - font-size: 3rem; - font-weight: 700; - margin-bottom: 0.25rem; - display: flex; - align-items: baseline; - gap: 0.25rem; -} - -.pricing-price .currency { - font-size: 1.5rem; - font-weight: 600; -} - -.pricing-price .period { - font-size: 1rem; - font-weight: 400; - color: var(--text-muted); -} - -.pricing-billed { - font-size: 0.85rem; - color: var(--text-muted); - margin-bottom: 0.5rem; - min-height: 1.2rem; -} - -.pricing-savings { - display: inline-block; - background: rgba(34, 197, 94, 0.15); - color: #22c55e; - font-size: 0.8rem; - font-weight: 600; - padding: 0.25rem 0.75rem; - border-radius: 100px; - margin-bottom: 1rem; - min-height: 1.5rem; -} - -.pricing-savings:empty { - visibility: hidden; -} - -.pricing-description { - color: var(--text-muted); - font-size: 0.9rem; - margin-bottom: 2rem; - padding-bottom: 2rem; - border-bottom: 1px solid var(--border); -} - -.pricing-features { - list-style: none; - margin-bottom: 2rem; -} - -.pricing-features li { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 0.5rem 0; - color: var(--text-secondary); - font-size: 0.95rem; -} - -.pricing-features li::before { - content: '✓'; - color: var(--accent); - font-weight: 700; -} - -.pricing-btn { - display: block; - text-align: center; - padding: 1rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - transition: all 0.2s; -} - -.pricing-card .pricing-btn { - background: var(--bg-elevated); - color: var(--text-primary); - border: 1px solid var(--border); -} - -.pricing-card .pricing-btn:hover { - background: var(--text-primary); - color: var(--bg-dark); -} - -.pricing-card.featured .pricing-btn { - background: var(--accent); - color: var(--bg-dark); - border: none; -} - -.pricing-card.featured .pricing-btn:hover { - background: var(--accent-light); -} - -/* Instructors Section */ -.instructors { - padding: 6rem 2rem; - background: var(--bg-card); -} - -.instructors-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 2rem; -} - -.instructor-card { - text-align: center; -} - -.instructor-image { - width: 160px; - height: 160px; - border-radius: 50%; - margin: 0 auto 1.5rem; - border: 4px solid var(--border); - transition: all 0.3s; - overflow: hidden; - background: var(--bg-elevated); -} - -.instructor-image img { - width: 100%; - height: 100%; - object-fit: cover; - filter: grayscale(20%); - transition: filter 0.3s; -} - -.instructor-card:hover .instructor-image { - border-color: var(--accent); - box-shadow: 0 0 20px rgba(245, 158, 11, 0.3); -} - -.instructor-card:hover .instructor-image img { - filter: grayscale(0%); -} - -.instructor-name { - font-size: 1.1rem; - font-weight: 600; - margin-bottom: 0.25rem; -} - -.instructor-role { - color: var(--accent); - font-size: 0.85rem; - font-weight: 500; - margin-bottom: 0.5rem; -} - -.instructor-bio { - color: var(--text-muted); - font-size: 0.85rem; -} - -/* Testimonials */ -.testimonials { - padding: 6rem 2rem; -} - -.testimonials-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 2rem; -} - -.testimonial-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 16px; - padding: 2rem; -} - -.testimonial-stars { - color: var(--accent); - font-size: 1rem; - margin-bottom: 1rem; -} - -.testimonial-text { - color: var(--text-secondary); - font-size: 1rem; - line-height: 1.7; - margin-bottom: 1.5rem; -} - -.testimonial-author { - display: flex; - align-items: center; - gap: 1rem; -} - -.testimonial-avatar { - width: 64px; - height: 64px; - border-radius: 50%; - overflow: hidden; - flex-shrink: 0; -} - -.testimonial-avatar img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.testimonial-name { - font-weight: 600; - font-size: 0.95rem; -} - -.testimonial-title { - color: var(--text-muted); - font-size: 0.8rem; -} - -/* CTA Section */ -.cta { - padding: 6rem 2rem; - background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-dark) 100%); - text-align: center; - position: relative; - overflow: hidden; -} - -.cta::before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 600px; - height: 600px; - background: black; - pointer-events: none; -} - -.cta-content { - position: relative; - z-index: 1; -} - -.cta h2 { - font-size: clamp(2rem, 4vw, 3rem); - font-weight: 700; - margin-bottom: 1rem; -} - -.cta p { - color: var(--text-secondary); - font-size: 1.1rem; - margin-bottom: 2rem; - max-width: 500px; - margin-left: auto; - margin-right: auto; -} - -/* Footer */ -footer { - padding: 4rem 2rem 2rem; - border-top: 1px solid var(--border); - background:forestgreen; -} - -.footer-container { - max-width: 1200px; - margin: 0 auto; -} - -.footer-grid { - display: grid; - grid-template-columns: 2fr 1fr 1fr 1fr; - gap: 3rem; - margin-bottom: 3rem; -} - -.footer-brand p { - color: var(--text-muted); - font-size: 0.9rem; - margin-top: 1rem; - max-width: 280px; -} - -.footer-title { - font-size: 0.85rem; - font-weight: 600; - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: 1.5rem; -} - -.footer-links { - list-style: none; -} - -.footer-links li { - margin-bottom: 0.75rem; -} - -.footer-links a { - color: var(--text-muted); - text-decoration: none; - font-size: 0.9rem; - transition: color 0.2s; -} - -.footer-links a:hover { - color: var(--accent); -} - -.footer-bottom { - padding-top: 2rem; - border-top: 1px solid var(--border); - display: flex; - justify-content: space-between; - align-items: center; - font-size: 0.85rem; - color: var(--text-muted); -} - -.footer-bottom a { - color: var(--accent); - text-decoration: none; - transition: color 0.2s; -} - -.footer-bottom a:hover { - color: var(--accent-light); -} - -/* Mobile Menu */ -.mobile-menu-btn { - display: none; - background: none; - border: none; - color: var(--text-primary); - font-size: 1.5rem; - cursor: pointer; -} - - -/* Responsive */ -@media (max-width: 1024px) { - .hero-container { - grid-template-columns: 1fr; - text-align: center; - } - - .hero-content { - order: 1; - } - - .guitar-wrapper { - order: 0; - max-width: 500px; - margin: 63px 64px; - - } - - .hero-description { - margin: 0 auto 2rem; - } - - .hero-buttons { - justify-content: center; - } - - .hero-stats { - justify-content: center; - } - - .features-grid, - .pricing-grid, - .testimonials-grid { - grid-template-columns: 1fr; - max-width: 500px; - margin: 0 auto; - } - - .billing-toggle { - flex-wrap: wrap; - justify-content: center; - } - - .billing-option { - padding: 0.6rem 1.2rem; - font-size: 0.85rem; - } - - .instructors-grid { - grid-template-columns: repeat(2, 1fr); - } - - .footer-grid { - grid-template-columns: 1fr 1fr; - } -} - -@media (max-width: 880px) { - - .nav-links, - .nav-cta { - display: none; - } - - .logo-img2{ - width: 316px; - height: 266px; - display: inline-block; - - } - - .btn-primary { - background: var(--accent); - color: white; - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; - width: 262px; - margin: 0px 107px; - } - .btn-secondary{ - background: transparent; - color: var(--text-primary); - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - border: 1px solid var(--border); - transition: all 0.2s; - width: 262px; - margin: 0px 107px; -} - .slider { - position: relative; - height: 387px; - width: 377px; /* adjust as needed */ - overflow: hidden; /* show only one slide at a time */ - margin: auto; - border: 3px solid orange; - border-radius: 8px; - margin: 0px -25px; - } - - .slides{ - height:383px; - } - - /* Centering via container */ - .form-container { - display: flex; - justify-content: center; - align-items: center; - height: 85vh; /* full viewport height */ - margin: -162px 0px; - } - - - .contact-form { - - background-color: forestgreen; - border: 2px solid orange; - padding: 20px; - border-radius: 8px; - width: 397px; - box-shadow: 0 4px 6px rgba(0,0,0,0.1); - } - - .contact-form h2 { - text-align: center; - margin-bottom: 20px; - color: #333; - } - - .contact-form label { - display: block; - margin-bottom: 5px; - font-weight: bold; - color: white; - } - - .contact-form input, - .contact-form textarea { - width: 100%; - padding: 8px; - margin-bottom: 15px; - border: 1px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - height:51px; - font-size: 16px; - } - - .contact-form button { - width: 100%; - padding: 10px; - background-color: orange; - border: none; - border-radius: 4px; - color: white; - font-size: 16px; - cursor: pointer; - } - - .contact-form button:hover { - background-color: darkorange; - } - - - .mobile-menu-btn { - display: block; - } - - /* Mobile Menu */ - .nav-links.active { - display: flex; - flex-direction: column; - position: absolute; - top: 100%; - left: 0; - right: 0; - background: rgba(13, 13, 13, 0.98); - backdrop-filter: blur(20px); - padding: 0.5rem 0 0 0; - gap: 0; - } - - .nav-links.active li { - border-bottom: 1px solid var(--border); - } - - .nav-links.active li:last-child { - border-bottom: none; - } - - .nav-links.active a { - display: block; - padding: 1.35rem 2rem; - font-size: 1.1rem; - } - - .nav-cta.active { - display: block; - position: absolute; - top: 100%; - left: 0; - right: 0; - text-align: center; - background: var(--bg-dark); - padding: 1.5rem 2rem; - border-top: 1px solid var(--border); - } - - .nav-cta.active span { - display: block; - background: var(--accent); - color: var(--bg-dark); - padding: 1rem; - border-radius: 8px; - font-weight: 600; - } - - .hero { - padding: 6rem 1rem 3rem; - } - - .hero h1 { - font-size: 26px; - margin: 2px 33px; - width: 379px; - - } - - .hero-buttons { - flex-direction: column; - } - - .hero-stats { - flex-direction: column; - gap: 1.5rem; - } - - .stat { - text-align: center; - } - - .guitar-card { - padding: 1rem; - } - - .fretboard-grid { - grid-template-rows: repeat(6, 28px); - } - - .string-labels { - height: calc(6 * 28px); - left: -24px; - } - - .string-label { - height: 28px; - font-size: 0.6rem; - } - - .note-marker { - width: 14px; - height: 14px; - font-size: 0.4rem; - } - - .instructors-grid { - grid-template-columns: 1fr; - } - - .footer-grid { - grid-template-columns: 1fr; - text-align: center; - } - - .footer-brand p { - margin: 1rem auto; - } - - .footer-bottom { - flex-direction: column; - gap: 1rem; - text-align: center; - } -} - -@media (max-width: 450px) { - .hero-description { - margin: 1px -16px 2rem; - font-size: 10px; - width: 360px; - } - - .hero h1 { - font-size: 17px; - margin: 0px -29px; - width: 379px; - } - - .btn-primary { - background: var(--accent); - color: white; - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; - width: 262px; - margin: 0px 21px; - } - - .btn-secondary { - background: transparent; - color: var(--text-primary); - padding: 1rem 2rem; - border-radius: 10px; - text-decoration: none; - font-weight: 600; - border: 1px solid var(--border); - transition: all 0.2s; - width: 262px; - margin: 0px 21px; - } - .guitar-wrapper { - order: 0; - max-width: 500px; - margin: 56px -88px; - } -.slider{ - position: relative; - height: 387px; - width: 328px; - overflow: hidden; - margin: auto; - border: 3px solid orange; - border-radius: 8px; - } margin: 0px -25px; -} \ No newline at end of file diff --git a/users_microservice/src/main/resources/static/js/script.js b/users_microservice/src/main/resources/static/js/script.js new file mode 100644 index 00000000..ff723df5 --- /dev/null +++ b/users_microservice/src/main/resources/static/js/script.js @@ -0,0 +1,40 @@ +// Smooth scrolling with offset +document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function(e) { + e.preventDefault(); + const targetId = this.getAttribute('href').substring(1); + const target = document.getElementById(targetId); + if (target) { + const navHeight = document.querySelector('nav').offsetHeight + 20; + const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - navHeight; + window.scrollTo({ + top: targetPosition, + behavior: 'smooth' + }); + } + }); +}); + +// Active nav link on scroll +const sections = document.querySelectorAll('section[id]'); +const navLinks = document.querySelectorAll('.nav-link[href^="#"]'); + +function updateActiveLink() { + let current = ''; + sections.forEach(section => { + const sectionTop = section.offsetTop - 150; + if (pageYOffset >= sectionTop) { + current = section.getAttribute('id'); + } + }); + + navLinks.forEach(link => { + link.classList.remove('active'); + if (link.getAttribute('href') === '#' + current) { + link.classList.add('active'); + } + }); +} + +window.addEventListener('scroll', updateActiveLink); +window.addEventListener('load', updateActiveLink); \ No newline at end of file diff --git a/users_microservice/src/main/resources/static/js/templatemo-606-string-scripts.js b/users_microservice/src/main/resources/static/js/templatemo-606-string-scripts.js deleted file mode 100644 index 50dd9b6f..00000000 --- a/users_microservice/src/main/resources/static/js/templatemo-606-string-scripts.js +++ /dev/null @@ -1,109 +0,0 @@ -// Mobile menu toggle -const mobileMenuBtn = document.querySelector('.mobile-menu-btn'); -const navLinks = document.querySelector('.nav-links'); -const navCta = document.querySelector('.nav-cta'); - -mobileMenuBtn.addEventListener('click', () => { - const isOpen = navLinks.classList.toggle('active'); - navCta.classList.toggle('active', isOpen); - mobileMenuBtn.textContent = isOpen ? '✕' : '☰'; - - // Dynamically position CTA below nav-links - if (isOpen) { - setTimeout(() => { - const navLinksHeight = navLinks.offsetHeight; - navCta.style.top = `calc(100% + ${navLinksHeight}px)`; - }, 10); - } -}); - -// Close mobile menu when clicking a link -navLinks.querySelectorAll('a').forEach(link => { - link.addEventListener('click', () => { - navLinks.classList.remove('active'); - navCta.classList.remove('active'); - mobileMenuBtn.textContent = '☰'; - }); -}); - -// Pricing toggle -const PRICING = { - monthly: { - price: 30, - period: '/mo', - billed: '', - savings: '' - }, - quarterly: { - price: 25.50, - period: '/mo', - billed: 'Billed $76.50 every 3 months', - savings: 'Save 15%' - }, - yearly: { - price: 21, - period: '/mo', - billed: 'Billed $252 per year', - savings: 'Save 30%' - } -}; - -function updatePricing(billing) { - const plan = PRICING[billing]; - - // Update active button - document.querySelectorAll('.billing-option').forEach(btn => { - btn.classList.toggle('active', btn.dataset.billing === billing); - }); - - // Update price display - const priceEl = document.getElementById('proPrice'); - const billedEl = document.getElementById('proBilled'); - const savingsEl = document.getElementById('proSavings'); - - // Animate price change - priceEl.style.opacity = '0'; - priceEl.style.transform = 'translateY(-10px)'; - - setTimeout(() => { - priceEl.textContent = plan.price % 1 === 0 ? plan.price : plan.price.toFixed(2); - billedEl.textContent = plan.billed; - savingsEl.textContent = plan.savings; - - priceEl.style.opacity = '1'; - priceEl.style.transform = 'translateY(0)'; - }, 150); -} - -document.querySelectorAll('.billing-option').forEach(btn => { - btn.addEventListener('click', () => updatePricing(btn.dataset.billing)); -}); - -// Add transition to price element -document.getElementById('proPrice').style.transition = 'all 0.15s ease'; - - -document.addEventListener('DOMContentLoaded', () => { - const slides = document.querySelector('.slides'); - const images = document.querySelectorAll('.slides img'); - const prevBtn = document.querySelector('.prev'); - const nextBtn = document.querySelector('.next'); - - let index = 0; - const total = images.length; - - function showSlide(i) { - index = (i + total) % total; // wrap around - slides.style.transform = `translateX(-${index * 100}%)`; - } - - // Buttons - prevBtn.addEventListener('click', () => showSlide(index - 1)); - nextBtn.addEventListener('click', () => showSlide(index + 1)); - - // Auto-slide every 6 seconds - setInterval(() => showSlide(index + 1), 6000); - - // Initialize - showSlide(0); -}); diff --git a/users_microservice/src/main/resources/templates/home/forgot-password.html b/users_microservice/src/main/resources/templates/home/forgot-password.html index d80238a1..30495e77 100644 --- a/users_microservice/src/main/resources/templates/home/forgot-password.html +++ b/users_microservice/src/main/resources/templates/home/forgot-password.html @@ -1,41 +1,160 @@ - +
- -Enter your email address and we’ll send you reset instructions.
+ +Enter your email to receive a password reset link.
+