@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
|
@@ -768,7 +768,7 @@ const reviewStages = computed(() => (contest.value?.stages ?? []).filter((s) =>
|
|
|
768
768
|
.cpub-ce-dirty i { font-size: 6px; }
|
|
769
769
|
.cpub-ce-autosave { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--text-faint); white-space: nowrap; }
|
|
770
770
|
.cpub-ce-autosave i { font-size: 9px; }
|
|
771
|
-
.cpub-ce-autosave-err { color: var(--red); }
|
|
771
|
+
.cpub-ce-autosave-err { color: var(--red-text); }
|
|
772
772
|
.cpub-ce-topbar-spacer { flex: 1; }
|
|
773
773
|
.cpub-ce-topbar-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
|
|
774
774
|
.cpub-ce-topbar-btn {
|
|
@@ -799,11 +799,11 @@ const reviewStages = computed(() => (contest.value?.stages ?? []).filter((s) =>
|
|
|
799
799
|
}
|
|
800
800
|
.cpub-ce-status-item:hover { background: var(--surface2); border-color: var(--border2); color: var(--text); }
|
|
801
801
|
.cpub-ce-status-item i { width: 14px; text-align: center; font-size: 11px; }
|
|
802
|
-
.cpub-ce-status-go { color: var(--green); }
|
|
803
|
-
.cpub-ce-status-warn { color: var(--yellow); }
|
|
804
|
-
.cpub-ce-status-danger { color: var(--red); }
|
|
802
|
+
.cpub-ce-status-go { color: var(--green-text); }
|
|
803
|
+
.cpub-ce-status-warn { color: var(--yellow-text); }
|
|
804
|
+
.cpub-ce-status-danger { color: var(--red-text); }
|
|
805
805
|
.cpub-ce-status-empty { font-size: 11px; color: var(--text-dim); margin: 0; padding: 8px 10px; display: flex; align-items: center; gap: 6px; }
|
|
806
|
-
.cpub-ce-status-empty i { color: var(--green); }
|
|
806
|
+
.cpub-ce-status-empty i { color: var(--green-text); }
|
|
807
807
|
|
|
808
808
|
/* 3-panel shell */
|
|
809
809
|
.cpub-ce-shell { display: flex; flex: 1; overflow: hidden; }
|
|
@@ -818,12 +818,12 @@ const reviewStages = computed(() => (contest.value?.stages ?? []).filter((s) =>
|
|
|
818
818
|
/* --- Status badge (also used in the topbar) --- */
|
|
819
819
|
.cpub-status-badge { font-size: 10px; font-family: var(--font-mono); text-transform: uppercase; padding: 2px 8px; border: var(--border-width-default) solid; flex-shrink: 0; }
|
|
820
820
|
.cpub-status-draft { color: var(--text-faint); border-color: var(--border2); background: var(--surface2); border-style: dashed; }
|
|
821
|
-
.cpub-status-upcoming { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
822
|
-
.cpub-status-active { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
823
|
-
.cpub-status-paused { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
821
|
+
.cpub-status-upcoming { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
822
|
+
.cpub-status-active { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
823
|
+
.cpub-status-paused { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
824
824
|
.cpub-status-judging { color: var(--accent); border-color: var(--accent-border); background: var(--accent-bg); }
|
|
825
825
|
.cpub-status-completed { color: var(--text-faint); border-color: var(--border2); background: var(--surface2); }
|
|
826
|
-
.cpub-status-cancelled { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
|
|
826
|
+
.cpub-status-cancelled { color: var(--red-text); border-color: var(--red-border); background: var(--red-bg); }
|
|
827
827
|
|
|
828
828
|
/* --- Form fields inside the rail (carried over verbatim) --- */
|
|
829
829
|
.cpub-form-field { display: flex; flex-direction: column; gap: var(--space-1); margin-bottom: var(--space-3); }
|
|
@@ -834,7 +834,7 @@ const reviewStages = computed(() => (contest.value?.stages ?? []).filter((s) =>
|
|
|
834
834
|
background: var(--surface); color: var(--text); font-size: var(--text-sm); font-family: var(--font-sans);
|
|
835
835
|
}
|
|
836
836
|
.cpub-form-input:focus { border-color: var(--accent); outline: none; box-shadow: var(--shadow-accent); }
|
|
837
|
-
.cpub-form-error { font-size: 12px; color: var(--red); margin-top: 8px; }
|
|
837
|
+
.cpub-form-error { font-size: 12px; color: var(--red-text); margin-top: 8px; }
|
|
838
838
|
.cpub-form-check { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-dim); cursor: pointer; }
|
|
839
839
|
.cpub-form-check input { width: 14px; height: 14px; flex-shrink: 0; }
|
|
840
840
|
.cpub-type-options { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 6px; }
|
|
@@ -846,14 +846,14 @@ const reviewStages = computed(() => (contest.value?.stages ?? []).filter((s) =>
|
|
|
846
846
|
.cpub-prize-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
|
|
847
847
|
.cpub-prize-label { font-size: 11px; font-weight: 700; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--accent); }
|
|
848
848
|
.cpub-prize-remove { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; }
|
|
849
|
-
.cpub-prize-remove:hover { color: var(--red); }
|
|
849
|
+
.cpub-prize-remove:hover { color: var(--red-text); }
|
|
850
850
|
|
|
851
851
|
/* Stages tab (center) — the form tab gets a little breathing room. */
|
|
852
852
|
.cpub-ce-stages-tab { display: flex; flex-direction: column; gap: 4px; }
|
|
853
853
|
|
|
854
854
|
/* Danger zone */
|
|
855
|
-
.cpub-danger-label { font-size: 13px; font-weight: 600; margin: 0 0 2px; color: var(--red); }
|
|
856
|
-
.cpub-danger-btn { color: var(--red); border-color: var(--red-border); margin-top: 6px; }
|
|
855
|
+
.cpub-danger-label { font-size: 13px; font-weight: 600; margin: 0 0 2px; color: var(--red-text); }
|
|
856
|
+
.cpub-danger-btn { color: var(--red-text); border-color: var(--red-border); margin-top: 6px; }
|
|
857
857
|
.cpub-danger-btn:hover:not(:disabled) { background: var(--red-bg); }
|
|
858
858
|
|
|
859
859
|
.cpub-not-found { text-align: center; padding: 64px; color: var(--text-dim); display: flex; flex-direction: column; align-items: center; gap: 12px; }
|
|
@@ -91,7 +91,7 @@ function entryLink(entry: Serialized<ContestEntryItem>): string {
|
|
|
91
91
|
<template>
|
|
92
92
|
<div class="cpub-entries-section">
|
|
93
93
|
<div class="cpub-sec-head">
|
|
94
|
-
<h2><i class="fa fa-box-open" style="color: var(--teal);"></i> Submitted Entries</h2>
|
|
94
|
+
<h2><i class="fa fa-box-open" style="color: var(--teal-text);"></i> Submitted Entries</h2>
|
|
95
95
|
<span class="cpub-sec-sub">{{ entries.length }} entries</span>
|
|
96
96
|
</div>
|
|
97
97
|
<div v-if="entries.length" class="cpub-entry-grid">
|
|
@@ -172,12 +172,12 @@ function entryLink(entry: Serialized<ContestEntryItem>): string {
|
|
|
172
172
|
.cpub-entry-grid-pat { position: absolute; inset: 0; background-image: linear-gradient(var(--border2) 1px, transparent 1px), linear-gradient(90deg, var(--border2) 1px, transparent 1px); background-size: 20px 20px; opacity: .3; }
|
|
173
173
|
.cpub-entry-icon { position: relative; z-index: 1; font-size: 22px; opacity: .65; color: var(--accent); }
|
|
174
174
|
.cpub-entry-rank { position: absolute; top: 8px; left: 8px; z-index: 2; font-size: 10px; font-family: var(--font-mono); font-weight: 700; padding: 2px 7px; border-radius: var(--radius); }
|
|
175
|
-
.cpub-rank-1 { background: var(--yellow-bg); color: var(--yellow); border: var(--border-width-default) solid var(--yellow); }
|
|
175
|
+
.cpub-rank-1 { background: var(--yellow-bg); color: var(--yellow-text); border: var(--border-width-default) solid var(--yellow); }
|
|
176
176
|
.cpub-rank-2 { background: var(--surface2); color: var(--text-faint); border: var(--border-width-default) solid var(--text-faint); }
|
|
177
177
|
.cpub-rank-3 { background: var(--surface2); color: var(--bronze); border: var(--border-width-default) solid var(--bronze); }
|
|
178
178
|
.cpub-rank-other { background: var(--surface2); color: var(--text-dim); border: var(--border-width-default) solid var(--border); }
|
|
179
179
|
.cpub-entry-cohort { position: absolute; top: 8px; right: 8px; z-index: 2; font-size: 9px; font-family: var(--font-mono); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; padding: 2px 7px; border-radius: var(--radius); display: inline-flex; align-items: center; gap: 4px; }
|
|
180
|
-
.cpub-cohort-in { background: var(--green-bg); color: var(--green); border: var(--border-width-default) solid var(--green-border); }
|
|
180
|
+
.cpub-cohort-in { background: var(--green-bg); color: var(--green-text); border: var(--border-width-default) solid var(--green-border); }
|
|
181
181
|
.cpub-cohort-out { background: var(--surface2); color: var(--text-faint); border: var(--border-width-default) solid var(--border2); }
|
|
182
182
|
.cpub-entry-cohort i { font-size: 8px; }
|
|
183
183
|
.cpub-entry-out { opacity: .6; }
|
|
@@ -202,12 +202,12 @@ function entryLink(entry: Serialized<ContestEntryItem>): string {
|
|
|
202
202
|
background: var(--surface); color: var(--text-dim); cursor: pointer;
|
|
203
203
|
transition: all 0.15s;
|
|
204
204
|
}
|
|
205
|
-
.cpub-entry-vote-btn:hover:not(:disabled) { border-color: var(--red); color: var(--red); }
|
|
206
|
-
.cpub-entry-vote-btn.voted { color: var(--red); border-color: var(--red); }
|
|
205
|
+
.cpub-entry-vote-btn:hover:not(:disabled) { border-color: var(--red); color: var(--red-text); }
|
|
206
|
+
.cpub-entry-vote-btn.voted { color: var(--red-text); border-color: var(--red); }
|
|
207
207
|
.cpub-entry-vote-btn:disabled { opacity: 0.4; cursor: default; }
|
|
208
208
|
.cpub-entry-vote-btn i { font-size: 10px; }
|
|
209
209
|
|
|
210
|
-
.cpub-withdraw-btn { display: flex; align-items: center; justify-content: center; gap: 4px; font-size: 10px; font-family: var(--font-mono); padding: 4px 10px; min-height: 28px; border-radius: var(--radius); border: var(--border-width-default) solid var(--red-border); background: var(--surface); color: var(--red); cursor: pointer; margin-left: auto; }
|
|
210
|
+
.cpub-withdraw-btn { display: flex; align-items: center; justify-content: center; gap: 4px; font-size: 10px; font-family: var(--font-mono); padding: 4px 10px; min-height: 28px; border-radius: var(--radius); border: var(--border-width-default) solid var(--red-border); background: var(--surface); color: var(--red-text); cursor: pointer; margin-left: auto; }
|
|
211
211
|
.cpub-withdraw-btn:hover { background: var(--red-bg); }
|
|
212
212
|
|
|
213
213
|
.cpub-empty-state { text-align: center; padding: 32px 0; }
|
|
@@ -111,7 +111,7 @@ const hasData = computed(() => fieldRows.value.length > 0 || props.agreements.le
|
|
|
111
111
|
.cpub-epd-agree { border: var(--border-width-default) solid var(--border); background: var(--surface); padding: 10px 12px; }
|
|
112
112
|
.cpub-epd-agree-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
|
|
113
113
|
.cpub-epd-agree-label { font-size: 12px; font-weight: 600; display: inline-flex; align-items: center; gap: 6px; }
|
|
114
|
-
.cpub-epd-agree-label i { color: var(--green); font-size: 11px; }
|
|
114
|
+
.cpub-epd-agree-label i { color: var(--green-text); font-size: 11px; }
|
|
115
115
|
.cpub-epd-agree-when { font-size: 10px; color: var(--text-faint); font-family: var(--font-mono); }
|
|
116
116
|
.cpub-epd-terms { margin: 8px 0 4px; }
|
|
117
117
|
.cpub-epd-terms summary { font-size: 11px; color: var(--accent); cursor: pointer; }
|
|
@@ -242,18 +242,18 @@ const entryCount = computed<number>(() => c.value?.entryCount ?? 0);
|
|
|
242
242
|
.cpub-hero-bar { background: var(--surface); border-bottom: var(--border-width-default) solid var(--border); }
|
|
243
243
|
.cpub-hero-bar-inner { max-width: 1100px; margin: 0 auto; padding: 20px 32px; }
|
|
244
244
|
|
|
245
|
-
.cpub-cancelled-banner { background: var(--red-bg); border: var(--border-width-default) solid var(--red-border); color: var(--red); padding: 10px 14px; font-size: 12px; font-weight: 600; display: flex; align-items: center; gap: 8px; margin-bottom: 16px; }
|
|
245
|
+
.cpub-cancelled-banner { background: var(--red-bg); border: var(--border-width-default) solid var(--red-border); color: var(--red-text); padding: 10px 14px; font-size: 12px; font-weight: 600; display: flex; align-items: center; gap: 8px; margin-bottom: 16px; }
|
|
246
246
|
|
|
247
247
|
.cpub-hero-top { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
|
|
248
248
|
.cpub-contest-badge { font-size: 9px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; font-family: var(--font-mono); color: var(--accent); background: var(--accent-bg); border: var(--border-width-default) solid var(--accent); padding: 3px 10px; border-radius: var(--radius); display: inline-flex; align-items: center; gap: 5px; }
|
|
249
249
|
.cpub-contest-badge i { font-size: 8px; }
|
|
250
250
|
.cpub-status-pill { font-size: 9px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; font-family: var(--font-mono); padding: 3px 10px; border-radius: var(--radius); border: var(--border-width-default) solid var(--border2); color: var(--text-dim); }
|
|
251
|
-
.cpub-status-pill[data-status="active"] { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
251
|
+
.cpub-status-pill[data-status="active"] { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
252
252
|
.cpub-status-pill[data-status="judging"] { color: var(--accent); border-color: var(--accent-border); background: var(--accent-bg); }
|
|
253
|
-
.cpub-status-pill[data-status="upcoming"] { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
254
|
-
.cpub-status-pill[data-status="paused"] { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
253
|
+
.cpub-status-pill[data-status="upcoming"] { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
254
|
+
.cpub-status-pill[data-status="paused"] { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
255
255
|
.cpub-status-pill[data-status="draft"] { color: var(--text-faint); border-color: var(--border2); border-style: dashed; }
|
|
256
|
-
.cpub-status-pill[data-status="completed"], .cpub-status-pill[data-status="cancelled"] { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
|
|
256
|
+
.cpub-status-pill[data-status="completed"], .cpub-status-pill[data-status="cancelled"] { color: var(--red-text); border-color: var(--red-border); background: var(--red-bg); }
|
|
257
257
|
.cpub-stage-chip { font-size: 9px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; font-family: var(--font-mono); padding: 3px 10px; border-radius: var(--radius); border: var(--border-width-default) solid var(--accent-border); color: var(--accent); background: var(--accent-bg); display: inline-flex; align-items: center; gap: 5px; }
|
|
258
258
|
.cpub-stage-chip i { font-size: 8px; }
|
|
259
259
|
|
|
@@ -270,7 +270,7 @@ const entryCount = computed<number>(() => c.value?.entryCount ?? 0);
|
|
|
270
270
|
.cpub-hero-meta { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; font-size: 11px; color: var(--text-faint); font-family: var(--font-mono); }
|
|
271
271
|
.cpub-hero-meta-item { display: flex; align-items: center; gap: 6px; }
|
|
272
272
|
.cpub-hero-cta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
273
|
-
.cpub-btn-cancel { color: var(--red); border-color: var(--red-border); }
|
|
273
|
+
.cpub-btn-cancel { color: var(--red-text); border-color: var(--red-border); }
|
|
274
274
|
.cpub-btn-cancel:hover { background: var(--red-bg); }
|
|
275
275
|
|
|
276
276
|
.cpub-admin-controls { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 14px; padding: 10px 14px; background: var(--accent-bg); border: var(--border-width-default) solid var(--accent-border); }
|
|
@@ -159,9 +159,9 @@ const roleLabels: Record<string, string> = {
|
|
|
159
159
|
.cpub-judge-avatar-sm { width: 20px; height: 20px; font-size: 8px; }
|
|
160
160
|
.cpub-judge-name { font-size: 12px; font-weight: 600; }
|
|
161
161
|
.cpub-judge-role { font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; color: var(--text-faint); }
|
|
162
|
-
.cpub-judge-pending { font-family: var(--font-mono); font-size: 9px; color: var(--yellow, var(--text-faint)); }
|
|
162
|
+
.cpub-judge-pending { font-family: var(--font-mono); font-size: 9px; color: var(--yellow-text, var(--text-faint)); }
|
|
163
163
|
.cpub-judge-remove { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 10px; padding: 4px; }
|
|
164
|
-
.cpub-judge-remove:hover { color: var(--red); }
|
|
164
|
+
.cpub-judge-remove:hover { color: var(--red-text); }
|
|
165
165
|
|
|
166
166
|
.cpub-judges-empty { font-size: 12px; color: var(--text-faint); font-style: italic; margin-bottom: 12px; }
|
|
167
167
|
|
|
@@ -14,7 +14,7 @@ const hasWeights = computed(() => props.criteria.some((c) => (c.weight ?? 0) > 0
|
|
|
14
14
|
<template>
|
|
15
15
|
<div v-if="criteria.length > 0" class="cpub-criteria-section" :class="{ 'cpub-criteria-compact': compact }">
|
|
16
16
|
<div v-if="!compact" class="cpub-sec-head">
|
|
17
|
-
<h2><i class="fa-solid fa-list-check" style="color: var(--teal);"></i> Judging Criteria</h2>
|
|
17
|
+
<h2><i class="fa-solid fa-list-check" style="color: var(--teal-text);"></i> Judging Criteria</h2>
|
|
18
18
|
<span v-if="hasWeights" class="cpub-sec-sub">{{ totalWeight }} pts total</span>
|
|
19
19
|
</div>
|
|
20
20
|
<div class="cpub-criteria-card">
|
|
@@ -38,7 +38,7 @@ function prizeIcon(prize: Prize): string {
|
|
|
38
38
|
<template>
|
|
39
39
|
<div class="cpub-prizes-section">
|
|
40
40
|
<div class="cpub-sec-head">
|
|
41
|
-
<h2><i class="fa fa-trophy" style="color: var(--yellow);"></i> Prizes</h2>
|
|
41
|
+
<h2><i class="fa fa-trophy" style="color: var(--yellow-text);"></i> Prizes</h2>
|
|
42
42
|
</div>
|
|
43
43
|
<BlocksBlockContentRenderer
|
|
44
44
|
v-if="blocks?.length"
|
|
@@ -75,19 +75,19 @@ function prizeIcon(prize: Prize): string {
|
|
|
75
75
|
.cpub-prize-gold { box-shadow: var(--shadow-accent); }
|
|
76
76
|
|
|
77
77
|
.cpub-prize-rank { font-size: 11px; font-family: var(--font-mono); font-weight: 600; letter-spacing: .08em; margin-bottom: 8px; }
|
|
78
|
-
.cpub-prize-rank-gold { color: var(--yellow); }
|
|
78
|
+
.cpub-prize-rank-gold { color: var(--yellow-text); }
|
|
79
79
|
.cpub-prize-rank-silver { color: var(--silver); }
|
|
80
80
|
.cpub-prize-rank-bronze { color: var(--bronze); }
|
|
81
81
|
.cpub-prize-rank-default { color: var(--text-dim); }
|
|
82
82
|
|
|
83
83
|
.cpub-prize-icon { font-size: 28px; margin-bottom: 8px; }
|
|
84
|
-
.cpub-prize-icon-gold { color: var(--yellow); }
|
|
84
|
+
.cpub-prize-icon-gold { color: var(--yellow-text); }
|
|
85
85
|
.cpub-prize-icon-silver { color: var(--silver); }
|
|
86
86
|
.cpub-prize-icon-bronze { color: var(--bronze); }
|
|
87
87
|
.cpub-prize-icon-default { color: var(--text-dim); }
|
|
88
88
|
|
|
89
89
|
.cpub-prize-amount { font-size: 24px; font-weight: 800; font-family: var(--font-mono); margin-bottom: 4px; }
|
|
90
|
-
.cpub-prize-amount-gold { color: var(--yellow); }
|
|
90
|
+
.cpub-prize-amount-gold { color: var(--yellow-text); }
|
|
91
91
|
.cpub-prize-amount-silver { color: var(--silver); }
|
|
92
92
|
.cpub-prize-amount-bronze { color: var(--bronze); }
|
|
93
93
|
.cpub-prize-amount-default { color: var(--text-dim); }
|
|
@@ -17,7 +17,7 @@ defineProps<{
|
|
|
17
17
|
<template>
|
|
18
18
|
<div class="cpub-rules-section">
|
|
19
19
|
<div class="cpub-sec-head">
|
|
20
|
-
<h2><i class="fa fa-file-lines" style="color: var(--purple);"></i> Rules</h2>
|
|
20
|
+
<h2><i class="fa fa-file-lines" style="color: var(--purple-text);"></i> Rules</h2>
|
|
21
21
|
</div>
|
|
22
22
|
<div class="cpub-rules-card">
|
|
23
23
|
<BlocksBlockContentRenderer
|
|
@@ -120,12 +120,12 @@ function statusClass(status: string): string {
|
|
|
120
120
|
.cpub-sb-row { display: flex; align-items: center; gap: 6px; }
|
|
121
121
|
.cpub-sb-status { font-size: 10px; font-family: var(--font-mono); text-transform: uppercase; padding: 2px 8px; border: var(--border-width-default) solid; }
|
|
122
122
|
.cpub-status-draft { color: var(--text-faint); border-color: var(--border2); background: var(--surface2); border-style: dashed; }
|
|
123
|
-
.cpub-status-upcoming { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
124
|
-
.cpub-status-active { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
125
|
-
.cpub-status-paused { color: var(--yellow); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
123
|
+
.cpub-status-upcoming { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
124
|
+
.cpub-status-active { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
125
|
+
.cpub-status-paused { color: var(--yellow-text); border-color: var(--yellow-border); background: var(--yellow-bg); }
|
|
126
126
|
.cpub-status-judging { color: var(--accent); border-color: var(--accent-border); background: var(--accent-bg); }
|
|
127
127
|
.cpub-status-completed { color: var(--text-faint); border-color: var(--border2); background: var(--surface2); }
|
|
128
|
-
.cpub-status-cancelled { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
|
|
128
|
+
.cpub-status-cancelled { color: var(--red-text); border-color: var(--red-border); background: var(--red-bg); }
|
|
129
129
|
|
|
130
130
|
/* TIMELINE */
|
|
131
131
|
.cpub-timeline { list-style: none; margin: 14px 0 0; padding: 0; }
|
|
@@ -137,12 +137,12 @@ function statusClass(status: string): string {
|
|
|
137
137
|
.cpub-tl-date { font-size: 10px; font-family: var(--font-mono); color: var(--text-faint); margin-top: 1px; }
|
|
138
138
|
.cpub-tl-now { font-size: 8px; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: .08em; color: var(--accent); border: var(--border-width-default) solid var(--accent-border); background: var(--accent-bg); padding: 1px 5px; }
|
|
139
139
|
|
|
140
|
-
.cpub-tl-done .cpub-tl-dot { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
140
|
+
.cpub-tl-done .cpub-tl-dot { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
141
141
|
.cpub-tl-done .cpub-tl-label { color: var(--text); }
|
|
142
142
|
.cpub-tl-current .cpub-tl-dot { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
|
|
143
143
|
.cpub-tl-current .cpub-tl-label { color: var(--text); font-weight: 700; }
|
|
144
144
|
|
|
145
|
-
.cpub-sb-cancelled { font-size: 11px; color: var(--red); margin: 10px 0 0; }
|
|
145
|
+
.cpub-sb-cancelled { font-size: 11px; color: var(--red-text); margin: 10px 0 0; }
|
|
146
146
|
|
|
147
147
|
.cpub-sb-actions { display: flex; gap: 6px; flex-wrap: wrap; }
|
|
148
148
|
.cpub-sb-btn { flex: 1; justify-content: center; }
|
|
@@ -199,7 +199,7 @@ function onInstructionsUpdate(blocks: BlockTuple[]): void {
|
|
|
199
199
|
.cpub-stage-iconbtn { background: var(--surface); border: var(--border-width-default) solid var(--border); color: var(--text-dim); cursor: pointer; width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; }
|
|
200
200
|
.cpub-stage-iconbtn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
|
|
201
201
|
.cpub-stage-iconbtn:disabled { opacity: .4; cursor: not-allowed; }
|
|
202
|
-
.cpub-stage-del:hover { border-color: var(--red-border); color: var(--red); }
|
|
202
|
+
.cpub-stage-del:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
203
203
|
.cpub-stage-kind-help { font-size: 11px; color: var(--text-faint); line-height: 1.5; margin: 0 0 4px; display: flex; gap: 6px; }
|
|
204
204
|
.cpub-stage-kind-help i { color: var(--accent); margin-top: 2px; flex-shrink: 0; }
|
|
205
205
|
.cpub-stage-criteria { border: var(--border-width-default) dashed var(--border2); padding: 10px; margin-top: 4px; background: var(--surface); }
|
|
@@ -133,13 +133,13 @@ function submittedAtLabel(iso: string): string {
|
|
|
133
133
|
.cpub-stagesub-title { font-size: 14px; font-weight: 700; display: flex; align-items: center; gap: 8px; margin: 0; }
|
|
134
134
|
.cpub-stagesub-title i { color: var(--accent); }
|
|
135
135
|
.cpub-stagesub-badge { margin-left: auto; display: inline-flex; align-items: center; gap: 5px; font-size: 10px; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: .05em; padding: 3px 8px; border: var(--border-width-default) solid; }
|
|
136
|
-
.cpub-stagesub-done { color: var(--green); border-color: var(--green-border); background: var(--green-bg); }
|
|
136
|
+
.cpub-stagesub-done { color: var(--green-text); border-color: var(--green-border); background: var(--green-bg); }
|
|
137
137
|
.cpub-stagesub-todo { color: var(--text-dim); border-color: var(--border2); background: var(--surface2); }
|
|
138
138
|
.cpub-stagesub-desc { font-size: 12px; color: var(--text-dim); margin: 0 0 12px; line-height: 1.6; }
|
|
139
139
|
.cpub-stagesub-intro { margin: 0 0 12px; }
|
|
140
140
|
.cpub-stagesub-field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }
|
|
141
141
|
.cpub-stagesub-label { font-size: 11px; font-weight: 600; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: .05em; color: var(--text-dim); }
|
|
142
|
-
.cpub-stagesub-req { color: var(--red); }
|
|
142
|
+
.cpub-stagesub-req { color: var(--red-text); }
|
|
143
143
|
.cpub-stagesub-input { width: 100%; padding: var(--space-2) var(--space-3); border: var(--border-width-default) solid var(--border); background: var(--surface); color: var(--text); font-size: var(--text-sm); font-family: var(--font-sans); }
|
|
144
144
|
.cpub-stagesub-input:focus { border-color: var(--accent); outline: none; box-shadow: var(--shadow-accent); }
|
|
145
145
|
.cpub-stagesub-textarea { resize: vertical; }
|
|
@@ -337,7 +337,7 @@ function toggleIntro(): void {
|
|
|
337
337
|
|
|
338
338
|
.cpub-stage-iconbtn { background: var(--surface); border: var(--border-width-default) solid var(--border); color: var(--text-dim); cursor: pointer; width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; }
|
|
339
339
|
.cpub-stage-iconbtn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
|
|
340
|
-
.cpub-stage-del:hover { border-color: var(--red-border); color: var(--red); }
|
|
340
|
+
.cpub-stage-del:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
341
341
|
|
|
342
342
|
.cpub-stage-criteria { border: var(--border-width-default) dashed var(--border2); padding: 10px; margin-top: 4px; background: var(--surface); }
|
|
343
343
|
.cpub-stage-criteria-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
|
|
@@ -144,7 +144,7 @@ async function removeStakeholder(userId: string): Promise<void> {
|
|
|
144
144
|
.cpub-sh-role { font-size: 11px; padding: 4px 6px; border: var(--border-width-default) solid var(--border); background: var(--bg); color: var(--text); outline: none; flex-shrink: 0; }
|
|
145
145
|
.cpub-sh-role:focus { border-color: var(--accent); }
|
|
146
146
|
.cpub-sh-remove { background: none; border: none; color: var(--text-faint); cursor: pointer; font-size: 12px; padding: 6px; min-height: 28px; }
|
|
147
|
-
.cpub-sh-remove:hover { color: var(--red); }
|
|
147
|
+
.cpub-sh-remove:hover { color: var(--red-text); }
|
|
148
148
|
.cpub-sh-empty { font-size: 12px; color: var(--text-faint); font-style: italic; margin-bottom: 12px; }
|
|
149
149
|
.cpub-sh-search { position: relative; }
|
|
150
150
|
.cpub-sh-search-row { display: flex; gap: 8px; }
|
|
@@ -127,7 +127,7 @@ function setChecked(on: boolean): void {
|
|
|
127
127
|
<style scoped>
|
|
128
128
|
.cpub-subfield { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }
|
|
129
129
|
.cpub-subfield-label { font-size: 11px; font-weight: 600; font-family: var(--font-mono); text-transform: uppercase; letter-spacing: .05em; color: var(--text-dim); }
|
|
130
|
-
.cpub-subfield-req { color: var(--red); }
|
|
130
|
+
.cpub-subfield-req { color: var(--red-text); }
|
|
131
131
|
.cpub-subfield-input { width: 100%; padding: var(--space-2) var(--space-3); border: var(--border-width-default) solid var(--border); background: var(--surface); color: var(--text); font-size: var(--text-sm); font-family: var(--font-sans); }
|
|
132
132
|
.cpub-subfield-input:focus { border-color: var(--accent); outline: none; box-shadow: var(--shadow-accent); }
|
|
133
133
|
.cpub-subfield-textarea { resize: vertical; }
|
|
@@ -116,7 +116,7 @@ function removeItem(ci: number, ii: number): void {
|
|
|
116
116
|
.cpub-cmpedit-remove,
|
|
117
117
|
.cpub-cmpedit-itemremove { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 11px; padding: 0 8px; flex-shrink: 0; }
|
|
118
118
|
.cpub-cmpedit-remove:hover,
|
|
119
|
-
.cpub-cmpedit-itemremove:hover { border-color: var(--red-border); color: var(--red); }
|
|
119
|
+
.cpub-cmpedit-itemremove:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
120
120
|
.cpub-cmpedit-itemadd { align-self: flex-start; font-family: var(--font-mono); font-size: 10px; padding: 3px 8px; background: transparent; border: var(--border-width-default) solid var(--border2); color: var(--text-dim); cursor: pointer; display: flex; align-items: center; gap: 4px; }
|
|
121
121
|
.cpub-cmpedit-itemadd:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-bg); }
|
|
122
122
|
|
|
@@ -111,7 +111,7 @@ function useRubric(): void {
|
|
|
111
111
|
.cpub-cbedit-swatch { width: 18px; height: 18px; border: var(--border-width-default) solid var(--border2); cursor: pointer; padding: 0; }
|
|
112
112
|
.cpub-cbedit-swatch-on { outline: 2px solid var(--text); outline-offset: 1px; }
|
|
113
113
|
.cpub-cbedit-remove { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 11px; padding: 4px 8px; }
|
|
114
|
-
.cpub-cbedit-remove:hover { border-color: var(--red-border); color: var(--red); }
|
|
114
|
+
.cpub-cbedit-remove:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
115
115
|
.cpub-cbedit-empty { padding: 16px; text-align: center; font-size: 12px; color: var(--text-faint); cursor: pointer; border: var(--border-width-default) dashed var(--border2); }
|
|
116
116
|
.cpub-cbedit-empty:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
|
|
117
117
|
.cpub-cbedit-check { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-dim); cursor: pointer; }
|
|
@@ -187,7 +187,7 @@ async function importPanelJudges(): Promise<void> {
|
|
|
187
187
|
.cpub-jedit-iconbtn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
|
|
188
188
|
.cpub-jedit-iconbtn:disabled { opacity: .4; cursor: not-allowed; }
|
|
189
189
|
.cpub-jedit-remove { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 11px; padding: 0 8px; flex-shrink: 0; }
|
|
190
|
-
.cpub-jedit-remove:hover { border-color: var(--red-border); color: var(--red); }
|
|
190
|
+
.cpub-jedit-remove:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
191
191
|
|
|
192
192
|
.cpub-jedit-avatar-row { display: flex; gap: 6px; align-items: center; }
|
|
193
193
|
.cpub-jedit-avatar-row .cpub-jedit-input { flex: 1; }
|
|
@@ -120,7 +120,7 @@ function pullFromSchedule(): void {
|
|
|
120
120
|
.cpub-rmedit-move:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
|
|
121
121
|
.cpub-rmedit-move:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
122
122
|
.cpub-rmedit-remove { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 11px; padding: 0 8px; flex-shrink: 0; }
|
|
123
|
-
.cpub-rmedit-remove:hover { border-color: var(--red-border); color: var(--red); }
|
|
123
|
+
.cpub-rmedit-remove:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
124
124
|
|
|
125
125
|
.cpub-rmedit-empty { padding: 20px; text-align: center; font-size: 12px; color: var(--text-faint); cursor: pointer; border: var(--border-width-default) dashed var(--border2); }
|
|
126
126
|
.cpub-rmedit-empty:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
|
|
@@ -119,7 +119,7 @@ async function onFile(i: number, event: Event): Promise<void> {
|
|
|
119
119
|
.cpub-spedit-upload { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 30px; border: var(--border-width-default) solid var(--border); background: var(--surface2); color: var(--text-dim); cursor: pointer; }
|
|
120
120
|
.cpub-spedit-upload:hover { border-color: var(--accent); color: var(--accent); }
|
|
121
121
|
.cpub-spedit-remove { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 11px; padding: 0 8px; flex-shrink: 0; align-self: stretch; }
|
|
122
|
-
.cpub-spedit-remove:hover { border-color: var(--red-border); color: var(--red); }
|
|
122
|
+
.cpub-spedit-remove:hover { border-color: var(--red-border); color: var(--red-text); }
|
|
123
123
|
|
|
124
124
|
.cpub-spedit-empty { padding: 20px; text-align: center; font-size: 12px; color: var(--text-faint); cursor: pointer; border: var(--border-width-default) dashed var(--border2); }
|
|
125
125
|
.cpub-spedit-empty:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
|
|
@@ -94,7 +94,7 @@ function removeRow(r: number): void {
|
|
|
94
94
|
.cpub-tedit-grid td { padding: 0 4px 4px 0; }
|
|
95
95
|
.cpub-tedit-grid td .cpub-tedit-input { min-width: 120px; }
|
|
96
96
|
.cpub-tedit-del { background: none; border: var(--border-width-default) solid var(--border); color: var(--text-faint); cursor: pointer; font-size: 10px; padding: 4px 6px; margin-top: 3px; }
|
|
97
|
-
.cpub-tedit-del:hover:not(:disabled) { border-color: var(--red-border); color: var(--red); }
|
|
97
|
+
.cpub-tedit-del:hover:not(:disabled) { border-color: var(--red-border); color: var(--red-text); }
|
|
98
98
|
.cpub-tedit-del:disabled { opacity: 0.35; cursor: not-allowed; }
|
|
99
99
|
.cpub-tedit-rowspacer { width: 28px; }
|
|
100
100
|
.cpub-tedit-rowdel { width: 28px; text-align: center; }
|
|
@@ -162,7 +162,7 @@ function moveTab(i: number, dir: -1 | 1): void {
|
|
|
162
162
|
.cpub-tabsedit-mbtn { width: 26px; height: 26px; background: var(--surface2); border: var(--border-width-default) solid var(--border2); color: var(--text-faint); cursor: pointer; font-size: 10px; display: inline-flex; align-items: center; justify-content: center; }
|
|
163
163
|
.cpub-tabsedit-mbtn:hover:not(:disabled) { color: var(--text); }
|
|
164
164
|
.cpub-tabsedit-mbtn:disabled { opacity: 0.35; cursor: not-allowed; }
|
|
165
|
-
.cpub-tabsedit-mbtn--danger:hover:not(:disabled) { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
|
|
165
|
+
.cpub-tabsedit-mbtn--danger:hover:not(:disabled) { color: var(--red-text); border-color: var(--red-border); background: var(--red-bg); }
|
|
166
166
|
.cpub-tabsedit-empty { padding: 18px; text-align: center; font-size: 12px; color: var(--text-faint); cursor: pointer; margin: 12px 14px; border: var(--border-width-default) dashed var(--border2); }
|
|
167
167
|
.cpub-tabsedit-empty:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
|
|
168
168
|
</style>
|
|
@@ -583,7 +583,7 @@ const canvasMaxWidth = computed(() => {
|
|
|
583
583
|
.cpub-ae-assets-drop-sub { font-size: 10px; color: var(--text-faint); font-family: var(--font-mono); }
|
|
584
584
|
.cpub-ae-assets-error {
|
|
585
585
|
margin: 4px 8px 8px; padding: 6px 10px; font-size: 10px; font-family: var(--font-mono);
|
|
586
|
-
color: var(--red); background: var(--red-bg); border: var(--border-width-default) solid var(--red);
|
|
586
|
+
color: var(--red-text); background: var(--red-bg); border: var(--border-width-default) solid var(--red);
|
|
587
587
|
display: flex; align-items: center; gap: 6px;
|
|
588
588
|
}
|
|
589
589
|
.cpub-ae-assets-list { padding: 8px 12px; }
|
|
@@ -400,7 +400,7 @@ const blockCount = computed(() => props.blockEditor.blocks.value.length);
|
|
|
400
400
|
.cpub-ee-section-title { font-size: 12px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
401
401
|
.cpub-ee-section-meta { font-size: 10px; font-family: var(--font-mono); color: var(--text-faint); display: flex; align-items: center; gap: 6px; }
|
|
402
402
|
.cpub-ee-section-interactive-badge { display: inline-flex; align-items: center; gap: 3px; color: var(--accent); font-weight: 600; }
|
|
403
|
-
.cpub-ee-section-no-interactive { color: var(--yellow); font-style: italic; }
|
|
403
|
+
.cpub-ee-section-no-interactive { color: var(--yellow-text); font-style: italic; }
|
|
404
404
|
|
|
405
405
|
/* Empty state */
|
|
406
406
|
.cpub-ee-structure-empty {
|
|
@@ -469,7 +469,7 @@ const blockCount = computed(() => props.blockEditor.blocks.value.length);
|
|
|
469
469
|
.cpub-pe-checklist { display: flex; flex-direction: column; gap: 5px; }
|
|
470
470
|
.cpub-pe-check-item { display: flex; align-items: center; gap: 8px; font-size: 11px; color: var(--text-faint); }
|
|
471
471
|
.cpub-pe-check-item.pass { color: var(--text); }
|
|
472
|
-
.cpub-pe-checklist-summary { margin-top: 8px; font-family: var(--font-mono); font-size: 10px; color: var(--green); }
|
|
472
|
+
.cpub-pe-checklist-summary { margin-top: 8px; font-family: var(--font-mono); font-size: 10px; color: var(--green-text); }
|
|
473
473
|
|
|
474
474
|
/* Cover image */
|
|
475
475
|
.cpub-pe-cover {
|
|
@@ -24,7 +24,7 @@ const { data: editorialPicks } = await useFetch<PaginatedResponse<Serialized<Con
|
|
|
24
24
|
<style scoped>
|
|
25
25
|
.cpub-editorial-section { margin-bottom: 24px; }
|
|
26
26
|
.cpub-editorial-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
|
|
27
|
-
.cpub-editorial-heading { font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--teal); display: flex; align-items: center; gap: 6px; }
|
|
27
|
+
.cpub-editorial-heading { font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--teal-text); display: flex; align-items: center; gap: 6px; }
|
|
28
28
|
.cpub-editorial-heading i { font-size: 10px; }
|
|
29
29
|
.cpub-editorial-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--cpub-card-min, 260px), 1fr)); gap: var(--cpub-card-gap, 20px); }
|
|
30
30
|
.cpub-editorial-single { grid-template-columns: 1fr; max-width: 400px; }
|
|
@@ -157,8 +157,8 @@ watchEffect(() => {
|
|
|
157
157
|
.cpub-hero-inner { position: relative; z-index: 1; max-width: 1280px; margin: 0 auto; padding: 36px 32px; width: 100%; display: flex; align-items: center; gap: 48px; }
|
|
158
158
|
.cpub-hero-content { flex: 1; min-width: 0; }
|
|
159
159
|
.cpub-hero-eyebrow { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
|
|
160
|
-
.cpub-hero-badge { font-size: 9px; font-family: var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; padding: 3px 9px; background: var(--yellow-bg); border: var(--border-width-default) solid var(--yellow); color: var(--yellow); }
|
|
161
|
-
.cpub-hero-badge-live { background: var(--green-bg); border-color: var(--green); color: var(--green); display: flex; align-items: center; gap: 5px; }
|
|
160
|
+
.cpub-hero-badge { font-size: 9px; font-family: var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; padding: 3px 9px; background: var(--yellow-bg); border: var(--border-width-default) solid var(--yellow); color: var(--yellow-text); }
|
|
161
|
+
.cpub-hero-badge-live { background: var(--green-bg); border-color: var(--green); color: var(--green-text); display: flex; align-items: center; gap: 5px; }
|
|
162
162
|
.cpub-live-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--green); animation: cpub-pulse 2s ease-in-out infinite; }
|
|
163
163
|
@keyframes cpub-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
164
164
|
.cpub-hero-title { font-size: 22px; font-weight: 700; line-height: 1.25; margin-bottom: 10px; }
|
|
@@ -62,5 +62,5 @@ async function handleHubJoin(hubSlug: string): Promise<void> {
|
|
|
62
62
|
.cpub-hub-members { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); }
|
|
63
63
|
.cpub-btn-join { font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; padding: 3px 10px; border: var(--border-width-default) solid var(--accent); color: var(--accent); background: none; cursor: pointer; }
|
|
64
64
|
.cpub-btn-join:hover { background: var(--accent-bg); }
|
|
65
|
-
.cpub-btn-joined { font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; padding: 3px 10px; border: var(--border-width-default) solid var(--green-border); color: var(--green); background: var(--green-bg); cursor: default; display: flex; align-items: center; gap: 3px; }
|
|
65
|
+
.cpub-btn-joined { font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; padding: 3px 10px; border: var(--border-width-default) solid var(--green-border); color: var(--green-text); background: var(--green-bg); cursor: default; display: flex; align-items: center; gap: 3px; }
|
|
66
66
|
</style>
|
|
@@ -481,7 +481,7 @@ useJsonLd({
|
|
|
481
481
|
|
|
482
482
|
.cpub-tag-teal {
|
|
483
483
|
border-color: var(--teal-border);
|
|
484
|
-
color: var(--teal);
|
|
484
|
+
color: var(--teal-text);
|
|
485
485
|
background: var(--teal-bg);
|
|
486
486
|
}
|
|
487
487
|
|
|
@@ -523,8 +523,8 @@ useJsonLd({
|
|
|
523
523
|
}
|
|
524
524
|
|
|
525
525
|
.cpub-eng-btn:hover { background: var(--surface2); color: var(--text); }
|
|
526
|
-
.cpub-eng-btn.liked { color: var(--red); border-color: var(--border); background: var(--red-bg); }
|
|
527
|
-
.cpub-eng-btn.bookmarked { color: var(--yellow); border-color: var(--border); background: var(--yellow-bg); }
|
|
526
|
+
.cpub-eng-btn.liked { color: var(--red-text); border-color: var(--border); background: var(--red-bg); }
|
|
527
|
+
.cpub-eng-btn.bookmarked { color: var(--yellow-text); border-color: var(--border); background: var(--yellow-bg); }
|
|
528
528
|
|
|
529
529
|
.cpub-eng-sep {
|
|
530
530
|
width: 2px;
|
|
@@ -515,7 +515,7 @@ onUnmounted(() => { document.removeEventListener('keydown', onKeydown); });
|
|
|
515
515
|
.cpub-toc-item.active button { background: var(--accent-bg); border-left-color: var(--accent); color: var(--accent); font-weight: 500; }
|
|
516
516
|
.cpub-toc-item.completed button { color: var(--text-dim); }
|
|
517
517
|
.cpub-toc-icon { width: 14px; font-size: 10px; flex-shrink: 0; text-align: center; }
|
|
518
|
-
.cpub-toc-item.completed .cpub-toc-icon { color: var(--green); }
|
|
518
|
+
.cpub-toc-item.completed .cpub-toc-icon { color: var(--green-text); }
|
|
519
519
|
.cpub-toc-item.active .cpub-toc-icon { color: var(--accent); }
|
|
520
520
|
.cpub-toc-num { font-family: var(--font-mono); font-size: 9px; color: var(--text-faint); flex-shrink: 0; }
|
|
521
521
|
.cpub-toc-item.active .cpub-toc-num { color: var(--accent-border); }
|
|
@@ -716,7 +716,7 @@ onUnmounted(() => { document.removeEventListener('keydown', onKeydown); });
|
|
|
716
716
|
border: var(--border-width-default) solid var(--green);
|
|
717
717
|
margin-top: 24px;
|
|
718
718
|
font-size: 13px;
|
|
719
|
-
color: var(--green);
|
|
719
|
+
color: var(--green-text);
|
|
720
720
|
opacity: 0;
|
|
721
721
|
transform: translateY(8px);
|
|
722
722
|
transition: opacity 0.4s ease, transform 0.4s ease;
|
|
@@ -533,7 +533,7 @@ async function handleBuild(): Promise<void> {
|
|
|
533
533
|
opacity: 0.22;
|
|
534
534
|
font-family: var(--font-mono);
|
|
535
535
|
font-size: 11px;
|
|
536
|
-
color: var(--teal);
|
|
536
|
+
color: var(--teal-text);
|
|
537
537
|
letter-spacing: 0.05em;
|
|
538
538
|
}
|
|
539
539
|
|
|
@@ -576,7 +576,7 @@ async function handleBuild(): Promise<void> {
|
|
|
576
576
|
.cpub-badge-featured {
|
|
577
577
|
background: var(--yellow-bg);
|
|
578
578
|
border: var(--border-width-default) solid var(--border);
|
|
579
|
-
color: var(--yellow);
|
|
579
|
+
color: var(--yellow-text);
|
|
580
580
|
box-shadow: var(--shadow-sm);
|
|
581
581
|
}
|
|
582
582
|
|
|
@@ -730,11 +730,11 @@ async function handleBuild(): Promise<void> {
|
|
|
730
730
|
}
|
|
731
731
|
|
|
732
732
|
.cpub-engage-btn:hover { color: var(--text); background: var(--surface2); }
|
|
733
|
-
.cpub-engage-btn.liked { color: var(--red); background: var(--red-bg); }
|
|
733
|
+
.cpub-engage-btn.liked { color: var(--red-text); background: var(--red-bg); }
|
|
734
734
|
.cpub-engage-btn.bookmarked { color: var(--accent); background: var(--accent-bg); }
|
|
735
735
|
|
|
736
736
|
.cpub-engage-btn-green {
|
|
737
|
-
color: var(--green);
|
|
737
|
+
color: var(--green-text);
|
|
738
738
|
background: var(--green-bg);
|
|
739
739
|
}
|
|
740
740
|
|
|
@@ -1153,7 +1153,7 @@ async function handleBuild(): Promise<void> {
|
|
|
1153
1153
|
.cpub-bom-summary-row:last-child { border-bottom: none; }
|
|
1154
1154
|
.cpub-bom-label { color: var(--text-dim); }
|
|
1155
1155
|
.cpub-bom-val { font-family: var(--font-mono); color: var(--text); font-weight: 600; }
|
|
1156
|
-
.cpub-bom-green { color: var(--green); }
|
|
1156
|
+
.cpub-bom-green { color: var(--green-text); }
|
|
1157
1157
|
|
|
1158
1158
|
/* Hub card */
|
|
1159
1159
|
.cpub-hub-card-inner {
|
|
@@ -1170,7 +1170,7 @@ async function handleBuild(): Promise<void> {
|
|
|
1170
1170
|
align-items: center;
|
|
1171
1171
|
justify-content: center;
|
|
1172
1172
|
font-size: 18px;
|
|
1173
|
-
color: var(--purple);
|
|
1173
|
+
color: var(--purple-text);
|
|
1174
1174
|
margin: 0 auto 10px;
|
|
1175
1175
|
}
|
|
1176
1176
|
|
package/layouts/default.vue
CHANGED
|
@@ -429,7 +429,7 @@ const userUsername = computed(() => user.value?.username ?? '');
|
|
|
429
429
|
.cpub-btn-new:hover { box-shadow: var(--shadow-md); transform: translate(-1px, -1px); }
|
|
430
430
|
|
|
431
431
|
.cpub-avatar-btn { background: none; border: none; padding: 0; cursor: pointer; }
|
|
432
|
-
.cpub-user-avatar { width: 28px; height: 28px; border-radius: 50%; background: var(--purple-bg); border: var(--border-width-default) solid var(--purple); display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: var(--purple); font-family: var(--font-mono); overflow: hidden; }
|
|
432
|
+
.cpub-user-avatar { width: 28px; height: 28px; border-radius: 50%; background: var(--purple-bg); border: var(--border-width-default) solid var(--purple); display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: var(--purple-text); font-family: var(--font-mono); overflow: hidden; }
|
|
433
433
|
.cpub-user-avatar-img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
|
|
434
434
|
.cpub-user-menu-wrapper { position: relative; }
|
|
435
435
|
.cpub-user-dropdown { position: absolute; top: calc(100% + 6px); right: 0; min-width: 180px; background: var(--surface); border: var(--border-width-default) solid var(--border); box-shadow: var(--shadow-md); z-index: 200; display: flex; flex-direction: column; padding: 4px 0; -webkit-backdrop-filter: var(--surface-backdrop, none); backdrop-filter: var(--surface-backdrop, none); }
|