-
Notifications
You must be signed in to change notification settings - Fork 0
Revamp UI/UX with new design and responsive layout #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
33a16ab
ac17159
c37318a
dba9a50
cf54204
d0ae0b3
9c52a21
a7ea278
d80fc2c
a0a81c2
0f92a6c
4454d9a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,14 +1,16 @@ | ||
| @import "tailwindcss"; | ||
|
|
||
| :root { | ||
| --bg-base: #0a0a0f; | ||
| --bg-surface: rgba(255, 255, 255, 0.05); | ||
| --bg-card: rgba(255, 255, 255, 0.08); | ||
| --text-primary: #ffffff; | ||
| --text-secondary: rgba(255, 255, 255, 0.7); | ||
| --border-default: rgba(255, 255, 255, 0.12); | ||
| --border-hover: rgba(255, 255, 255, 0.2); | ||
| --focus-ring: rgba(255, 255, 255, 0.5); | ||
| --bg-base: #0f172a; | ||
| --bg-surface: rgba(226, 232, 240, 0.08); | ||
| --bg-card: rgba(30, 41, 59, 0.4); | ||
| --text-primary: #f1f5f9; | ||
| --text-secondary: #cbd5e1; | ||
| --border-default: rgba(148, 163, 184, 0.1); | ||
| --border-hover: rgba(148, 163, 184, 0.3); | ||
| --focus-ring: rgba(99, 102, 241, 0.5); | ||
| --accent: #6366f1; | ||
| --accent-light: #818cf8; | ||
| } | ||
|
|
||
| * { | ||
|
|
@@ -54,14 +56,14 @@ body { | |
| z-index: 0; | ||
| background: linear-gradient( | ||
| 135deg, | ||
| #0a0a0f 0%, | ||
| #1a1a2e 25%, | ||
| #16213e 50%, | ||
| #0f3460 75%, | ||
| #0a0a0f 100% | ||
| #0f172a 0%, | ||
| #1e293b 25%, | ||
| #334155 50%, | ||
| #1e40af 75%, | ||
| #0f172a 100% | ||
| ); | ||
| background-size: 400% 400%; | ||
| animation: gradientShift 15s ease infinite; | ||
| animation: gradientShift 20s ease infinite; | ||
| } | ||
|
|
||
| @keyframes gradientShift { | ||
|
|
@@ -95,29 +97,56 @@ body { | |
|
|
||
| .coming-soon-card { | ||
| position: relative; | ||
| background: var(--bg-card); | ||
| backdrop-filter: blur(20px); | ||
| -webkit-backdrop-filter: blur(20px); | ||
| border: 1px solid var(--border-default); | ||
| border-radius: 1.5rem; | ||
| background: rgba(30, 41, 59, 0.25); | ||
| backdrop-filter: blur(40px); | ||
| -webkit-backdrop-filter: blur(40px); | ||
| border: 1px solid rgba(148, 163, 184, 0.15); | ||
| border-radius: 2.5rem; | ||
| text-align: center; | ||
| box-shadow: | ||
| 0 25px 50px -12px rgba(0, 0, 0, 0.5), | ||
| 0 0 0 1px rgba(255, 255, 255, 0.05) inset; | ||
| /* Square: fluid size clamped between 280px and 480px */ | ||
| width: clamp(280px, min(80vw, 80vh), 480px); | ||
| height: clamp(280px, min(80vw, 80vh), 480px); | ||
| /* Center content inside the square */ | ||
| 0 20px 40px -10px rgba(0, 0, 0, 0.2), | ||
| 0 0 0 1px rgba(255, 255, 255, 0.08) inset; | ||
| transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); | ||
| /* Rectangle: wider than tall for hero feel */ | ||
| width: clamp(300px, min(85vw, 85vh), 580px); | ||
| max-width: 580px; | ||
| padding: 3.5rem 3rem; | ||
| display: flex; | ||
| flex-direction: column; | ||
| align-items: center; | ||
| justify-content: center; | ||
| padding: 2rem; | ||
| margin: auto; | ||
| } | ||
|
|
||
| .coming-soon-card:hover { | ||
| background: rgba(30, 41, 59, 0.35); | ||
| border-color: rgba(148, 163, 184, 0.25); | ||
| box-shadow: | ||
| 0 20px 40px -10px rgba(99, 102, 241, 0.15), | ||
| 0 0 0 1px rgba(148, 163, 184, 0.15) inset; | ||
| } | ||
|
|
||
| @media (max-width: 768px) { | ||
| .coming-soon-card { | ||
| width: clamp(280px, 90vw, 550px); | ||
| padding: 2.5rem 2rem; | ||
| } | ||
| } | ||
|
|
||
| @media (max-width: 480px) { | ||
| .coming-soon-card { | ||
| border-radius: 1.125rem; | ||
| width: clamp(260px, 85vw, 350px); | ||
| padding: 2rem 1.5rem; | ||
| border-radius: 1.5rem; | ||
| } | ||
|
|
||
| .action-buttons { | ||
| gap: 0.75rem; | ||
| } | ||
|
|
||
| .btn { | ||
| padding: 0.625rem 1.25rem; | ||
| font-size: 0.875rem; | ||
| } | ||
| } | ||
|
|
||
|
|
@@ -126,32 +155,123 @@ body { | |
| ======================================== */ | ||
|
|
||
| .coming-soon-title { | ||
| font-size: 3rem; | ||
| font-size: 3.2rem; | ||
| font-weight: 700; | ||
| letter-spacing: -0.025em; | ||
| line-height: 1.1; | ||
| letter-spacing: -0.02em; | ||
| line-height: 1.2; | ||
| color: var(--text-primary); | ||
| margin-bottom: 0.75rem; | ||
| margin-bottom: 1.25rem; | ||
| background: linear-gradient( | ||
| 135deg, | ||
| var(--accent-light) 20%, | ||
| var(--accent) 80% | ||
| ); | ||
| -webkit-background-clip: text; | ||
| -webkit-text-fill-color: transparent; | ||
| background-clip: text; | ||
| opacity: 0.95; | ||
| } | ||
|
|
||
| @media (max-width: 768px) { | ||
| .coming-soon-title { | ||
| font-size: 2.75rem; | ||
| } | ||
| } | ||
|
|
||
| @media (max-width: 640px) { | ||
| .coming-soon-title { | ||
| font-size: 2rem; | ||
| font-size: 2.25rem; | ||
| } | ||
| } | ||
|
|
||
| @media (max-width: 480px) { | ||
| .coming-soon-title { | ||
| font-size: 1.875rem; | ||
| margin-bottom: 0.75rem; | ||
| } | ||
| } | ||
|
|
||
| .coming-soon-subtitle { | ||
| font-size: 1.125rem; | ||
| color: var(--text-secondary); | ||
| font-size: 1.1rem; | ||
| color: rgba(203, 213, 225, 0.85); | ||
| font-weight: 400; | ||
| line-height: 1.7; | ||
| margin-bottom: 0; | ||
| max-width: 100%; | ||
| letter-spacing: 0.3px; | ||
| } | ||
|
|
||
| @media (max-width: 640px) { | ||
| @media (max-width: 768px) { | ||
| .coming-soon-subtitle { | ||
| font-size: 1rem; | ||
| } | ||
| } | ||
|
|
||
| @media (max-width: 640px) { | ||
| .coming-soon-subtitle { | ||
| font-size: 0.9rem; | ||
| } | ||
| } | ||
|
|
||
| @media (max-width: 480px) { | ||
| .coming-soon-subtitle { | ||
| font-size: 0.8rem; | ||
| } | ||
| } | ||
|
|
||
| /* ======================================== | ||
| ACTION BUTTONS | ||
| ======================================== */ | ||
|
|
||
| .action-buttons { | ||
| display: flex; | ||
| gap: 1rem; | ||
| justify-content: center; | ||
| width: 100%; | ||
| flex-wrap: wrap; | ||
| } | ||
|
|
||
| .btn { | ||
| padding: 0.75rem 1.75rem; | ||
| border-radius: 0.75rem; | ||
| font-weight: 600; | ||
| font-size: 1rem; | ||
| border: none; | ||
| cursor: pointer; | ||
| transition: all 0.2s ease-in-out; | ||
| text-decoration: none; | ||
| display: inline-flex; | ||
| align-items: center; | ||
| gap: 0.5rem; | ||
| } | ||
|
|
||
| .btn-primary { | ||
|
Comment on lines
+230
to
+248
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: The new button styling splits core sizing/interaction styles into Severity Level: Major
|
||
| background: linear-gradient( | ||
| 135deg, | ||
| var(--accent) 0%, | ||
| var(--accent-light) 100% | ||
| ); | ||
| color: white; | ||
| box-shadow: 0 10px 30px rgba(99, 102, 241, 0.3); | ||
| } | ||
|
|
||
| .btn-primary:hover { | ||
| transform: translateY(-2px); | ||
| box-shadow: 0 15px 40px rgba(99, 102, 241, 0.4); | ||
| } | ||
|
|
||
| .btn-secondary { | ||
| background: rgba(226, 232, 240, 0.08); | ||
| color: var(--text-primary); | ||
|
Comment on lines
+222
to
+265
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time! |
||
| border: 1px solid var(--border-default); | ||
| } | ||
|
|
||
| .btn-secondary:hover { | ||
| background: rgba(226, 232, 240, 0.12); | ||
| border-color: var(--accent); | ||
| color: var(--accent-light); | ||
| } | ||
|
|
||
| /* ======================================== | ||
| LANGUAGE SELECTOR | ||
| ======================================== */ | ||
|
|
@@ -163,35 +283,36 @@ body { | |
|
|
||
| .language-selector select { | ||
| appearance: none; | ||
| background: var(--bg-surface); | ||
| background: rgba(30, 41, 59, 0.5); | ||
| backdrop-filter: blur(12px); | ||
| -webkit-backdrop-filter: blur(12px); | ||
| border: 1px solid var(--border-default); | ||
| border-radius: 0.5rem; | ||
| padding: 0.5rem 2.25rem 0.5rem 0.875rem; | ||
| border-radius: 0.75rem; | ||
| padding: 0.5rem 2.5rem 0.5rem 1rem; | ||
|
Comment on lines
288
to
+291
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| font-size: 0.875rem; | ||
| font-weight: 500; | ||
| font-weight: 600; | ||
| color: var(--text-primary); | ||
| cursor: pointer; | ||
| transition: all 0.15s ease-in-out; | ||
| min-width: 100px; | ||
| transition: all 0.2s ease-in-out; | ||
| min-width: 120px; | ||
| background-color: rgba(30, 41, 59, 0.5); | ||
| } | ||
|
Comment on lines
+297
to
299
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 | Confidence: High The |
||
|
|
||
| .language-selector select:hover { | ||
| border-color: var(--border-hover); | ||
| background: rgba(255, 255, 255, 0.08); | ||
| border-color: var(--accent); | ||
| background: rgba(30, 41, 59, 0.6); | ||
| } | ||
|
|
||
| .language-selector select:focus { | ||
| outline: none; | ||
| border-color: var(--focus-ring); | ||
| box-shadow: 0 0 0 2px var(--focus-ring); | ||
| border-color: var(--accent); | ||
| box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); | ||
| } | ||
|
|
||
| .language-selector select:focus-visible { | ||
| outline: none; | ||
| border-color: var(--focus-ring); | ||
| box-shadow: 0 0 0 2px var(--focus-ring); | ||
| border-color: var(--accent); | ||
| box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); | ||
| } | ||
|
|
||
| .language-selector::after { | ||
|
|
@@ -224,6 +345,14 @@ body { | |
| text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); | ||
| } | ||
|
|
||
| @media (max-width: 480px) { | ||
| .version-label { | ||
| font-size: 0.625rem; | ||
| bottom: 1rem; | ||
| right: 1rem; | ||
| } | ||
| } | ||
|
|
||
| /* ======================================== | ||
| FOCUS & ACCESSIBILITY | ||
| ======================================== */ | ||
|
|
||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🚩 Pre-existing aria-label version mismatch The (Refers to lines 46-47) Was this helpful? React with 👍 or 👎 to provide feedback. |
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -19,9 +19,6 @@ | |||||||||
| {/* Language selector - top right */} | ||||||||||
| <div className="fixed top-4 right-4 z-20 sm:top-6 sm:right-6"> | ||||||||||
| <div className="language-selector"> | ||||||||||
| <label htmlFor="language-select" className="sr-only"> | ||||||||||
| Select language | ||||||||||
| </label> | ||||||||||
| <select | ||||||||||
| id="language-select" | ||||||||||
| value={lang} | ||||||||||
|
Comment on lines
23
to
24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The use of Recommended solution: onChange={(e) => {
const value = e.target.value;
if (value === 'en' || value === 'zh') setLang(value);
}} |
||||||||||
|
|
@@ -39,7 +36,7 @@ | |||||||||
| id="main-content" | ||||||||||
| className="fixed inset-0 z-10 flex items-center justify-center p-4" | ||||||||||
| > | ||||||||||
| <div className="coming-soon-card"> | ||||||||||
| <div className="coming-soon-card" style={{ margin: "auto" }}> | ||||||||||
|
Check warning on line 39 in app/page.tsx
|
||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The inline style
Suggested change
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 Info: Redundant inline margin:auto duplicates CSS class rule The inline style Was this helpful? React with 👍 or 👎 to provide feedback. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 | Confidence: High The
Suggested change
|
||||||||||
| <h1 className="coming-soon-title">{t.title}</h1> | ||||||||||
| <p className="coming-soon-subtitle">{t.subtitle}</p> | ||||||||||
| </div> | ||||||||||
|
Comment on lines
41
to
42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rendering Recommended solution: <h1 className="coming-soon-title">{t?.title ?? 'Coming Soon'}</h1>
<p className="coming-soon-subtitle">{t?.subtitle ?? ''}</p>There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [Contextual Comment] P2 | Confidence: High The displayed version text is
Suggested change
Evidence: aria-label:Version 0.13 Beta, text:Version: 0.14 β |
||||||||||
|
|
||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
High
backdrop-filter: blur(40px)may cause performance issuesApplying
backdrop-filter: blur(40px)(and its webkit variant) can be very resource-intensive, especially on lower-end devices or in browsers with limited support. This can lead to sluggish UI performance and increased battery usage.Recommendation:
Consider reducing the blur radius or providing a fallback for browsers that do not support
backdrop-filter. Test on a range of devices to ensure acceptable performance.