Stage 6 (part 1): new client mini-app look and order ratings

Plum hero with a club-card ticket, a 'Now' block with the live order timeline,
new order cards and order screen, QR club card screen, new nav
(Home / Orders / Chat / Card / Profile). Clients rate completed orders
(1-5 stars + comment); provider rating is recalculated.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zabudko-ruandClaude Opus 5.5 committed 2026-10-21 03:51:58 +04:00
1 parent 8866616782
commit ff527ad6d2
18 files changed
+1536 -205

No files matched your search

+845
View File
@@ -0,0 +1,845 @@
/* Этап 6: новый вид клиентского приложения — в стиле barevclub.com (слива, розовый, зелёные точки) */
:root {
--plum-2: #5e1a36;
--plum-line: rgba(246, 195, 211, 0.22);
--green: #a8c38a;
--green-ink: #1f3311;
}
/* ───── сливовый верх, как на сайте ───── */
.app--hero {
padding-top: 0;
}
.hero {
margin: 0 -16px 4px;
padding: 18px 16px 22px;
background: var(--bc-plum);
color: #fff;
border-radius: 0 0 32px 32px;
display: flex;
flex-direction: column;
gap: 14px;
position: relative;
overflow: hidden;
}
.hero__word {
position: absolute;
right: -10px;
top: -18px;
font-family: var(--bc-font-head);
font-weight: 900;
font-style: italic;
font-size: 112px;
line-height: 1;
letter-spacing: -0.04em;
color: var(--bc-pink);
opacity: 0.16;
pointer-events: none;
}
.hero__hello {
position: relative;
margin: 6px 0 0;
font-family: var(--bc-font-head);
font-weight: 800;
font-size: 30px;
line-height: 1.05;
letter-spacing: -0.01em;
}
.hero__hello span {
color: var(--bc-pink);
}
.hero__hello small {
display: block;
font-family: var(--bc-font-body);
font-weight: 500;
font-size: 15px;
color: rgba(255, 255, 255, 0.7);
margin-bottom: 2px;
}
.hero__note {
margin: 0;
font-size: 14px;
line-height: 1.4;
color: rgba(255, 255, 255, 0.78);
}
/* ───── клубная карта-«билет» ───── */
.ticket {
position: relative;
display: flex;
align-items: stretch;
min-height: 132px;
border-radius: 24px;
text-decoration: none;
color: var(--bc-plum);
background: var(--bc-pink);
overflow: hidden;
}
.ticket[data-plan='free'] {
background: var(--plum-2);
color: #fff;
box-shadow: inset 0 0 0 1.5px var(--plum-line);
}
.ticket[data-plan='elite'] {
background: var(--bc-perks);
}
.ticket__main {
flex: 1;
min-width: 0;
padding: 16px 18px;
display: flex;
flex-direction: column;
gap: 2px;
}
.ticket__club {
font-size: 12px;
font-weight: 600;
opacity: 0.75;
}
.ticket__level {
font-family: var(--bc-font-head);
font-weight: 900;
font-style: italic;
font-size: 34px;
line-height: 1;
letter-spacing: -0.02em;
margin-top: 2px;
}
.ticket__meta {
display: flex;
gap: 8px;
margin-top: auto;
padding-top: 10px;
font-size: 13px;
font-weight: 600;
}
.ticket__until {
font-size: 12px;
opacity: 0.8;
}
/* корешок: пунктир и вырезы, как у билета */
.ticket__stub {
flex: none;
width: 92px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 6px;
text-align: center;
font-size: 11px;
font-weight: 700;
line-height: 1.15;
padding: 10px 8px;
border-left: 2px dashed currentColor;
border-left-color: color-mix(in srgb, currentColor 35%, transparent);
position: relative;
}
.ticket__stub::before,
.ticket__stub::after {
content: '';
position: absolute;
left: -11px;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--bc-plum);
}
.ticket__stub::before {
top: -10px;
}
.ticket__stub::after {
bottom: -10px;
}
/* ───── секции ───── */
.sect {
display: flex;
flex-direction: column;
gap: 10px;
}
.sect__head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
padding: 0 4px;
}
.sect__title {
margin: 4px 0 0;
display: flex;
align-items: center;
gap: 8px;
font-family: var(--bc-font-head);
font-weight: 800;
font-size: 22px;
letter-spacing: -0.01em;
}
.sect__link {
font-size: 14px;
font-weight: 600;
color: var(--bc-accent);
text-decoration: none;
}
.live-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--green);
box-shadow: 0 0 0 4px rgba(168, 195, 138, 0.3);
animation: live 2s ease-in-out infinite;
}
@keyframes live {
50% {
box-shadow: 0 0 0 7px rgba(168, 195, 138, 0.1);
}
}
/* ───── «Сейчас» ───── */
.now-card {
display: flex;
flex-direction: column;
gap: 12px;
padding: 16px;
border-radius: 28px;
background: var(--bc-surface);
text-decoration: none;
color: var(--bc-ink);
box-shadow: var(--bc-shadow);
}
.now-card__top {
display: flex;
align-items: center;
gap: 12px;
}
.now-card__main {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
}
.now-card__main b {
font-family: var(--bc-font-head);
font-size: 18px;
line-height: 1.15;
}
.now-card__main span {
font-size: 13px;
color: var(--bc-ink-2);
}
.now-card__when {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 12px;
border-radius: 16px;
background: var(--bc-bg);
font-weight: 600;
font-size: 14px;
}
.now-card__when::first-letter {
text-transform: uppercase;
}
.more-link {
align-self: flex-start;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0 4px;
font-size: 14px;
font-weight: 600;
color: var(--bc-ink-2);
text-decoration: none;
}
.empty-now {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
padding: 18px;
border-radius: 28px;
background: var(--bc-surface);
}
.empty-now p {
margin: 0;
color: var(--bc-ink-2);
}
/* ───── шкала как на сайте ───── */
.tl {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
.tl__item {
position: relative;
display: flex;
gap: 12px;
padding-bottom: 14px;
}
.tl__item:last-child {
padding-bottom: 0;
}
.tl__item::before {
content: '';
position: absolute;
left: 10px;
top: 22px;
bottom: 0;
width: 2px;
background: var(--bc-line);
}
.tl__item--done::before {
background: var(--green);
}
.tl__item:last-child::before {
display: none;
}
.tl__dot {
flex: none;
width: 22px;
height: 22px;
border-radius: 50%;
border: 2px solid var(--bc-line);
background: var(--bc-surface);
display: grid;
place-items: center;
color: var(--green-ink);
position: relative;
z-index: 1;
}
.tl__item--done .tl__dot {
background: var(--green);
border-color: var(--green);
}
.tl__item--current .tl__dot {
border: 6px solid var(--bc-accent);
box-shadow: 0 0 0 4px rgba(184, 35, 90, 0.15);
}
.tl__body {
display: flex;
flex-direction: column;
padding-top: 1px;
min-width: 0;
}
.tl__label {
font-weight: 600;
font-size: 15px;
line-height: 1.3;
}
.tl__item--todo .tl__label {
color: var(--bc-ink-3);
font-weight: 500;
}
.tl__item--current .tl__label {
color: var(--bc-accent);
}
.tl__meta {
font-size: 12px;
color: var(--bc-ink-3);
}
/* компактно на главной — шаги в строку */
.tl--compact {
flex-direction: row;
}
.tl--compact .tl__item {
flex: 1;
flex-direction: column;
align-items: flex-start;
gap: 6px;
padding: 0;
min-width: 0;
}
.tl--compact .tl__item::before {
left: 22px;
right: 0;
top: 10px;
bottom: auto;
width: auto;
height: 2px;
}
.tl--compact .tl__item:last-child {
flex: none;
}
.tl--compact .tl__body {
display: none;
}
.tl--compact .tl__item--current .tl__body {
display: flex;
position: absolute;
top: 28px;
left: 0;
white-space: nowrap;
}
.tl--compact .tl__item--current .tl__meta {
display: none;
}
.tl--compact {
padding-bottom: 24px;
}
.tl--compact .tl__item:last-child.tl__item--current .tl__body {
left: auto;
right: 0;
}
/* ───── карточки заказов ───── */
.order-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.order-card {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 14px;
border-radius: 24px;
background: var(--bc-surface);
text-decoration: none;
color: var(--bc-ink);
}
.order-card[data-status='cancelled'] {
opacity: 0.6;
}
.order-card__icon {
flex: none;
width: 44px;
height: 44px;
border-radius: 16px;
display: grid;
place-items: center;
}
.order-card__main {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 1px;
}
.order-card__title {
font-family: var(--bc-font-head);
font-weight: 700;
font-size: 16px;
}
.order-card__sub,
.order-card__when {
font-size: 13px;
color: var(--bc-ink-2);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.order-card__when {
color: var(--bc-ink);
font-weight: 500;
}
.order-card__bar {
margin-top: 8px;
height: 4px;
border-radius: 4px;
background: var(--bc-line);
overflow: hidden;
}
.order-card__bar span {
display: block;
height: 100%;
border-radius: 4px;
background: var(--green);
}
.order-card__side {
flex: none;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 6px;
}
.order-card__status {
padding: 5px 10px;
border-radius: var(--bc-pill);
background: var(--bc-bg);
font-size: 12px;
font-weight: 600;
white-space: nowrap;
}
.order-card[data-status='active'] .order-card__status {
background: var(--bc-plum);
color: #fff;
}
.order-card__rate {
font-size: 12px;
font-weight: 600;
color: var(--bc-accent);
}
.order-card .stars {
color: #e9a400;
}
/* ───── карточка заказа ───── */
.od-hero {
margin: -16px -16px 0;
padding: 12px 16px 22px;
border-radius: 0 0 32px 32px;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 6px;
}
.od-hero__bar {
align-self: stretch;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
}
.od-hero__num {
font-family: var(--bc-font-head);
font-weight: 700;
opacity: 0.6;
}
.od-hero__status {
padding: 6px 12px;
border-radius: var(--bc-pill);
background: var(--bc-plum);
color: #fff;
font-size: 13px;
font-weight: 600;
}
.od-hero__status[data-status='done'] {
background: var(--bc-surface);
color: var(--green-ink);
}
.od-hero__status[data-status='cancelled'] {
background: var(--bc-surface);
color: var(--bc-danger);
}
.od-hero__title {
margin: 4px 0 0;
font-family: var(--bc-font-head);
font-weight: 800;
font-size: 32px;
line-height: 1.02;
letter-spacing: -0.02em;
}
.od-hero__sub {
font-size: 15px;
opacity: 0.85;
}
.facts {
margin: 0;
padding: 4px 16px;
border-radius: 24px;
background: var(--bc-surface);
}
.facts > div {
display: flex;
flex-direction: column;
gap: 2px;
padding: 12px 0;
border-top: 1px solid var(--bc-line);
}
.facts > div:first-child {
border-top: 0;
}
.facts dt {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: var(--bc-ink-3);
}
.facts dd {
margin: 0 0 0 24px;
font-weight: 600;
}
.facts dd::first-letter {
text-transform: uppercase;
}
.panel {
padding: 16px;
border-radius: 24px;
background: var(--bc-surface);
}
.panel__title {
margin: 0 0 12px;
font-family: var(--bc-font-head);
font-weight: 700;
font-size: 18px;
}
/* ───── оценка ───── */
.rate {
padding: 18px;
border-radius: 28px;
background: var(--bc-plum);
color: #fff;
display: flex;
flex-direction: column;
gap: 10px;
}
.rate__title {
margin: 0;
font-family: var(--bc-font-head);
font-weight: 800;
font-size: 22px;
}
.rate__text {
margin: -4px 0 0;
font-size: 14px;
color: rgba(255, 255, 255, 0.75);
}
.rate .stars {
color: var(--bc-perks);
}
.rate__input {
width: 100%;
min-height: 64px;
padding: 12px 14px;
border-radius: 18px;
border: 0;
font: inherit;
font-size: 15px;
resize: vertical;
box-sizing: border-box;
}
.rate--done {
background: var(--bc-surface);
color: var(--bc-ink);
}
.rate--done .stars {
color: #e9a400;
}
.rate__label {
font-size: 13px;
font-weight: 600;
color: var(--bc-ink-3);
}
.rate__change {
border: 0;
background: none;
font: inherit;
font-size: 14px;
font-weight: 600;
color: var(--bc-accent);
cursor: pointer;
}
.rate__comment {
margin: 0;
color: var(--bc-ink-2);
}
.rate-nudge {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px 16px;
border-radius: 24px;
background: var(--bc-perks);
color: var(--bc-perks-ink);
text-decoration: none;
}
.rate-nudge > span {
display: flex;
flex-direction: column;
min-width: 0;
font-size: 13px;
}
.rate-nudge b {
font-family: var(--bc-font-head);
font-size: 16px;
}
.stars {
display: flex;
gap: 4px;
}
.stars button {
padding: 2px;
border: 0;
background: none;
color: inherit;
cursor: pointer;
line-height: 0;
transition: transform 0.12s;
}
.stars button:active {
transform: scale(0.88);
}
.stars [data-on] svg {
filter: none;
}
/* ───── кнопки-«таблетки» как на сайте ───── */
.pill {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 46px;
padding: 0 20px;
border-radius: var(--bc-pill);
border: 0;
font: inherit;
font-weight: 600;
font-size: 15px;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
}
.pill:disabled {
opacity: 0.6;
}
.pill--block {
width: 100%;
}
.pill--dark {
background: var(--bc-plum);
color: #fff;
}
.pill--pink {
background: var(--bc-pink);
color: var(--bc-plum);
}
.pill--green {
background: var(--green);
color: var(--green-ink);
}
.screen-head .pill--dark {
width: 46px;
padding: 0;
}
/* ───── заголовок экрана ───── */
.screen-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding-top: 8px;
}
.screen-head__title {
margin: 0;
font-family: var(--bc-font-head);
font-weight: 800;
font-size: 32px;
letter-spacing: -0.02em;
}
/* ───── направления ───── */
.tiles .tile {
min-height: 118px;
border-radius: 26px;
justify-content: flex-start;
gap: 6px;
}
.tiles .tile .tile__title {
margin-top: auto;
font-size: 18px;
}
.tile__note {
font-size: 12px;
opacity: 0.8;
}
/* ───── чат ───── */
.chat-cta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 18px;
border-radius: 28px;
background: var(--bc-plum);
color: #fff;
text-decoration: none;
}
.chat-cta > span:first-child {
display: flex;
flex-direction: column;
gap: 2px;
font-size: 13px;
color: rgba(255, 255, 255, 0.75);
}
.chat-cta b {
font-family: var(--bc-font-head);
font-size: 17px;
color: #fff;
}
/* ───── QR-карта ───── */
.hero--card {
align-items: stretch;
padding-top: 22px;
}
.hero--card .pill {
align-self: flex-start;
}
.qr-card {
border-radius: 28px;
padding: 16px;
background: var(--bc-pink);
color: var(--bc-plum);
display: flex;
flex-direction: column;
gap: 12px;
}
.qr-card[data-plan='free'] {
background: var(--plum-2);
color: #fff;
box-shadow: inset 0 0 0 1.5px var(--plum-line);
}
.qr-card[data-plan='elite'] {
background: var(--bc-perks);
}
.qr-card__top {
display: flex;
justify-content: space-between;
align-items: baseline;
font-size: 13px;
font-weight: 600;
}
.qr-card__top b {
font-family: var(--bc-font-head);
font-weight: 900;
font-style: italic;
font-size: 26px;
}
.qr-card__code {
align-self: center;
padding: 12px;
border-radius: 22px;
background: #fff;
line-height: 0;
}
.qr-card__meta {
display: flex;
justify-content: space-between;
gap: 8px;
font-size: 13px;
}
.qr-card__timer {
opacity: 0.75;
}
.bc-segmented button[aria-pressed='true'] {
background: var(--bc-plum);
color: #fff;
}
/* ───── нижнее меню — слива и розовая кнопка чата ───── */
.bc-bottomnav {
background: var(--bc-plum);
box-shadow: 0 10px 30px rgba(74, 16, 40, 0.35);
}
.bc-bottomnav a,
.bc-bottomnav button {
color: rgba(246, 195, 211, 0.6);
}
.bc-bottomnav [aria-current='page'] {
color: var(--bc-pink);
}
.bc-bottomnav .bc-bottomnav__plus {
background: var(--bc-pink);
color: var(--bc-plum);
}