Browse Source

fully-implemented theme

main
Silberengel 4 weeks ago
parent
commit
aab4e8588e
  1. 750
      src/app.css
  2. 111
      src/lib/components/PRDetail.svelte
  3. 140
      src/routes/+page.svelte
  4. 77
      src/routes/docs/nip34/+page.svelte
  5. 286
      src/routes/repos/[npub]/[repo]/+page.svelte
  6. 154
      src/routes/repos/[npub]/[repo]/settings/+page.svelte
  7. 129
      src/routes/search/+page.svelte
  8. 133
      src/routes/signup/+page.svelte
  9. 79
      src/routes/users/[npub]/+page.svelte

750
src/app.css

@ -103,10 +103,458 @@ code, pre, .mono {
font-family: 'IBM Plex Mono', 'Courier New', monospace; font-family: 'IBM Plex Mono', 'Courier New', monospace;
} }
/* Headings with slightly more weight */ /* Headings */
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
font-weight: 600; font-weight: 600;
letter-spacing: -0.02em; 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 */ /* Theme toggle button */
@ -139,3 +587,303 @@ h1, h2, h3, h4, h5, h6 {
font-size: 1rem; font-size: 1rem;
line-height: 1; 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 */
}

111
src/lib/components/PRDetail.svelte

@ -469,18 +469,19 @@
.pr-header { .pr-header {
margin-bottom: 1rem; margin-bottom: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;
border-bottom: 1px solid #e0e0e0; border-bottom: 1px solid var(--border-color);
} }
.pr-header h2 { .pr-header h2 {
margin: 0 0 0.5rem 0; margin: 0 0 0.5rem 0;
color: var(--text-primary);
} }
.pr-meta { .pr-meta {
display: flex; display: flex;
gap: 1rem; gap: 1rem;
font-size: 0.9rem; font-size: 0.9rem;
color: #666; color: var(--text-muted);
} }
.pr-status { .pr-status {
@ -491,18 +492,18 @@
} }
.pr-status.open { .pr-status.open {
background: #d4edda; background: var(--accent-light);
color: #155724; color: var(--accent);
} }
.pr-status.closed { .pr-status.closed {
background: #f8d7da; background: var(--error-bg);
color: #721c24; color: var(--error-text);
} }
.pr-status.merged { .pr-status.merged {
background: #d1ecf1; background: var(--success-bg);
color: #0c5460; color: var(--success-text);
} }
.pr-body { .pr-body {
@ -511,8 +512,9 @@
.pr-description { .pr-description {
padding: 1rem; padding: 1rem;
background: #f5f5f5; background: var(--bg-secondary);
border-radius: 4px; border-radius: 4px;
color: var(--text-primary);
} }
.pr-content { .pr-content {
@ -522,20 +524,23 @@
} }
.code-section, .highlights-section { .code-section, .highlights-section {
border: 1px solid #e0e0e0; border: 1px solid var(--border-color);
border-radius: 4px; border-radius: 4px;
padding: 1rem; padding: 1rem;
background: var(--card-bg);
} }
.code-section h3, .highlights-section h3 { .code-section h3, .highlights-section h3 {
margin-top: 0; margin-top: 0;
color: var(--text-primary);
} }
.diff-viewer { .diff-viewer {
height: 500px; height: 500px;
border: 1px solid #ddd; border: 1px solid var(--border-color);
border-radius: 4px; border-radius: 4px;
overflow: auto; overflow: auto;
background: var(--bg-secondary);
} }
.section-header { .section-header {
@ -547,30 +552,32 @@
.add-comment-btn, .reply-btn { .add-comment-btn, .reply-btn {
padding: 0.4rem 0.8rem; padding: 0.4rem 0.8rem;
background: #007bff; background: var(--button-primary);
color: white; color: white;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
cursor: pointer; cursor: pointer;
font-size: 0.9rem; font-size: 0.9rem;
font-family: 'IBM Plex Serif', serif;
transition: background 0.2s ease;
} }
.add-comment-btn:hover, .reply-btn:hover { .add-comment-btn:hover, .reply-btn:hover {
background: #0056b3; background: var(--button-primary-hover);
} }
.highlight-item, .comment-item { .highlight-item, .comment-item {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
padding: 1rem; padding: 1rem;
background: #f9f9f9; background: var(--bg-secondary);
border-radius: 4px; border-radius: 4px;
border-left: 3px solid #007bff; border-left: 3px solid var(--accent);
} }
.comment-item.nested { .comment-item.nested {
margin-left: 2rem; margin-left: 2rem;
margin-top: 0.5rem; margin-top: 0.5rem;
border-left-color: #28a745; border-left-color: var(--success-text);
} }
.highlight-header, .comment-header { .highlight-header, .comment-header {
@ -578,31 +585,35 @@
gap: 1rem; gap: 1rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
font-size: 0.9rem; font-size: 0.9rem;
color: #666; color: var(--text-muted);
} }
.highlight-author, .comment-author { .highlight-author, .comment-author {
font-weight: bold; font-weight: bold;
color: #333; color: var(--text-primary);
} }
.highlighted-code { .highlighted-code {
background: #fff; background: var(--card-bg);
padding: 0.5rem; padding: 0.5rem;
border-radius: 3px; border-radius: 3px;
margin: 0.5rem 0; margin: 0.5rem 0;
border: 1px solid var(--border-light);
} }
.highlighted-code pre { .highlighted-code pre {
margin: 0; margin: 0;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--text-primary);
font-family: 'IBM Plex Mono', monospace;
} }
.highlight-comment, .comment-content { .highlight-comment, .comment-content {
margin: 0.5rem 0; margin: 0.5rem 0;
padding: 0.5rem; padding: 0.5rem;
background: white; background: var(--card-bg);
border-radius: 3px; border-radius: 3px;
color: var(--text-primary);
} }
.highlight-comments { .highlight-comments {
@ -623,26 +634,50 @@
} }
.modal { .modal {
background: white; background: var(--card-bg);
padding: 2rem; padding: 2rem;
border-radius: 8px; border-radius: 8px;
max-width: 600px; max-width: 600px;
width: 90%; width: 90%;
max-height: 80vh; max-height: 80vh;
overflow-y: auto; 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 { .selected-code {
background: #f5f5f5; background: var(--bg-secondary);
padding: 1rem; padding: 1rem;
border-radius: 4px; border-radius: 4px;
margin-bottom: 1rem; margin-bottom: 1rem;
max-height: 200px; max-height: 200px;
overflow: auto; overflow: auto;
border: 1px solid var(--border-light);
} }
.selected-code pre { .selected-code pre {
margin: 0; margin: 0;
color: var(--text-primary);
font-family: 'IBM Plex Mono', monospace;
} }
.modal-actions { .modal-actions {
@ -657,34 +692,44 @@
border: none; border: none;
border-radius: 4px; border-radius: 4px;
cursor: pointer; cursor: pointer;
font-family: 'IBM Plex Serif', serif;
transition: background 0.2s ease;
} }
.cancel-btn { .cancel-btn {
background: #6c757d; background: var(--bg-tertiary);
color: white; color: var(--text-primary);
}
.cancel-btn:hover {
background: var(--bg-secondary);
} }
.save-btn { .save-btn {
background: #007bff; background: var(--button-primary);
color: white; color: white;
} }
.save-btn:hover:not(:disabled) {
background: var(--button-primary-hover);
}
.save-btn:disabled { .save-btn:disabled {
background: #ccc; background: var(--text-muted);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6;
} }
.loading, .empty { .loading, .empty, .error {
padding: 2rem; color: var(--text-muted);
text-align: center; text-align: center;
color: #666; padding: 1rem;
} }
.error { .error {
padding: 1rem; color: var(--error-text);
background: #f8d7da; background: var(--error-bg);
color: #721c24; border: 1px solid var(--error-text);
border-radius: 4px; border-radius: 4px;
margin-bottom: 1rem;
} }
</style> </style>

140
src/routes/+page.svelte

@ -340,143 +340,3 @@
</main> </main>
</div> </div>
<style>
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
}
header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
border-bottom: 1px solid #e5e7eb;
padding-bottom: 1rem;
}
nav {
display: flex;
gap: 1rem;
}
nav a {
text-decoration: none;
color: #3b82f6;
}
.repos-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
.repos-list {
display: grid;
gap: 1.5rem;
}
.repo-card {
border: 1px solid #e5e7eb;
border-radius: 0.5rem;
background: white;
overflow: hidden;
}
.repo-card-banner {
width: 100%;
height: 200px;
overflow: hidden;
background: #f3f4f6;
}
.repo-card-banner img {
width: 100%;
height: 100%;
object-fit: cover;
}
.repo-card-content {
padding: 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;
}
.repo-card-image {
width: 64px;
height: 64px;
border-radius: 8px;
object-fit: cover;
flex-shrink: 0;
}
.repo-card h3 {
margin: 0;
font-size: 1.25rem;
}
.view-button {
padding: 0.5rem 1rem;
background: #3b82f6;
color: white;
text-decoration: none;
border-radius: 0.25rem;
font-size: 0.875rem;
white-space: nowrap;
}
.view-button:hover {
background: #2563eb;
}
.description {
color: #6b7280;
margin: 0.5rem 0;
}
.clone-urls {
margin: 1rem 0;
}
.clone-urls code {
display: block;
background: #f3f4f6;
padding: 0.5rem;
border-radius: 0.25rem;
margin: 0.25rem 0;
font-family: monospace;
font-size: 0.875rem;
}
.repo-meta {
font-size: 0.875rem;
color: #6b7280;
margin-top: 1rem;
}
.error {
background: #fee2e2;
color: #991b1b;
padding: 1rem;
border-radius: 0.5rem;
margin: 1rem 0;
}
.loading, .empty {
text-align: center;
padding: 2rem;
color: #6b7280;
}
</style>

77
src/routes/docs/nip34/+page.svelte

@ -40,7 +40,7 @@
}); });
</script> </script>
<div class="container"> <div class="container-wide">
<header> <header>
<a href="/" class="back-link">← Back to Repositories</a> <a href="/" class="back-link">← Back to Repositories</a>
<h1>NIP-34 Documentation</h1> <h1>NIP-34 Documentation</h1>
@ -61,56 +61,17 @@
</div> </div>
<style> <style>
.container {
max-width: 1000px;
margin: 0 auto;
padding: 2rem;
}
header {
margin-bottom: 2rem;
border-bottom: 1px solid #e5e7eb;
padding-bottom: 1rem;
}
.back-link {
color: #3b82f6;
text-decoration: none;
font-size: 0.875rem;
display: inline-block;
margin-bottom: 0.5rem;
}
.back-link:hover {
text-decoration: underline;
}
header h1 {
margin: 0 0 0.5rem 0;
font-size: 2rem;
}
.subtitle { .subtitle {
color: #6b7280; color: var(--text-muted);
margin: 0; margin: 0;
} }
.docs-content { .docs-content {
background: white; background: var(--card-bg);
padding: 2rem; padding: 2rem;
border-radius: 0.5rem; border-radius: 0.5rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
} border: 1px solid var(--border-color);
.loading, .error {
text-align: center;
padding: 2rem;
}
.error {
color: #dc2626;
background: #fee2e2;
border-radius: 0.5rem;
} }
:global(.markdown-content) { :global(.markdown-content) {
@ -121,39 +82,42 @@
font-size: 2rem; font-size: 2rem;
margin-top: 2rem; margin-top: 2rem;
margin-bottom: 1rem; margin-bottom: 1rem;
border-bottom: 2px solid #e5e7eb; border-bottom: 2px solid var(--border-color);
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
color: var(--text-primary);
} }
:global(.markdown-content h2) { :global(.markdown-content h2) {
font-size: 1.5rem; font-size: 1.5rem;
margin-top: 1.5rem; margin-top: 1.5rem;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
color: #1f2937; color: var(--text-primary);
} }
:global(.markdown-content h3) { :global(.markdown-content h3) {
font-size: 1.25rem; font-size: 1.25rem;
margin-top: 1.25rem; margin-top: 1.25rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
color: #374151; color: var(--text-primary);
} }
:global(.markdown-content code) { :global(.markdown-content code) {
background: #f3f4f6; background: var(--bg-secondary);
padding: 0.125rem 0.25rem; padding: 0.125rem 0.25rem;
border-radius: 0.25rem; border-radius: 0.25rem;
font-family: 'Courier New', monospace; font-family: 'IBM Plex Mono', monospace;
font-size: 0.875em; font-size: 0.875em;
color: var(--text-primary);
} }
:global(.markdown-content pre) { :global(.markdown-content pre) {
background: #1f2937; background: var(--bg-tertiary);
color: #f9fafb; color: var(--text-primary);
padding: 1rem; padding: 1rem;
border-radius: 0.5rem; border-radius: 0.5rem;
overflow-x: auto; overflow-x: auto;
margin: 1rem 0; margin: 1rem 0;
border: 1px solid var(--border-color);
} }
:global(.markdown-content pre code) { :global(.markdown-content pre code) {
@ -176,10 +140,10 @@
} }
:global(.markdown-content blockquote) { :global(.markdown-content blockquote) {
border-left: 4px solid #3b82f6; border-left: 4px solid var(--accent);
padding-left: 1rem; padding-left: 1rem;
margin: 1rem 0; margin: 1rem 0;
color: #6b7280; color: var(--text-secondary);
} }
:global(.markdown-content table) { :global(.markdown-content table) {
@ -189,13 +153,18 @@
} }
:global(.markdown-content th, .markdown-content td) { :global(.markdown-content th, .markdown-content td) {
border: 1px solid #e5e7eb; border: 1px solid var(--border-color);
padding: 0.5rem; padding: 0.5rem;
text-align: left; text-align: left;
} }
:global(.markdown-content th) { :global(.markdown-content th) {
background: #f9fafb; background: var(--bg-secondary);
font-weight: 600; font-weight: 600;
color: var(--text-primary);
}
:global(.markdown-content td) {
color: var(--text-primary);
} }
</style> </style>

