From a39d43c4d64150fdc0b02df06aea394dc2879719 Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 20:16:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8element=20ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/kuaishou-cloud-fulfillment.json | 8 +- apps/frontend/src/components.d.ts | 4 + .../src/components/admin/AdminResultCard.vue | 4 +- .../admin/audit-logs/AdminAuditLogsView.vue | 6 +- .../bindings/AdminFulfillmentBindings.css | 308 ++++++------- .../bindings/AdminFulfillmentBindingsView.vue | 12 +- .../components/AdminBindingRuleCard.vue | 130 +++--- .../components/AdminBindingsLookupSection.vue | 119 ++--- .../AdminBindingsObservedSection.vue | 26 +- .../AdminBindingsOverviewSection.vue | 51 +-- .../components/AdminBindingsRuleSection.vue | 60 ++- .../AdminKuaishouCloudFulfillment.css | 411 +++++++----------- .../AdminKuaishouCloudFulfillmentView.vue | 12 +- .../AdminKuaishouCloudNinetyoneSection.vue | 90 ++-- .../AdminKuaishouCloudOverviewSection.vue | 51 +-- .../components/AdminKuaishouCloudRuleCard.vue | 227 +++++----- .../AdminKuaishouCloudRuleSection.vue | 84 ++-- .../components/AdminInventoryEntryCard.vue | 135 +++--- .../components/AdminInventoryPoolGrid.vue | 19 +- .../manual-redeem/AdminManualRedeemView.vue | 37 +- .../AdminManualRedeemCreateCard.vue | 75 ++-- .../AdminManualRedeemReviewCard.vue | 129 ++---- .../AdminManualRedeemSummaryCard.vue | 68 +-- .../AdminMessageDeliveriesView.vue | 6 +- .../admin/orders/AdminOrderDetailView.vue | 228 ++++------ .../AdminNotificationScheduledJobsCard.vue | 46 +- .../src/views/admin/tasks/AdminTaskDetail.css | 49 +-- .../views/admin/tasks/AdminTaskDetailView.vue | 69 ++- .../src/views/admin/tasks/AdminTasksView.vue | 6 +- .../AdminTaskAutoDeliverySection.vue | 24 +- .../components/AdminTaskEventsSection.vue | 36 +- .../tasks/components/AdminTaskHeroSection.vue | 17 +- .../tasks/components/AdminTaskInfoSection.vue | 166 +++---- .../AdminTaskInventoryBindingsSection.vue | 143 +++--- .../AdminTaskKuaishouCloudPanel.vue | 28 +- .../AdminTaskManualDispatchSection.vue | 61 +-- .../AdminTaskRedeemResolutionSection.vue | 25 +- .../components/AdminTaskScreenshotSection.vue | 11 +- .../AdminWebhookEventDetailView.vue | 43 +- 39 files changed, 1380 insertions(+), 1644 deletions(-) diff --git a/apps/backend/data/kuaishou-cloud-fulfillment.json b/apps/backend/data/kuaishou-cloud-fulfillment.json index 5c1ca0e0..a80f6be4 100644 --- a/apps/backend/data/kuaishou-cloud-fulfillment.json +++ b/apps/backend/data/kuaishou-cloud-fulfillment.json @@ -15,13 +15,14 @@ "externalSkuName": "183999074511936", "resolvedSkuName": "183999074511936", "cloudSourceKey": "default", + "cloudSourceKeyFallbacks": [], "cloudSkuId": 28, - "cloudSkuName": "", + "cloudSkuName": "套装-浪漫天命", "vnKey": "1", "autoBuyEnabled": true, "minAssetReserve": 0, - "autoReturnNumberAfterDispatch": false, - "autoConsumeAfterDispatch": false, + "autoReturnNumberAfterDispatch": true, + "autoConsumeAfterDispatch": true, "kuaishouConsumeShopId": "3676797936", "kuaishouConsumeShopName": "小鱼儿游戏服务店", "notes": "从 91卡券订单 2613900255300561 导入" @@ -40,6 +41,7 @@ "externalSkuName": "183999074510936", "resolvedSkuName": "183999074510936", "cloudSourceKey": "default", + "cloudSourceKeyFallbacks": [], "cloudSkuId": 28, "cloudSkuName": "套装-浪漫天命", "vnKey": "1", diff --git a/apps/frontend/src/components.d.ts b/apps/frontend/src/components.d.ts index d8330098..a872235d 100644 --- a/apps/frontend/src/components.d.ts +++ b/apps/frontend/src/components.d.ts @@ -15,6 +15,7 @@ declare module 'vue' { AdminResultCard: typeof import('./components/admin/AdminResultCard.vue')['default'] AdminStatusTag: typeof import('./components/admin/AdminStatusTag.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] + ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] @@ -32,6 +33,7 @@ declare module 'vue' { ElForm: typeof import('element-plus/es')['ElForm'] ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElIcon: typeof import('element-plus/es')['ElIcon'] + ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElMenu: typeof import('element-plus/es')['ElMenu'] @@ -44,6 +46,8 @@ declare module 'vue' { ElRow: typeof import('element-plus/es')['ElRow'] ElSelect: typeof import('element-plus/es')['ElSelect'] ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] + ElSpace: typeof import('element-plus/es')['ElSpace'] + ElStatistic: typeof import('element-plus/es')['ElStatistic'] ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] diff --git a/apps/frontend/src/components/admin/AdminResultCard.vue b/apps/frontend/src/components/admin/AdminResultCard.vue index ab439b64..eedd256e 100644 --- a/apps/frontend/src/components/admin/AdminResultCard.vue +++ b/apps/frontend/src/components/admin/AdminResultCard.vue @@ -6,11 +6,11 @@ defineProps<{ diff --git a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsLookupSection.vue b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsLookupSection.vue index f894b99b..c86e9ba2 100644 --- a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsLookupSection.vue +++ b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsLookupSection.vue @@ -20,83 +20,94 @@ const emit = defineEmits<{ diff --git a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsObservedSection.vue b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsObservedSection.vue index a01216f0..9dc6e847 100644 --- a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsObservedSection.vue +++ b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsObservedSection.vue @@ -15,17 +15,21 @@ const emit = defineEmits<{ diff --git a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsOverviewSection.vue b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsOverviewSection.vue index 2635604a..70af9437 100644 --- a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsOverviewSection.vue +++ b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsOverviewSection.vue @@ -15,41 +15,34 @@ defineProps<{ diff --git a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsRuleSection.vue b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsRuleSection.vue index a945499a..c691d300 100644 --- a/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsRuleSection.vue +++ b/apps/frontend/src/views/admin/fulfillment/bindings/components/AdminBindingsRuleSection.vue @@ -37,35 +37,47 @@ const emit = defineEmits<{ diff --git a/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillment.css b/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillment.css index 04004f8d..26fd846b 100644 --- a/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillment.css +++ b/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillment.css @@ -1,229 +1,199 @@ -@import '../../../../styles/admin-config-pages.css'; - -/* ============================================================ - AdminKuaishouCloudFulfillment — 蓝色主题覆盖 & 双栏映射布局 - 模板已统一使用 admin-config-pages.css 共享类名 - ============================================================ */ - -/* ---------- 页面容器 & CSS 自定义属性 ---------- */ .admin-panel { - --panel-ink: var(--text-primary); - --panel-muted: var(--text-secondary); - --panel-border: var(--border-default); - --panel-soft: #f6f8fb; - --panel-line: #dce3ec; - --accent: var(--color-primary); - --accent-strong: var(--color-primary-dark); - --warn: var(--color-warning); - --danger: var(--color-danger); - display: grid; gap: var(--space-4); } -/* ---------- 标题颜色覆盖 ---------- */ -.section-title-row h3 { - color: #1d3555; +.section-card { + border-radius: var(--radius-lg); } -.section-title-row p { - color: #64748b; - line-height: 1.55; +.card-header { + display: grid; + gap: var(--space-1); } -/* ---------- chip 标签 (蓝色) ---------- */ -.mini-stat-chip, -.overview-note { - color: #175cd3; +.card-header--split { + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: var(--space-4); } -/* ---------- 卡片圆角覆盖 ---------- */ -.overview-card, -.table-card, -.empty-block, -.error-copy { - border-radius: 20px; - box-shadow: none; +.card-title { + display: block; + color: var(--text-primary); + font-size: var(--text-base); + font-weight: 700; +} + +.card-desc { + display: block; + margin-top: 4px; + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.overview-card { + display: grid; + gap: var(--space-4); } .overview-file code { - background: rgba(15, 23, 42, 0.05); - color: #1d3555; + color: var(--text-primary); + word-break: break-all; +} + +.overview-stats { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: var(--space-3); } -/* ---------- 概览统计覆盖 ---------- */ .overview-stat { - border-radius: 16px; + min-width: 0; + padding: var(--space-3); + border: 1px solid var(--border-default); + border-radius: var(--radius-md); + background: var(--bg-subtle); } -.overview-stat span { - color: #64748b; +.overview-stat :deep(.el-statistic__head) { + margin-bottom: 6px; + color: var(--text-secondary); + font-size: var(--text-xs); + font-weight: 700; } -.overview-stat strong { - color: #1d3555; +.overview-stat :deep(.el-statistic__content) { + color: var(--text-primary); font-size: var(--text-2xl); + font-weight: 700; +} + +.overview-notes { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); } -/* ---------- 91卡券查询工具栏 ---------- */ .lookup-toolbar { display: grid; grid-template-columns: minmax(180px, 1fr) 110px 130px 180px; - gap: 12px; + gap: var(--space-3); align-items: end; } -/* ---------- 字段块 ---------- */ -.field-block span { - color: #1d3555; +.rule-action-row { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: var(--space-3); + align-items: center; } -.field-help, -.toolbar-hint, -.cell-subtle { - color: #64748b; +.rule-enabled-control { + display: flex; + justify-content: flex-end; } -.field-wide { - grid-column: span 2; -} - -.field-block :deep(.el-input-number), -.field-block :deep(.el-select) { - width: 100%; -} - -/* ---------- 文本输入 (蓝色聚焦环) ---------- */ -.text-input { - min-height: 36px; - color: #1d3555; -} - -.textarea-input { - min-height: 72px; - resize: vertical; -} - -/* ---------- 校验/错误覆盖 ---------- */ -.validation-banner, -.binding-inline-error { - background: #fff5f4; - border: 1px solid rgba(180, 35, 24, 0.14); - color: #b42318; - font-size: var(--text-sm); -} - -.error-copy { - color: #b42318; -} - -/* ---------- 表格覆盖 ---------- */ -.data-table th, -.data-table td { - padding: 11px 10px; -} - -.data-table th { - color: #64748b; - font-size: var(--text-xs); -} - -.cell-stack strong { - color: #1d3555; -} - -/* ---------- 绑定卡片覆盖 ---------- */ .binding-card { - border-radius: 16px; - box-shadow: none; + margin-top: var(--space-3); + background: var(--bg-surface); +} + +.binding-card :deep(.el-card__header) { + padding: var(--space-3) var(--space-4); + background: var(--bg-subtle); +} + +.binding-card :deep(.el-card__body) { + display: grid; + gap: var(--space-3); + padding: var(--space-4); +} + +.binding-card--invalid { + border-color: var(--color-danger); + box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.08); +} + +.binding-header { + display: flex; + justify-content: space-between; + gap: var(--space-3); + align-items: flex-start; +} + +.binding-summary { + display: grid; + gap: 4px; } .binding-title-row { - color: #1d3555; + display: flex; + gap: var(--space-2); + align-items: center; + flex-wrap: wrap; + color: var(--text-primary); } -.binding-subtle { - color: #64748b; +.binding-subtle, +.cell-subtle { + color: var(--text-secondary); } -.binding-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 12px; -} - -.collapse-button { - color: #1d3555; - cursor: pointer; +.cell-subtle { + display: block; + font-size: var(--text-xs); + line-height: 1.5; } .binding-collapsed-preview { - padding: 10px 12px; - border-radius: 14px; - background: rgba(255, 255, 255, 0.78); - color: #64748b; - font-size: var(--text-xs); -} - -.checkbox-line { - color: #1d3555; + color: var(--text-secondary); font-size: var(--text-sm); } -.binding-actions { - margin-top: 12px; -} - -.toolbar-hint { - margin: 10px 0 0; -} - -.empty-inline { - padding: 14px; - color: #64748b; - text-align: center; -} - -/* ---------- 双栏映射编辑器 (快手 Cloud 独有) ---------- */ .mapping-editor { display: grid; grid-template-columns: minmax(0, 1fr) 74px minmax(0, 1fr); - gap: 12px; + gap: var(--space-3); align-items: stretch; } .mapping-panel { - display: grid; - align-content: start; - gap: 12px; - padding: 14px; - border-radius: 16px; - border: 1px solid rgba(148, 163, 184, 0.18); + min-width: 0; + background: var(--bg-surface); } .mapping-panel--external { - background: rgba(239, 246, 255, 0.72); + background: #f8fbff; } .mapping-panel--internal { - background: rgba(255, 255, 255, 0.86); - border-color: rgba(15, 93, 216, 0.16); + background: #fbfcff; +} + +.mapping-panel :deep(.el-card__header) { + padding: var(--space-3) var(--space-4); + background: var(--bg-subtle); +} + +.mapping-panel :deep(.el-card__body) { + padding: var(--space-4); } .mapping-panel-head { display: flex; justify-content: space-between; - gap: 10px; + gap: var(--space-3); align-items: baseline; } .mapping-panel-head strong { - color: #1d3555; - font-size: 15px; + color: var(--text-primary); } .mapping-panel-head span { - color: #64748b; + color: var(--text-secondary); font-size: var(--text-xs); } @@ -231,13 +201,18 @@ .mapping-extra { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 10px 12px; + gap: var(--space-4); +} + +.mapping-extra { + padding-top: var(--space-3); + border-top: 1px dashed var(--border-default); } .mapping-arrow { display: grid; place-items: center; - color: #175cd3; + color: var(--color-primary); font-size: var(--text-xs); font-weight: 700; } @@ -250,126 +225,72 @@ min-width: 54px; padding: 0 10px; border-radius: var(--radius-full); - background: rgba(15, 93, 216, 0.08); - border: 1px solid rgba(15, 93, 216, 0.14); + background: var(--color-primary-light); + border: 1px solid var(--border-default); } -.mapping-extra { - margin-top: 12px; - padding-top: 12px; - border-top: 1px dashed rgba(86, 108, 138, 0.18); +.field-wide { + grid-column: 1 / -1; } -.overview-label { - color: #64748b; +.field-help { + display: block; + margin-top: 6px; + color: var(--text-secondary); font-size: var(--text-xs); + line-height: 1.5; } -/* ---------- Element Plus 蓝色主题覆盖 ---------- */ -.admin-panel :deep(.el-button) { - min-height: 34px; - border-radius: var(--radius-full); +.text-input { + width: 100%; } -.admin-panel :deep(.el-button--primary) { - --el-button-bg-color: #3a91f7; - --el-button-border-color: #3a91f7; - --el-button-hover-bg-color: #0f5dd8; - --el-button-hover-border-color: #0f5dd8; +.textarea-input { + min-height: 72px; } -.admin-panel :deep(.el-input__wrapper), -.admin-panel :deep(.el-textarea__inner), -.admin-panel :deep(.el-select__wrapper) { - min-height: 36px; - border: 0; - border-radius: var(--radius-sm); - background: #fff; - box-shadow: 0 0 0 1px var(--panel-line) inset; - transition: - border-color 0.16s ease, - box-shadow 0.16s ease; +.admin-panel :deep(.el-form-item) { + margin-bottom: 0; } -.admin-panel :deep(.el-input__wrapper:hover), -.admin-panel :deep(.el-textarea__inner:hover), -.admin-panel :deep(.el-select__wrapper:hover) { - box-shadow: 0 0 0 1px rgba(15, 107, 95, 0.38) inset; +.admin-panel :deep(.el-form-item__label) { + color: var(--text-secondary); + font-size: var(--text-xs); + font-weight: 700; + line-height: 1.4; + margin-bottom: 6px; } -.admin-panel :deep(.el-input__wrapper.is-focus), -.admin-panel :deep(.el-textarea__inner:focus), -.admin-panel :deep(.el-select__wrapper.is-focused) { - box-shadow: - 0 0 0 1px var(--accent) inset, - 0 0 0 3px rgba(15, 107, 95, 0.12); +.binding-actions { + display: flex; + flex-wrap: wrap; + gap: var(--space-3); + align-items: center; } -.admin-panel :deep(.is-disabled .el-input__wrapper), -.admin-panel :deep(.el-input__wrapper.is-disabled), -.admin-panel :deep(.el-select__wrapper.is-disabled) { - background: #f8fafc; - color: #64748b; +.data-table { + margin-top: var(--space-4); } -.admin-panel :deep(.el-textarea__inner[readonly]), -.admin-panel :deep(.el-input__wrapper.is-readonly) { - background: #f8fafc; - color: #64748b; -} - -.admin-panel :deep(.el-input-number .el-input__wrapper) { - padding-left: 8px; -} - -.admin-panel :deep(.el-input-number__decrease), -.admin-panel :deep(.el-input-number__increase) { - border-color: var(--panel-line); - background: #f8fafc; -} - -.admin-panel :deep(.el-switch.is-checked .el-switch__core) { - border-color: var(--accent); - background-color: var(--accent); -} - -/* ---------- 响应式 ---------- */ @media (max-width: 900px) { - .overview-stats, - .lookup-toolbar, - .binding-grid, - .mapping-editor { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .mapping-arrow { - display: none; - } - - .field-wide { - grid-column: span 2; - } -} - -@media (max-width: 640px) { - .section-title-row, - .section-header-tools, - .binding-actions, - .binding-header { - flex-direction: column; + .card-header--split, + .rule-action-row, + .binding-header, + .mapping-panel-head { + display: grid; + grid-template-columns: 1fr; align-items: stretch; } .overview-stats, .lookup-toolbar, - .binding-grid, .mapping-editor, .mapping-grid, .mapping-extra { grid-template-columns: 1fr; } - .field-wide { - grid-column: auto; + .mapping-arrow { + display: none; } } diff --git a/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillmentView.vue b/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillmentView.vue index 672f6ed2..ab27dd19 100644 --- a/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillmentView.vue +++ b/apps/frontend/src/views/admin/fulfillment/kuaishou-cloud/AdminKuaishouCloudFulfillmentView.vue @@ -19,7 +19,7 @@ onMounted(config.loadConfigs) @@ -329,27 +282,12 @@ function formatSpecSummary(spec: Record) { gap: var(--space-4); } -.info-card { - padding: 18px; - border-radius: var(--radius-lg); - background: var(--bg-surface); - border: 1px solid var(--border-default); -} - -.info-card h3 { +.section-card h3 { margin: 0 0 var(--space-4); color: var(--text-primary); } -.error-copy { - padding: 18px; - border-radius: var(--radius-lg); - background: var(--bg-surface); - border: 1px solid var(--border-default); - color: var(--color-danger); -} - -.info-card-header { +.detail-card-header { display: flex; justify-content: space-between; gap: var(--space-4); @@ -357,7 +295,7 @@ function formatSpecSummary(spec: Record) { margin-bottom: var(--space-4); } -.info-card-header h2 { +.detail-card-header h2 { margin: 0; color: var(--text-primary); } @@ -384,11 +322,7 @@ function formatSpecSummary(spec: Record) { .info-tile { padding: 14px var(--space-4); border-radius: var(--radius-md); - background: linear-gradient( - 180deg, - rgba(247, 250, 255, 0.98), - rgba(241, 245, 249, 0.92) - ); + background: linear-gradient(180deg, rgba(247, 250, 255, 0.98), rgba(241, 245, 249, 0.92)); border: 1px solid var(--border-default); display: grid; gap: 6px; @@ -440,7 +374,7 @@ function formatSpecSummary(spec: Record) { } @media (max-width: 900px) { - .info-card-header { + .detail-card-header { flex-direction: column; } diff --git a/apps/frontend/src/views/admin/platform-shops/components/notification/AdminNotificationScheduledJobsCard.vue b/apps/frontend/src/views/admin/platform-shops/components/notification/AdminNotificationScheduledJobsCard.vue index 37858cc1..5e42bfde 100644 --- a/apps/frontend/src/views/admin/platform-shops/components/notification/AdminNotificationScheduledJobsCard.vue +++ b/apps/frontend/src/views/admin/platform-shops/components/notification/AdminNotificationScheduledJobsCard.vue @@ -133,51 +133,49 @@ defineProps()
检查间隔 - - - 每 {{ formatDuration(job.intervalSeconds) }} 检查一次 + + + 每 {{ formatDuration(job.intervalSeconds) }} 检查一次
通知冷却 - - + + 同类异常 {{ formatDuration(job.cooldownSeconds) }} 内只通知一次
余额阈值 - 低于该值时通知
@@ -188,16 +186,12 @@ defineProps() diff --git a/apps/frontend/src/views/admin/tasks/AdminTasksView.vue b/apps/frontend/src/views/admin/tasks/AdminTasksView.vue index 84b61935..cfecab3c 100644 --- a/apps/frontend/src/views/admin/tasks/AdminTasksView.vue +++ b/apps/frontend/src/views/admin/tasks/AdminTasksView.vue @@ -1,5 +1,5 @@ @@ -233,15 +233,6 @@ onMounted(loadDetail) gap: var(--space-4); } -.info-card, -.empty-block, -.error-copy { - padding: 18px; - border-radius: var(--radius-lg); - background: var(--bg-surface); - border: 1px solid var(--border-default); -} - .overview-top { display: flex; justify-content: space-between; @@ -250,7 +241,7 @@ onMounted(loadDetail) } .overview-top h3, -.info-card h3 { +.section-card h3 { margin: 0; color: var(--text-primary); } @@ -319,10 +310,6 @@ onMounted(loadDetail) white-space: pre-wrap; } -.error-copy { - color: var(--color-danger); -} - .inline-error { margin-top: var(--space-4); padding: var(--space-3) 14px;