jinruiyang Claude Opus 4.5 commited on
Commit Β·
d201535
1
Parent(s): 197e031
Improve mobile responsiveness and add home link
Browse files- Enlarge falcon icon on mobile home view (120px)
- Fix category dropdown clipping on mobile (remove overflow-hidden)
- Make dropdown options more compact for mobile
- Add clickable home link to title for navigation
- Improve mobile layout for search box, results, and feedback
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- frontend/css/styles.css +41 -4
- frontend/index.html +38 -35
- frontend/js/app.js +40 -22
frontend/css/styles.css
CHANGED
|
@@ -6,6 +6,11 @@
|
|
| 6 |
/* ============================================
|
| 7 |
BASE STYLES
|
| 8 |
============================================ */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
body {
|
| 10 |
/* Font stack: Roboto (EN), Noto Sans Arabic (AR), Noto Sans SC (CN) */
|
| 11 |
font-family: 'Roboto', 'Noto Sans Arabic', 'Noto Sans SC', sans-serif;
|
|
@@ -299,18 +304,50 @@ body.home-view footer {
|
|
| 299 |
}
|
| 300 |
|
| 301 |
/* ============================================
|
| 302 |
-
RESPONSIVE
|
| 303 |
============================================ */
|
| 304 |
@media (max-width: 768px) {
|
| 305 |
.falcon-icon {
|
| 306 |
-
height:
|
| 307 |
}
|
| 308 |
|
| 309 |
.falcon-overlap-container {
|
| 310 |
-
top:
|
| 311 |
}
|
| 312 |
|
| 313 |
body.home-view .falcon-overlap-container {
|
| 314 |
-
top: calc(50% -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 315 |
}
|
| 316 |
}
|
|
|
|
| 6 |
/* ============================================
|
| 7 |
BASE STYLES
|
| 8 |
============================================ */
|
| 9 |
+
html, body {
|
| 10 |
+
overflow-x: hidden;
|
| 11 |
+
max-width: 100vw;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
body {
|
| 15 |
/* Font stack: Roboto (EN), Noto Sans Arabic (AR), Noto Sans SC (CN) */
|
| 16 |
font-family: 'Roboto', 'Noto Sans Arabic', 'Noto Sans SC', sans-serif;
|
|
|
|
| 304 |
}
|
| 305 |
|
| 306 |
/* ============================================
|
| 307 |
+
RESPONSIVE - MOBILE
|
| 308 |
============================================ */
|
| 309 |
@media (max-width: 768px) {
|
| 310 |
.falcon-icon {
|
| 311 |
+
height: 60px;
|
| 312 |
}
|
| 313 |
|
| 314 |
.falcon-overlap-container {
|
| 315 |
+
top: 45px;
|
| 316 |
}
|
| 317 |
|
| 318 |
body.home-view .falcon-overlap-container {
|
| 319 |
+
top: calc(50% - 130px);
|
| 320 |
+
}
|
| 321 |
+
|
| 322 |
+
body.home-view .falcon-icon {
|
| 323 |
+
height: 120px;
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
/* Search box lower on mobile home view */
|
| 327 |
+
#search-header.home-mode {
|
| 328 |
+
top: calc(50% + 30px);
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
/* Category dropdown full width on mobile */
|
| 332 |
+
.category-dropdown-menu {
|
| 333 |
+
left: 0;
|
| 334 |
+
right: 0;
|
| 335 |
+
width: 100%;
|
| 336 |
+
min-width: 100%;
|
| 337 |
+
border-radius: 0 0 8px 8px;
|
| 338 |
+
max-height: 50vh;
|
| 339 |
+
overflow-y: auto;
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
.category-option {
|
| 343 |
+
padding: 8px 12px;
|
| 344 |
+
font-size: 14px;
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
/* Modal full width on mobile */
|
| 348 |
+
.modal-content {
|
| 349 |
+
max-width: 95%;
|
| 350 |
+
max-height: 85vh;
|
| 351 |
+
margin: 0.5rem;
|
| 352 |
}
|
| 353 |
}
|
frontend/index.html
CHANGED
|
@@ -36,24 +36,25 @@
|
|
| 36 |
<!-- ========================================
|
| 37 |
TOP GOLD BAR
|
| 38 |
======================================== -->
|
| 39 |
-
<div class="gold-fade h-[60px] shadow-md relative z-20 flex items-center">
|
| 40 |
-
<div class="container mx-auto max-w-5xl px-6 flex justify-between items-center text-emerald-950">
|
| 41 |
-
<
|
| 42 |
-
<span class="text-4xl leading-none mt-2">π¦πͺ</span>
|
| 43 |
-
<h1 class="text-[20px] font-medium tracking-wide">UAE Knowledge System</h1>
|
| 44 |
-
</
|
| 45 |
-
<div class="flex items-center gap-4">
|
| 46 |
-
<
|
| 47 |
-
<
|
|
|
|
| 48 |
<!-- Language Toggle -->
|
| 49 |
-
<div class="flex gap-1 text-[16px] font-medium">
|
| 50 |
-
<button onclick="setLanguage('en')" id="lang-en" class="lang-toggle px-2 py-1 rounded hover:bg-white/20 transition">EN</button>
|
| 51 |
<span class="opacity-40">|</span>
|
| 52 |
-
<button onclick="setLanguage('ar')" id="lang-ar" class="lang-toggle px-2 py-1 rounded hover:bg-white/20 transition">AR</button>
|
| 53 |
<span class="opacity-40">|</span>
|
| 54 |
-
<button onclick="setLanguage('cn')" id="lang-cn" class="lang-toggle px-2 py-1 rounded hover:bg-white/20 transition">CN</button>
|
| 55 |
</div>
|
| 56 |
-
<button id="help-btn" class="text-[16px] font-medium uppercase hover:text-white transition">Help</button>
|
| 57 |
</div>
|
| 58 |
</div>
|
| 59 |
</div>
|
|
@@ -70,18 +71,19 @@
|
|
| 70 |
HEADER WITH SEARCH (centered on home, top after search)
|
| 71 |
======================================== -->
|
| 72 |
<header id="search-header" class="home-mode relative z-10">
|
| 73 |
-
<div class="container mx-auto max-w-5xl px-6 text-center">
|
| 74 |
-
<
|
|
|
|
| 75 |
<!-- Search Input -->
|
| 76 |
-
<div class="flex-grow flex items-center px-6">
|
| 77 |
<input type="text" id="search-input"
|
| 78 |
-
class="w-full text-emerald-950 outline-none text-[18px]"
|
| 79 |
-
placeholder="Ask about UAE
|
| 80 |
</div>
|
| 81 |
|
| 82 |
<!-- Category Dropdown -->
|
| 83 |
<div class="category-dropdown relative">
|
| 84 |
-
<button id="category-btn" class="bg-gray-50 flex items-center px-4 h-
|
| 85 |
<span id="category-text">Select Category</span>
|
| 86 |
<span class="ml-2 opacity-40">βΌ</span>
|
| 87 |
</button>
|
|
@@ -98,14 +100,15 @@
|
|
| 98 |
</div>
|
| 99 |
|
| 100 |
<!-- Search Button -->
|
| 101 |
-
<button id="search-btn" class="gold-fade hover:brightness-110 px-8 text-emerald-950
|
| 102 |
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
| 103 |
<path d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
|
| 104 |
</svg>
|
|
|
|
| 105 |
</button>
|
| 106 |
</div>
|
| 107 |
-
<p id="first-query-note" class="text-[14px] text-[#003d1c] mt-3 text-center">
|
| 108 |
-
Note: First query may take a few seconds to load the index.
|
| 109 |
</p>
|
| 110 |
</div>
|
| 111 |
</header>
|
|
@@ -113,30 +116,30 @@
|
|
| 113 |
<!-- ========================================
|
| 114 |
MAIN CONTENT (hidden until search)
|
| 115 |
======================================== -->
|
| 116 |
-
<main id="results-section" class="container mx-auto max-w-5xl py-10 px-6 hidden">
|
| 117 |
<!-- Results Header -->
|
| 118 |
-
<div class="flex justify-between items-end border-b border-gray-200 pb-2 mb-8">
|
| 119 |
-
<h2 class="text-emerald-900 font-medium text-[18px] tracking-widest flex items-center gap-3">
|
| 120 |
-
<span class="text-xl">π¦
</span> RETRIEVAL RESULTS
|
| 121 |
</h2>
|
| 122 |
-
<span id="results-count" class="text-emerald-700 font-medium text-[16px]">0 ITEMS FOUND</span>
|
| 123 |
</div>
|
| 124 |
|
| 125 |
<!-- Results Container -->
|
| 126 |
<div id="results-container"></div>
|
| 127 |
|
| 128 |
<!-- Feedback Section -->
|
| 129 |
-
<div class="bg-[#F3EDE2]/50 rounded-lg border border-amber-600/10 px-8 py-5 mt-8 flex flex-col
|
| 130 |
-
<div id="feedback-label" class="flex items-center gap-3 text-emerald-900 text-[20px] font-medium uppercase tracking-wider">
|
| 131 |
<span>π¬</span> FEEDBACK
|
| 132 |
</div>
|
| 133 |
-
<div class="
|
| 134 |
<input type="text" id="feedback-input"
|
| 135 |
-
class="w-full bg-white border border-gray-200 rounded px-5 py-2 text-sm text-emerald-950 shadow-inner outline-none focus:border-amber-500"
|
| 136 |
-
placeholder="Any comments
|
| 137 |
</div>
|
| 138 |
-
<button id="submit-feedback-btn" class="bg-emerald-900 text-white text-[20px] px-8 py-2 font-medium rounded hover:bg-emerald-800 shadow-xl transition">
|
| 139 |
-
Submit
|
| 140 |
</button>
|
| 141 |
</div>
|
| 142 |
</main>
|
|
|
|
| 36 |
<!-- ========================================
|
| 37 |
TOP GOLD BAR
|
| 38 |
======================================== -->
|
| 39 |
+
<div class="gold-fade min-h-[50px] md:h-[60px] shadow-md relative z-20 flex items-center py-2 md:py-0">
|
| 40 |
+
<div class="container mx-auto max-w-5xl px-3 md:px-6 flex justify-between items-center text-emerald-950">
|
| 41 |
+
<a href="#" onclick="goHome(); return false;" class="flex items-center gap-2 md:gap-3 hover:opacity-80 transition cursor-pointer">
|
| 42 |
+
<span class="text-2xl md:text-4xl leading-none mt-1 md:mt-2">π¦πͺ</span>
|
| 43 |
+
<h1 class="text-[14px] md:text-[20px] font-medium tracking-wide">UAE Knowledge System</h1>
|
| 44 |
+
</a>
|
| 45 |
+
<div class="flex items-center gap-2 md:gap-4">
|
| 46 |
+
<!-- Stats hidden on mobile -->
|
| 47 |
+
<span id="stats-text" class="hidden md:inline text-[16px] opacity-70">Loading...</span>
|
| 48 |
+
<div class="flex gap-2 md:gap-4 items-center">
|
| 49 |
<!-- Language Toggle -->
|
| 50 |
+
<div class="flex gap-0.5 md:gap-1 text-[12px] md:text-[16px] font-medium">
|
| 51 |
+
<button onclick="setLanguage('en')" id="lang-en" class="lang-toggle px-1.5 md:px-2 py-1 rounded hover:bg-white/20 transition">EN</button>
|
| 52 |
<span class="opacity-40">|</span>
|
| 53 |
+
<button onclick="setLanguage('ar')" id="lang-ar" class="lang-toggle px-1.5 md:px-2 py-1 rounded hover:bg-white/20 transition">AR</button>
|
| 54 |
<span class="opacity-40">|</span>
|
| 55 |
+
<button onclick="setLanguage('cn')" id="lang-cn" class="lang-toggle px-1.5 md:px-2 py-1 rounded hover:bg-white/20 transition">CN</button>
|
| 56 |
</div>
|
| 57 |
+
<button id="help-btn" class="text-[12px] md:text-[16px] font-medium uppercase hover:text-white transition">Help</button>
|
| 58 |
</div>
|
| 59 |
</div>
|
| 60 |
</div>
|
|
|
|
| 71 |
HEADER WITH SEARCH (centered on home, top after search)
|
| 72 |
======================================== -->
|
| 73 |
<header id="search-header" class="home-mode relative z-10">
|
| 74 |
+
<div class="container mx-auto max-w-5xl px-3 md:px-6 text-center">
|
| 75 |
+
<!-- Mobile: vertical stack, Desktop: horizontal -->
|
| 76 |
+
<div class="flex flex-col md:flex-row shadow-xl rounded-xl md:rounded-2xl bg-white relative z-10 border border-gray-200">
|
| 77 |
<!-- Search Input -->
|
| 78 |
+
<div class="flex-grow flex items-center px-4 md:px-6 border-b md:border-b-0 md:border-r border-gray-100">
|
| 79 |
<input type="text" id="search-input"
|
| 80 |
+
class="w-full text-emerald-950 outline-none text-[16px] md:text-[18px] py-3 md:py-0"
|
| 81 |
+
placeholder="Ask about UAE...">
|
| 82 |
</div>
|
| 83 |
|
| 84 |
<!-- Category Dropdown -->
|
| 85 |
<div class="category-dropdown relative">
|
| 86 |
+
<button id="category-btn" class="w-full md:w-auto bg-gray-50 flex items-center justify-between md:justify-start px-4 py-3 md:py-0 md:h-12 text-emerald-800 text-[14px] md:text-[18px] font-normal hover:bg-gray-100 transition border-b md:border-b-0 border-gray-100">
|
| 87 |
<span id="category-text">Select Category</span>
|
| 88 |
<span class="ml-2 opacity-40">βΌ</span>
|
| 89 |
</button>
|
|
|
|
| 100 |
</div>
|
| 101 |
|
| 102 |
<!-- Search Button -->
|
| 103 |
+
<button id="search-btn" class="gold-fade hover:brightness-110 px-8 py-3 md:py-0 text-emerald-950 md:rounded-r-2xl flex items-center justify-center transition">
|
| 104 |
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
| 105 |
<path d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
|
| 106 |
</svg>
|
| 107 |
+
<span class="ml-2 md:hidden font-medium">Search</span>
|
| 108 |
</button>
|
| 109 |
</div>
|
| 110 |
+
<p id="first-query-note" class="text-[12px] md:text-[14px] text-[#003d1c] mt-3 text-center px-2">
|
| 111 |
+
Note: First query may take a few seconds to load the index.
|
| 112 |
</p>
|
| 113 |
</div>
|
| 114 |
</header>
|
|
|
|
| 116 |
<!-- ========================================
|
| 117 |
MAIN CONTENT (hidden until search)
|
| 118 |
======================================== -->
|
| 119 |
+
<main id="results-section" class="container mx-auto max-w-5xl py-6 md:py-10 px-3 md:px-6 hidden">
|
| 120 |
<!-- Results Header -->
|
| 121 |
+
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-end gap-2 border-b border-gray-200 pb-2 mb-6 md:mb-8">
|
| 122 |
+
<h2 class="text-emerald-900 font-medium text-[14px] md:text-[18px] tracking-widest flex items-center gap-2 md:gap-3">
|
| 123 |
+
<span class="text-lg md:text-xl">π¦
</span> RETRIEVAL RESULTS
|
| 124 |
</h2>
|
| 125 |
+
<span id="results-count" class="text-emerald-700 font-medium text-[12px] md:text-[16px]">0 ITEMS FOUND</span>
|
| 126 |
</div>
|
| 127 |
|
| 128 |
<!-- Results Container -->
|
| 129 |
<div id="results-container"></div>
|
| 130 |
|
| 131 |
<!-- Feedback Section -->
|
| 132 |
+
<div class="bg-[#F3EDE2]/50 rounded-lg border border-amber-600/10 px-4 md:px-8 py-4 md:py-5 mt-6 md:mt-8 flex flex-col gap-4 md:gap-6">
|
| 133 |
+
<div id="feedback-label" class="flex items-center gap-2 md:gap-3 text-emerald-900 text-[16px] md:text-[20px] font-medium uppercase tracking-wider">
|
| 134 |
<span>π¬</span> FEEDBACK
|
| 135 |
</div>
|
| 136 |
+
<div class="w-full">
|
| 137 |
<input type="text" id="feedback-input"
|
| 138 |
+
class="w-full bg-white border border-gray-200 rounded px-4 md:px-5 py-3 md:py-2 text-[16px] md:text-sm text-emerald-950 shadow-inner outline-none focus:border-amber-500"
|
| 139 |
+
placeholder="Any comments? (optional)">
|
| 140 |
</div>
|
| 141 |
+
<button id="submit-feedback-btn" class="w-full md:w-auto bg-emerald-900 text-white text-[16px] md:text-[20px] px-8 py-3 md:py-2 font-medium rounded hover:bg-emerald-800 shadow-xl transition">
|
| 142 |
+
Submit Feedback
|
| 143 |
</button>
|
| 144 |
</div>
|
| 145 |
</main>
|
frontend/js/app.js
CHANGED
|
@@ -556,32 +556,32 @@ function renderResults() {
|
|
| 556 |
const content = getResultContent(result, index);
|
| 557 |
|
| 558 |
return `
|
| 559 |
-
<div class="bg-white rounded
|
| 560 |
<!-- Card Header -->
|
| 561 |
-
<div class="px-6 py-3 flex justify-between items-center text-white border-b-4 border-amber-500 bg-[#003d1c]">
|
| 562 |
-
<div class="text-[18px] font-medium flex items-center gap-4">
|
| 563 |
<span class="text-amber-400">${index === 0 ? 'π¦
' : 'π'}</span>
|
| 564 |
#${index + 1} ${escapeHtml(content.entityName)}
|
| 565 |
</div>
|
| 566 |
-
<div class="text-[16px] font-medium gold-button-slender text-emerald-950 px-4 rounded shadow-sm">
|
| 567 |
${t('rankScore')}: ${result.score.toFixed(2)} β²
|
| 568 |
</div>
|
| 569 |
</div>
|
| 570 |
|
| 571 |
<!-- Card Body -->
|
| 572 |
-
<div class="p-8">
|
| 573 |
-
<div class="flex flex-col md:flex-row gap-12">
|
| 574 |
<!-- Summary -->
|
| 575 |
-
<div class="flex-1 summary-box p-6">
|
| 576 |
-
<p class="text-[18px] leading-7 text-emerald-900">
|
| 577 |
${escapeHtml(content.summary || t('noResults'))}
|
| 578 |
</p>
|
| 579 |
</div>
|
| 580 |
|
| 581 |
<!-- Must-Know Facts -->
|
| 582 |
<div class="w-full md:w-[38%] pt-1">
|
| 583 |
-
<h4 class="text-emerald-800 font-medium text-[18px] mb-4">${t('mustKnowFacts')}</h4>
|
| 584 |
-
<ul class="text-[18px] space-y-3 text-emerald-800/80">
|
| 585 |
${content.facts.slice(0, 5).map(fact => `
|
| 586 |
<li>β’ ${escapeHtml(fact)}</li>
|
| 587 |
`).join('')}
|
|
@@ -590,12 +590,12 @@ function renderResults() {
|
|
| 590 |
</div>
|
| 591 |
|
| 592 |
<!-- Rating Row -->
|
| 593 |
-
<div class="mt-8 border-t border-gray-50 pt-6 flex
|
| 594 |
-
<div class="flex items-center gap-12">
|
| 595 |
<!-- Relevance Rating -->
|
| 596 |
-
<div class="flex items-center gap-3">
|
| 597 |
-
<span class="text-[16px] font-medium text-gray-400 tracking-wider">${t('relevance')}</span>
|
| 598 |
-
<div class="flex gap-2 text-xl">
|
| 599 |
<button class="rating-btn ${state.ratings[index]?.relevance === 0 ? 'active' : ''}"
|
| 600 |
onclick="setRating(${index}, 'relevance', 0)">π</button>
|
| 601 |
<button class="rating-btn ${state.ratings[index]?.relevance === 1 ? 'active' : ''}"
|
|
@@ -604,9 +604,9 @@ function renderResults() {
|
|
| 604 |
</div>
|
| 605 |
|
| 606 |
<!-- Helpful Rating -->
|
| 607 |
-
<div class="flex items-center gap-3">
|
| 608 |
-
<span class="text-[16px] font-medium text-gray-400 tracking-wider">${t('helpful')}</span>
|
| 609 |
-
<div class="flex gap-2 text-lg">
|
| 610 |
<button class="rating-btn ${state.ratings[index]?.helpful === true ? 'active' : ''}"
|
| 611 |
onclick="setRating(${index}, 'helpful', true)">π</button>
|
| 612 |
<button class="rating-btn ${state.ratings[index]?.helpful === false ? 'active' : ''}"
|
|
@@ -616,16 +616,16 @@ function renderResults() {
|
|
| 616 |
</div>
|
| 617 |
|
| 618 |
<!-- Detailed Analysis Button -->
|
| 619 |
-
<button class="gold-button-slender text-emerald-950 text-[16px] px-6 font-medium rounded shadow-md"
|
| 620 |
onclick="toggleDetails(${index})">
|
| 621 |
${t('viewEntity')}
|
| 622 |
</button>
|
| 623 |
</div>
|
| 624 |
|
| 625 |
<!-- Detailed Analysis Panel (hidden by default) -->
|
| 626 |
-
<div id="details-${index}" class="hidden mt-6 pt-6 border-t border-gray-100">
|
| 627 |
-
<h4 class="text-emerald-800 font-medium text-[16px] mb-4">${t('entityData')}</h4>
|
| 628 |
-
<pre class="bg-gray-50 p-4 rounded text-[
|
| 629 |
</div>
|
| 630 |
</div>
|
| 631 |
</div>
|
|
@@ -1028,6 +1028,24 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
| 1028 |
setTimeout(() => updateLanguage(), 100);
|
| 1029 |
});
|
| 1030 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1031 |
// Export for global access
|
| 1032 |
window.selectCategory = selectCategory;
|
| 1033 |
window.translateResults = translateResults;
|
|
|
|
| 556 |
const content = getResultContent(result, index);
|
| 557 |
|
| 558 |
return `
|
| 559 |
+
<div class="bg-white rounded shadow-xl border border-gray-200 result-card mb-4 md:mb-6 overflow-x-hidden" data-index="${index}">
|
| 560 |
<!-- Card Header -->
|
| 561 |
+
<div class="px-4 md:px-6 py-2 md:py-3 flex flex-col sm:flex-row justify-between sm:items-center gap-2 text-white border-b-4 border-amber-500 bg-[#003d1c]">
|
| 562 |
+
<div class="text-[14px] md:text-[18px] font-medium flex items-center gap-2 md:gap-4">
|
| 563 |
<span class="text-amber-400">${index === 0 ? 'π¦
' : 'π'}</span>
|
| 564 |
#${index + 1} ${escapeHtml(content.entityName)}
|
| 565 |
</div>
|
| 566 |
+
<div class="text-[12px] md:text-[16px] font-medium gold-button-slender text-emerald-950 px-3 md:px-4 rounded shadow-sm self-start sm:self-auto">
|
| 567 |
${t('rankScore')}: ${result.score.toFixed(2)} β²
|
| 568 |
</div>
|
| 569 |
</div>
|
| 570 |
|
| 571 |
<!-- Card Body -->
|
| 572 |
+
<div class="p-4 md:p-8">
|
| 573 |
+
<div class="flex flex-col md:flex-row gap-6 md:gap-12">
|
| 574 |
<!-- Summary -->
|
| 575 |
+
<div class="flex-1 summary-box p-4 md:p-6">
|
| 576 |
+
<p class="text-[14px] md:text-[18px] leading-6 md:leading-7 text-emerald-900">
|
| 577 |
${escapeHtml(content.summary || t('noResults'))}
|
| 578 |
</p>
|
| 579 |
</div>
|
| 580 |
|
| 581 |
<!-- Must-Know Facts -->
|
| 582 |
<div class="w-full md:w-[38%] pt-1">
|
| 583 |
+
<h4 class="text-emerald-800 font-medium text-[14px] md:text-[18px] mb-3 md:mb-4">${t('mustKnowFacts')}</h4>
|
| 584 |
+
<ul class="text-[14px] md:text-[18px] space-y-2 md:space-y-3 text-emerald-800/80">
|
| 585 |
${content.facts.slice(0, 5).map(fact => `
|
| 586 |
<li>β’ ${escapeHtml(fact)}</li>
|
| 587 |
`).join('')}
|
|
|
|
| 590 |
</div>
|
| 591 |
|
| 592 |
<!-- Rating Row -->
|
| 593 |
+
<div class="mt-6 md:mt-8 border-t border-gray-50 pt-4 md:pt-6 flex flex-col gap-4">
|
| 594 |
+
<div class="flex flex-wrap items-center gap-4 md:gap-12">
|
| 595 |
<!-- Relevance Rating -->
|
| 596 |
+
<div class="flex items-center gap-2 md:gap-3">
|
| 597 |
+
<span class="text-[12px] md:text-[16px] font-medium text-gray-400 tracking-wider">${t('relevance')}</span>
|
| 598 |
+
<div class="flex gap-2 text-lg md:text-xl">
|
| 599 |
<button class="rating-btn ${state.ratings[index]?.relevance === 0 ? 'active' : ''}"
|
| 600 |
onclick="setRating(${index}, 'relevance', 0)">π</button>
|
| 601 |
<button class="rating-btn ${state.ratings[index]?.relevance === 1 ? 'active' : ''}"
|
|
|
|
| 604 |
</div>
|
| 605 |
|
| 606 |
<!-- Helpful Rating -->
|
| 607 |
+
<div class="flex items-center gap-2 md:gap-3">
|
| 608 |
+
<span class="text-[12px] md:text-[16px] font-medium text-gray-400 tracking-wider">${t('helpful')}</span>
|
| 609 |
+
<div class="flex gap-2 text-base md:text-lg">
|
| 610 |
<button class="rating-btn ${state.ratings[index]?.helpful === true ? 'active' : ''}"
|
| 611 |
onclick="setRating(${index}, 'helpful', true)">π</button>
|
| 612 |
<button class="rating-btn ${state.ratings[index]?.helpful === false ? 'active' : ''}"
|
|
|
|
| 616 |
</div>
|
| 617 |
|
| 618 |
<!-- Detailed Analysis Button -->
|
| 619 |
+
<button class="gold-button-slender text-emerald-950 text-[14px] md:text-[16px] px-4 md:px-6 py-2 font-medium rounded shadow-md w-full"
|
| 620 |
onclick="toggleDetails(${index})">
|
| 621 |
${t('viewEntity')}
|
| 622 |
</button>
|
| 623 |
</div>
|
| 624 |
|
| 625 |
<!-- Detailed Analysis Panel (hidden by default) -->
|
| 626 |
+
<div id="details-${index}" class="hidden mt-4 md:mt-6 pt-4 md:pt-6 border-t border-gray-100">
|
| 627 |
+
<h4 class="text-emerald-800 font-medium text-[14px] md:text-[16px] mb-3 md:mb-4">${t('entityData')}</h4>
|
| 628 |
+
<pre class="bg-gray-50 p-3 md:p-4 rounded text-[12px] md:text-[14px] overflow-x-auto text-gray-700 border border-gray-200 max-h-[300px] md:max-h-[500px] overflow-y-auto">${escapeHtml(JSON.stringify(result.full_entity || result, null, 2))}</pre>
|
| 629 |
</div>
|
| 630 |
</div>
|
| 631 |
</div>
|
|
|
|
| 1028 |
setTimeout(() => updateLanguage(), 100);
|
| 1029 |
});
|
| 1030 |
|
| 1031 |
+
// Go to home page
|
| 1032 |
+
window.goHome = function() {
|
| 1033 |
+
// Reset state
|
| 1034 |
+
state.currentQuery = '';
|
| 1035 |
+
state.currentCategory = null;
|
| 1036 |
+
state.results = [];
|
| 1037 |
+
state.ratings = {};
|
| 1038 |
+
state.translatedResults = {};
|
| 1039 |
+
state.showOriginal = false;
|
| 1040 |
+
|
| 1041 |
+
// Clear inputs
|
| 1042 |
+
if (DOM.searchInput) DOM.searchInput.value = '';
|
| 1043 |
+
if (DOM.categoryText) DOM.categoryText.textContent = t('selectCategory');
|
| 1044 |
+
|
| 1045 |
+
// Switch to home mode
|
| 1046 |
+
switchToHomeMode();
|
| 1047 |
+
};
|
| 1048 |
+
|
| 1049 |
// Export for global access
|
| 1050 |
window.selectCategory = selectCategory;
|
| 1051 |
window.translateResults = translateResults;
|