286
src/routes/repos/[npub]/[repo]/+page.svelte

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

154
src/routes/repos/[npub]/[repo]/settings/+page.svelte

@ -192,157 +192,3 @@
</main> </main>
</div> </div>
<style>
.container {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
}
.back-link {
display: inline-block;
margin-bottom: 1rem;
color: #007bff;
text-decoration: none;
}
.back-link:hover {
text-decoration: underline;
}
.settings-form {
background: white;
border-radius: 8px;
padding: 2rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.form-section {
margin-bottom: 2rem;
padding-bottom: 2rem;
border-bottom: 1px solid #e0e0e0;
}
.form-section:last-of-type {
border-bottom: none;
}
.form-section h2 {
margin-bottom: 1rem;
color: #333;
}
label {
display: block;
margin-bottom: 1rem;
font-weight: 500;
}
label input[type="text"],
label input[type="url"],
label textarea {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
margin-top: 0.5rem;
}
label input[type="checkbox"] {
margin-right: 0.5rem;
}
.help-text {
color: #666;
font-size: 0.9rem;
margin-bottom: 1rem;
}
.array-input {
display: flex;
gap: 0.5rem;
margin-bottom: 0.5rem;
align-items: center;
}
.array-input input {
flex: 1;
}
.add-button, .remove-button {
padding: 0.5rem 1rem;
border: 1px solid #ddd;
border-radius: 4px;
background: white;
cursor: pointer;
font-size: 0.9rem;
}
.add-button {
color: #007bff;
border-color: #007bff;
}
.add-button:hover {
background: #f0f8ff;
}
.remove-button {
color: #d32f2f;
border-color: #d32f2f;
}
.remove-button:hover {
background: #ffebee;
}
.form-actions {
display: flex;
gap: 1rem;
justify-content: flex-end;
margin-top: 2rem;
}
.cancel-button, .save-button {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
.cancel-button {
background: #f5f5f5;
color: #333;
}
.cancel-button:hover {
background: #e0e0e0;
}
.save-button {
background: #007bff;
color: white;
}
.save-button:hover:not(:disabled) {
background: #0056b3;
}
.save-button:disabled {
background: #ccc;
cursor: not-allowed;
}
.loading, .error {
text-align: center;
padding: 2rem;
}
.error {
color: #d32f2f;
background: #ffebee;
border-radius: 4px;
}
</style>

129
src/routes/search/+page.svelte

@ -145,132 +145,3 @@
</main> </main>
</div> </div>
<style>
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
}
.back-link {
display: inline-block;
margin-bottom: 1rem;
color: #007bff;
text-decoration: none;
}
.back-link:hover {
text-decoration: underline;
}
.search-form {
display: flex;
gap: 1rem;
margin-bottom: 2rem;
align-items: center;
}
.search-input {
flex: 1;
padding: 0.75rem;
font-size: 1rem;
border: 1px solid #ddd;
border-radius: 4px;
}
.search-type-select {
padding: 0.75rem;
border: 1px solid #ddd;
border-radius: 4px;
}
.search-button {
padding: 0.75rem 1.5rem;
background: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
.search-button:hover:not(:disabled) {
background: #0056b3;
}
.search-button:disabled {
background: #ccc;
cursor: not-allowed;
}
.results-header {
margin-bottom: 1.5rem;
}
.results-section {
margin-bottom: 2rem;
}
.results-section h3 {
margin-bottom: 1rem;
color: #333;
}
.repo-list, .code-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.repo-item, .code-item {
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 1rem;
cursor: pointer;
transition: box-shadow 0.2s;
}
.repo-item:hover, .code-item:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.repo-item h4 {
margin: 0 0 0.5rem 0;
color: #007bff;
}
.repo-description {
color: #666;
margin: 0.5rem 0;
}
.repo-meta {
margin-top: 0.5rem;
font-size: 0.9rem;
color: #999;
}
.code-file-path {
font-family: monospace;
color: #333;
margin-bottom: 0.5rem;
}
.code-repo {
font-size: 0.9rem;
color: #666;
}
.no-results, .error {
text-align: center;
padding: 2rem;
color: #666;
}
.error {
color: #d32f2f;
background: #ffebee;
border-radius: 4px;
padding: 1rem;
}
</style>

133
src/routes/signup/+page.svelte

@ -348,136 +348,3 @@
</main> </main>
</div> </div>
<style>
.container {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
}
header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
border-bottom: 1px solid #e5e7eb;
padding-bottom: 1rem;
}
nav {
display: flex;
gap: 1rem;
}
nav a {
text-decoration: none;
color: #3b82f6;
}
.warning {
background: #fef3c7;
border: 1px solid #f59e0b;
border-radius: 0.5rem;
padding: 1rem;
margin-bottom: 1.5rem;
}
.error {
background: #fee2e2;
color: #991b1b;
padding: 1rem;
border-radius: 0.5rem;
margin-bottom: 1.5rem;
}
.success {
background: #d1fae5;
color: #065f46;
padding: 1rem;
border-radius: 0.5rem;
margin-bottom: 1.5rem;
}
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;
}
label small, .label small {
font-weight: normal;
color: #6b7280;
font-size: 0.875rem;
}
input, textarea {
padding: 0.75rem;
border: 1px solid #d1d5db;
border-radius: 0.375rem;
font-size: 1rem;
}
input:disabled, textarea:disabled {
background: #f3f4f6;
cursor: not-allowed;
}
.input-group {
display: flex;
gap: 0.5rem;
align-items: center;
}
.input-group input {
flex: 1;
}
button {
padding: 0.5rem 1rem;
background: #3b82f6;
color: white;
border: none;
border-radius: 0.375rem;
cursor: pointer;
font-size: 0.875rem;
}
button:disabled {
background: #9ca3af;
cursor: not-allowed;
}
.add-button {
background: #10b981;
margin-top: 0.5rem;
}
.form-actions {
display: flex;
gap: 1rem;
align-items: center;
}
.form-actions button[type="submit"] {
padding: 0.75rem 1.5rem;
font-size: 1rem;
}
.cancel-link {
color: #6b7280;
text-decoration: none;
}
</style>

