@commonpub/layer 0.86.3 → 0.86.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/AppToast.vue +3 -3
- package/components/CommentSection.vue +2 -2
- package/components/ContentStarterForm.vue +2 -2
- package/components/CpubDateTimeField.vue +1 -1
- package/components/DiscussionItem.vue +1 -1
- package/components/FeedItem.vue +7 -7
- package/components/ImageUpload.vue +2 -2
- package/components/ImportUrlModal.vue +2 -2
- package/components/LayoutRow.vue +1 -1
- package/components/MemberCard.vue +2 -2
- package/components/MirrorDetailModal.vue +9 -9
- package/components/MirrorRequestApproveModal.vue +2 -2
- package/components/PostVoteButtons.vue +4 -4
- package/components/PublishErrorsModal.vue +2 -2
- package/components/RegistryDirectory.vue +4 -4
- package/components/RemoteFollowDialog.vue +1 -1
- package/components/SearchSidebar.vue +1 -1
- package/components/admin/layouts/AdminLayoutsAutoForm.vue +3 -3
- package/components/admin/layouts/AdminLayoutsConflictModal.vue +2 -2
- package/components/admin/layouts/AdminLayoutsInspectorSection.vue +1 -1
- package/components/admin/layouts/AdminLayoutsToolbar.vue +1 -1
- package/components/admin/theme/AdminThemeFamilyCard.vue +2 -2
- package/components/admin/theme/AdminThemeOverridesPanel.vue +1 -1
- package/components/admin/theme/AdminThemeSceneAdmin.vue +5 -5
- package/components/admin/theme/AdminThemeSceneSheet.vue +2 -2
- package/components/admin/theme/studio/AdminThemeStudio.vue +2 -2
- package/components/blocks/BlockCalloutView.vue +6 -6
- package/components/blocks/BlockCheckpointView.vue +1 -1
- package/components/blocks/BlockCompareColumnsView.vue +4 -4
- package/components/blocks/BlockQuizView.vue +11 -11
- package/components/blocks/BlockSliderView.vue +3 -3
- package/components/contest/ContestCriteriaEditor.vue +1 -1
- package/components/contest/ContestEditor.vue +13 -13
- package/components/contest/ContestEntries.vue +6 -6
- package/components/contest/ContestEntryPrivateData.vue +1 -1
- package/components/contest/ContestHero.vue +6 -6
- package/components/contest/ContestJudgeManager.vue +2 -2
- package/components/contest/ContestJudgingCriteria.vue +1 -1
- package/components/contest/ContestPrizes.vue +4 -4
- package/components/contest/ContestRules.vue +1 -1
- package/components/contest/ContestSidebar.vue +6 -6
- package/components/contest/ContestStageCard.vue +1 -1
- package/components/contest/ContestStageSubmission.vue +2 -2
- package/components/contest/ContestStageTemplateEditor.vue +1 -1
- package/components/contest/ContestStakeholderManager.vue +1 -1
- package/components/contest/ContestSubmissionField.vue +1 -1
- package/components/contest/blocks/CompareColumnsBlock.vue +1 -1
- package/components/contest/blocks/CriteriaBarBlock.vue +1 -1
- package/components/contest/blocks/JudgesShowcaseBlock.vue +1 -1
- package/components/contest/blocks/RoadmapBlock.vue +1 -1
- package/components/contest/blocks/SponsorsBlock.vue +1 -1
- package/components/contest/blocks/TableBlock.vue +1 -1
- package/components/contest/blocks/TabsBlock.vue +1 -1
- package/components/editors/ArticleEditor.vue +1 -1
- package/components/editors/DocsPageTree.vue +2 -2
- package/components/editors/ExplainerEditor.vue +1 -1
- package/components/editors/ProjectEditor.vue +1 -1
- package/components/homepage/EditorialSection.vue +1 -1
- package/components/homepage/HeroSection.vue +2 -2
- package/components/homepage/HubsSection.vue +1 -1
- package/components/hub/HubResources.vue +1 -1
- package/components/views/ArticleView.vue +3 -3
- package/components/views/ExplainerView.vue +2 -2
- package/components/views/ProjectView.vue +6 -6
- package/layouts/default.vue +1 -1
- package/package.json +7 -7
- package/pages/about.vue +1 -1
- package/pages/admin/api-keys.vue +5 -5
- package/pages/admin/categories.vue +2 -2
- package/pages/admin/content.vue +6 -6
- package/pages/admin/features.vue +2 -2
- package/pages/admin/federation.vue +3 -3
- package/pages/admin/homepage.vue +4 -4
- package/pages/admin/layouts/[id].vue +2 -2
- package/pages/admin/layouts/index.vue +1 -1
- package/pages/admin/navigation.vue +2 -2
- package/pages/admin/reports.vue +4 -4
- package/pages/admin/theme/edit/[id].vue +1 -1
- package/pages/admin/users.vue +3 -3
- package/pages/admin/video-categories.vue +1 -1
- package/pages/auth/forgot-password.vue +1 -1
- package/pages/auth/login.vue +1 -1
- package/pages/auth/register.vue +2 -2
- package/pages/auth/reset-password.vue +3 -3
- package/pages/auth/verify-email.vue +3 -3
- package/pages/authorize_interaction.vue +2 -2
- package/pages/cert/[code].vue +3 -3
- package/pages/contests/[slug]/entries/[entryId].vue +2 -2
- package/pages/contests/[slug]/judge.vue +4 -4
- package/pages/contests/[slug]/results.vue +4 -4
- package/pages/dashboard.vue +3 -3
- package/pages/docs/[siteSlug]/edit.vue +5 -5
- package/pages/explore.vue +1 -1
- package/pages/federated-hubs/[id]/posts/[postId].vue +1 -1
- package/pages/federation/users/[handle].vue +1 -1
- package/pages/hubs/[slug]/index.vue +2 -2
- package/pages/hubs/[slug]/invites.vue +2 -2
- package/pages/hubs/[slug]/members.vue +3 -3
- package/pages/hubs/[slug]/posts/[postId].vue +2 -2
- package/pages/index.vue +7 -7
- package/pages/learn/[slug]/[lessonSlug]/edit.vue +2 -2
- package/pages/learn/[slug]/[lessonSlug]/index.vue +10 -10
- package/pages/learn/[slug]/edit.vue +4 -4
- package/pages/learn/[slug]/index.vue +4 -4
- package/pages/learn/index.vue +6 -6
- package/pages/messages/index.vue +2 -2
- package/pages/mirror/[id].vue +1 -1
- package/pages/products/[slug].vue +1 -1
- package/pages/settings/account.vue +2 -2
- package/pages/settings/profile.vue +1 -1
- package/pages/u/[username]/[type]/[slug]/edit.vue +4 -4
- package/pages/u/[username]/index.vue +5 -5
- package/pages/videos/index.vue +3 -3
- package/theme/base.css +31 -0
- package/theme/components.css +8 -8
- package/theme/editor-panels.css +1 -1
- package/theme/forms.css +1 -1
- package/theme/layouts.css +6 -6
- package/theme/prose.css +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commonpub/layer",
|
|
3
|
-
"version": "0.86.
|
|
3
|
+
"version": "0.86.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"files": [
|
|
@@ -54,17 +54,17 @@
|
|
|
54
54
|
"vue-advanced-cropper": "^2.8.9",
|
|
55
55
|
"vue-router": "^4.3.0",
|
|
56
56
|
"zod": "^4.3.6",
|
|
57
|
-
"@commonpub/auth": "0.8.0",
|
|
58
|
-
"@commonpub/docs": "0.6.3",
|
|
59
57
|
"@commonpub/explainer": "0.8.0",
|
|
60
|
-
"@commonpub/
|
|
61
|
-
"@commonpub/
|
|
58
|
+
"@commonpub/docs": "0.6.3",
|
|
59
|
+
"@commonpub/learning": "0.5.2",
|
|
62
60
|
"@commonpub/editor": "0.9.0",
|
|
63
61
|
"@commonpub/config": "0.23.0",
|
|
62
|
+
"@commonpub/schema": "0.48.0",
|
|
64
63
|
"@commonpub/theme-studio": "0.6.1",
|
|
65
|
-
"@commonpub/
|
|
64
|
+
"@commonpub/auth": "0.8.0",
|
|
65
|
+
"@commonpub/protocol": "0.14.0",
|
|
66
66
|
"@commonpub/ui": "0.13.1",
|
|
67
|
-
"@commonpub/
|
|
67
|
+
"@commonpub/server": "2.92.0"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
70
|
"@testing-library/jest-dom": "^6.9.1",
|
package/pages/about.vue
CHANGED
|
@@ -80,7 +80,7 @@ const { hubs: hubsEnabled, learning: learningEnabled, contests: contestsEnabled,
|
|
|
80
80
|
background-size: 32px 32px; opacity: 0.2;
|
|
81
81
|
}
|
|
82
82
|
.cpub-about-hero-inner { position: relative; z-index: 1; max-width: 600px; margin: 0 auto; }
|
|
83
|
-
.cpub-about-badge { font-family: var(--font-mono); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; padding: 4px 12px; border: var(--border-width-default) solid var(--green); background: var(--green-bg); color: var(--green); display: inline-flex; align-items: center; gap: 6px; margin-bottom: 16px; }
|
|
83
|
+
.cpub-about-badge { font-family: var(--font-mono); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; padding: 4px 12px; border: var(--border-width-default) solid var(--green); background: var(--green-bg); color: var(--green-text); display: inline-flex; align-items: center; gap: 6px; margin-bottom: 16px; }
|
|
84
84
|
.cpub-about-title { font-size: 36px; font-weight: 700; margin-bottom: 12px; letter-spacing: -0.02em; }
|
|
85
85
|
.cpub-about-subtitle { font-size: 15px; color: var(--text-dim); line-height: 1.6; }
|
|
86
86
|
|
package/pages/admin/api-keys.vue
CHANGED
|
@@ -449,7 +449,7 @@ function fmtErrorRate(rate: number): string {
|
|
|
449
449
|
border: var(--border-width-default) solid var(--border); font-family: inherit;
|
|
450
450
|
}
|
|
451
451
|
.cpub-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
|
|
452
|
-
.cpub-form-error { color: var(--red); font-size: 12px; margin: 8px 0; }
|
|
452
|
+
.cpub-form-error { color: var(--red-text); font-size: 12px; margin: 8px 0; }
|
|
453
453
|
.cpub-form-actions { display: flex; justify-content: flex-end; gap: 10px; }
|
|
454
454
|
|
|
455
455
|
.cpub-scope-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 6px; }
|
|
@@ -472,7 +472,7 @@ function fmtErrorRate(rate: number): string {
|
|
|
472
472
|
.cpub-btn-primary { background: var(--accent); color: var(--color-text-inverse); border-color: var(--accent); }
|
|
473
473
|
.cpub-btn-link { background: none; border: none; color: var(--text-dim); cursor: pointer; padding: 4px 8px; font-size: 12px; }
|
|
474
474
|
.cpub-btn-link:hover { color: var(--text); }
|
|
475
|
-
.cpub-btn-danger { color: var(--red); }
|
|
475
|
+
.cpub-btn-danger { color: var(--red-text); }
|
|
476
476
|
|
|
477
477
|
.cpub-key-table {
|
|
478
478
|
width: 100%; border-collapse: collapse;
|
|
@@ -493,9 +493,9 @@ function fmtErrorRate(rate: number): string {
|
|
|
493
493
|
}
|
|
494
494
|
|
|
495
495
|
.cpub-key-badge { font-family: var(--font-mono); font-size: 10px; padding: 2px 8px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }
|
|
496
|
-
.cpub-key-badge-green { background: var(--green-bg); color: var(--green); border: var(--border-width-default) solid var(--green); }
|
|
497
|
-
.cpub-key-badge-yellow { background: var(--yellow-bg); color: var(--yellow); border: var(--border-width-default) solid var(--yellow); }
|
|
498
|
-
.cpub-key-badge-red { background: var(--red-bg); color: var(--red); border: var(--border-width-default) solid var(--red); }
|
|
496
|
+
.cpub-key-badge-green { background: var(--green-bg); color: var(--green-text); border: var(--border-width-default) solid var(--green); }
|
|
497
|
+
.cpub-key-badge-yellow { background: var(--yellow-bg); color: var(--yellow-text); border: var(--border-width-default) solid var(--yellow); }
|
|
498
|
+
.cpub-key-badge-red { background: var(--red-bg); color: var(--red-text); border: var(--border-width-default) solid var(--red); }
|
|
499
499
|
|
|
500
500
|
.cpub-key-actions { display: flex; gap: 8px; }
|
|
501
501
|
.cpub-key-usage-row td { background: var(--surface2); padding: 16px; }
|
|
@@ -243,11 +243,11 @@ async function deleteCategory(cat: Category): Promise<void> {
|
|
|
243
243
|
.cpub-admin-actions { display: flex; gap: 6px; }
|
|
244
244
|
.cpub-admin-action { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
245
245
|
.cpub-admin-action:hover { color: var(--accent); }
|
|
246
|
-
.cpub-admin-action--danger:hover { color: var(--red); }
|
|
246
|
+
.cpub-admin-action--danger:hover { color: var(--red-text); }
|
|
247
247
|
|
|
248
248
|
.cpub-cat-name { display: flex; align-items: center; gap: 6px; font-weight: 500; }
|
|
249
249
|
.cpub-cat-type { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; padding: 2px 8px; }
|
|
250
|
-
.cpub-cat-system { color: var(--teal); background: var(--teal-bg, var(--surface2)); border: var(--border-width-default) solid var(--teal-border, var(--border2)); }
|
|
250
|
+
.cpub-cat-system { color: var(--teal-text); background: var(--teal-bg, var(--surface2)); border: var(--border-width-default) solid var(--teal-border, var(--border2)); }
|
|
251
251
|
.cpub-cat-custom { color: var(--text-dim); background: var(--surface2); border: var(--border-width-default) solid var(--border2); }
|
|
252
252
|
|
|
253
253
|
.cpub-empty { color: var(--text-faint); text-align: center; padding: var(--space-10) 0; }
|
package/pages/admin/content.vue
CHANGED
|
@@ -279,20 +279,20 @@ async function setCategory(id: string, categoryId: string | null): Promise<void>
|
|
|
279
279
|
.cpub-admin-num { font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }
|
|
280
280
|
.cpub-admin-date { font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }
|
|
281
281
|
.cpub-status-badge { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; padding: 2px 8px; }
|
|
282
|
-
.cpub-status-published { color: var(--green); background: var(--green-bg); border: var(--border-width-default) solid var(--green-border); }
|
|
282
|
+
.cpub-status-published { color: var(--green-text); background: var(--green-bg); border: var(--border-width-default) solid var(--green-border); }
|
|
283
283
|
.cpub-status-draft { color: var(--text-dim); background: var(--surface2); border: var(--border-width-default) solid var(--border2); }
|
|
284
284
|
.cpub-admin-actions { display: flex; gap: 6px; }
|
|
285
285
|
.cpub-admin-action { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
286
286
|
.cpub-admin-action:hover { color: var(--accent); }
|
|
287
|
-
.cpub-admin-action--active { color: var(--teal); }
|
|
288
|
-
.cpub-admin-action--active-star { color: var(--yellow, #e6b800); }
|
|
289
|
-
.cpub-admin-action--danger:hover { color: var(--red); }
|
|
287
|
+
.cpub-admin-action--active { color: var(--teal-text); }
|
|
288
|
+
.cpub-admin-action--active-star { color: var(--yellow-text, #e6b800); }
|
|
289
|
+
.cpub-admin-action--danger:hover { color: var(--red-text); }
|
|
290
290
|
.cpub-admin-federated-tag { font-family: var(--font-mono); font-size: 9px; color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.04em; display: flex; align-items: center; gap: 3px; }
|
|
291
291
|
.cpub-row-selected { background: var(--accent-bg); }
|
|
292
292
|
.cpub-admin-badges { display: flex; gap: 4px; margin-top: 2px; }
|
|
293
293
|
.cpub-mini-badge { font-family: var(--font-mono); font-size: 9px; display: inline-flex; align-items: center; gap: 3px; }
|
|
294
|
-
.cpub-mini-badge--editorial { color: var(--teal); }
|
|
295
|
-
.cpub-mini-badge--featured { color: var(--yellow, #e6b800); }
|
|
294
|
+
.cpub-mini-badge--editorial { color: var(--teal-text); }
|
|
295
|
+
.cpub-mini-badge--featured { color: var(--yellow-text, #e6b800); }
|
|
296
296
|
.cpub-cat-select {
|
|
297
297
|
font-family: var(--font-mono);
|
|
298
298
|
font-size: 10px;
|
package/pages/admin/features.vue
CHANGED
|
@@ -264,7 +264,7 @@ async function resetOverride(key: string): Promise<void> {
|
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
.cpub-flag-badge--override { color: var(--accent); background: var(--accent-bg); border: var(--border-width-default) solid var(--accent-border); }
|
|
267
|
-
.cpub-flag-badge--pending { color: var(--yellow); background: var(--yellow-bg); border: var(--border-width-default) solid var(--yellow); }
|
|
267
|
+
.cpub-flag-badge--pending { color: var(--yellow-text); background: var(--yellow-bg); border: var(--border-width-default) solid var(--yellow); }
|
|
268
268
|
|
|
269
269
|
.cpub-flag-reset {
|
|
270
270
|
background: none;
|
|
@@ -330,7 +330,7 @@ async function resetOverride(key: string): Promise<void> {
|
|
|
330
330
|
font-family: var(--font-mono);
|
|
331
331
|
font-size: 11px;
|
|
332
332
|
font-weight: 600;
|
|
333
|
-
color: var(--yellow, var(--text-dim));
|
|
333
|
+
color: var(--yellow-text, var(--text-dim));
|
|
334
334
|
flex: 1;
|
|
335
335
|
}
|
|
336
336
|
|
|
@@ -726,7 +726,7 @@ async function refederate(): Promise<void> {
|
|
|
726
726
|
}
|
|
727
727
|
.cpub-fed-btn-sm:hover { border-color: var(--accent); color: var(--accent); }
|
|
728
728
|
.cpub-fed-btn-sm:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
729
|
-
.cpub-fed-btn-danger:hover { border-color: var(--red); color: var(--red); }
|
|
729
|
+
.cpub-fed-btn-danger:hover { border-color: var(--red); color: var(--red-text); }
|
|
730
730
|
|
|
731
731
|
.cpub-fed-activity-list {
|
|
732
732
|
border: var(--border-width-default) solid var(--border); overflow: hidden;
|
|
@@ -751,9 +751,9 @@ async function refederate(): Promise<void> {
|
|
|
751
751
|
.cpub-fed-status.delivered, .cpub-fed-status.processed, .cpub-fed-status.active { color: var(--accent); border-color: var(--accent-border); background: var(--accent-bg); }
|
|
752
752
|
.cpub-fed-status.pending { color: var(--text-dim); }
|
|
753
753
|
.cpub-fed-status.paused { color: var(--text-dim); background: var(--surface2); }
|
|
754
|
-
.cpub-fed-status.failed { color: var(--red); border-color: var(--red); }
|
|
754
|
+
.cpub-fed-status.failed { color: var(--red-text); border-color: var(--red); }
|
|
755
755
|
.cpub-fed-time { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); white-space: nowrap; }
|
|
756
|
-
.cpub-fed-error { font-size: 10px; color: var(--red); font-family: var(--font-mono); cursor: help; }
|
|
756
|
+
.cpub-fed-error { font-size: 10px; color: var(--red-text); font-family: var(--font-mono); cursor: help; }
|
|
757
757
|
.cpub-fed-info-text { font-size: 0.75rem; color: var(--text-dim); margin-top: 12px; }
|
|
758
758
|
.cpub-fed-info-text code { font-family: var(--font-mono); background: var(--surface2); padding: 1px 4px; }
|
|
759
759
|
|
package/pages/admin/homepage.vue
CHANGED
|
@@ -289,8 +289,8 @@ const { layoutEngine } = useFeatures();
|
|
|
289
289
|
.cpub-section-actions { display: flex; gap: 6px; flex-shrink: 0; }
|
|
290
290
|
.cpub-section-action { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
291
291
|
.cpub-section-action:hover { color: var(--accent); }
|
|
292
|
-
.cpub-section-action--active { color: var(--green); }
|
|
293
|
-
.cpub-section-action--danger:hover { color: var(--red); }
|
|
292
|
+
.cpub-section-action--active { color: var(--green-text); }
|
|
293
|
+
.cpub-section-action--danger:hover { color: var(--red-text); }
|
|
294
294
|
|
|
295
295
|
.cpub-section-editor { width: 100%; padding: 12px 0 0; border-top: var(--border-width-default) solid var(--border2); margin-top: 8px; }
|
|
296
296
|
.cpub-editor-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3); }
|
|
@@ -302,7 +302,7 @@ const { layoutEngine } = useFeatures();
|
|
|
302
302
|
.cpub-editor-textarea { font-size: 12px; font-family: var(--font-mono); padding: 8px 10px; border: var(--border-width-default) solid var(--border); background: var(--bg); color: var(--text); outline: none; resize: vertical; }
|
|
303
303
|
|
|
304
304
|
.cpub-sections-footer { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4); margin-top: var(--space-4); background: var(--yellow-bg, var(--surface2)); border: var(--border-width-default) solid var(--yellow, var(--border)); }
|
|
305
|
-
.cpub-sections-footer-text { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--yellow, var(--text-dim)); flex: 1; }
|
|
305
|
+
.cpub-sections-footer-text { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--yellow-text, var(--text-dim)); flex: 1; }
|
|
306
306
|
|
|
307
307
|
@media (max-width: 768px) {
|
|
308
308
|
.cpub-admin-header { flex-direction: column; }
|
|
@@ -324,7 +324,7 @@ const { layoutEngine } = useFeatures();
|
|
|
324
324
|
border: 1px solid var(--yellow, var(--border));
|
|
325
325
|
margin-bottom: var(--space-4);
|
|
326
326
|
}
|
|
327
|
-
.cpub-admin-homepage-deprecation i { color: var(--yellow, var(--text-dim)); font-size: var(--text-lg); margin-top: 2px; }
|
|
327
|
+
.cpub-admin-homepage-deprecation i { color: var(--yellow-text, var(--text-dim)); font-size: var(--text-lg); margin-top: 2px; }
|
|
328
328
|
.cpub-admin-homepage-deprecation p { margin: 0 0 var(--space-1) 0; color: var(--text); }
|
|
329
329
|
.cpub-admin-homepage-deprecation-link {
|
|
330
330
|
display: inline-flex; align-items: center; gap: var(--space-1);
|
|
@@ -841,7 +841,7 @@ async function onConflictForceSave(): Promise<void> {
|
|
|
841
841
|
flex-shrink: 0;
|
|
842
842
|
}
|
|
843
843
|
.cpub-admin-layouts-editor-thrash-icon {
|
|
844
|
-
color: var(--yellow);
|
|
844
|
+
color: var(--yellow-text);
|
|
845
845
|
font-size: var(--text-lg);
|
|
846
846
|
flex-shrink: 0;
|
|
847
847
|
}
|
|
@@ -894,7 +894,7 @@ async function onConflictForceSave(): Promise<void> {
|
|
|
894
894
|
}
|
|
895
895
|
.cpub-admin-layouts-editor-thrash-btn--primary:hover { filter: brightness(1.1); background: var(--accent); }
|
|
896
896
|
.cpub-admin-layouts-editor-thrash-btn--danger {
|
|
897
|
-
color: var(--red);
|
|
897
|
+
color: var(--red-text);
|
|
898
898
|
border-color: var(--red);
|
|
899
899
|
}
|
|
900
900
|
.cpub-admin-layouts-editor-thrash-btn--danger:hover {
|
|
@@ -352,5 +352,5 @@ const sortedLayouts = computed<LayoutRecord[]>(() => {
|
|
|
352
352
|
}
|
|
353
353
|
.cpub-admin-layouts-btn:hover { background: var(--surface2); }
|
|
354
354
|
.cpub-admin-layouts-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
355
|
-
.cpub-admin-layouts-btn--danger:hover { color: var(--red); border-color: var(--red); }
|
|
355
|
+
.cpub-admin-layouts-btn--danger:hover { color: var(--red-text); border-color: var(--red); }
|
|
356
356
|
</style>
|
|
@@ -316,7 +316,7 @@ const editingId = ref<string | null>(null);
|
|
|
316
316
|
.cpub-nav-actions { display: flex; gap: 6px; flex-shrink: 0; }
|
|
317
317
|
.cpub-nav-action { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
318
318
|
.cpub-nav-action:hover { color: var(--accent); }
|
|
319
|
-
.cpub-nav-action--danger:hover { color: var(--red); }
|
|
319
|
+
.cpub-nav-action--danger:hover { color: var(--red-text); }
|
|
320
320
|
|
|
321
321
|
.cpub-nav-editor { width: 100%; padding: 12px 0 0; border-top: var(--border-width-default) solid var(--border2); margin-top: 8px; }
|
|
322
322
|
.cpub-editor-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3); }
|
|
@@ -337,7 +337,7 @@ const editingId = ref<string | null>(null);
|
|
|
337
337
|
.cpub-children-empty { font-size: 12px; color: var(--text-faint); font-style: italic; }
|
|
338
338
|
|
|
339
339
|
.cpub-nav-footer { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4); margin-top: var(--space-4); background: var(--yellow-bg, var(--surface2)); border: var(--border-width-default) solid var(--yellow, var(--border)); }
|
|
340
|
-
.cpub-nav-footer-text { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--yellow, var(--text-dim)); flex: 1; }
|
|
340
|
+
.cpub-nav-footer-text { font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--yellow-text, var(--text-dim)); flex: 1; }
|
|
341
341
|
|
|
342
342
|
@media (max-width: 768px) {
|
|
343
343
|
.cpub-admin-header { flex-direction: column; }
|
package/pages/admin/reports.vue
CHANGED
|
@@ -117,7 +117,7 @@ watch(statusFilter, () => {
|
|
|
117
117
|
<button v-if="statusFilter === 'pending'" class="cpub-btn cpub-btn-sm" @click="bulkAction('reviewed')">
|
|
118
118
|
<i class="fa-solid fa-eye" /> Mark Reviewed
|
|
119
119
|
</button>
|
|
120
|
-
<button class="cpub-btn cpub-btn-sm" style="color: var(--green); border-color: var(--green-border);" @click="bulkAction('resolved')">
|
|
120
|
+
<button class="cpub-btn cpub-btn-sm" style="color: var(--green-text); border-color: var(--green-border);" @click="bulkAction('resolved')">
|
|
121
121
|
<i class="fa-solid fa-check" /> Resolve
|
|
122
122
|
</button>
|
|
123
123
|
<button class="cpub-btn cpub-btn-sm" @click="bulkAction('dismissed')">
|
|
@@ -149,7 +149,7 @@ watch(statusFilter, () => {
|
|
|
149
149
|
<button v-if="report.status === 'pending'" class="cpub-btn cpub-btn-sm" @click="resolveReport(report.id, 'reviewed')">
|
|
150
150
|
<i class="fa-solid fa-eye" /> Mark Reviewed
|
|
151
151
|
</button>
|
|
152
|
-
<button class="cpub-btn cpub-btn-sm" style="color: var(--green); border-color: var(--green-border);" @click="resolveReport(report.id, 'resolved')">
|
|
152
|
+
<button class="cpub-btn cpub-btn-sm" style="color: var(--green-text); border-color: var(--green-border);" @click="resolveReport(report.id, 'resolved')">
|
|
153
153
|
<i class="fa-solid fa-check" /> Resolve
|
|
154
154
|
</button>
|
|
155
155
|
<button class="cpub-btn cpub-btn-sm" @click="resolveReport(report.id, 'dismissed')">
|
|
@@ -183,9 +183,9 @@ watch(statusFilter, () => {
|
|
|
183
183
|
.cpub-report-checkbox { display: flex; align-items: center; cursor: pointer; }
|
|
184
184
|
.cpub-report-checkbox input { cursor: pointer; accent-color: var(--accent); }
|
|
185
185
|
.cpub-report-status { font-size: 10px; font-family: var(--font-mono); font-weight: 600; text-transform: uppercase; padding: 2px 8px; }
|
|
186
|
-
.cpub-status-pending { background: var(--yellow-bg); color: var(--yellow); border: var(--border-width-default) solid var(--yellow-border); }
|
|
186
|
+
.cpub-status-pending { background: var(--yellow-bg); color: var(--yellow-text); border: var(--border-width-default) solid var(--yellow-border); }
|
|
187
187
|
.cpub-status-reviewed { background: var(--blue-bg, var(--accent-bg)); color: var(--blue, var(--accent)); border: var(--border-width-default) solid var(--blue-border, var(--accent-border)); }
|
|
188
|
-
.cpub-status-resolved { background: var(--green-bg); color: var(--green); border: var(--border-width-default) solid var(--green-border); }
|
|
188
|
+
.cpub-status-resolved { background: var(--green-bg); color: var(--green-text); border: var(--border-width-default) solid var(--green-border); }
|
|
189
189
|
.cpub-status-dismissed { background: var(--surface2); color: var(--text-faint); border: var(--border-width-default) solid var(--border2); }
|
|
190
190
|
.cpub-report-type { font-size: 10px; font-family: var(--font-mono); color: var(--accent); background: var(--accent-bg); padding: 2px 6px; border: var(--border-width-default) solid var(--accent-border); }
|
|
191
191
|
.cpub-report-date { font-size: 11px; color: var(--text-faint); margin-left: auto; font-family: var(--font-mono); }
|
|
@@ -774,7 +774,7 @@ onBeforeUnmount(() => {
|
|
|
774
774
|
padding: var(--space-3) var(--space-4);
|
|
775
775
|
background: var(--red-bg);
|
|
776
776
|
border-bottom: var(--border-width-default) solid var(--red);
|
|
777
|
-
color: var(--red);
|
|
777
|
+
color: var(--red-text);
|
|
778
778
|
font-size: var(--text-sm);
|
|
779
779
|
display: flex;
|
|
780
780
|
align-items: center;
|
package/pages/admin/users.vue
CHANGED
|
@@ -208,11 +208,11 @@ async function deleteUser(userId: string, username: string): Promise<void> {
|
|
|
208
208
|
.admin-role-select { padding: 3px 6px; border: var(--border-width-default) solid var(--border2); background: var(--surface); color: var(--text-dim); font-size: 11px; font-family: var(--font-mono); text-transform: capitalize; cursor: pointer; }
|
|
209
209
|
.admin-role-select:focus { border-color: var(--accent); outline: none; }
|
|
210
210
|
.admin-status-btn { font-size: 10px; font-family: var(--font-mono); text-transform: uppercase; padding: 2px 8px; cursor: pointer; border: var(--border-width-default) solid; background: none; }
|
|
211
|
-
.status-active { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
212
|
-
.status-suspended { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
|
|
211
|
+
.status-active { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
212
|
+
.status-suspended { color: var(--red-text); border-color: var(--red-border); background: var(--red-bg); }
|
|
213
213
|
.admin-status-btn:hover { opacity: 0.8; }
|
|
214
214
|
.admin-delete-btn { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
215
|
-
.admin-delete-btn:hover { color: var(--red); }
|
|
215
|
+
.admin-delete-btn:hover { color: var(--red-text); }
|
|
216
216
|
.admin-roles-btn { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; padding: 3px 8px; border: var(--border-width-default) solid var(--border2); background: var(--surface); color: var(--text-dim); cursor: pointer; }
|
|
217
217
|
.admin-roles-btn:hover { border-color: var(--accent); color: var(--text); }
|
|
218
218
|
.admin-roles-row td { background: var(--surface2); }
|
|
@@ -190,7 +190,7 @@ async function deleteCategory(cat: VideoCategory): Promise<void> {
|
|
|
190
190
|
.cpub-admin-actions { display: flex; gap: 6px; }
|
|
191
191
|
.cpub-admin-action { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 4px 6px; }
|
|
192
192
|
.cpub-admin-action:hover { color: var(--accent); }
|
|
193
|
-
.cpub-admin-action--danger:hover { color: var(--red); }
|
|
193
|
+
.cpub-admin-action--danger:hover { color: var(--red-text); }
|
|
194
194
|
|
|
195
195
|
.cpub-cat-name { display: flex; align-items: center; gap: 6px; font-weight: 500; }
|
|
196
196
|
|
|
@@ -88,7 +88,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
88
88
|
.cpub-forgot-success-text { font-size: 13px; color: var(--text-dim); line-height: 1.6; }
|
|
89
89
|
.cpub-back-link { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--accent); text-decoration: none; justify-content: center; margin-top: var(--space-4); }
|
|
90
90
|
.cpub-back-link:hover { text-decoration: underline; }
|
|
91
|
-
.cpub-form-error { padding: var(--space-3); background: var(--red-bg); color: var(--red); border: var(--border-width-default) solid var(--red); border-radius: var(--radius); font-size: 12px; }
|
|
91
|
+
.cpub-form-error { padding: var(--space-3); background: var(--red-bg); color: var(--red-text); border: var(--border-width-default) solid var(--red); border-radius: var(--radius); font-size: 12px; }
|
|
92
92
|
.cpub-field { display: flex; flex-direction: column; gap: 4px; }
|
|
93
93
|
.cpub-field-label { font-size: 12px; font-weight: 500; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim); }
|
|
94
94
|
.cpub-field-input { padding: 8px 12px; border: var(--border-width-default) solid var(--border); border-radius: var(--radius); background: var(--surface); color: var(--text); font-size: 13px; font-family: var(--font-sans); outline: none; width: 100%; transition: border-color 0.15s; }
|
package/pages/auth/login.vue
CHANGED
|
@@ -308,7 +308,7 @@ function handleMastodonLogin(): void {
|
|
|
308
308
|
.form-error {
|
|
309
309
|
padding: var(--space-3);
|
|
310
310
|
background: var(--red-bg);
|
|
311
|
-
color: var(--red);
|
|
311
|
+
color: var(--red-text);
|
|
312
312
|
border: var(--border-width-default) solid var(--red);
|
|
313
313
|
border-radius: var(--radius);
|
|
314
314
|
font-size: 12px;
|
package/pages/auth/register.vue
CHANGED
|
@@ -141,7 +141,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
141
141
|
.form-error {
|
|
142
142
|
padding: var(--space-3);
|
|
143
143
|
background: var(--red-bg);
|
|
144
|
-
color: var(--red);
|
|
144
|
+
color: var(--red-text);
|
|
145
145
|
border: var(--border-width-default) solid var(--red);
|
|
146
146
|
border-radius: var(--radius);
|
|
147
147
|
font-size: 12px;
|
|
@@ -251,7 +251,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
251
251
|
|
|
252
252
|
.register-success-icon {
|
|
253
253
|
font-size: 36px;
|
|
254
|
-
color: var(--green);
|
|
254
|
+
color: var(--green-text);
|
|
255
255
|
margin-bottom: 16px;
|
|
256
256
|
}
|
|
257
257
|
|
|
@@ -55,7 +55,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
55
55
|
|
|
56
56
|
<template v-if="success">
|
|
57
57
|
<div class="cpub-reset-success">
|
|
58
|
-
<i class="fa-solid fa-check-circle" style="font-size: 24px; color: var(--green); margin-bottom: 12px;"></i>
|
|
58
|
+
<i class="fa-solid fa-check-circle" style="font-size: 24px; color: var(--green-text); margin-bottom: 12px;"></i>
|
|
59
59
|
<p class="cpub-reset-success-text">Your password has been reset successfully.</p>
|
|
60
60
|
</div>
|
|
61
61
|
<NuxtLink to="/auth/login" class="cpub-back-link">
|
|
@@ -65,7 +65,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
65
65
|
|
|
66
66
|
<template v-else-if="tokenError">
|
|
67
67
|
<div class="cpub-reset-error-state">
|
|
68
|
-
<i class="fa-solid fa-circle-xmark" style="font-size: 24px; color: var(--red); margin-bottom: 12px;"></i>
|
|
68
|
+
<i class="fa-solid fa-circle-xmark" style="font-size: 24px; color: var(--red-text); margin-bottom: 12px;"></i>
|
|
69
69
|
<p class="cpub-reset-success-text">This reset link is invalid or has expired.</p>
|
|
70
70
|
</div>
|
|
71
71
|
<NuxtLink to="/auth/forgot-password" class="cpub-back-link">
|
|
@@ -123,7 +123,7 @@ async function handleSubmit(): Promise<void> {
|
|
|
123
123
|
.cpub-reset-success-text { font-size: 13px; color: var(--text-dim); line-height: 1.6; }
|
|
124
124
|
.cpub-back-link { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--accent); text-decoration: none; justify-content: center; margin-top: var(--space-4); }
|
|
125
125
|
.cpub-back-link:hover { text-decoration: underline; }
|
|
126
|
-
.cpub-form-error { padding: var(--space-3); background: var(--red-bg); color: var(--red); border: var(--border-width-default) solid var(--red); border-radius: var(--radius); font-size: 12px; }
|
|
126
|
+
.cpub-form-error { padding: var(--space-3); background: var(--red-bg); color: var(--red-text); border: var(--border-width-default) solid var(--red); border-radius: var(--radius); font-size: 12px; }
|
|
127
127
|
.cpub-field { display: flex; flex-direction: column; gap: 4px; }
|
|
128
128
|
.cpub-field-label { font-size: 12px; font-weight: 500; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim); }
|
|
129
129
|
.cpub-field-input { padding: 8px 12px; border: var(--border-width-default) solid var(--border); border-radius: var(--radius); background: var(--surface); color: var(--text); font-size: 13px; font-family: var(--font-sans); outline: none; width: 100%; transition: border-color 0.15s; }
|
|
@@ -43,7 +43,7 @@ if (!token.value) {
|
|
|
43
43
|
|
|
44
44
|
<!-- Success -->
|
|
45
45
|
<div v-else-if="status === 'success'" class="verify-status">
|
|
46
|
-
<i class="fa-solid fa-check-circle" style="font-size: 24px; color: var(--green); margin-bottom: 12px;"></i>
|
|
46
|
+
<i class="fa-solid fa-check-circle" style="font-size: 24px; color: var(--green-text); margin-bottom: 12px;"></i>
|
|
47
47
|
<p class="verify-text">Your email has been verified successfully!</p>
|
|
48
48
|
<NuxtLink to="/auth/login" class="verify-link">
|
|
49
49
|
<i class="fa-solid fa-arrow-right"></i> Continue to login
|
|
@@ -52,7 +52,7 @@ if (!token.value) {
|
|
|
52
52
|
|
|
53
53
|
<!-- Error -->
|
|
54
54
|
<div v-else-if="status === 'error'" class="verify-status">
|
|
55
|
-
<i class="fa-solid fa-circle-xmark" style="font-size: 24px; color: var(--red); margin-bottom: 12px;"></i>
|
|
55
|
+
<i class="fa-solid fa-circle-xmark" style="font-size: 24px; color: var(--red-text); margin-bottom: 12px;"></i>
|
|
56
56
|
<p class="verify-text">{{ errorMessage }}</p>
|
|
57
57
|
<NuxtLink to="/auth/login" class="verify-link">
|
|
58
58
|
<i class="fa-solid fa-arrow-left"></i> Back to login
|
|
@@ -61,7 +61,7 @@ if (!token.value) {
|
|
|
61
61
|
|
|
62
62
|
<!-- No token -->
|
|
63
63
|
<div v-else class="verify-status">
|
|
64
|
-
<i class="fa-solid fa-circle-exclamation" style="font-size: 24px; color: var(--yellow); margin-bottom: 12px;"></i>
|
|
64
|
+
<i class="fa-solid fa-circle-exclamation" style="font-size: 24px; color: var(--yellow-text); margin-bottom: 12px;"></i>
|
|
65
65
|
<p class="verify-text">No verification token found. Please check the link in your email.</p>
|
|
66
66
|
<NuxtLink to="/auth/login" class="verify-link">
|
|
67
67
|
<i class="fa-solid fa-arrow-left"></i> Back to login
|
|
@@ -140,7 +140,7 @@ useSeoMeta({
|
|
|
140
140
|
font-size: 14px;
|
|
141
141
|
}
|
|
142
142
|
.cpub-authorize-error {
|
|
143
|
-
color: var(--red, #ef4444);
|
|
143
|
+
color: var(--red-text, #ef4444);
|
|
144
144
|
font-size: 14px;
|
|
145
145
|
}
|
|
146
146
|
.cpub-authorize-desc {
|
|
@@ -177,7 +177,7 @@ useSeoMeta({
|
|
|
177
177
|
border: var(--border-width-default) solid var(--border);
|
|
178
178
|
}
|
|
179
179
|
.cpub-authorize-success {
|
|
180
|
-
color: var(--green, #22c55e);
|
|
180
|
+
color: var(--green-text, #22c55e);
|
|
181
181
|
font-size: 14px;
|
|
182
182
|
font-weight: 600;
|
|
183
183
|
}
|
package/pages/cert/[code].vue
CHANGED
|
@@ -95,7 +95,7 @@ useSeoMeta({
|
|
|
95
95
|
align-items: center;
|
|
96
96
|
justify-content: center;
|
|
97
97
|
font-size: 28px;
|
|
98
|
-
color: var(--yellow);
|
|
98
|
+
color: var(--yellow-text);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
.cert-eyebrow {
|
|
@@ -137,14 +137,14 @@ useSeoMeta({
|
|
|
137
137
|
right: 16px;
|
|
138
138
|
font-size: 11px;
|
|
139
139
|
font-family: var(--font-mono);
|
|
140
|
-
color: var(--green);
|
|
140
|
+
color: var(--green-text);
|
|
141
141
|
display: flex;
|
|
142
142
|
align-items: center;
|
|
143
143
|
gap: 4px;
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
.cert-not-found { text-align: center; padding: 64px 0; color: var(--text-dim); }
|
|
147
|
-
.cert-not-found-icon { font-size: 40px; color: var(--red); margin-bottom: 16px; }
|
|
147
|
+
.cert-not-found-icon { font-size: 40px; color: var(--red-text); margin-bottom: 16px; }
|
|
148
148
|
.cert-not-found h1 { font-size: 20px; margin-bottom: 8px; }
|
|
149
149
|
.cert-not-found p { font-size: 13px; }
|
|
150
150
|
|
|
@@ -178,9 +178,9 @@ watch(contestPii, (on) => { if (on) void loadPrivate(); }, { immediate: true });
|
|
|
178
178
|
.cpub-ed-av-init { display: inline-flex; align-items: center; justify-content: center; background: var(--surface3); color: var(--text-faint); font-size: 8px; }
|
|
179
179
|
.cpub-ed-date { color: var(--text-faint); }
|
|
180
180
|
.cpub-ed-badge { display: inline-flex; align-items: center; gap: 4px; font-size: 9px; text-transform: uppercase; letter-spacing: .05em; padding: 2px 7px; border: var(--border-width-default) solid var(--border2); background: var(--surface2); color: var(--text-dim); }
|
|
181
|
-
.cpub-ed-in { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
181
|
+
.cpub-ed-in { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
182
182
|
.cpub-ed-out { color: var(--text-faint); }
|
|
183
|
-
.cpub-ed-rank { color: var(--yellow); border-color: var(--yellow); background: var(--yellow-bg); }
|
|
183
|
+
.cpub-ed-rank { color: var(--yellow-text); border-color: var(--yellow); background: var(--yellow-bg); }
|
|
184
184
|
.cpub-ed-score { color: var(--accent); border-color: var(--accent-border); background: var(--accent-bg); }
|
|
185
185
|
|
|
186
186
|
.cpub-ed-sechead { font-size: 15px; font-weight: 700; display: flex; align-items: center; gap: 8px; margin: 0 0 14px; }
|
|
@@ -413,8 +413,8 @@ async function submitScore(entryId: string): Promise<void> {
|
|
|
413
413
|
.cpub-judge-progress-fill { height: 100%; background: var(--accent); transition: width 0.3s ease; }
|
|
414
414
|
|
|
415
415
|
.cpub-judge-alert { padding: 10px 14px; font-size: 12px; border: var(--border-width-default) solid; margin-bottom: 16px; }
|
|
416
|
-
.cpub-judge-alert--error { background: var(--red-bg); color: var(--red); border-color: var(--red); }
|
|
417
|
-
.cpub-judge-alert--success { background: var(--green-bg); color: var(--green); border-color: var(--green); }
|
|
416
|
+
.cpub-judge-alert--error { background: var(--red-bg); color: var(--red-text); border-color: var(--red); }
|
|
417
|
+
.cpub-judge-alert--success { background: var(--green-bg); color: var(--green-text); border-color: var(--green); }
|
|
418
418
|
|
|
419
419
|
.cpub-judge-empty { text-align: center; padding: 48px 0; color: var(--text-faint); font-size: 13px; display: flex; flex-direction: column; align-items: center; gap: 8px; }
|
|
420
420
|
.cpub-judge-empty i { font-size: 24px; }
|
|
@@ -471,8 +471,8 @@ async function submitScore(entryId: string): Promise<void> {
|
|
|
471
471
|
}
|
|
472
472
|
.cpub-judge-feedback:focus { border-color: var(--accent); }
|
|
473
473
|
.cpub-judge-save-status { display: flex; align-items: center; gap: 5px; margin: 2px 0 0; font-size: 11px; font-family: var(--font-mono); }
|
|
474
|
-
.cpub-judge-save-status.is-ok { color: var(--green); }
|
|
475
|
-
.cpub-judge-save-status.is-err { color: var(--red); }
|
|
474
|
+
.cpub-judge-save-status.is-ok { color: var(--green-text); }
|
|
475
|
+
.cpub-judge-save-status.is-err { color: var(--red-text); }
|
|
476
476
|
.cpub-judge-save-status.is-muted { color: var(--text-faint); }
|
|
477
477
|
.cpub-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
478
478
|
|
|
@@ -77,7 +77,7 @@ function medalColor(rank: number): string {
|
|
|
77
77
|
<i class="fa-solid fa-arrow-left"></i> Back to contest
|
|
78
78
|
</NuxtLink>
|
|
79
79
|
<h1 class="cpub-results-title">
|
|
80
|
-
<i class="fa-solid fa-ranking-star" style="color: var(--yellow);"></i>
|
|
80
|
+
<i class="fa-solid fa-ranking-star" style="color: var(--yellow-text);"></i>
|
|
81
81
|
{{ contest?.title || 'Contest' }}, Results
|
|
82
82
|
</h1>
|
|
83
83
|
</header>
|
|
@@ -200,7 +200,7 @@ function medalColor(rank: number): string {
|
|
|
200
200
|
.cpub-podium-author:hover { color: var(--accent); }
|
|
201
201
|
.cpub-podium-score { font-size: 11px; font-family: var(--font-mono); color: var(--text-faint); margin-bottom: 6px; }
|
|
202
202
|
.cpub-podium-prize { font-size: 11px; font-family: var(--font-mono); color: var(--accent); display: flex; align-items: center; justify-content: center; gap: 4px; }
|
|
203
|
-
.cpub-podium-prize-val { font-weight: 700; color: var(--yellow); }
|
|
203
|
+
.cpub-podium-prize-val { font-weight: 700; color: var(--yellow-text); }
|
|
204
204
|
|
|
205
205
|
/* LEADERBOARD */
|
|
206
206
|
.cpub-leaderboard { margin-bottom: 32px; }
|
|
@@ -215,11 +215,11 @@ function medalColor(rank: number): string {
|
|
|
215
215
|
.cpub-lb-top3 { background: var(--surface2); }
|
|
216
216
|
.cpub-lb-rank { font-family: var(--font-mono); font-weight: 700; display: flex; align-items: center; gap: 6px; }
|
|
217
217
|
.cpub-lb-score { font-family: var(--font-mono); font-weight: 600; color: var(--accent); }
|
|
218
|
-
.cpub-lb-votes { font-family: var(--font-mono); color: var(--red); }
|
|
218
|
+
.cpub-lb-votes { font-family: var(--font-mono); color: var(--red-text); }
|
|
219
219
|
.cpub-lb-votes i { font-size: 10px; }
|
|
220
220
|
|
|
221
221
|
.cpub-community-choice { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 16px; margin-bottom: 24px; background: var(--red-bg); border: var(--border-width-default) solid var(--red-border); }
|
|
222
|
-
.cpub-cc-label { font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--red); display: flex; align-items: center; gap: 5px; }
|
|
222
|
+
.cpub-cc-label { font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--red-text); display: flex; align-items: center; gap: 5px; }
|
|
223
223
|
.cpub-cc-title { font-size: 14px; font-weight: 600; color: var(--text); text-decoration: none; }
|
|
224
224
|
.cpub-cc-title:hover { color: var(--accent); }
|
|
225
225
|
.cpub-cc-meta { font-size: 11px; color: var(--text-dim); font-family: var(--font-mono); }
|
package/pages/dashboard.vue
CHANGED
|
@@ -566,13 +566,13 @@ async function deleteItem(id: string, title: string): Promise<void> {
|
|
|
566
566
|
}
|
|
567
567
|
|
|
568
568
|
.cpub-dash-action-btn--warn:hover {
|
|
569
|
-
color: var(--yellow);
|
|
569
|
+
color: var(--yellow-text);
|
|
570
570
|
border-color: var(--yellow);
|
|
571
571
|
background: var(--yellow-bg);
|
|
572
572
|
}
|
|
573
573
|
|
|
574
574
|
.cpub-dash-action-btn--danger:hover {
|
|
575
|
-
color: var(--red);
|
|
575
|
+
color: var(--red-text);
|
|
576
576
|
border-color: var(--red);
|
|
577
577
|
background: var(--red-bg);
|
|
578
578
|
}
|
|
@@ -594,7 +594,7 @@ async function deleteItem(id: string, title: string): Promise<void> {
|
|
|
594
594
|
.cpub-dash-badge--green {
|
|
595
595
|
border-color: var(--green-border);
|
|
596
596
|
background: var(--green-bg);
|
|
597
|
-
color: var(--green);
|
|
597
|
+
color: var(--green-text);
|
|
598
598
|
}
|
|
599
599
|
|
|
600
600
|
.cpub-dash-empty {
|
|
@@ -965,13 +965,13 @@ watch(site, (s) => {
|
|
|
965
965
|
}
|
|
966
966
|
|
|
967
967
|
.cpub-docs-status-draft {
|
|
968
|
-
color: var(--yellow, #d4a017);
|
|
968
|
+
color: var(--yellow-text, #d4a017);
|
|
969
969
|
background: var(--yellow-bg, rgba(245, 158, 11, 0.08));
|
|
970
970
|
border: var(--border-width-default) solid var(--yellow-border, rgba(245, 158, 11, 0.25));
|
|
971
971
|
}
|
|
972
972
|
|
|
973
973
|
.cpub-docs-status-published {
|
|
974
|
-
color: var(--green, #2a9d5c);
|
|
974
|
+
color: var(--green-text, #2a9d5c);
|
|
975
975
|
background: var(--green-bg, rgba(34, 197, 94, 0.08));
|
|
976
976
|
border: var(--border-width-default) solid var(--green-border, rgba(34, 197, 94, 0.25));
|
|
977
977
|
}
|
|
@@ -1005,7 +1005,7 @@ watch(site, (s) => {
|
|
|
1005
1005
|
}
|
|
1006
1006
|
|
|
1007
1007
|
.cpub-docs-unpublish-btn:hover {
|
|
1008
|
-
color: var(--yellow, #d4a017);
|
|
1008
|
+
color: var(--yellow-text, #d4a017);
|
|
1009
1009
|
border-color: var(--yellow, #d4a017);
|
|
1010
1010
|
}
|
|
1011
1011
|
|
|
@@ -1268,7 +1268,7 @@ watch(site, (s) => {
|
|
|
1268
1268
|
}
|
|
1269
1269
|
|
|
1270
1270
|
.cpub-settings-danger .cpub-settings-section-title {
|
|
1271
|
-
color: var(--red, #e04030);
|
|
1271
|
+
color: var(--red-text, #e04030);
|
|
1272
1272
|
}
|
|
1273
1273
|
|
|
1274
1274
|
.cpub-settings-danger-text {
|
|
@@ -1278,7 +1278,7 @@ watch(site, (s) => {
|
|
|
1278
1278
|
}
|
|
1279
1279
|
|
|
1280
1280
|
.cpub-btn-danger {
|
|
1281
|
-
color: var(--red, #e04030);
|
|
1281
|
+
color: var(--red-text, #e04030);
|
|
1282
1282
|
border-color: var(--red, #e04030);
|
|
1283
1283
|
}
|
|
1284
1284
|
|
package/pages/explore.vue
CHANGED
|
@@ -324,7 +324,7 @@ useHead({
|
|
|
324
324
|
padding: 4px 8px; border: var(--border-width-default) solid var(--border); transition: all 0.1s;
|
|
325
325
|
}
|
|
326
326
|
.cpub-post-action-btn:hover:not(:disabled) { color: var(--accent); border-color: var(--accent-border); }
|
|
327
|
-
.cpub-post-action-btn.active { color: var(--red); border-color: var(--red); }
|
|
327
|
+
.cpub-post-action-btn.active { color: var(--red-text); border-color: var(--red); }
|
|
328
328
|
.cpub-post-action-btn:disabled { opacity: 0.5; cursor: default; }
|
|
329
329
|
|
|
330
330
|
/* Reply form */
|