From aab4e8588e351834c0417871ea0cbbc49cdcfe61 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 17 Feb 2026 13:06:27 +0100 Subject: [PATCH] fully-implemented theme --- src/app.css | 750 +++++++++++++++++- src/lib/components/PRDetail.svelte | 111 ++- src/routes/+page.svelte | 140 ---- src/routes/docs/nip34/+page.svelte | 77 +- src/routes/repos/[npub]/[repo]/+page.svelte | 286 ++++--- .../repos/[npub]/[repo]/settings/+page.svelte | 154 ---- src/routes/search/+page.svelte | 129 --- src/routes/signup/+page.svelte | 133 ---- src/routes/users/[npub]/+page.svelte | 79 +- 9 files changed, 1030 insertions(+), 829 deletions(-) diff --git a/src/app.css b/src/app.css index d57eb27..c215d41 100644 --- a/src/app.css +++ b/src/app.css @@ -103,10 +103,458 @@ code, pre, .mono { font-family: 'IBM Plex Mono', 'Courier New', monospace; } -/* Headings with slightly more weight */ +/* Headings */ h1, h2, h3, h4, h5, h6 { font-weight: 600; letter-spacing: -0.02em; + color: var(--text-primary); + margin: 0; +} + +h1 { font-size: 2rem; } +h2 { font-size: 1.5rem; } +h3 { font-size: 1.25rem; } + +/* Links */ +a { + color: var(--link-color); + text-decoration: none; + transition: color 0.2s ease; +} + +a:hover { + color: var(--link-hover); +} + +.back-link { + display: inline-block; + margin-bottom: 1rem; + color: var(--link-color); + text-decoration: none; + transition: color 0.2s ease; + font-size: 0.875rem; +} + +.back-link:hover { + color: var(--link-hover); + text-decoration: underline; +} + +/* Layout */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 2rem; +} + +.container-narrow { + max-width: 800px; + margin: 0 auto; + padding: 2rem; +} + +/* Header and Navigation */ +header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; + border-bottom: 1px solid var(--border-color); + padding-bottom: 1rem; +} + +nav { + display: flex; + gap: 1rem; + align-items: center; +} + +nav a { + text-decoration: none; + color: var(--link-color); + transition: color 0.2s ease; +} + +nav a:hover { + color: var(--link-hover); +} + +/* Buttons */ +button, .button { + padding: 0.5rem 1rem; + border: none; + border-radius: 0.375rem; + cursor: pointer; + font-size: 0.875rem; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease, border-color 0.2s ease; +} + +button:disabled, .button:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.btn-primary, .login-button, .save-button, .view-button, .search-button, .create-file-button, .create-branch-button, .create-tag-button, .create-issue-button, .create-pr-button, .add-comment-btn, .reply-btn { + background: var(--button-primary); + color: white; + border: none; +} + +.btn-primary:hover:not(:disabled), .login-button:hover:not(:disabled), .save-button:hover:not(:disabled), .view-button:hover, .search-button:hover:not(:disabled), .create-file-button:hover, .create-branch-button:hover, .create-tag-button:hover, .create-issue-button:hover, .create-pr-button:hover, .add-comment-btn:hover, .reply-btn:hover { + background: var(--button-primary-hover); +} + +.btn-secondary, .logout-button { + background: var(--button-secondary); + color: white; +} + +.btn-secondary:hover, .logout-button:hover { + background: var(--button-secondary-hover); +} + +.logout-button { + background: var(--error-text); +} + +.logout-button:hover { + opacity: 0.9; +} + +.btn-danger { + background: var(--error-text); + color: white; +} + +.btn-danger:hover { + opacity: 0.9; +} + +.cancel-button, .cancel-btn { + padding: 0.5rem 1rem; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); + border-radius: 0.25rem; + cursor: pointer; + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; +} + +.cancel-button:hover, .cancel-btn:hover { + background: var(--bg-secondary); +} + +/* Forms */ +form { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.form-group { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +label, .label { + font-weight: 500; + display: flex; + flex-direction: column; + gap: 0.25rem; + color: var(--text-primary); +} + +label small, .label small { + font-weight: normal; + color: var(--text-muted); + font-size: 0.875rem; +} + +input, textarea, select { + padding: 0.75rem; + border: 1px solid var(--input-border); + border-radius: 0.375rem; + font-size: 1rem; + background: var(--input-bg); + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; + transition: border-color 0.2s ease; +} + +input:focus, textarea:focus, select:focus { + outline: none; + border-color: var(--input-focus); +} + +input:disabled, textarea:disabled, select:disabled { + background: var(--bg-secondary); + cursor: not-allowed; + opacity: 0.6; +} + +.input-group { + display: flex; + gap: 0.5rem; + align-items: center; +} + +.input-group input { + flex: 1; +} + +.search-input, .search-type-select { + flex: 1; + padding: 0.75rem; + font-size: 1rem; + border: 1px solid var(--input-border); + border-radius: 4px; + background: var(--input-bg); + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; +} + +.search-input:focus, .search-type-select:focus { + outline: none; + border-color: var(--input-focus); +} + +.branch-select { + padding: 0.5rem; + border: 1px solid var(--input-border); + border-radius: 0.25rem; + background: var(--input-bg); + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; +} + +/* Cards */ +.card, .repo-card { + border: 1px solid var(--card-border); + border-radius: 0.5rem; + background: var(--card-bg); + overflow: hidden; + transition: border-color 0.2s ease, box-shadow 0.2s ease; +} + +.card:hover, .repo-card:hover { + border-color: var(--accent); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.repo-card-banner { + width: 100%; + height: 200px; + overflow: hidden; + background: var(--bg-secondary); +} + +.repo-card-banner img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.repo-card-content { + padding: 1.5rem; +} + +.repo-card-image, .repo-image { + width: 64px; + height: 64px; + border-radius: 8px; + object-fit: cover; + flex-shrink: 0; +} + +.repo-item, .code-item { + border: 1px solid var(--card-border); + border-radius: 8px; + padding: 1rem; + cursor: pointer; + transition: box-shadow 0.2s, border-color 0.2s; + background: var(--card-bg); +} + +.repo-item:hover, .code-item:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-color: var(--accent); +} + +/* Messages */ +.error, .warning, .success { + padding: 1rem; + border-radius: 0.5rem; + margin: 1rem 0; +} + +.error { + background: var(--error-bg); + color: var(--error-text); + border: 1px solid var(--error-text); +} + +.warning { + background: var(--warning-bg); + border: 1px solid var(--warning-text); + color: var(--warning-text); +} + +.success { + background: var(--success-bg); + color: var(--success-text); + border: 1px solid var(--success-text); +} + +.loading, .empty { + text-align: center; + padding: 2rem; + color: var(--text-muted); +} + +.no-results { + text-align: center; + padding: 2rem; + color: var(--text-muted); +} + +/* Status badges */ +.pr-status, .issue-status { + padding: 0.2rem 0.5rem; + border-radius: 3px; + font-weight: bold; + font-size: 0.8rem; +} + +.pr-status.open, .issue-status.open { + background: var(--accent-light); + color: var(--accent); +} + +.pr-status.closed, .issue-status.closed { + background: var(--error-bg); + color: var(--error-text); +} + +.pr-status.merged, .issue-status.resolved { + background: var(--success-bg); + color: var(--success-text); +} + +.fork-badge { + padding: 0.25rem 0.5rem; + background: var(--accent-light); + color: var(--accent); + border-radius: 4px; + font-size: 0.85rem; + margin-left: 0.5rem; +} + +.fork-badge a { + color: var(--accent); + text-decoration: none; +} + +.fork-badge a:hover { + text-decoration: underline; +} + +.verification-status { + padding: 0.25rem 0.5rem; + border-radius: 0.25rem; + font-size: 0.75rem; + font-weight: 500; + margin-left: 0.5rem; +} + +.verification-status.verified { + background: var(--success-bg); + color: var(--success-text); +} + +.verification-status.unverified { + background: var(--error-bg); + color: var(--error-text); +} + +/* Code blocks */ +code { + background: var(--bg-secondary); + padding: 0.125rem 0.25rem; + border-radius: 0.25rem; + font-family: 'IBM Plex Mono', monospace; + font-size: 0.875em; + color: var(--text-primary); +} + +pre { + background: var(--bg-tertiary); + color: var(--text-primary); + padding: 1rem; + border-radius: 0.5rem; + overflow-x: auto; + margin: 1rem 0; + border: 1px solid var(--border-color); +} + +pre code { + background: transparent; + padding: 0; + color: inherit; +} + +.clone-urls code { + display: block; + background: var(--bg-secondary); + padding: 0.5rem; + border-radius: 0.25rem; + margin: 0.25rem 0; + font-family: 'IBM Plex Mono', monospace; + font-size: 0.875rem; + color: var(--text-primary); + border: 1px solid var(--border-light); +} + +/* Utility classes */ +.description { + color: var(--text-secondary); + margin: 0.5rem 0; +} + +.repo-meta, .repo-description-header { + font-size: 0.875rem; + color: var(--text-muted); + margin-top: 1rem; +} + +.repo-description-header { + margin: 0.25rem 0 0 0; + font-size: 0.9rem; + color: var(--text-secondary); +} + +.npub, .auth-status { + color: var(--text-muted); + font-size: 0.875rem; +} + +.user-info { + color: var(--text-secondary); + font-size: 0.875rem; +} + +.docs-link { + color: var(--link-color); + text-decoration: none; + font-size: 1.25rem; + margin-left: 0.5rem; + transition: color 0.2s ease; +} + +.docs-link:hover { + color: var(--link-hover); } /* Theme toggle button */ @@ -139,3 +587,303 @@ h1, h2, h3, h4, h5, h6 { font-size: 1rem; line-height: 1; } + +/* Search form */ +.search-form { + display: flex; + gap: 1rem; + margin-bottom: 2rem; + align-items: center; +} + +.results-header { + margin-bottom: 1.5rem; +} + +.results-section { + margin-bottom: 2rem; +} + +.repo-list, .code-list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.repo-item h4 { + margin: 0 0 0.5rem 0; + color: var(--link-color); +} + +.repo-description { + color: var(--text-secondary); + margin: 0.5rem 0; +} + +.code-file-path { + font-family: 'IBM Plex Mono', monospace; + color: var(--text-primary); + margin-bottom: 0.5rem; +} + +.code-repo a { + color: var(--link-color); +} + +.code-repo a:hover { + color: var(--link-hover); +} + +/* Settings form */ +.settings-form { + background: var(--card-bg); + border-radius: 8px; + padding: 2rem; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + border: 1px solid var(--border-color); +} + +.form-section { + margin-bottom: 2rem; + padding-bottom: 2rem; + border-bottom: 1px solid var(--border-color); +} + +.form-section:last-of-type { + border-bottom: none; +} + +.help-text { + color: var(--text-muted); + font-size: 0.9rem; + margin-bottom: 1rem; +} + +.array-input { + display: flex; + gap: 0.5rem; + margin-bottom: 0.5rem; + align-items: center; +} + +.add-button, .remove-button { + padding: 0.5rem 1rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--card-bg); + cursor: pointer; + font-size: 0.9rem; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; +} + +.add-button { + color: var(--button-primary); + border-color: var(--button-primary); +} + +.add-button:hover { + background: var(--accent-light); +} + +.remove-button { + color: var(--error-text); + border-color: var(--error-text); +} + +.remove-button:hover { + background: var(--error-bg); +} + +.form-actions { + display: flex; + gap: 1rem; + justify-content: flex-end; + margin-top: 2rem; +} + +/* Repo header */ +.repos-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; +} + +.repos-list { + display: grid; + gap: 1.5rem; +} + +.repo-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 0.5rem; + gap: 1rem; +} + +.repo-header-text { + flex: 1; +} + +.header-left { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; +} + +.repo-title-section { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 0.5rem; +} + +.header-right { + display: flex; + align-items: center; + gap: 1rem; +} + +/* Auth section */ +.auth-section { + display: flex; + align-items: center; + gap: 1rem; +} + +/* Code repo link */ +.code-repo { + font-size: 0.9rem; + color: var(--text-secondary); +} + +/* Docs page */ +.container-wide { + max-width: 1000px; + margin: 0 auto; + padding: 2rem; +} + +/* Highlight.js Syntax Highlighting - Custom Theme using CSS Variables */ +.hljs { + background: var(--bg-tertiary); + color: var(--text-primary); + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 1rem; + overflow-x: auto; +} + +/* Syntax highlighting colors - adapted to royal plum theme */ +.hljs-comment, +.hljs-quote { + color: var(--text-muted); + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: var(--accent); + font-weight: 500; +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: var(--accent-light); +} + +.hljs-string, +.hljs-doctag { + color: var(--success-text); +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: var(--accent); + font-weight: 600; +} + +.hljs-type, +.hljs-class .hljs-title { + color: var(--accent); + font-weight: 500; +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: var(--accent); +} + +.hljs-regexp, +.hljs-link { + color: var(--accent-light); +} + +.hljs-symbol, +.hljs-bullet { + color: var(--warning-text); +} + +.hljs-built_in, +.hljs-builtin-name { + color: var(--accent-light); +} + +.hljs-meta { + color: var(--text-muted); +} + +.hljs-deletion { + background: var(--error-bg); + color: var(--error-text); +} + +.hljs-addition { + background: var(--success-bg); + color: var(--success-text); +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: 600; +} + +/* Dark theme adjustments for better contrast */ +[data-theme="dark"] .hljs { + background: var(--bg-tertiary); +} + +[data-theme="dark"] .hljs-string, +[data-theme="dark"] .hljs-doctag { + color: var(--success-text); +} + +[data-theme="dark"] .hljs-keyword, +[data-theme="dark"] .hljs-selector-tag, +[data-theme="dark"] .hljs-subst { + color: var(--accent); +} + +/* Light theme adjustments */ +:root:not([data-theme="dark"]) .hljs-string, +:root:not([data-theme="dark"]) .hljs-doctag { + color: #065f46; /* Darker green for light mode */ +} + +:root:not([data-theme="dark"]) .hljs-keyword, +:root:not([data-theme="dark"]) .hljs-selector-tag, +:root:not([data-theme="dark"]) .hljs-subst { + color: #6a1f4d; /* Darker plum for light mode */ +} diff --git a/src/lib/components/PRDetail.svelte b/src/lib/components/PRDetail.svelte index 1a9e193..bc813f0 100644 --- a/src/lib/components/PRDetail.svelte +++ b/src/lib/components/PRDetail.svelte @@ -469,18 +469,19 @@ .pr-header { margin-bottom: 1rem; padding-bottom: 1rem; - border-bottom: 1px solid #e0e0e0; + border-bottom: 1px solid var(--border-color); } .pr-header h2 { margin: 0 0 0.5rem 0; + color: var(--text-primary); } .pr-meta { display: flex; gap: 1rem; font-size: 0.9rem; - color: #666; + color: var(--text-muted); } .pr-status { @@ -491,18 +492,18 @@ } .pr-status.open { - background: #d4edda; - color: #155724; + background: var(--accent-light); + color: var(--accent); } .pr-status.closed { - background: #f8d7da; - color: #721c24; + background: var(--error-bg); + color: var(--error-text); } .pr-status.merged { - background: #d1ecf1; - color: #0c5460; + background: var(--success-bg); + color: var(--success-text); } .pr-body { @@ -511,8 +512,9 @@ .pr-description { padding: 1rem; - background: #f5f5f5; + background: var(--bg-secondary); border-radius: 4px; + color: var(--text-primary); } .pr-content { @@ -522,20 +524,23 @@ } .code-section, .highlights-section { - border: 1px solid #e0e0e0; + border: 1px solid var(--border-color); border-radius: 4px; padding: 1rem; + background: var(--card-bg); } .code-section h3, .highlights-section h3 { margin-top: 0; + color: var(--text-primary); } .diff-viewer { height: 500px; - border: 1px solid #ddd; + border: 1px solid var(--border-color); border-radius: 4px; overflow: auto; + background: var(--bg-secondary); } .section-header { @@ -547,30 +552,32 @@ .add-comment-btn, .reply-btn { padding: 0.4rem 0.8rem; - background: #007bff; + background: var(--button-primary); color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 0.9rem; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .add-comment-btn:hover, .reply-btn:hover { - background: #0056b3; + background: var(--button-primary-hover); } .highlight-item, .comment-item { margin-bottom: 1.5rem; padding: 1rem; - background: #f9f9f9; + background: var(--bg-secondary); border-radius: 4px; - border-left: 3px solid #007bff; + border-left: 3px solid var(--accent); } .comment-item.nested { margin-left: 2rem; margin-top: 0.5rem; - border-left-color: #28a745; + border-left-color: var(--success-text); } .highlight-header, .comment-header { @@ -578,31 +585,35 @@ gap: 1rem; margin-bottom: 0.5rem; font-size: 0.9rem; - color: #666; + color: var(--text-muted); } .highlight-author, .comment-author { font-weight: bold; - color: #333; + color: var(--text-primary); } .highlighted-code { - background: #fff; + background: var(--card-bg); padding: 0.5rem; border-radius: 3px; margin: 0.5rem 0; + border: 1px solid var(--border-light); } .highlighted-code pre { margin: 0; font-size: 0.9rem; + color: var(--text-primary); + font-family: 'IBM Plex Mono', monospace; } .highlight-comment, .comment-content { margin: 0.5rem 0; padding: 0.5rem; - background: white; + background: var(--card-bg); border-radius: 3px; + color: var(--text-primary); } .highlight-comments { @@ -623,26 +634,50 @@ } .modal { - background: white; + background: var(--card-bg); padding: 2rem; border-radius: 8px; max-width: 600px; width: 90%; max-height: 80vh; overflow-y: auto; + border: 1px solid var(--border-color); + } + + .modal h3 { + color: var(--text-primary); + } + + .modal label { + color: var(--text-primary); + } + + .modal textarea { + background: var(--input-bg); + border: 1px solid var(--input-border); + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; + } + + .modal textarea:focus { + outline: none; + border-color: var(--input-focus); } .selected-code { - background: #f5f5f5; + background: var(--bg-secondary); padding: 1rem; border-radius: 4px; margin-bottom: 1rem; max-height: 200px; overflow: auto; + border: 1px solid var(--border-light); } .selected-code pre { margin: 0; + color: var(--text-primary); + font-family: 'IBM Plex Mono', monospace; } .modal-actions { @@ -657,34 +692,44 @@ border: none; border-radius: 4px; cursor: pointer; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .cancel-btn { - background: #6c757d; - color: white; + background: var(--bg-tertiary); + color: var(--text-primary); + } + + .cancel-btn:hover { + background: var(--bg-secondary); } .save-btn { - background: #007bff; + background: var(--button-primary); color: white; } + .save-btn:hover:not(:disabled) { + background: var(--button-primary-hover); + } + .save-btn:disabled { - background: #ccc; + background: var(--text-muted); cursor: not-allowed; + opacity: 0.6; } - .loading, .empty { - padding: 2rem; + .loading, .empty, .error { + color: var(--text-muted); text-align: center; - color: #666; + padding: 1rem; } .error { - padding: 1rem; - background: #f8d7da; - color: #721c24; + color: var(--error-text); + background: var(--error-bg); + border: 1px solid var(--error-text); border-radius: 4px; - margin-bottom: 1rem; } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index dc424c2..f36174e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -340,143 +340,3 @@ - diff --git a/src/routes/docs/nip34/+page.svelte b/src/routes/docs/nip34/+page.svelte index 6f26b3f..8faa2bb 100644 --- a/src/routes/docs/nip34/+page.svelte +++ b/src/routes/docs/nip34/+page.svelte @@ -40,7 +40,7 @@ }); -
+
← Back to Repositories

NIP-34 Documentation

@@ -61,56 +61,17 @@
diff --git a/src/routes/repos/[npub]/[repo]/+page.svelte b/src/routes/repos/[npub]/[repo]/+page.svelte index 634c686..25a4010 100644 --- a/src/routes/repos/[npub]/[repo]/+page.svelte +++ b/src/routes/repos/[npub]/[repo]/+page.svelte @@ -1797,15 +1797,15 @@ justify-content: space-between; align-items: center; padding: 1rem 2rem; - border-bottom: 1px solid #e5e7eb; - background: white; + border-bottom: 1px solid var(--border-color); + background: var(--card-bg); } .repo-banner { width: 100%; height: 300px; overflow: hidden; - background: #f3f4f6; + background: var(--bg-secondary); margin-bottom: 1rem; } @@ -1839,21 +1839,21 @@ .repo-description-header { margin: 0.25rem 0 0 0; - color: #666; + color: var(--text-secondary); font-size: 0.9rem; } .fork-badge { padding: 0.25rem 0.5rem; - background: #e0e7ff; - color: #3730a3; + background: var(--accent-light); + color: var(--accent); border-radius: 4px; font-size: 0.85rem; margin-left: 0.5rem; } .fork-badge a { - color: #3730a3; + color: var(--accent); text-decoration: none; } @@ -1862,34 +1862,38 @@ } .back-link { - color: #3b82f6; + color: var(--link-color); text-decoration: none; font-size: 0.875rem; + transition: color 0.2s ease; } .back-link:hover { + color: var(--link-hover); text-decoration: underline; } header h1 { margin: 0; font-size: 1.5rem; + color: var(--text-primary); } .npub { - color: #6b7280; + color: var(--text-muted); font-size: 0.875rem; } .docs-link { - color: #3b82f6; + color: var(--link-color); text-decoration: none; font-size: 1.25rem; margin-left: 0.5rem; + transition: color 0.2s ease; } .docs-link:hover { - opacity: 0.7; + color: var(--link-hover); } .header-right { @@ -1900,29 +1904,33 @@ .branch-select { padding: 0.5rem; - border: 1px solid #d1d5db; + border: 1px solid var(--input-border); border-radius: 0.25rem; - background: white; + background: var(--input-bg); + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; } .auth-status { font-size: 0.875rem; - color: #6b7280; + color: var(--text-muted); } .login-button, .logout-button { padding: 0.5rem 1rem; - border: 1px solid #d1d5db; + border: 1px solid var(--input-border); border-radius: 0.25rem; - background: white; - color: #374151; + background: var(--button-primary); + color: white; cursor: pointer; font-size: 0.875rem; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .login-button:hover:not(:disabled) { - background: #f9fafb; + background: var(--button-primary-hover); } .login-button:disabled { @@ -1931,14 +1939,14 @@ } .logout-button { - background: #ef4444; + background: var(--error-text); color: white; - border-color: #ef4444; + border-color: var(--error-text); margin-left: 0.5rem; } .logout-button:hover { - background: #dc2626; + opacity: 0.9; } .repo-view { @@ -1956,8 +1964,8 @@ .file-tree { width: 300px; - border-right: 1px solid #e5e7eb; - background: #f9fafb; + border-right: 1px solid var(--border-color); + background: var(--bg-secondary); display: flex; flex-direction: column; overflow: hidden; @@ -1965,7 +1973,7 @@ .file-tree-header { padding: 1rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; @@ -1974,19 +1982,22 @@ .file-tree-header h2 { margin: 0; font-size: 1rem; + color: var(--text-primary); } .back-button { padding: 0.25rem 0.5rem; font-size: 0.875rem; - background: #f3f4f6; - border: 1px solid #d1d5db; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); border-radius: 0.25rem; cursor: pointer; + color: var(--text-primary); + transition: background 0.2s ease; } .back-button:hover { - background: #e5e7eb; + background: var(--bg-secondary); } .file-list { @@ -2012,19 +2023,21 @@ align-items: center; gap: 0.5rem; font-size: 0.875rem; + color: var(--text-primary); + transition: background 0.2s ease; } .file-button:hover { - background: #f3f4f6; + background: var(--bg-tertiary); } .file-item.selected .file-button { - background: #dbeafe; - color: #1e40af; + background: var(--accent-light); + color: var(--accent); } .file-size { - color: #6b7280; + color: var(--text-muted); font-size: 0.75rem; margin-left: auto; } @@ -2034,21 +2047,21 @@ display: flex; flex-direction: column; overflow: hidden; - background: white; + background: var(--card-bg); } .editor-header { padding: 0.75rem 1rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; } .file-path { - font-family: monospace; + font-family: 'IBM Plex Mono', monospace; font-size: 0.875rem; - color: #374151; + color: var(--text-primary); } .editor-actions { @@ -2058,27 +2071,30 @@ } .unsaved-indicator { - color: #f59e0b; + color: var(--warning-text); font-size: 0.875rem; } .save-button { padding: 0.5rem 1rem; - background: #3b82f6; + background: var(--button-primary); color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-size: 0.875rem; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .save-button:hover:not(:disabled) { - background: #2563eb; + background: var(--button-primary-hover); } .save-button:disabled { - background: #9ca3af; + background: var(--text-muted); cursor: not-allowed; + opacity: 0.6; } .editor-container { @@ -2091,21 +2107,22 @@ display: flex; align-items: center; justify-content: center; - color: #6b7280; + color: var(--text-muted); } .loading { padding: 2rem; text-align: center; - color: #6b7280; + color: var(--text-muted); } .error { - background: #fee2e2; - color: #991b1b; + background: var(--error-bg); + color: var(--error-text); padding: 1rem; margin: 1rem; border-radius: 0.5rem; + border: 1px solid var(--error-text); } .modal-overlay { @@ -2122,31 +2139,45 @@ } .modal { - background: white; + background: var(--card-bg); padding: 2rem; border-radius: 0.5rem; min-width: 400px; max-width: 600px; + border: 1px solid var(--border-color); } .modal h3 { margin: 0 0 1rem 0; + color: var(--text-primary); } .modal label { display: block; margin-bottom: 1rem; + color: var(--text-primary); } - .modal textarea { + .modal input, + .modal textarea, + .modal select { width: 100%; padding: 0.5rem; - border: 1px solid #d1d5db; + border: 1px solid var(--input-border); border-radius: 0.25rem; - font-family: inherit; + font-family: 'IBM Plex Serif', serif; + background: var(--input-bg); + color: var(--text-primary); margin-top: 0.5rem; } + .modal input:focus, + .modal textarea:focus, + .modal select:focus { + outline: none; + border-color: var(--input-focus); + } + .modal-actions { display: flex; justify-content: flex-end; @@ -2155,14 +2186,26 @@ .cancel-button { padding: 0.5rem 1rem; - background: #f3f4f6; - border: 1px solid #d1d5db; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); border-radius: 0.25rem; cursor: pointer; + color: var(--text-primary); + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .cancel-button:hover { - background: #e5e7eb; + background: var(--bg-secondary); + } + + .save-button { + background: var(--button-primary); + color: white; + } + + .save-button:hover:not(:disabled) { + background: var(--button-primary-hover); } /* Tabs */ @@ -2170,8 +2213,8 @@ display: flex; gap: 0.5rem; padding: 0.5rem 2rem; - border-bottom: 1px solid #e5e7eb; - background: white; + border-bottom: 1px solid var(--border-color); + background: var(--card-bg); } .tab-button { @@ -2181,16 +2224,18 @@ border-bottom: 2px solid transparent; cursor: pointer; font-size: 0.875rem; - color: #6b7280; + color: var(--text-muted); + font-family: 'IBM Plex Serif', serif; + transition: color 0.2s ease, border-color 0.2s ease; } .tab-button:hover { - color: #374151; + color: var(--text-primary); } .tab-button.active { - color: #3b82f6; - border-bottom-color: #3b82f6; + color: var(--accent); + border-bottom-color: var(--accent); } /* File tree actions */ @@ -2202,15 +2247,17 @@ .create-file-button, .create-branch-button, .create-tag-button { padding: 0.25rem 0.5rem; font-size: 0.75rem; - background: #3b82f6; + background: var(--button-primary); color: white; border: none; border-radius: 0.25rem; cursor: pointer; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .create-file-button:hover, .create-branch-button:hover, .create-tag-button:hover { - background: #2563eb; + background: var(--button-primary-hover); } .delete-file-button { @@ -2238,8 +2285,8 @@ /* History sidebar */ .history-sidebar, .tags-sidebar { width: 300px; - border-right: 1px solid #e5e7eb; - background: #f9fafb; + border-right: 1px solid var(--border-color); + background: var(--bg-secondary); display: flex; flex-direction: column; overflow: hidden; @@ -2247,7 +2294,7 @@ .history-header, .tags-header { padding: 1rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; @@ -2256,19 +2303,22 @@ .history-header h2, .tags-header h2 { margin: 0; font-size: 1rem; + color: var(--text-primary); } .refresh-button { padding: 0.25rem 0.5rem; font-size: 0.75rem; - background: #f3f4f6; - border: 1px solid #d1d5db; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); border-radius: 0.25rem; cursor: pointer; + color: var(--text-primary); + transition: background 0.2s ease; } .refresh-button:hover { - background: #e5e7eb; + background: var(--bg-secondary); } .commit-list, .tag-list { @@ -2294,29 +2344,29 @@ } .commit-button:hover { - background: #f3f4f6; + background: var(--bg-tertiary); } .commit-item.selected .commit-button { - background: #dbeafe; + background: var(--accent-light); } .commit-hash { - font-family: monospace; + font-family: 'IBM Plex Mono', monospace; font-size: 0.75rem; - color: #6b7280; + color: var(--text-muted); margin-bottom: 0.25rem; } .commit-message { font-weight: 500; margin-bottom: 0.25rem; - color: #374151; + color: var(--text-primary); } .commit-meta { font-size: 0.75rem; - color: #6b7280; + color: var(--text-muted); display: flex; gap: 1rem; } @@ -2327,20 +2377,20 @@ .tag-name { font-weight: 500; - color: #3b82f6; + color: var(--link-color); margin-bottom: 0.25rem; } .tag-hash { - font-family: monospace; + font-family: 'IBM Plex Mono', monospace; font-size: 0.75rem; - color: #6b7280; + color: var(--text-muted); margin-bottom: 0.25rem; } .tag-message { font-size: 0.875rem; - color: #6b7280; + color: var(--text-muted); } /* Diff view */ @@ -2356,25 +2406,28 @@ align-items: center; margin-bottom: 1rem; padding-bottom: 0.5rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); } .diff-header h3 { margin: 0; + color: var(--text-primary); } .close-button { padding: 0.25rem 0.5rem; - background: #f3f4f6; - border: 1px solid #d1d5db; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); border-radius: 0.25rem; cursor: pointer; font-size: 1.25rem; line-height: 1; + color: var(--text-primary); + transition: background 0.2s ease; } .close-button:hover { - background: #e5e7eb; + background: var(--bg-secondary); } .diff-file { @@ -2386,14 +2439,15 @@ justify-content: space-between; align-items: center; padding: 0.5rem; - background: #f3f4f6; + background: var(--bg-secondary); border-radius: 0.25rem; margin-bottom: 0.5rem; } .diff-file-name { - font-family: monospace; + font-family: 'IBM Plex Mono', monospace; font-weight: 500; + color: var(--text-primary); } .diff-stats { @@ -2402,25 +2456,26 @@ } .additions { - color: #10b981; + color: var(--success-text); } .deletions { - color: #ef4444; + color: var(--error-text); } .diff-content { - background: #1f2937; - color: #f9fafb; + background: var(--bg-tertiary); + color: var(--text-primary); padding: 1rem; border-radius: 0.25rem; overflow-x: auto; font-size: 0.875rem; line-height: 1.5; + border: 1px solid var(--border-color); } .diff-content code { - font-family: 'Courier New', monospace; + font-family: 'IBM Plex Mono', monospace; white-space: pre; } @@ -2431,11 +2486,12 @@ .read-only-editor :global(.hljs) { padding: 1rem; - background: #1e1e1e; - color: #d4d4d4; + background: var(--bg-tertiary); + color: var(--text-primary); border-radius: 4px; overflow-x: auto; margin: 0; + border: 1px solid var(--border-color); } .read-only-editor :global(pre) { @@ -2444,16 +2500,17 @@ } .read-only-editor :global(code) { - font-family: 'Courier New', Courier, monospace; + font-family: 'IBM Plex Mono', monospace; font-size: 14px; line-height: 1.5; } .readme-content :global(.hljs) { - background: #f5f5f5; + background: var(--bg-secondary); padding: 1rem; border-radius: 4px; overflow-x: auto; + border: 1px solid var(--border-light); } .readme-content :global(pre.hljs) { @@ -2463,8 +2520,8 @@ /* Issues and PRs */ .issues-sidebar, .prs-sidebar { width: 300px; - border-right: 1px solid #e5e7eb; - background: #f9fafb; + border-right: 1px solid var(--border-color); + background: var(--bg-secondary); display: flex; flex-direction: column; overflow: hidden; @@ -2472,7 +2529,7 @@ .issues-header, .prs-header { padding: 1rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; @@ -2481,20 +2538,23 @@ .issues-header h2, .prs-header h2 { margin: 0; font-size: 1rem; + color: var(--text-primary); } .create-issue-button, .create-pr-button { padding: 0.25rem 0.5rem; font-size: 0.75rem; - background: #3b82f6; + background: var(--button-primary); color: white; border: none; border-radius: 0.25rem; cursor: pointer; + font-family: 'IBM Plex Serif', serif; + transition: background 0.2s ease; } .create-issue-button:hover, .create-pr-button:hover { - background: #2563eb; + background: var(--button-primary-hover); } .issue-list, .pr-list { @@ -2507,12 +2567,13 @@ .issue-item, .pr-item { padding: 0.75rem 1rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); cursor: pointer; + transition: background 0.2s ease; } .issue-item:hover, .pr-item:hover { - background: #f3f4f6; + background: var(--bg-tertiary); } .issue-header, .pr-header { @@ -2531,51 +2592,54 @@ } .issue-status.open, .pr-status.open { - background: #dbeafe; - color: #1e40af; + background: var(--accent-light); + color: var(--accent); } .issue-status.closed, .pr-status.closed { - background: #fee2e2; - color: #991b1b; + background: var(--error-bg); + color: var(--error-text); } .issue-status.resolved, .pr-status.merged { - background: #d1fae5; - color: #065f46; + background: var(--success-bg); + color: var(--success-text); } .issue-subject, .pr-subject { font-weight: 500; flex: 1; + color: var(--text-primary); } .issue-meta, .pr-meta { font-size: 0.75rem; - color: #6b7280; + color: var(--text-muted); display: flex; gap: 0.75rem; } .pr-commit { - font-family: monospace; + font-family: 'IBM Plex Mono', monospace; } .issues-content, .prs-content { flex: 1; overflow-y: auto; padding: 2rem; + background: var(--card-bg); } .issue-detail, .pr-detail { margin-bottom: 2rem; padding-bottom: 2rem; - border-bottom: 1px solid #e5e7eb; + border-bottom: 1px solid var(--border-color); } .issue-detail h3, .pr-detail h3 { margin: 0 0 0.5rem 0; font-size: 1.5rem; + color: var(--text-primary); } .issue-meta-detail, .pr-meta-detail { @@ -2584,12 +2648,12 @@ gap: 1rem; margin-bottom: 1rem; font-size: 0.875rem; - color: #6b7280; + color: var(--text-muted); } .issue-body, .pr-body { line-height: 1.6; - color: #374151; + color: var(--text-primary); } .verification-status { @@ -2601,12 +2665,12 @@ } .verification-status.verified { - background: #d1fae5; - color: #065f46; + background: var(--success-bg); + color: var(--success-text); } .verification-status.unverified { - background: #fee2e2; - color: #991b1b; + background: var(--error-bg); + color: var(--error-text); } diff --git a/src/routes/repos/[npub]/[repo]/settings/+page.svelte b/src/routes/repos/[npub]/[repo]/settings/+page.svelte index f49b87a..6019bed 100644 --- a/src/routes/repos/[npub]/[repo]/settings/+page.svelte +++ b/src/routes/repos/[npub]/[repo]/settings/+page.svelte @@ -192,157 +192,3 @@
- diff --git a/src/routes/search/+page.svelte b/src/routes/search/+page.svelte index 30a0e05..77c2a6a 100644 --- a/src/routes/search/+page.svelte +++ b/src/routes/search/+page.svelte @@ -145,132 +145,3 @@ - diff --git a/src/routes/signup/+page.svelte b/src/routes/signup/+page.svelte index 162a55b..4b098f0 100644 --- a/src/routes/signup/+page.svelte +++ b/src/routes/signup/+page.svelte @@ -348,136 +348,3 @@ - diff --git a/src/routes/users/[npub]/+page.svelte b/src/routes/users/[npub]/+page.svelte index 7676a68..594a96f 100644 --- a/src/routes/users/[npub]/+page.svelte +++ b/src/routes/users/[npub]/+page.svelte @@ -169,30 +169,13 @@