79
src/routes/users/[npub]/+page.svelte

@ -169,30 +169,13 @@
</div> </div>
<style> <style>
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
}
.back-link {
display: inline-block;
margin-bottom: 1rem;
color: #007bff;
text-decoration: none;
}
.back-link:hover {
text-decoration: underline;
}
.profile-header { .profile-header {
display: flex; display: flex;
gap: 1.5rem; gap: 1.5rem;
align-items: flex-start; align-items: flex-start;
margin-bottom: 2rem; margin-bottom: 2rem;
padding-bottom: 2rem; padding-bottom: 2rem;
border-bottom: 1px solid #e0e0e0; border-bottom: 1px solid var(--border-color);
} }
.profile-picture { .profile-picture {
@ -206,7 +189,7 @@
width: 80px; width: 80px;
height: 80px; height: 80px;
border-radius: 50%; border-radius: 50%;
background: #007bff; background: var(--accent);
color: white; color: white;
display: flex; display: flex;
align-items: center; align-items: center;
@ -215,77 +198,25 @@
font-weight: bold; font-weight: bold;
} }
.profile-info h1 {
margin: 0 0 0.5rem 0;
}
.profile-about { .profile-about {
color: #666; color: var(--text-secondary);
margin: 0.5rem 0; margin: 0.5rem 0;
} }
.profile-npub { .profile-npub {
color: #999; color: var(--text-muted);
font-size: 0.9rem; font-size: 0.9rem;
margin: 0.5rem 0 0 0; margin: 0.5rem 0 0 0;
font-family: monospace; font-family: 'IBM Plex Mono', monospace;
} }
.repos-section { .repos-section {
margin-top: 2rem; margin-top: 2rem;
} }
.repos-section h2 {
margin-bottom: 1rem;
}
.repo-grid { .repo-grid {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 1.5rem; gap: 1.5rem;
} }
.repo-card {
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 1.5rem;
cursor: pointer;
transition: box-shadow 0.2s;
}
.repo-card:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.repo-card h3 {
margin: 0 0 0.5rem 0;
color: #007bff;
}
.repo-description {
color: #666;
margin: 0.5rem 0;
font-size: 0.9rem;
}
.repo-meta {
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid #f0f0f0;
font-size: 0.85rem;
color: #999;
}
.loading, .empty, .error {
text-align: center;
padding: 2rem;
color: #666;
}
.error {
color: #d32f2f;
background: #ffebee;
border-radius: 4px;
padding: 1rem;
}
</style> </style>

Loading…
Cancel
Save