diff --git a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx index 39dddf3f..778e48e6 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx @@ -79,6 +79,7 @@ test('polls lightweight single-vehicle realtime data and passes its report inter ])); const commandCard = view.container.querySelector('.v2-identity-band'); expect(commandCard).toHaveClass('semi-card', 'v2-vehicle-command-card', 'v2-live-overview'); + expect(screen.getByLabelText('粤A12345 车辆档案')).toHaveClass('v2-vehicle-record-v3'); expect(screen.getByLabelText('单车任务栏')).toHaveClass('v2-workspace-command-bar', 'v2-vehicle-record-command'); expect(screen.getByLabelText('单车任务栏')).toHaveTextContent('粤A12345'); expect(screen.getByLabelText('单车任务栏')).toHaveTextContent('LTEST000000000001'); @@ -181,6 +182,7 @@ test('shows deduplicated Semi vehicle candidates and opens the selected VIN', as expect(screen.getByText('本页在线 1')).toBeInTheDocument(); expect(screen.getByText('多源车辆 0')).toBeInTheDocument(); expect(view.container.querySelector('.v2-vehicle-directory-table.semi-table-wrapper')).toBeInTheDocument(); + expect(view.container.querySelector('.v2-vehicle-search-page')).toHaveClass('v2-vehicle-directory-v3'); expect(view.container.querySelector('.v2-vehicle-directory-profile')).toHaveTextContent('测试品牌13800000000'); expect(view.container.querySelector('.v2-vehicle-discovery-shell')).toContainElement(screen.getByLabelText('查车操作')); expect(screen.getByRole('button', { name: `打开 ${initialRealtime.vin} 车辆档案` })).toBeInTheDocument(); @@ -485,11 +487,14 @@ test('uses compact Semi telemetry evidence cards on mobile', async () => { expect(document.querySelector('.v2-telemetry-table')).not.toBeInTheDocument(); expect(document.querySelector('.v2-telemetry-mobile-list.semi-list')).toBeInTheDocument(); expect(document.querySelector('.v2-telemetry-mobile-item.semi-list-item')).toHaveTextContent('36km/h正常'); - expect(document.querySelector('.v2-vehicle-record-page')).toHaveClass('is-mobile-layout'); + expect(document.querySelector('.v2-vehicle-record-page')).toHaveClass('v2-vehicle-record-v3', 'is-mobile-layout'); expect(screen.getByRole('group', { name: '车辆快捷操作' }).querySelectorAll('.semi-button')).toHaveLength(5); expect(screen.getByRole('group', { name: '车辆快捷操作' })).toHaveTextContent('切换车辆轨迹回放历史数据里程查询告警事件'); expect(document.querySelectorAll('.v2-identity-sources .semi-tag')).toHaveLength(3); expect(document.querySelector('.v2-identity-sources')).toHaveTextContent('GB/T 32960JT/T 808宇通 MQTT'); expect(document.querySelector('.v2-vehicle-command-card .v2-live-grid')).toHaveAttribute('aria-label', '车辆实时指标'); expect(document.querySelectorAll('.v2-vehicle-command-card .v2-live-grid > [role="listitem"]')).toHaveLength(6); + expect(document.querySelector('.v2-live-metric.is-speed')).toHaveTextContent('速度'); + expect(document.querySelector('.v2-live-metric.is-today-mileage')).toHaveTextContent('当日里程'); + expect(document.querySelector('.v2-live-metric.is-source-status')).toHaveTextContent('来源状态'); }); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.tsx index 3d9b6ff0..614a32e1 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.tsx @@ -454,7 +454,7 @@ function VehicleRecord({ detail, liveRealtime, telemetry, telemetryPending, tele for (const eventName of interactionEvents) window.removeEventListener(eventName, cancelEntryReset, true); }; }, [detail.vin]); - return
+ return
{realtime?.online ? '实时在线' : '当前离线'} · } />
-
速度{availableMetric(realtime?.speedKmh, realtime?.speedAvailable)}km/h实时车速
-
SOC{availableMetric(realtime?.socPercent, realtime?.socAvailable)}%剩余电量
-
总里程推荐口径
-
当日里程今日累计
-
推荐来源{protocolDisplayLabel(realtime?.primaryProtocol)}{protocolSourceLabel(realtime?.locationSource) || '当前最优来源'}
-
来源状态{realtime?.onlineSourceCount ?? 0} / {detail.sourceStatus.length}在线来源 / 全部
+
速度{availableMetric(realtime?.speedKmh, realtime?.speedAvailable)}km/h实时车速
+
SOC{availableMetric(realtime?.socPercent, realtime?.socAvailable)}%剩余电量
+
总里程推荐口径
+
当日里程今日累计
+
推荐来源{protocolDisplayLabel(realtime?.primaryProtocol)}{protocolSourceLabel(realtime?.locationSource) || '当前最优来源'}
+
来源状态{realtime?.onlineSourceCount ?? 0} / {detail.sourceStatus.length}在线来源 / 全部
diff --git a/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx b/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx index 11cb18c5..33c56ccb 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx @@ -105,7 +105,7 @@ export default function VehicleSearchWorkspace() { if (document.activeElement instanceof HTMLElement) document.activeElement.blur(); }; const vehicleScope = candidates.data ? `${candidates.data.total.toLocaleString('zh-CN')} 辆授权` : '授权范围'; - return
+ return
{!mobileLayout || administrator ? .v2-vehicle-discovery-shell { + position: relative; + z-index: 2; + flex: 0 0 auto; +} + +.v2-vehicle-directory-v3 > .v2-vehicle-recent-card.semi-card { + width: min(1280px, 100%); + min-height: 0; + flex: 1 1 0; + overflow: hidden; +} + +.v2-vehicle-directory-v3 > .v2-vehicle-recent-card > .semi-card-body { + display: flex; + height: 100%; + min-height: 0; + flex-direction: column; +} + +.v2-vehicle-directory-v3 .v2-vehicle-directory-table.semi-table-wrapper, +.v2-vehicle-directory-v3 .v2-vehicle-recent-grid { + min-height: 0; + flex: 1 1 auto; +} + +.v2-vehicle-directory-v3 .v2-vehicle-directory-table.semi-table-wrapper { + overflow: auto; + overscroll-behavior: contain; +} + +.v2-vehicle-directory-v3 .v2-vehicle-directory-table .semi-table { + width: 100%; + min-width: 720px; +} + +.v2-vehicle-directory-v3 .v2-vehicle-search-options.v2-vehicle-candidate-list { + width: min(760px, calc(100% - 20px)); + overflow-x: hidden; +} + +.v2-vehicle-directory-v3 .v2-vehicle-search-options.is-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.v2-vehicle-directory-v3 .v2-vehicle-search-options .v2-vehicle-option.semi-button, +.v2-vehicle-directory-v3 .v2-vehicle-search-options .semi-button-content { + min-width: 0; + max-width: 100%; +} + +.v2-vehicle-directory-v3 .v2-vehicle-directory-pagination { + flex: 0 0 auto; +} + +.v2-vehicle-record-v3.v2-vehicle-record-page { + display: flex; + width: 100%; + max-width: 1540px; + min-width: 0; + flex-direction: column; + gap: 10px; + margin-inline: auto; + overflow-x: hidden; + padding: 12px var(--v2-page-gutter) 24px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card.semi-card { + display: block; + width: 100%; + min-width: 0; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card > .semi-card-body { + width: 100%; + min-width: 0; +} + +.v2-vehicle-record-v3 .v2-vehicle-record-command.v2-workspace-command-bar { + display: grid; + width: 100%; + max-width: none; + height: auto; + min-height: 94px; + grid-template-columns: minmax(270px, .72fr) minmax(0, 1.88fr); + align-items: stretch; + gap: 0; + margin: 0; + border: 0; + border-radius: 0; + padding: 0; + box-shadow: none; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-copy { + min-width: 0; + min-height: 94px; + align-content: center; + gap: 5px; + border-right: 1px solid #e4eaf2; + padding: 12px 15px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-actions { + display: grid; + min-width: 0; + grid-template-columns: minmax(285px, .82fr) minmax(420px, 1.18fr); + align-items: stretch; + gap: 0; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-meta { + display: flex; + width: 100%; + min-width: 0; + align-items: stretch; + border-right: 1px solid #e4eaf2; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta { + display: grid; + width: 100%; + min-width: 0; + grid-template-columns: minmax(145px, 1.05fr) minmax(130px, .95fr); + align-items: stretch; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta > span { + display: flex; + min-width: 0; + flex-direction: column; + justify-content: center; + padding: 10px 13px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta > span + span { + border-left: 1px solid #e7edf4; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta strong { + max-width: 100%; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions { + display: grid; + min-width: 0; + grid-template-columns: repeat(5, minmax(0, 1fr)); + align-content: center; + gap: 5px; + overflow: hidden; + padding: 10px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button { + width: 100%; + min-width: 0; + min-height: 36px; + padding-inline: 5px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button .semi-button-content { + min-width: 0; + justify-content: center; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button .semi-button-content-right { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.v2-vehicle-record-v3 .v2-vehicle-live-section > .v2-workspace-panel-header { + min-height: 48px; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid { + display: grid; + min-width: 0; + grid-template-columns: .78fr .72fr 1.16fr 1.04fr 1.02fr .78fr; + overflow: hidden; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric { + min-width: 0; + min-height: 88px; + overflow: hidden; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid strong, +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link { + width: 100%; + min-width: 0; + max-width: 100%; + font-size: clamp(16px, 1.45vw, 21px); +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid strong.is-text { + font-size: clamp(12px, 1.05vw, 15px); +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link.semi-button { + display: flex; + height: 26px; + justify-content: stretch; + overflow: hidden; + padding: 0; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link .semi-button-content { + width: 100%; + min-width: 0; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link .semi-button-content > span:not(.semi-icon) { + width: auto; + min-width: 0; + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link .semi-button-content > .semi-icon { + width: auto; + flex: 0 0 auto; +} + +.v2-vehicle-record-v3 .v2-vehicle-command-card .v2-current-location { + width: 100%; + min-width: 0; + grid-template-columns: minmax(280px, .78fr) minmax(360px, 1.22fr); +} + +.v2-vehicle-record-v3 .v2-current-location > span, +.v2-vehicle-record-v3 .v2-current-location strong { + min-width: 0; +} + +.v2-vehicle-record-v3 .v2-record-grid, +.v2-vehicle-record-v3 .v2-record-grid > *, +.v2-vehicle-record-v3 .v2-record-card, +.v2-vehicle-record-v3 .v2-single-map-card { + min-width: 0; +} + +@media (max-width: 1180px) { + .v2-vehicle-record-v3 .v2-vehicle-record-command.v2-workspace-command-bar { + grid-template-columns: minmax(250px, .7fr) minmax(0, 1.3fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-actions { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-meta { + border-right: 0; + border-bottom: 1px solid #e7edf4; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions { + min-height: 52px; + padding-block: 7px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric:nth-child(3n + 1) { + border-left: 0; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric:nth-child(n + 4) { + border-top: 1px solid #e7edf4; + } +} + +@media (max-width: 900px) { + .v2-vehicle-record-v3.v2-vehicle-record-page { + padding: 10px 11px 18px; + } + + .v2-vehicle-record-v3 .v2-vehicle-record-command.v2-workspace-command-bar { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-copy { + min-height: 72px; + border-right: 0; + border-bottom: 1px solid #e4eaf2; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-actions { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-current-location { + grid-template-columns: minmax(210px, .8fr) minmax(0, 1.2fr); + } +} + +@media (max-width: 680px) { + .v2-vehicle-directory-v3.v2-vehicle-search-page { + gap: 7px; + overflow: hidden; + padding: 8px 8px 82px; + } + + .v2-vehicle-directory-v3.has-candidates.v2-vehicle-search-page, + .v2-vehicle-directory-v3.has-sync-panel.v2-vehicle-search-page { + overflow-y: auto; + } + + .v2-vehicle-directory-v3 > .v2-vehicle-discovery-shell { + width: 100%; + } + + .v2-vehicle-directory-v3 .v2-vehicle-command-bar.is-mobile-admin { + height: 44px; + min-height: 44px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-command-bar.is-mobile-admin .v2-workspace-command-copy > .semi-typography:first-child { + font-size: 12px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-command-bar.is-mobile-admin .v2-workspace-command-actions > .semi-button { + min-height: 32px; + padding-inline: 9px; + font-size: 9px; + } + + .v2-vehicle-directory-v3 .v2-mobile-filter-toggle.semi-button { + min-height: 50px; + } + + .v2-vehicle-directory-v3 > .v2-vehicle-recent-card.semi-card { + width: 100%; + } + + .v2-vehicle-directory-v3 .v2-vehicle-recent-grid { + display: block; + overflow-y: auto; + overscroll-behavior: contain; + padding: 2px 9px 6px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-recent-item.semi-button { + min-height: 68px; + padding: 6px 27px 6px 2px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-recent-item .semi-button-content { + gap: 4px 7px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-recent-identity, + .v2-vehicle-directory-v3 .v2-vehicle-recent-status { + gap: 2px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-recent-protocols .semi-tag, + .v2-vehicle-directory-v3 .v2-vehicle-recent-status .semi-tag { + min-height: 20px; + padding-inline: 6px; + font-size: 8px; + } + + .v2-vehicle-directory-v3 .v2-vehicle-search-options.v2-vehicle-candidate-list { + width: 100%; + max-width: none; + } + + .v2-vehicle-directory-v3 .v2-vehicle-search-options.is-grid { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3.v2-vehicle-record-page { + gap: 7px; + padding: 7px 7px 88px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card.semi-card { + border-radius: 11px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-copy { + min-height: 66px; + padding: 8px 10px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-primary { + gap: 7px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-plate { + min-height: 34px; + padding-inline: 9px; + font-size: 14px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-online-label.semi-tag { + min-height: 22px; + padding-inline: 7px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-workspace-command-actions { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta { + grid-template-columns: minmax(0, 1fr) minmax(118px, auto); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta > span { + min-height: 56px; + padding: 7px 9px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta > span + span { + border-top: 0; + border-left: 1px solid #e7edf4; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-meta strong { + margin-top: 3px; + font-size: 10px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-sources { + flex-wrap: wrap; + gap: 3px; + margin-top: 3px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-sources .semi-tag { + min-height: 18px; + padding-inline: 4px; + font-size: 7px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions { + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 3px; + overflow: hidden; + padding: 5px 6px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button { + min-height: 48px; + padding: 2px 1px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button .semi-button-content { + min-width: 0; + flex-direction: column; + gap: 2px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button .semi-button-content-left { + margin-right: 0; + font-size: 14px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-header.v2-vehicle-record-command .v2-identity-actions > .semi-button .semi-button-content-right { + max-width: 100%; + margin-left: 0; + font-size: 8px; + } + + .v2-vehicle-record-v3 .v2-vehicle-live-section > .v2-workspace-panel-header { + min-height: 44px; + padding: 6px 9px; + } + + .v2-vehicle-record-v3 .v2-vehicle-live-section .v2-workspace-panel-copy > h5.semi-typography { + display: block; + font-size: 12px; + } + + .v2-vehicle-record-v3 .v2-vehicle-live-section .v2-workspace-panel-copy > .semi-typography:last-child { + display: none; + } + + .v2-vehicle-record-v3 .v2-vehicle-live-section .v2-live-report-meta { + max-width: 58vw; + font-size: 8px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric { + min-height: 82px; + border-top: 0; + border-left: 1px solid #e7edf4; + padding: 10px 11px 9px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric:nth-child(odd) { + border-left: 0; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid > .v2-live-metric:nth-child(n + 3) { + border-top: 1px solid #e7edf4; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid strong, + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-source-link { + font-size: 17px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-live-grid strong.is-text { + font-size: 12px; + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-current-location { + grid-template-columns: minmax(0, 1fr); + } + + .v2-vehicle-record-v3 .v2-vehicle-command-card .v2-current-location > span + span { + border-top: 1px solid #e4eaf2; + border-left: 0; + } + + .v2-vehicle-record-v3 .v2-vehicle-record-nav .v2-workspace-panel-header { + min-height: 48px; + grid-template-columns: minmax(0, 1fr); + padding: 4px 6px; + } + + .v2-vehicle-record-v3 .v2-vehicle-record-nav .v2-workspace-panel-copy { + display: none; + } + + .v2-vehicle-record-v3 .v2-vehicle-record-nav .v2-workspace-panel-actions, + .v2-vehicle-record-v3 .v2-vehicle-section-nav { + width: 100%; + } + + .v2-vehicle-record-v3 .v2-vehicle-section-nav { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 2px; + } + + .v2-vehicle-record-v3 .v2-vehicle-section-nav > .semi-button { + width: 100%; + min-width: 0; + min-height: 40px; + padding-inline: 2px; + font-size: 8px; + } +}