feat(web): garden on the «Сегодня» screen — stages, progress, today's checklist
CI / ruff · pytest (pull_request) Successful in 2m34s
CI / ruff · pytest (pull_request) Successful in 2m34s
SVG garden drawn from GET /me/{token}/garden: plants grow one after another
(sprout → stem → bud → flower), «Новый росток N из 10», today's activities,
«Пропуск — не страшно, сад не вянет». A gentle grow-in and a toast when the
garden grew since the last visit — but not right after a crisis reply.
No streaks, no «missed» marks, no red.
Refs #119
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1666,6 +1666,131 @@ button.row-card:hover:not(:disabled) {
|
||||
color: var(--c-text-3);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------- garden (#119, slide 13) */
|
||||
|
||||
.garden {
|
||||
gap: var(--s-3);
|
||||
}
|
||||
|
||||
.garden__eyebrow {
|
||||
margin: 0 0 2px;
|
||||
font-size: var(--fs-12);
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: var(--c-teal-strong);
|
||||
}
|
||||
|
||||
.garden__scene {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
max-height: 190px;
|
||||
}
|
||||
|
||||
.garden__plant--fresh {
|
||||
animation: garden-grow 1100ms var(--ease) both;
|
||||
}
|
||||
|
||||
@keyframes garden-grow {
|
||||
from {
|
||||
transform: scaleY(0.2);
|
||||
opacity: 0.3;
|
||||
}
|
||||
to {
|
||||
transform: scaleY(1);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.garden__title {
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
color: var(--c-text);
|
||||
}
|
||||
|
||||
.garden__progress {
|
||||
display: grid;
|
||||
gap: var(--s-2);
|
||||
padding: var(--s-3);
|
||||
border-radius: var(--r-btn);
|
||||
background: var(--c-tile);
|
||||
}
|
||||
|
||||
.garden__progress-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-weight: 600;
|
||||
font-size: var(--fs-14);
|
||||
}
|
||||
|
||||
.garden__bar {
|
||||
height: 8px;
|
||||
border-radius: 999px;
|
||||
background: var(--c-border);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.garden__bar span {
|
||||
display: block;
|
||||
height: 100%;
|
||||
border-radius: inherit;
|
||||
background: var(--c-primary);
|
||||
transition: width 600ms var(--ease);
|
||||
}
|
||||
|
||||
.garden__today {
|
||||
display: grid;
|
||||
gap: var(--s-2);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.garden__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--s-3);
|
||||
font-size: var(--fs-14);
|
||||
}
|
||||
|
||||
.garden__icon {
|
||||
flex: none;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border-radius: var(--r-btn);
|
||||
background: var(--c-teal-soft);
|
||||
color: var(--c-teal-strong);
|
||||
}
|
||||
|
||||
.garden__item-text {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.garden__check {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border: 1.5px solid var(--c-border-strong);
|
||||
border-radius: 50%;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.garden__check--done {
|
||||
border-color: var(--c-primary);
|
||||
background: var(--c-primary);
|
||||
}
|
||||
|
||||
.garden__note {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
font-size: var(--fs-12);
|
||||
color: var(--c-text-3);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------- emergency */
|
||||
|
||||
.sosblock {
|
||||
|
||||
Reference in New Issue
Block a user