diff --git a/web/analyzer/analyzer.css b/web/analyzer/analyzer.css index 6514d510..174817ca 100644 --- a/web/analyzer/analyzer.css +++ b/web/analyzer/analyzer.css @@ -1,9 +1,4 @@ -.container { - max-width: 1200px; - margin: 6rem auto 2rem; - padding: 2rem; -} - +/* Hero Section */ .hero { text-align: center; margin-bottom: 3rem; @@ -24,99 +19,166 @@ /* Analysis Container */ .analysis-container { + display: grid; + grid-template-columns: 280px 1fr; + gap: 2rem; + margin: 2rem 0; + min-height: calc(100vh - 400px); +} + +/* Sidebar */ +.analysis-sidebar { background: rgba(0, 0, 0, 0.2); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1); padding: 2rem; - margin-bottom: 3rem; + position: sticky; + top: 6rem; + height: fit-content; } -/* Tabs */ -.analysis-tabs { - display: flex; - gap: 1rem; +.sidebar-section { margin-bottom: 2rem; + padding-bottom: 2rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); - padding-bottom: 1rem; } -.tab-button { +.sidebar-section:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; +} + +.sidebar-section h3 { + color: var(--gradient-end); + margin-bottom: 1rem; + font-size: 1.2rem; +} + +/* History List */ +.history-list { + background: rgba(0, 0, 0, 0.2); + border-radius: 8px; + padding: 1rem; +} + +.history-item { + display: flex; + align-items: center; + gap: 0.75rem; + color: rgba(255, 255, 255, 0.7); + padding: 0.75rem; + border-radius: 6px; + transition: all 0.3s ease; +} + +.history-item:hover { + background: rgba(255, 255, 255, 0.05); +} + +/* Quick Actions */ +.quick-actions { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.action-btn { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); - color: rgba(255, 255, 255, 0.8); - padding: 1rem 2rem; - border-radius: 8px; + color: rgba(255, 255, 255, 0.9); + padding: 0.75rem 1rem; + border-radius: 6px; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; - gap: 0.5rem; - font-size: 1.1rem; + gap: 0.75rem; + width: 100%; + font-size: 0.95rem; } -.tab-button i { - font-size: 1.2rem; +.action-btn:hover { + background: rgba(255, 255, 255, 0.1); + transform: translateY(-2px); } -.tab-button:hover { - background: rgba(255, 255, 255, 0.1); +.action-btn i { + color: var(--gradient-end); } -.tab-button.active { - background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end)); - border-color: transparent; - color: white; +/* Resource Links */ +.resource-links { + display: flex; + flex-direction: column; + gap: 0.75rem; } -.tab-content { - display: none; +.resource-link { + color: rgba(255, 255, 255, 0.9); + text-decoration: none; + padding: 0.75rem 1rem; + border-radius: 6px; + display: flex; + align-items: center; + gap: 0.75rem; + transition: all 0.3s ease; } -.tab-content.active { - display: block; +.resource-link:hover { + background: rgba(255, 255, 255, 0.05); + transform: translateX(5px); } -/* Input Methods */ -.input-methods { +.resource-link i { + color: var(--gradient-end); +} + +/* Analysis Tabs */ +.analysis-tabs { display: flex; gap: 1rem; margin-bottom: 2rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + padding-bottom: 1rem; } -.method-button { +.tab-button { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); color: rgba(255, 255, 255, 0.8); - padding: 0.75rem 1.5rem; + padding: 1rem 2rem; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.75rem; + font-size: 1.1rem; + flex: 1; + justify-content: center; } -.method-button i { - font-size: 1.1rem; +.tab-button i { + font-size: 1.2rem; } -.method-button:hover { +.tab-button:hover { background: rgba(255, 255, 255, 0.1); + transform: translateY(-2px); } -.method-button.active { +.tab-button.active { background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end)); border-color: transparent; color: white; } -/* Input Areas */ -.input-area { +.tab-content { display: none; - margin-bottom: 2rem; } -.input-area.active { +.tab-content.active { display: block; } @@ -124,100 +186,58 @@ .file-drop-zone { border: 2px dashed rgba(255, 255, 255, 0.2); border-radius: 12px; - padding: 3rem; + padding: 4rem 2rem; text-align: center; transition: all 0.3s ease; cursor: pointer; + background: rgba(0, 0, 0, 0.2); + margin-bottom: 2rem; } .file-drop-zone:hover, .file-drop-zone.drag-active { border-color: var(--gradient-end); background: rgba(255, 255, 255, 0.05); + transform: translateY(-2px); } .file-drop-zone i { - font-size: 3rem; + font-size: 4rem; color: var(--gradient-end); + margin-bottom: 1.5rem; +} + +.file-drop-zone h3 { + font-size: 1.5rem; margin-bottom: 1rem; + color: var(--gradient-end); } .file-drop-zone p { - margin: 0.5rem 0; color: rgba(255, 255, 255, 0.9); -} - -.file-drop-zone .sub-text { - color: rgba(255, 255, 255, 0.6); - font-size: 0.9rem; -} - -.upload-button { - display: inline-block; - background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end)); - color: white; - padding: 0.75rem 1.5rem; - border-radius: 8px; - cursor: pointer; - margin: 1rem 0; -} - -.file-info { - font-size: 0.9rem; - color: rgba(255, 255, 255, 0.6); -} - -/* URL Input */ -.url-input-container { - display: flex; - gap: 1rem; -} - -.url-field { - flex: 1; - background: rgba(0, 0, 0, 0.3); - border: 1px solid rgba(255, 255, 255, 0.1); - color: white; - padding: 1rem; - border-radius: 8px; - font-family: inherit; -} - -.fetch-button { - background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end)); - color: white; - border: none; - padding: 0 2rem; - border-radius: 8px; - cursor: pointer; -} - -/* Text Input */ -.sequence-input { - width: 100%; - height: 200px; - background: rgba(0, 0, 0, 0.3); - border: 1px solid rgba(255, 255, 255, 0.1); - color: white; - padding: 1rem; - border-radius: 8px; - font-family: 'IBM Plex Mono', monospace; - resize: vertical; + margin-bottom: 1rem; } /* Analysis Options */ -.options-grid { +.analysis-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; - margin-bottom: 2rem; + margin: 2rem 0; } .option-card { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; + border-radius: 12px; padding: 1.5rem; + transition: all 0.3s ease; +} + +.option-card:hover { + transform: translateY(-2px); + border-color: var(--gradient-end); + box-shadow: 0 4px 20px rgba(0, 122, 255, 0.2); } .option-header { @@ -241,74 +261,43 @@ .checkbox-container { display: flex; align-items: center; - gap: 0.5rem; + gap: 0.75rem; margin-bottom: 1rem; cursor: pointer; color: rgba(255, 255, 255, 0.9); + padding: 0.5rem; + border-radius: 6px; + transition: all 0.3s ease; } -.checkbox-container input { - width: 18px; - height: 18px; -} - -/* Advanced Settings */ -.advanced-settings { +.checkbox-container:hover { background: rgba(255, 255, 255, 0.05); - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - margin-bottom: 2rem; -} - -.settings-header { - padding: 1.5rem; - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); -} - -.settings-header h3 { - margin: 0; - color: var(--gradient-end); } -.toggle-settings { - background: none; - border: none; - color: rgba(255, 255, 255, 0.8); +.checkbox-container input[type="checkbox"] { + width: 18px; + height: 18px; + border-radius: 4px; + border: 2px solid rgba(255, 255, 255, 0.2); + appearance: none; cursor: pointer; - font-size: 1.2rem; -} - -.settings-content { - display: none; - padding: 1.5rem; -} - -.settings-content.show { - display: block; -} - -.setting-group { - margin-bottom: 1.5rem; + position: relative; + transition: all 0.3s ease; } -.setting-group label { - display: block; - margin-bottom: 0.5rem; - color: rgba(255, 255, 255, 0.9); +.checkbox-container input[type="checkbox"]:checked { + background: var(--gradient-end); + border-color: var(--gradient-end); } -.setting-group input, -.setting-group select { - width: 100%; - background: rgba(0, 0, 0, 0.3); - border: 1px solid rgba(255, 255, 255, 0.1); +.checkbox-container input[type="checkbox"]:checked::after { + content: '✓'; + position: absolute; color: white; - padding: 0.75rem; - border-radius: 6px; - font-family: inherit; + font-size: 12px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } /* Analyze Button */ @@ -318,7 +307,7 @@ color: white; border: none; padding: 1.25rem; - border-radius: 8px; + border-radius: 12px; font-size: 1.2rem; font-weight: 600; cursor: pointer; @@ -326,15 +315,14 @@ align-items: center; justify-content: center; gap: 0.75rem; + margin-top: 2rem; + transition: all 0.3s ease; } -.analyze-btn i { - font-size: 1.2rem; -} - -.analyze-btn:disabled { - opacity: 0.7; - cursor: not-allowed; +.analyze-btn:hover { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(0, 122, 255, 0.4); + filter: brightness(1.1); } /* Results Section */ @@ -342,95 +330,108 @@ background: rgba(0, 0, 0, 0.2); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1); - padding: 2rem; - margin-top: 3rem; + margin-top: 2rem; } -.results-section h2 { +.results-header { + padding: 1.5rem 2rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + display: flex; + justify-content: space-between; + align-items: center; +} + +.results-header h2 { color: var(--gradient-end); - margin-bottom: 2rem; + margin: 0; } -.result-tabs { - display: flex; - gap: 1rem; - margin-bottom: 2rem; +.result-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1.5rem; + padding: 2rem; } -.result-tab { +.result-card { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); - color: rgba(255, 255, 255, 0.8); - padding: 0.75rem 1.5rem; border-radius: 8px; - cursor: pointer; + padding: 1.5rem; + text-align: center; + transition: all 0.3s ease; } -.result-tab.active { - background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end)); - border-color: transparent; - color: white; +.result-card:hover { + transform: translateY(-2px); + border-color: var(--gradient-end); +} + +.result-value { + font-size: 2.5rem; + font-weight: 600; + color: var(--gradient-end); + margin-bottom: 0.5rem; +} + +.result-label { + color: rgba(255, 255, 255, 0.7); + font-size: 1rem; } /* Coming Soon */ .coming-soon { text-align: center; - padding: 4rem 2rem; + padding: 6rem 2rem; + color: rgba(255, 255, 255, 0.7); } .coming-soon i { - font-size: 3rem; + font-size: 4rem; color: var(--gradient-end); - margin-bottom: 1.5rem; + margin-bottom: 2rem; } .coming-soon h2 { - color: var(--gradient-end); + font-size: 2rem; margin-bottom: 1rem; -} - -.coming-soon p { - color: rgba(255, 255, 255, 0.9); + color: var(--gradient-end); } /* Responsive Design */ -@media screen and (max-width: 768px) { - .container { - padding: 1rem; +@media screen and (max-width: 1024px) { + .analysis-container { + grid-template-columns: 1fr; } - .hero h1 { - font-size: 2.5rem; + .analysis-sidebar { + position: static; + width: 100%; + height: auto; + margin-bottom: 2rem; } +} +@media screen and (max-width: 768px) { .analysis-tabs { flex-direction: column; } .tab-button { width: 100%; - justify-content: center; } - .input-methods { - flex-direction: column; + .analysis-options { + grid-template-columns: 1fr; } - .method-button { - width: 100%; - justify-content: center; + .result-grid { + grid-template-columns: 1fr; } - .url-input-container { + .results-header { flex-direction: column; - } - - .fetch-button { - width: 100%; - padding: 1rem; - } - - .options-grid { - grid-template-columns: 1fr; + gap: 1rem; + text-align: center; } } \ No newline at end of file diff --git a/web/analyzer/analyzer.html b/web/analyzer/analyzer.html index 5b6ff543..07e9c4e1 100644 --- a/web/analyzer/analyzer.html +++ b/web/analyzer/analyzer.html @@ -39,67 +39,80 @@

DNA Sequence Analysis

-
- - - -
+ -
-
- - -
-
+
+
+ + + +
-
- +
+
+ +

Upload DNA Sequence

+

Drag and drop your sequence file here or click to browse

+ +

Supported formats: .fa, .fasta, .fastq

-
-
-

Analysis Options

-
+
@@ -173,67 +186,62 @@

Advanced Features

-
-
-

Advanced Settings

- -
-
-
- - -
-
- - + + + - -
- -
-
- -

Genetic Testing

-

Advanced genetic testing features coming soon!

-
-
- -
-
- -

Batch Analysis

-

Batch processing capabilities coming soon!

+
+
+ +

Genetic Testing

+

Advanced genetic testing features coming soon!

+
-
-
- + +

Available Options

+ + + + + + + + + diff --git a/web/style.css b/web/style.css index a6a0ff88..d12aff95 100644 --- a/web/style.css +++ b/web/style.css @@ -66,6 +66,14 @@ body { right: auto; } +/* Container */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 2rem; + flex: 1; +} + /* Navbar */ .floating-header { position: fixed; @@ -255,11 +263,13 @@ body { display: flex; justify-content: center; align-items: center; + transform-style: preserve-3d; + animation: rotate3D 20s linear infinite; } .base { - width: 30px; - height: 30px; + width: 40px; + height: 40px; border-radius: 50%; display: flex; align-items: center; @@ -268,41 +278,49 @@ body { font-weight: bold; color: white; position: absolute; + transform-style: preserve-3d; } .left-base { background: var(--gradient-start); - left: calc(50% - 100px); - animation: moveLeft 4s ease-in-out infinite; + left: calc(50% - 120px); + animation: moveLeft3D 4s ease-in-out infinite; } .right-base { background: var(--gradient-end); - right: calc(50% - 100px); - animation: moveRight 4s ease-in-out infinite; + right: calc(50% - 120px); + animation: moveRight3D 4s ease-in-out infinite; } .base-connector { - width: 160px; - height: 2px; + width: 200px; + height: 3px; background: linear-gradient(90deg, var(--gradient-start), var(--gradient-end)); position: absolute; - animation: stretch 4s ease-in-out infinite; + transform-origin: center; + animation: stretch3D 4s ease-in-out infinite; } -@keyframes moveLeft { - 0%, 100% { transform: translateX(-20px); } - 50% { transform: translateX(20px); } +@keyframes rotate3D { + 0% { transform: rotateY(0deg) rotateX(0deg); } + 50% { transform: rotateY(180deg) rotateX(10deg); } + 100% { transform: rotateY(360deg) rotateX(0deg); } } -@keyframes moveRight { - 0%, 100% { transform: translateX(20px); } - 50% { transform: translateX(-20px); } +@keyframes moveLeft3D { + 0%, 100% { transform: translateX(-30px) translateZ(20px); } + 50% { transform: translateX(30px) translateZ(-20px); } } -@keyframes stretch { - 0%, 100% { width: 160px; } - 50% { width: 200px; } +@keyframes moveRight3D { + 0%, 100% { transform: translateX(30px) translateZ(-20px); } + 50% { transform: translateX(-30px) translateZ(20px); } +} + +@keyframes stretch3D { + 0%, 100% { width: 200px; transform: rotateY(0deg); } + 50% { width: 240px; transform: rotateY(180deg); } } /* Scroll Indicator */ @@ -352,235 +370,6 @@ body { } } -/* Stats Section */ -#stats { - background: rgba(0, 0, 0, 0.2); - padding: 6rem 2rem; -} - -.stats-grid { - max-width: 1200px; - margin: 0 auto; - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 2rem; -} - -.stat-item { - text-align: center; - padding: 2rem; - background: rgba(255, 255, 255, 0.05); - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.1); - transition: all 0.3s ease; -} - -.stat-item:hover { - border-color: var(--gradient-end); -} - -.stat-number { - font-size: 3rem; - font-weight: 600; - background: linear-gradient(45deg, var(--gradient-start), var(--gradient-end)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - margin-bottom: 0.5rem; -} - -.stat-label { - color: rgba(255, 255, 255, 0.7); - font-size: 1.1rem; -} - -/* Features Overview */ -#features-overview { - padding: 6rem 2rem; -} - -.content-wrapper { - max-width: 1200px; - margin: 0 auto; -} - -.content-wrapper h2 { - font-size: 2.5rem; - margin-bottom: 3rem; - text-align: center; - color: var(--gradient-end); -} - -.features-showcase { - display: grid; - gap: 4rem; -} - -.feature-highlight { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - align-items: center; -} - -.feature-visual { - display: flex; - justify-content: center; - align-items: center; - font-size: 5rem; - color: var(--gradient-end); -} - -.feature-content h3 { - font-size: 2rem; - margin-bottom: 1.5rem; - color: var(--gradient-end); -} - -.feature-content p { - font-size: 1.1rem; - color: rgba(255, 255, 255, 0.9); - margin-bottom: 2rem; - line-height: 1.8; -} - -.feature-list { - list-style: none; -} - -.feature-list li { - margin-bottom: 1rem; - padding-left: 2rem; - position: relative; - color: rgba(255, 255, 255, 0.9); -} - -.feature-list li::before { - content: '•'; - position: absolute; - left: 0; - color: var(--gradient-end); - font-size: 1.5rem; - line-height: 1; -} - -/* Workflow Section */ -#workflow { - padding: 6rem 2rem; - background: rgba(0, 0, 0, 0.2); -} - -.workflow-steps { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 2rem; - margin-top: 4rem; -} - -.step { - text-align: center; - padding: 2rem; - background: rgba(255, 255, 255, 0.05); - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.1); -} - -.step i { - font-size: 3rem; - color: var(--gradient-end); - margin: 1.5rem 0; -} - -.step-number { - font-size: 3rem; - font-weight: 700; - color: var(--gradient-end); - margin-bottom: 1.5rem; -} - -.step h3 { - font-size: 1.5rem; - margin-bottom: 1rem; - color: var(--gradient-end); -} - -.step p { - color: rgba(255, 255, 255, 0.9); -} - -/* Security Section */ -#security { - padding: 6rem 2rem; -} - -.security-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - align-items: center; -} - -.security-content h2 { - text-align: left; - margin-bottom: 2rem; -} - -.security-content p { - font-size: 1.1rem; - color: rgba(255, 255, 255, 0.9); - margin-bottom: 2rem; - line-height: 1.8; -} - -.security-features { - list-style: none; -} - -.security-features li { - display: flex; - align-items: center; - gap: 1rem; - margin-bottom: 1.5rem; - color: rgba(255, 255, 255, 0.9); -} - -.security-features i { - font-size: 1.5rem; - color: var(--gradient-end); -} - -.security-visual { - display: flex; - justify-content: center; - align-items: center; - font-size: 8rem; - color: var(--gradient-end); -} - -/* CTA Section */ -#cta { - padding: 6rem 2rem; - background: rgba(0, 0, 0, 0.2); -} - -.cta-container { - text-align: center; - max-width: 800px; - margin: 0 auto; -} - -.cta-container h2 { - font-size: 2.5rem; - margin-bottom: 1.5rem; - color: var(--gradient-end); -} - -.cta-container p { - font-size: 1.2rem; - color: rgba(255, 255, 255, 0.9); - margin-bottom: 2rem; - line-height: 1.8; -} - /* Footer */ .footer-content { text-align: center; @@ -608,24 +397,6 @@ body { .cta-buttons { justify-content: center; } - - .stats-grid { - grid-template-columns: repeat(2, 1fr); - } - - .feature-highlight { - grid-template-columns: 1fr; - gap: 2rem; - } - - .workflow-steps { - grid-template-columns: 1fr; - } - - .security-grid { - grid-template-columns: 1fr; - gap: 2rem; - } } @media screen and (max-width: 768px) { @@ -661,8 +432,4 @@ body { .primary-btn, .secondary-btn { width: 100%; } - - .stats-grid { - grid-template-columns: 1fr; - } }
OptionDescriptionExample