Files
Ghost_Kitchen/src/components/orders/OrderStatusView.module.scss
T
lukasandClaude Opus 5.5 1dae53f90a Animate the ETA, hide delays, and tidy the order card actions
- Slide the "Ready in about" value when it changes (new EtaMessage)
- Drop the "Running late" banner; delays only move the ETA now
- Remove the cancel-info tooltip and its icon button
- Shorten the steps toggle to "Steps" / "Hide"
- Add icons and more padding to the order card action buttons

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:02:35 +02:00

321 lines
5.2 KiB
SCSS

@use '../../styles/variables' as *;
.page {
max-width: 720px;
margin: 0 auto;
padding: $space-5 $space-3;
}
.backLink {
display: inline-flex;
align-items: center;
gap: $space-1;
margin: 0 0 $space-3;
color: $color-text-muted;
font-size: 0.85rem;
text-decoration: none;
&:hover {
color: $color-primary;
.backArrow {
transform: translateX(-3px);
}
}
}
.backArrow {
height: 1rem;
width: 1rem;
flex-shrink: 0;
transition: transform 0.15s ease;
}
.heading {
margin: 0 0 $space-1;
}
.orderStatus {
margin: 0 0 $space-1;
color: $color-text-muted;
text-transform: capitalize;
}
.orderDate {
margin: 0 0 $space-4;
color: $color-text-muted;
font-size: 0.85rem;
}
.simulateButton {
margin: 0 0 $space-4;
padding: $space-1 $space-3;
border: 1px dashed $color-text-muted;
border-radius: $radius;
background: none;
color: $color-text-muted;
font-size: 0.85rem;
cursor: pointer;
transition:
border-color 0.15s ease,
color 0.15s ease;
&:hover:not(:disabled) {
border-color: $color-primary;
color: $color-primary;
}
&:disabled {
opacity: 0.6;
cursor: not-allowed;
}
}
.error {
color: $color-danger;
}
.items {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: $space-3;
}
.item {
padding: $space-3;
border: 1px solid $color-border;
border-radius: $radius;
background: $color-surface;
}
.itemHeader {
display: flex;
justify-content: space-between;
font-weight: 600;
margin-bottom: $space-2;
}
.itemOptions {
margin: 0 0 $space-2;
font-size: 0.85rem;
color: $color-text-muted;
}
// The negative margin + matching padding leaves room for the in-progress
// dot's sonar ping, which the collapse animation's overflow would clip.
.timelineWrapper {
overflow: hidden;
margin: (-$space-2);
padding: $space-2;
}
.bannerRow {
display: flex;
align-items: center;
justify-content: space-between;
gap: $space-2;
margin: 0 0 $space-2;
}
.stepsToggle {
padding: 0;
border: none;
background: none;
color: $color-text-muted;
font-size: 0.85rem;
text-decoration: underline;
cursor: pointer;
&:hover {
color: $color-primary;
}
}
.timeline {
margin: 0 0 $space-2;
padding: 0;
list-style: none;
}
.step {
position: relative;
display: grid;
grid-template-columns: $space-3 1fr;
column-gap: $space-2;
padding-bottom: $space-3;
font-size: 0.85rem;
color: $color-text-muted;
&:last-child {
padding-bottom: 0;
}
}
.stepMarker {
position: relative;
display: flex;
justify-content: center;
}
.stepDot {
position: relative;
width: 10px;
height: 10px;
margin-top: 3px;
border: 2px solid $color-border;
border-radius: 50%;
background: $color-background;
z-index: 1;
}
.stepConnector {
position: absolute;
top: 15px;
bottom: -$space-3;
left: 50%;
width: 2px;
background: $color-border;
transform: translateX(-50%);
overflow: hidden;
}
.stepConnectorFill {
position: absolute;
inset: 0;
background: $color-success;
transform-origin: top;
}
.step:last-child .stepConnector {
display: none;
}
.stepContent {
display: flex;
flex-direction: column;
gap: $space-1;
padding-top: 1px;
}
.stepMeta {
font-size: 0.75rem;
}
.step[data-status='done'] {
opacity: 0.3;
.stepDot {
border-color: $color-success;
background: $color-success;
}
.stepLabel {
color: $color-text;
}
}
.step[data-status='in_progress'] {
.stepDot {
border-color: $color-success;
background: $color-success;
@media (prefers-reduced-motion: no-preference) {
animation: dotPopIn 0.4s ease-out 0.6s backwards;
&::after {
content: '';
position: absolute;
inset: 0;
border-radius: 50%;
background: $color-success;
opacity: 0;
animation: sonarPing 1.6s ease-out 1s infinite;
}
}
}
}
// Animates the box size instead of transform: scale, which Chrome
// rasterizes at a low resolution mid-animation and renders the tiny dot square.
@keyframes dotPopIn {
0% {
border-color: $color-border;
background: $color-background;
}
50% {
width: 14px;
height: 14px;
margin-top: 1px;
}
}
@keyframes sonarPing {
0% {
transform: scale(1);
opacity: 0.6;
}
100% {
transform: scale(2.8);
opacity: 0;
}
}
.step[data-status='pending'] {
opacity: 0.6;
}
.actions {
display: flex;
flex-wrap: wrap;
gap: $space-2;
align-items: center;
button,
a {
display: inline-flex;
align-items: center;
gap: $space-1;
padding: $space-2 $space-4;
border: 1px solid $color-border;
border-radius: $radius;
background: $color-background;
color: $color-text;
text-decoration: none;
cursor: pointer;
transition: border-color 0.15s ease;
&:hover:not(:disabled) {
border-color: $color-primary;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
}
.actionIcon {
width: 1rem;
height: 1rem;
flex-shrink: 0;
}
.cancelButton {
padding: $space-1 $space-2;
border: none;
background: none;
color: $color-text-muted;
font-size: 0.85rem;
text-decoration: underline;
&:hover:not(:disabled) {
color: $color-danger;
}
}
}