diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000..7ec9e29 Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/icon.svg b/assets/icon.svg new file mode 100644 index 0000000..3c12839 --- /dev/null +++ b/assets/icon.svg @@ -0,0 +1,4 @@ + diff --git a/css/components.css b/css/components.css new file mode 100644 index 0000000..63d644d --- /dev/null +++ b/css/components.css @@ -0,0 +1,243 @@ +.search-container { + width: 100%; + max-width: 700px; + padding: 0 2rem; + margin-top: 2rem; + animation: fadeIn 1s ease-out 0.2s backwards; +} + +.search-box { + position: relative; + width: 100%; +} + +.search-input { + width: 100%; + padding: 1.25rem 1.5rem; + padding-right: 3.5rem; + font-family: 'DM Sans', sans-serif; + font-size: 1rem; + border: 1px solid var(--border); + border-radius: 16px; + background: var(--bg-card); + backdrop-filter: blur(10px); + color: var(--text-primary); + transition: all 0.3s ease; + box-shadow: var(--shadow); +} + +.search-input::placeholder { + color: var(--text-muted); +} + +.search-input:focus { + outline: none; + border-color: var(--accent-soft); + box-shadow: var(--shadow-hover); +} + +.search-btn { + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + padding: 0.75rem; + cursor: pointer; + color: var(--text-muted); + transition: color 0.2s ease; +} + +.search-btn:hover { + color: var(--accent); +} + +.search-btn svg { + width: 20px; + height: 20px; +} + +.api-categories { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 0.5rem; + margin-top: 1.5rem; + animation: fadeIn 1s ease-out 0.4s backwards; +} + +.api-chip { + padding: 0.5rem 1rem; + font-size: 0.75rem; + border: 1px solid var(--border); + border-radius: 20px; + background: var(--bg-card); + color: var(--text-secondary); + cursor: pointer; + transition: all 0.2s ease; + letter-spacing: 0.02em; +} + +.api-chip:hover { + background: var(--accent-soft); + border-color: var(--accent); + color: var(--text-primary); +} + +.api-chip.active { + background: var(--accent); + border-color: var(--accent); + color: white; +} + +.results-section { + width: 100%; + max-width: 900px; + padding: 2rem; + margin-top: 2rem; + display: none; +} + +.results-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; + padding-bottom: 1rem; + border-bottom: 1px solid var(--border); +} + +.results-header h2 { + font-family: 'Cormorant Garamond', serif; + font-size: 1.25rem; + font-weight: 400; + color: var(--text-secondary); +} + +.results-count { + font-size: 0.8rem; + color: var(--text-muted); +} + +.results-grid { + display: grid; + gap: 1rem; +} + +.result-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 12px; + padding: 1.5rem; + transition: all 0.3s ease; + cursor: pointer; + animation: slideUp 0.5s ease-out backwards; + position: relative; +} + +.result-card:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-hover); + border-color: var(--accent-soft); +} + +@keyframes slideUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +.result-source { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: 0.7rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.1em; + margin-bottom: 0.75rem; +} + +.source-dot { + width: 6px; + height: 6px; + border-radius: 50%; +} + +.source-wikipedia { background: #636363; } +.source-openlib { background: #d4a373; } +.source-dictionary { background: #81c784; } +.source-nasa { background: #0b3d91; } + +.result-title { + font-family: 'Cormorant Garamond', serif; + font-size: 1.25rem; + font-weight: 400; + color: var(--text-primary); + margin-bottom: 0.5rem; + line-height: 1.4; +} + +.result-excerpt { + font-size: 0.9rem; + color: var(--text-secondary); + line-height: 1.6; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.result-meta { + display: flex; + gap: 1rem; + margin-top: 1rem; + font-size: 0.75rem; + color: var(--text-muted); +} + +.bookmark-btn { + position: absolute; + top: 1rem; + right: 1rem; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: 50%; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + font-size: 1rem; + transition: all 0.2s ease; +} + +.bookmark-btn:hover { + background: var(--accent); + transform: scale(1.1); +} + +.loading { + display: none; + justify-content: center; + align-items: center; + padding: 3rem; +} + +.loading.active { + display: flex; +} + +.loader { + width: 40px; + height: 40px; + border: 2px solid var(--border); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} diff --git a/css/features.css b/css/features.css new file mode 100644 index 0000000..40e5be4 --- /dev/null +++ b/css/features.css @@ -0,0 +1,331 @@ +.notes-panel { + position: fixed; + left: 20px; + top: 120px; + width: 280px; + background: var(--bg-card); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow); + border: 1px solid var(--border); + backdrop-filter: blur(10px); +} + +.notes-panel h3 { + font-family: 'Cormorant Garamond', serif; + font-size: 1.1rem; + margin-bottom: 1rem; + color: var(--text-primary); +} + +.notes-panel textarea { + width: 100%; + height: 200px; + border: 1px solid var(--border); + border-radius: 8px; + padding: 0.75rem; + font-family: inherit; + font-size: 0.9rem; + resize: vertical; + background: var(--bg-secondary); + color: var(--text-primary); +} + +.notes-actions { + display: flex; + gap: 0.5rem; + margin-top: 0.75rem; +} + +.notes-actions button { + flex: 1; + padding: 0.5rem; + background: var(--accent); + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 0.85rem; + transition: all 0.2s ease; +} + +.notes-actions button:hover { + background: var(--accent-soft); + color: var(--text-primary); +} + +.timer-widget { + position: fixed; + bottom: 20px; + right: 20px; + background: var(--bg-card); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow); + border: 1px solid var(--border); + backdrop-filter: blur(10px); + min-width: 200px; + text-align: center; +} + +.timer-widget h3 { + font-family: 'Cormorant Garamond', serif; + font-size: 1rem; + margin-bottom: 1rem; + color: var(--text-primary); +} + +.timer-display { + font-family: 'Cormorant Garamond', serif; + font-size: 2.5rem; + color: var(--accent); + margin-bottom: 1rem; +} + +.timer-controls { + display: flex; + gap: 0.5rem; +} + +.timer-controls button { + flex: 1; + padding: 0.5rem; + background: var(--accent); + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 0.75rem; + transition: all 0.2s ease; +} + +.timer-controls button:hover { + background: var(--accent-soft); + color: var(--text-primary); +} + +.timer-controls button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.history-panel { + position: fixed; + left: 20px; + bottom: 20px; + width: 280px; + max-height: 400px; + background: var(--bg-card); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow); + border: 1px solid var(--border); + backdrop-filter: blur(10px); + overflow-y: auto; +} + +.history-panel h3 { + font-family: 'Cormorant Garamond', serif; + font-size: 1.1rem; + margin-bottom: 1rem; + color: var(--text-primary); +} + +.history-item { + padding: 0.75rem; + background: var(--bg-secondary); + border-radius: 8px; + margin-bottom: 0.5rem; + cursor: pointer; + transition: all 0.2s ease; +} + +.history-item:hover { + background: var(--accent-soft); +} + +.history-query { + font-size: 0.9rem; + color: var(--text-primary); + margin-bottom: 0.25rem; +} + +.history-meta { + font-size: 0.7rem; + color: var(--text-muted); +} + +.history-empty { + text-align: center; + color: var(--text-muted); + font-size: 0.85rem; +} + +.clear-history-btn { + width: 100%; + padding: 0.5rem; + background: var(--text-muted); + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 0.75rem; + margin-top: 0.75rem; + transition: all 0.2s ease; +} + +.clear-history-btn:hover { + background: var(--text-secondary); +} + +.bookmarks-panel { + position: fixed; + right: 20px; + top: 120px; + width: 300px; + max-height: 500px; + background: var(--bg-card); + padding: 1.5rem; + border-radius: 12px; + box-shadow: var(--shadow); + border: 1px solid var(--border); + backdrop-filter: blur(10px); + overflow-y: auto; +} + +.bookmarks-panel h3 { + font-family: 'Cormorant Garamond', serif; + font-size: 1.1rem; + margin-bottom: 1rem; + color: var(--text-primary); +} + +.bookmark-item { + display: flex; + gap: 0.5rem; + padding: 0.75rem; + background: var(--bg-secondary); + border-radius: 8px; + margin-bottom: 0.5rem; + transition: all 0.2s ease; +} + +.bookmark-item:hover { + background: var(--accent-soft); +} + +.bookmark-content { + flex: 1; + cursor: pointer; +} + +.bookmark-source { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.65rem; + color: var(--text-muted); + text-transform: uppercase; + margin-bottom: 0.25rem; +} + +.bookmark-title { + font-size: 0.9rem; + color: var(--text-primary); + margin-bottom: 0.25rem; + font-weight: 500; +} + +.bookmark-excerpt { + font-size: 0.75rem; + color: var(--text-secondary); + line-height: 1.4; +} + +.bookmark-remove { + background: none; + border: none; + color: var(--text-muted); + font-size: 1.5rem; + cursor: pointer; + transition: color 0.2s ease; + padding: 0; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; +} + +.bookmark-remove:hover { + color: var(--accent); +} + +.bookmarks-empty { + text-align: center; + color: var(--text-muted); + font-size: 0.85rem; +} + +.clear-bookmarks-btn { + width: 100%; + padding: 0.5rem; + background: var(--text-muted); + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 0.75rem; + margin-top: 0.75rem; + transition: all 0.2s ease; +} + +.clear-bookmarks-btn:hover { + background: var(--text-secondary); +} + +.notification { + position: fixed; + top: 100px; + right: -300px; + background: var(--accent); + color: white; + padding: 1rem 1.5rem; + border-radius: 8px; + box-shadow: var(--shadow-hover); + z-index: 1000; + transition: right 0.3s ease; + font-size: 0.9rem; +} + +.notification.show { + right: 20px; +} + +body.dark-mode { + --bg-primary: #1a1a1a; + --bg-secondary: #2a2a2a; + --bg-card: rgba(40, 40, 40, 0.9); + --text-primary: #ffffff; + --text-secondary: #cccccc; + --text-muted: #888888; + --border: rgba(255, 255, 255, 0.1); + --shadow: 0 4px 24px rgba(0, 0, 0, 0.3); + --shadow-hover: 0 8px 32px rgba(0, 0, 0, 0.4); +} + +body.dark-mode .orb { + opacity: 0.2; +} + +@media (max-width: 1200px) { + .notes-panel, + .history-panel, + .bookmarks-panel { + display: none; + } + + .timer-widget { + bottom: 80px; + } +} diff --git a/styles.css b/css/main.css similarity index 63% rename from styles.css rename to css/main.css index 62f5ec5..fd45589 100644 --- a/styles.css +++ b/css/main.css @@ -186,6 +186,80 @@ nav { width: 100%; } +main { + padding-top: 120px; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; +} + +.hero { + text-align: center; + padding: 4rem 2rem; + animation: fadeIn 1s ease-out; +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +.hero h1 { + font-family: 'Cormorant Garamond', serif; + font-size: 3.5rem; + font-weight: 300; + letter-spacing: 0.15em; + margin-bottom: 0.5rem; + color: var(--text-primary); +} + +.hero p { + font-size: 1rem; + color: var(--text-secondary); + font-weight: 300; + letter-spacing: 0.05em; +} + +.empty-state { + text-align: center; + padding: 4rem 2rem; + color: var(--text-muted); +} + +.empty-state svg { + width: 80px; + height: 80px; + margin-bottom: 1.5rem; + opacity: 0.3; +} + +.empty-state p { + font-size: 0.9rem; +} + +footer { + text-align: center; + padding: 3rem 2rem; + margin-top: auto; + color: var(--text-muted); + font-size: 0.75rem; +} + +footer p + p { + margin-top: 0.5rem; +} + +footer a { + color: var(--text-secondary); + text-decoration: none; + transition: color 0.2s ease; +} + +footer a:hover { + color: var(--accent); +} + .spotify-tab { position: fixed; right: 0; @@ -301,303 +375,6 @@ nav { color: var(--text-primary); } -main { - padding-top: 120px; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; -} - -.hero { - text-align: center; - padding: 4rem 2rem; - animation: fadeIn 1s ease-out; -} - -@keyframes fadeIn { - from { opacity: 0; transform: translateY(20px); } - to { opacity: 1; transform: translateY(0); } -} - -.hero h1 { - font-family: 'Cormorant Garamond', serif; - font-size: 3.5rem; - font-weight: 300; - letter-spacing: 0.15em; - margin-bottom: 0.5rem; - color: var(--text-primary); -} - -.hero p { - font-size: 1rem; - color: var(--text-secondary); - font-weight: 300; - letter-spacing: 0.05em; -} - -.search-container { - width: 100%; - max-width: 700px; - padding: 0 2rem; - margin-top: 2rem; - animation: fadeIn 1s ease-out 0.2s backwards; -} - -.search-box { - position: relative; - width: 100%; -} - -.search-input { - width: 100%; - padding: 1.25rem 1.5rem; - padding-right: 3.5rem; - font-family: 'DM Sans', sans-serif; - font-size: 1rem; - border: 1px solid var(--border); - border-radius: 16px; - background: var(--bg-card); - backdrop-filter: blur(10px); - color: var(--text-primary); - transition: all 0.3s ease; - box-shadow: var(--shadow); -} - -.search-input::placeholder { - color: var(--text-muted); -} - -.search-input:focus { - outline: none; - border-color: var(--accent-soft); - box-shadow: var(--shadow-hover); -} - -.search-btn { - position: absolute; - right: 8px; - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - padding: 0.75rem; - cursor: pointer; - color: var(--text-muted); - transition: color 0.2s ease; -} - -.search-btn:hover { - color: var(--accent); -} - -.search-btn svg { - width: 20px; - height: 20px; -} - -.api-categories { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 0.5rem; - margin-top: 1.5rem; - animation: fadeIn 1s ease-out 0.4s backwards; -} - -.api-chip { - padding: 0.5rem 1rem; - font-size: 0.75rem; - border: 1px solid var(--border); - border-radius: 20px; - background: var(--bg-card); - color: var(--text-secondary); - cursor: pointer; - transition: all 0.2s ease; - letter-spacing: 0.02em; -} - -.api-chip:hover, .api-chip.active { - background: var(--accent-soft); - border-color: var(--accent); - color: var(--text-primary); -} - -.api-chip.active { - background: var(--accent); - color: white; -} - -.results-section { - width: 100%; - max-width: 900px; - padding: 2rem; - margin-top: 2rem; - display: none; -} - -.results-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1.5rem; - padding-bottom: 1rem; - border-bottom: 1px solid var(--border); -} - -.results-header h2 { - font-family: 'Cormorant Garamond', serif; - font-size: 1.25rem; - font-weight: 400; - color: var(--text-secondary); -} - -.results-count { - font-size: 0.8rem; - color: var(--text-muted); -} - -.results-grid { - display: grid; - gap: 1rem; -} - -.result-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 12px; - padding: 1.5rem; - transition: all 0.3s ease; - cursor: pointer; - animation: slideUp 0.5s ease-out backwards; -} - -.result-card:hover { - transform: translateY(-2px); - box-shadow: var(--shadow-hover); - border-color: var(--accent-soft); -} - -@keyframes slideUp { - from { opacity: 0; transform: translateY(20px); } - to { opacity: 1; transform: translateY(0); } -} - -.result-source { - display: inline-flex; - align-items: center; - gap: 0.5rem; - font-size: 0.7rem; - color: var(--text-muted); - text-transform: uppercase; - letter-spacing: 0.1em; - margin-bottom: 0.75rem; -} - -.source-dot { - width: 6px; - height: 6px; - border-radius: 50%; -} - -.source-wikipedia { background: #636363; } -.source-openlib { background: #d4a373; } -.source-wolfram { background: #dd1100; } -.source-nasa { background: #0b3d91; } -.source-weather { background: #4fc3f7; } -.source-news { background: #e57373; } -.source-dictionary { background: #81c784; } - -.result-title { - font-family: 'Cormorant Garamond', serif; - font-size: 1.25rem; - font-weight: 400; - color: var(--text-primary); - margin-bottom: 0.5rem; - line-height: 1.4; -} - -.result-excerpt { - font-size: 0.9rem; - color: var(--text-secondary); - line-height: 1.6; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; -} - -.result-meta { - display: flex; - gap: 1rem; - margin-top: 1rem; - font-size: 0.75rem; - color: var(--text-muted); -} - -.loading { - display: none; - justify-content: center; - align-items: center; - padding: 3rem; -} - -.loading.active { - display: flex; -} - -.loader { - width: 40px; - height: 40px; - border: 2px solid var(--border); - border-top-color: var(--accent); - border-radius: 50%; - animation: spin 1s linear infinite; -} - -@keyframes spin { - to { transform: rotate(360deg); } -} - -.empty-state { - text-align: center; - padding: 4rem 2rem; - color: var(--text-muted); -} - -.empty-state svg { - width: 80px; - height: 80px; - margin-bottom: 1.5rem; - opacity: 0.3; -} - -.empty-state p { - font-size: 0.9rem; -} - -footer { - text-align: center; - padding: 3rem 2rem; - margin-top: auto; - color: var(--text-muted); - font-size: 0.75rem; -} - -footer p + p { - margin-top: 0.5rem; -} - -footer a { - color: var(--text-secondary); - text-decoration: none; - transition: color 0.2s ease; -} - -footer a:hover { - color: var(--accent); -} - @media (max-width: 768px) { nav { padding: 1rem 1.5rem; @@ -622,4 +399,4 @@ footer a:hover { .results-section { padding: 1rem; } -} + } diff --git a/docs/FEATURES.md b/docs/FEATURES.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/docs/FEATURES.md @@ -0,0 +1 @@ + diff --git a/docs/HELP.md b/docs/HELP.md new file mode 100644 index 0000000..4bcfe98 --- /dev/null +++ b/docs/HELP.md @@ -0,0 +1 @@ +d diff --git a/index.html b/index.html index f32891d..f2fe8f6 100644 --- a/index.html +++ b/index.html @@ -3,11 +3,17 @@
-