diff --git a/app/components/publications/PublicationHeader.tsx b/app/components/publications/PublicationHeader.tsx
new file mode 100644
index 0000000..5bcba22
--- /dev/null
+++ b/app/components/publications/PublicationHeader.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+
+const PublicationHeader = () => {
+ return (
+
+ );
+};
+
+export default PublicationHeader;
diff --git a/app/components/publications/PublicationResults.tsx b/app/components/publications/PublicationResults.tsx
new file mode 100644
index 0000000..7f63444
--- /dev/null
+++ b/app/components/publications/PublicationResults.tsx
@@ -0,0 +1,169 @@
+'use client';
+import React, { useState } from 'react';
+import Link from 'next/link';
+
+const SORT_OPTIONS = ['Relevance', 'Newest First', 'Oldest First', 'Most Cited'];
+
+const PublicationResults = () => {
+ const [isSortOpen, setIsSortOpen] = useState(false);
+ const [selectedSort, setSelectedSort] = useState('Relevance');
+
+ return (
+
+
+
+ {/* Tiêu đề Section */}
+
+
Research Domains
+
+ Discover our core areas of expertise, where interdisciplinary teams tackle complex global challenges.
+
+
+
+ {/* Grid chứa các thẻ (Cards) */}
+
+
+ {/* Domain Card 1 (Nổi bật - Màu xanh) */}
+
+ {/* Hiệu ứng Glow */}
+
+
+
+
+
Law & Policy
+
+ Investigating the evolution of international law, human rights, and public policy in a rapidly changing geopolitical landscape.
+
+
+
+
+
+ {/* Domain Card 2 */}
+
+
+
+
Cognitive Science
+
+ Bridging psychology, neuroscience, and artificial intelligence to understand human cognition and behavior.
+
+
+
+
+
+ {/* Domain Card 3 */}
+
+
+
+
Environmental Studies
+
+ Developing sustainable solutions for climate change, resource management, and ecological preservation.
+
+
+
+
+
+ {/* Domain Card 4 */}
+
+
+
+
History & Humanities
+
+ Preserving cultural heritage and analyzing historical contexts to inform contemporary societal debates.
+
+
+
+
+
+ {/* Domain Card 5 */}
+
+
+
+
Economics
+
+ Analyzing global markets, behavioral economics, and policy impacts on socioeconomic development.
+
+
+
+
+
+ {/* Domain Card 6 - CTA */}
+
+
+
View All Domains
+
Explore our complete directory of 15+ research areas.
+
+
+
+
+
+ );
+};
+
+export default ResearchDomains;
\ No newline at end of file
diff --git a/app/components/research/ResearchHero.tsx b/app/components/research/ResearchHero.tsx
new file mode 100644
index 0000000..290ed8f
--- /dev/null
+++ b/app/components/research/ResearchHero.tsx
@@ -0,0 +1,101 @@
+'use client';
+
+import React from 'react';
+import { useRouter } from 'next/navigation';
+
+const ResearchHero = () => {
+ const router = useRouter();
+ return (
+
+
+ {/* Search bar */}
+
+
+
+
+
setQuery(e.target.value)}
+ onKeyDown={(e) => e.key === 'Enter' && handleSearch()}
+ placeholder="Search across researchers, labs, projects, and disciplines..."
+ style={{
+ width: '100%',
+ paddingLeft: '3rem',
+ paddingRight: '8rem',
+ paddingTop: '1rem',
+ paddingBottom: '1rem',
+ backgroundColor: '#ffffff',
+ border: '1px solid #e5e7eb',
+ borderRadius: '1rem',
+ boxShadow: '0 1px 2px 0 rgba(0,0,0,0.05)',
+ fontSize: '1rem',
+ color: '#374151',
+ outline: 'none',
+ transition: 'border-color 0.2s, box-shadow 0.2s',
+ boxSizing: 'border-box',
+ }}
+ onFocus={(e) => {
+ e.target.style.borderColor = '#263c6f';
+ e.target.style.boxShadow = '0 0 0 2px rgba(38,60,111,0.15)';
+ }}
+ onBlur={(e) => {
+ e.target.style.borderColor = '#e5e7eb';
+ e.target.style.boxShadow = '0 1px 2px 0 rgba(0,0,0,0.05)';
+ }}
+ />
+
+ (e.currentTarget.style.opacity = '0.9')}
+ onMouseLeave={(e) => (e.currentTarget.style.opacity = '1')}
+ >
+ Search
+
+
+
+
+ {/* Filter pills */}
+
+
+ Filters:
+
+ {filters.map((filter) => (
+ setActiveFilter(filter)}
+ style={{
+ fontSize: '0.75rem',
+ fontWeight: 500,
+ padding: '0.25rem 0.75rem',
+ borderRadius: '9999px',
+ border: 'none',
+ cursor: 'pointer',
+ transition: 'background-color 0.2s',
+ backgroundColor: activeFilter === filter ? 'rgba(38,60,111,0.1)' : '#f3f4f6',
+ color: activeFilter === filter ? '#263c6f' : '#4b5563',
+ }}
+ onMouseEnter={(e) => {
+ if (activeFilter !== filter) e.currentTarget.style.backgroundColor = '#e5e7eb';
+ }}
+ onMouseLeave={(e) => {
+ if (activeFilter !== filter) e.currentTarget.style.backgroundColor = '#f3f4f6';
+ }}
+ >
+ {filter}
+
+ ))}
+
+
+
+ );
+};
+
+export default ResearchSearch;
diff --git a/app/components/research/research.css b/app/components/research/research.css
new file mode 100644
index 0000000..f73db68
--- /dev/null
+++ b/app/components/research/research.css
@@ -0,0 +1,718 @@
+/* ============================================================
+ research.css — Scoped under .research-wrapper
+ Matches the HTML reference design exactly.
+ All rules scoped to avoid conflicts with Bootstrap/main.css
+ ============================================================ */
+
+/* --- Local CSS Variables --- */
+.research-wrapper {
+ --r-blue: #263c6f;
+ --r-blue-hover: #1d2e55;
+ --r-blue-light: #f0f4f8;
+ --r-accent: #3b82f6;
+ --r-border: #e5e7eb;
+ --r-text: #111827;
+ --r-muted: #6b7280;
+ --r-bg: #f9fafb;
+ --r-white: #ffffff;
+ --r-shadow-soft: 0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03);
+ --r-shadow-hover: 0 10px 15px -3px rgba(0,0,0,0.08), 0 4px 6px -2px rgba(0,0,0,0.04);
+
+ width: 100%;
+ background-color: var(--r-bg);
+}
+
+/* ============================================================
+ HERO SECTION
+ ============================================================ */
+.research-wrapper #research-hero {
+ width: 100%;
+ background-color: var(--r-bg);
+ border-bottom: 1px solid var(--r-border);
+ padding-top: 3rem;
+ padding-bottom: 4rem;
+ font-family: 'Inter', sans-serif;
+}
+
+/* Label row: gạch ngang + text "Research Hub" */
+.research-wrapper #research-hero .hero-label {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.research-wrapper #research-hero .hero-label-line {
+ display: block;
+ width: 2rem;
+ height: 2.5px;
+ background-color: var(--r-accent);
+ flex-shrink: 0;
+}
+
+.research-wrapper #research-hero .hero-label-text {
+ font-size: 0.875rem;
+ font-weight: 600;
+ color: var(--r-blue);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ font-family: 'Inter', sans-serif;
+}
+
+/* Heading */
+.research-wrapper #research-hero h1 {
+ font-family: 'Inter', sans-serif;
+ font-size: 3rem;
+ font-weight: 700;
+ color: var(--r-text);
+ letter-spacing: -0.025em;
+ line-height: 1.1;
+ margin: 0;
+}
+
+@media (min-width: 1024px) {
+ .research-wrapper #research-hero h1 {
+ font-size: 4.5rem;
+ }
+}
+
+.research-wrapper #research-hero h1 span {
+ color: var(--r-blue);
+}
+
+/* Paragraph */
+.research-wrapper #research-hero .hero-desc {
+ font-family: 'Inter', sans-serif;
+ font-size: 1.125rem;
+ color: var(--r-muted);
+ line-height: 1.625;
+ max-width: 36rem;
+ margin: 0;
+}
+
+/* Left column spacing */
+.research-wrapper #research-hero .hero-left {
+ display: flex;
+ flex-direction: column;
+ gap: 2rem;
+}
+
+/* Button row */
+.research-wrapper #research-hero .hero-buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+}
+
+/* Hero buttons */
+.research-wrapper .r-btn-primary {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 1rem 2rem;
+ background-color: var(--r-blue);
+ color: var(--r-white);
+ border: none;
+ border-radius: 9999px;
+ font-size: 1rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: background-color 0.2s;
+ box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
+ text-decoration: none;
+}
+
+.research-wrapper .r-btn-primary:hover {
+ background-color: var(--r-blue-hover);
+ color: var(--r-white);
+}
+
+.research-wrapper .r-btn-outline {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 1rem 2rem;
+ background-color: var(--r-white);
+ color: var(--r-text);
+ border: 1px solid var(--r-border);
+ border-radius: 9999px;
+ font-size: 1rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: background-color 0.2s;
+ box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05);
+ text-decoration: none;
+}
+
+.research-wrapper .r-btn-outline:hover {
+ background-color: #f9fafb;
+ color: var(--r-text);
+}
+
+/* Hero floating stat cards */
+.research-wrapper .r-stat-card {
+ position: absolute;
+ background-color: var(--r-white);
+ border-radius: 1rem;
+ padding: 1rem;
+ border: 1px solid var(--r-border);
+ box-shadow: var(--r-shadow-hover);
+ z-index: 20;
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+}
+
+.research-wrapper .r-stat-card p {
+ margin: 0;
+ line-height: 1.2;
+}
+
+/* ============================================================
+ RESEARCH DOMAINS SECTION
+ ============================================================ */
+.research-wrapper #research-domains {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+ background-color: var(--r-white);
+}
+
+.research-wrapper #research-domains h2 {
+ font-size: 1.875rem;
+ font-weight: 700;
+ color: var(--r-text);
+ margin-bottom: 1rem;
+}
+
+@media (min-width: 1024px) {
+ .research-wrapper #research-domains h2 {
+ font-size: 2.25rem;
+ }
+}
+
+.research-wrapper #research-domains > div > div:first-child p {
+ color: var(--r-muted);
+ max-width: 42rem;
+ margin: 0 auto;
+}
+
+/* Domain card — folder tab shape */
+.research-wrapper .folder-tab {
+ clip-path: polygon(0 0, calc(100% - 40px) 0, 100% 40px, 100% 100%, 0 100%);
+ padding: 2rem;
+ min-height: 320px;
+ display: flex;
+ flex-direction: column;
+ border-radius: 1.5rem;
+ position: relative;
+ overflow: hidden;
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+.research-wrapper .folder-tab:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--r-shadow-hover);
+}
+
+/* Blue variant (first card) */
+.research-wrapper .folder-tab-blue {
+ background-color: var(--r-blue);
+ color: var(--r-white);
+}
+
+.research-wrapper .folder-tab-blue h3 {
+ color: var(--r-white);
+}
+
+.research-wrapper .folder-tab-blue p {
+ color: rgba(255,255,255,0.8);
+}
+
+/* Light variant */
+.research-wrapper .folder-tab-light {
+ background-color: var(--r-blue-light);
+ color: var(--r-text);
+ border: 1px solid var(--r-border);
+}
+
+/* CTA card (dashed border) */
+.research-wrapper .domain-card-cta {
+ border-radius: 1.5rem;
+ padding: 2rem;
+ min-height: 320px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ border: 2px dashed var(--r-border);
+ background-color: var(--r-bg);
+ cursor: pointer;
+ transition: border-color 0.2s;
+}
+
+.research-wrapper .domain-card-cta:hover {
+ border-color: var(--r-blue);
+}
+
+.research-wrapper .domain-card-cta h3 {
+ font-size: 1.25rem;
+ font-weight: 700;
+ color: var(--r-text);
+ margin-bottom: 0.5rem;
+}
+
+.research-wrapper .domain-card-cta p {
+ font-size: 0.875rem;
+ color: var(--r-muted);
+ margin: 0;
+}
+
+/* Domain card icon box */
+.research-wrapper .domain-icon-blue {
+ width: 3.5rem;
+ height: 3.5rem;
+ border-radius: 1rem;
+ background-color: rgba(255,255,255,0.2);
+ backdrop-filter: blur(4px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 2rem;
+ border: 1px solid rgba(255,255,255,0.3);
+ flex-shrink: 0;
+}
+
+.research-wrapper .domain-icon-light {
+ width: 3.5rem;
+ height: 3.5rem;
+ border-radius: 1rem;
+ background-color: var(--r-white);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 2rem;
+ border: 1px solid var(--r-border);
+ box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05);
+ flex-shrink: 0;
+}
+
+.research-wrapper .domain-card-cta .domain-icon-cta {
+ width: 4rem;
+ height: 4rem;
+ border-radius: 9999px;
+ background-color: var(--r-white);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 1rem;
+ box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05);
+ transition: transform 0.2s;
+}
+
+.research-wrapper .domain-card-cta:hover .domain-icon-cta {
+ transform: scale(1.1);
+}
+
+/* Domain card footer row */
+.research-wrapper .domain-card-footer {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: auto;
+}
+
+.research-wrapper .domain-badge-white {
+ font-size: 0.875rem;
+ font-weight: 500;
+ background-color: var(--r-white);
+ padding: 0.25rem 0.75rem;
+ border-radius: 9999px;
+ border: 1px solid var(--r-border);
+ color: var(--r-blue);
+}
+
+.research-wrapper .domain-badge-glass {
+ font-size: 0.875rem;
+ font-weight: 500;
+ background-color: rgba(255,255,255,0.2);
+ padding: 0.25rem 0.75rem;
+ border-radius: 9999px;
+ color: var(--r-white);
+}
+
+/* ============================================================
+ PROJECTS & CENTERS SECTION
+ ============================================================ */
+.research-wrapper #projects-centers {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+ background-color: var(--r-bg);
+ border-top: 1px solid var(--r-border);
+ border-bottom: 1px solid var(--r-border);
+}
+
+.research-wrapper #projects-centers h2 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ color: var(--r-text);
+ margin: 0;
+}
+
+/* Project item card */
+.research-wrapper .project-card {
+ background-color: var(--r-white);
+ border-radius: 1.25rem;
+ padding: 1.5rem;
+ border: 1px solid var(--r-border);
+ box-shadow: var(--r-shadow-soft);
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+ align-items: flex-start;
+ transition: box-shadow 0.25s ease;
+}
+
+.research-wrapper .project-card:hover {
+ box-shadow: var(--r-shadow-hover);
+}
+
+@media (min-width: 640px) {
+ .research-wrapper .project-card {
+ flex-direction: row;
+ align-items: center;
+ }
+}
+
+.research-wrapper .project-icon {
+ width: 4rem;
+ height: 4rem;
+ border-radius: 0.75rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ border: 1px solid var(--r-border);
+}
+
+.research-wrapper .project-icon-blue { background-color: var(--r-blue-light); border-color: var(--r-border); }
+.research-wrapper .project-icon-purple { background-color: #faf5ff; border-color: #e9d5ff; }
+.research-wrapper .project-icon-orange { background-color: #fff7ed; border-color: #fed7aa; }
+
+/* Status badges */
+.research-wrapper .badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.25rem 0.625rem;
+ border-radius: 0.375rem;
+ font-size: 0.75rem;
+ font-weight: 600;
+ border: 1px solid transparent;
+}
+
+.research-wrapper .badge-active { background-color: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
+.research-wrapper .badge-collection { background-color: #fefce8; color: #a16207; border-color: #fde68a; }
+.research-wrapper .badge-review { background-color: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
+
+/* Progress bar */
+.research-wrapper .progress-bar-track {
+ width: 8rem;
+ background-color: var(--r-bg);
+ border-radius: 9999px;
+ height: 0.375rem;
+}
+
+.research-wrapper .progress-bar-fill {
+ height: 0.375rem;
+ border-radius: 9999px;
+}
+
+.research-wrapper .progress-fill-blue { background-color: var(--r-blue); }
+.research-wrapper .progress-fill-accent { background-color: var(--r-accent); }
+
+/* ============================================================
+ FUNDING CALLS (right column)
+ ============================================================ */
+.research-wrapper .funding-card {
+ background-color: var(--r-white);
+ border-radius: 1.5rem;
+ padding: 1.5rem;
+ border: 1px solid var(--r-border);
+ box-shadow: var(--r-shadow-soft);
+ display: flex;
+ flex-direction: column;
+ transition: box-shadow 0.25s ease;
+}
+
+.research-wrapper .funding-card:hover {
+ box-shadow: var(--r-shadow-hover);
+}
+
+.research-wrapper .funding-item {
+ padding: 1.25rem;
+ background-color: var(--r-bg);
+ border-radius: 1rem;
+ border: 1px solid var(--r-border);
+ transition: border-color 0.2s;
+}
+
+.research-wrapper .funding-item:hover {
+ border-color: var(--r-accent);
+}
+
+.research-wrapper .funding-item h4 {
+ font-size: 1rem;
+ font-weight: 700;
+ color: var(--r-text);
+ margin: 0 0 0.75rem 0;
+}
+
+.research-wrapper .funding-label-urgent {
+ font-size: 0.625rem;
+ font-weight: 700;
+ color: #ef4444;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ display: block;
+ margin-bottom: 0.5rem;
+}
+
+.research-wrapper .funding-label-internal {
+ font-size: 0.625rem;
+ font-weight: 700;
+ color: var(--r-blue);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ display: block;
+ margin-bottom: 0.5rem;
+}
+
+.research-wrapper .funding-meta {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.research-wrapper .funding-due {
+ font-size: 0.75rem;
+ color: var(--r-muted);
+ font-weight: 500;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.375rem;
+}
+
+.research-wrapper .funding-link {
+ font-size: 0.75rem;
+ font-weight: 600;
+ color: var(--r-blue);
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+ text-decoration: none;
+ transition: color 0.15s;
+}
+
+.research-wrapper .funding-link:hover {
+ color: var(--r-blue-hover);
+}
+
+.research-wrapper .funding-view-all {
+ width: 100%;
+ margin-top: 1.5rem;
+ padding: 0.75rem;
+ border-radius: 0.75rem;
+ border: 1px solid var(--r-border);
+ font-size: 0.875rem;
+ font-weight: 600;
+ color: var(--r-text);
+ background-color: var(--r-white);
+ cursor: pointer;
+ transition: border-color 0.2s, color 0.2s;
+ box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05);
+}
+
+.research-wrapper .funding-view-all:hover {
+ border-color: var(--r-blue);
+ color: var(--r-blue);
+}
+
+/* ============================================================
+ RESEARCH RESOURCES (Quick Links)
+ ============================================================ */
+.research-wrapper #research-quick-links {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+ background-color: var(--r-white);
+}
+
+.research-wrapper .resource-card {
+ display: block;
+ background-color: var(--r-bg);
+ border-radius: 1.5rem;
+ padding: 2rem;
+ border: 1px solid var(--r-border);
+ position: relative;
+ overflow: hidden;
+ text-decoration: none;
+ transition: border-color 0.2s;
+}
+
+.research-wrapper .resource-card:hover {
+ border-color: var(--r-accent);
+}
+
+.research-wrapper .resource-card-glow {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 16rem;
+ height: 16rem;
+ background-color: var(--r-blue-light);
+ border-radius: 9999px;
+ filter: blur(64px);
+ opacity: 0.5;
+ transform: translateY(-50%) translateX(25%);
+ transition: opacity 0.3s;
+ pointer-events: none;
+}
+
+.research-wrapper .resource-card:hover .resource-card-glow {
+ opacity: 0.8;
+}
+
+.research-wrapper .resource-icon {
+ width: 4rem;
+ height: 4rem;
+ border-radius: 1rem;
+ background-color: var(--r-white);
+ box-shadow: 0 1px 2px 0 rgba(0,0,0,0.05);
+ border: 1px solid var(--r-border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ transition: transform 0.2s;
+}
+
+.research-wrapper .resource-card:hover .resource-icon {
+ transform: scale(1.05);
+}
+
+.research-wrapper .resource-card h3 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ color: var(--r-text);
+ margin-bottom: 0.5rem;
+ transition: color 0.2s;
+}
+
+.research-wrapper .resource-card:hover h3 {
+ color: var(--r-blue);
+}
+
+.research-wrapper .resource-card p {
+ color: var(--r-muted);
+ line-height: 1.625;
+ margin-bottom: 1rem;
+}
+
+.research-wrapper .resource-link {
+ display: inline-flex;
+ align-items: center;
+ font-size: 0.875rem;
+ font-weight: 600;
+ color: var(--r-blue);
+ gap: 0.5rem;
+}
+
+/* ============================================================
+ COLLABORATION CTA SECTION
+ ============================================================ */
+.research-wrapper #collaboration-cta {
+ padding-top: 6rem;
+ padding-bottom: 6rem;
+ background-color: var(--r-blue);
+ position: relative;
+ overflow: hidden;
+}
+
+.research-wrapper #collaboration-cta h2 {
+ font-size: 2.25rem;
+ font-weight: 700;
+ color: var(--r-white);
+ letter-spacing: -0.025em;
+ margin-bottom: 1.5rem;
+}
+
+@media (min-width: 768px) {
+ .research-wrapper #collaboration-cta h2 { font-size: 3rem; }
+}
+
+@media (min-width: 1024px) {
+ .research-wrapper #collaboration-cta h2 { font-size: 3.75rem; }
+}
+
+.research-wrapper #collaboration-cta p {
+ font-size: 1.25rem;
+ color: var(--r-blue-light);
+ opacity: 0.9;
+ line-height: 1.625;
+ max-width: 42rem;
+ margin: 0 auto 2.5rem;
+ font-weight: 300;
+}
+
+.research-wrapper .cta-btn-white {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ padding: 1rem 2rem;
+ background-color: var(--r-white);
+ color: var(--r-blue);
+ border: none;
+ border-radius: 0.75rem;
+ font-size: 1rem;
+ font-weight: 700;
+ cursor: pointer;
+ transition: background-color 0.2s;
+ box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1);
+ text-decoration: none;
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .research-wrapper .cta-btn-white { width: auto; }
+}
+
+.research-wrapper .cta-btn-white:hover {
+ background-color: #f9fafb;
+ color: var(--r-blue);
+}
+
+.research-wrapper .cta-btn-ghost {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ padding: 1rem 2rem;
+ background-color: transparent;
+ color: var(--r-white);
+ border: 2px solid rgba(255,255,255,0.3);
+ border-radius: 0.75rem;
+ font-size: 1rem;
+ font-weight: 700;
+ cursor: pointer;
+ transition: background-color 0.2s;
+ text-decoration: none;
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .research-wrapper .cta-btn-ghost { width: auto; }
+}
+
+.research-wrapper .cta-btn-ghost:hover {
+ background-color: rgba(255,255,255,0.1);
+ color: var(--r-white);
+}
diff --git a/app/components/research/search/ResearchSearchHeader.tsx b/app/components/research/search/ResearchSearchHeader.tsx
new file mode 100644
index 0000000..80ec3d7
--- /dev/null
+++ b/app/components/research/search/ResearchSearchHeader.tsx
@@ -0,0 +1,79 @@
+'use client';
+
+import React, { useState } from 'react';
+import { useRouter } from 'next/navigation';
+
+const FILTERS = ['Researchers', 'Labs', 'Projects', 'Institutes'];
+
+const ResearchSearchHeader = () => {
+ const [query, setQuery] = useState('');
+ const [activeFilter, setActiveFilter] = useState('Researchers');
+ const router = useRouter();
+
+ const handleSearch = () => {
+ const params = new URLSearchParams({ q: query, type: activeFilter });
+ router.push(`/research/search?${params.toString()}`);
+ };
+
+ return (
+
+ );
+};
+
+export default ResearchSearchHeader;
diff --git a/app/components/research/search/ResearchSearchResults.tsx b/app/components/research/search/ResearchSearchResults.tsx
new file mode 100644
index 0000000..d4460a8
--- /dev/null
+++ b/app/components/research/search/ResearchSearchResults.tsx
@@ -0,0 +1,177 @@
+'use client';
+
+import React, { useState } from 'react';
+
+const SORT_OPTIONS = ['Relevance', 'Newest First', 'Most Active', 'Alphabetical'];
+
+const RESULTS = [
+ {
+ type: 'Project',
+ badgeClass: 'pub-badge-open',
+ badgeIcon: 'fa-flask',
+ badgeLabel: 'Active Project',
+ statusClass: 'pub-badge-peer',
+ statusLabel: 'Environmental Studies',
+ title: 'Urban Microclimate Modeling',
+ lead: 'Dr. Alan Turing',
+ updated: 'Updated 2 days ago',
+ center: 'Institute for Climate Research',
+ desc: 'Developing high-resolution predictive models for heat island effects in European metropolitan areas using machine learning and satellite data.',
+ tags: ['Climate', 'Machine Learning', 'Urban Studies'],
+ progress: 65,
+ },
+ {
+ type: 'Lab',
+ badgeClass: 'pub-badge-institutional',
+ badgeIcon: 'fa-building-user',
+ badgeLabel: 'Research Lab',
+ statusClass: 'pub-badge-peer',
+ statusLabel: 'Cognitive Science',
+ title: 'Cognitive Sciences Lab',
+ lead: 'Prof. Marie Curie',
+ updated: 'Updated 1 week ago',
+ center: 'Center for Digital Humanities',
+ desc: 'Exploring the intersection of artificial intelligence and human psychology, with a focus on decision-making processes and behavioral modeling.',
+ tags: ['AI', 'Psychology', 'Neuroscience'],
+ progress: null,
+ },
+ {
+ type: 'Project',
+ badgeClass: 'pub-badge-request',
+ badgeIcon: 'fa-gavel',
+ badgeLabel: 'Data Collection',
+ statusClass: 'pub-badge-peer',
+ statusLabel: 'Law & Policy',
+ title: 'Digital Rights in the EU Framework',
+ lead: 'Dr. Elena Rostova',
+ updated: 'Updated 1 week ago',
+ center: 'Institute for Advanced European Studies',
+ desc: 'A comparative analysis of member state implementation of digital privacy directives and their impact on civil liberties across the EU.',
+ tags: ['Digital Rights', 'EU Law', 'Privacy'],
+ progress: 30,
+ },
+];
+
+const ResearchSearchResults = () => {
+ const [isSortOpen, setIsSortOpen] = useState(false);
+ const [selectedSort, setSelectedSort] = useState('Relevance');
+
+ return (
+