Files
food-tracer/client/src/pages/templates.scss
T
Ondřej Anděl 7641e26c9f chore: graf db
feat: workout plans (volný, fixní, plovoucí)
2026-10-22 12:11:05 +02:00

454 lines
7.8 KiB
SCSS

.template-card {
margin-bottom: 12px;
padding: 16px 18px;
.template-head {
display: flex;
align-items: center;
gap: 10px;
}
.template-title {
flex: 1;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
font-weight: 700;
color: var(--ft-text);
}
.template-calories {
color: var(--ft-warning);
font-weight: 700;
font-size: 0.88rem;
white-space: nowrap;
}
.template-items {
list-style: none;
margin: 10px 0 0;
padding: 0;
font-size: 0.87rem;
li {
display: flex;
align-items: baseline;
gap: 8px;
padding: 5px 0;
border-top: 1px solid var(--ft-border-light);
}
}
.template-item-icon {
color: var(--ft-primary);
font-size: 0.78rem;
}
.template-item-name {
flex: 1;
min-width: 0;
color: var(--ft-text);
}
.template-item-quantity {
color: var(--ft-text-secondary);
white-space: nowrap;
}
.template-item-calories {
color: var(--ft-text-muted);
font-weight: 600;
white-space: nowrap;
min-width: 72px;
text-align: right;
}
}
.template-form {
.chart-title {
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--ft-text-secondary);
margin: 0 0 14px;
}
margin-top: 20px;
}
// Odkaz na vnořenou šablonu se v editaci odlišuje ikonou před výběrem
.workout-item-nested-icon {
align-self: center;
color: var(--ft-primary);
flex: 0 0 auto;
}
.meal-template-price {
color: var(--ft-text-secondary);
font-weight: 600;
font-size: 0.85rem;
white-space: nowrap;
}
// Postup přípravy v Markdownu
.recipe-note {
margin: 10px 0 0;
padding-top: 10px;
border-top: 1px solid var(--ft-border-light);
font-size: 0.83rem;
color: var(--ft-text-secondary);
p, ul, ol, blockquote, pre {
margin: 0 0 0.6em;
}
> :last-child {
margin-bottom: 0;
}
h1, h2, h3, h4, h5, h6 {
margin: 0.8em 0 0.35em;
font-size: 0.95rem;
font-weight: 700;
color: var(--ft-text);
}
h1 {
font-size: 1.05rem;
}
> :first-child {
margin-top: 0;
}
ul, ol {
padding-left: 1.4em;
}
blockquote {
padding-left: 10px;
border-left: 3px solid var(--ft-border);
}
code {
padding: 1px 4px;
border-radius: var(--ft-radius-sm);
background: var(--ft-bg-hover);
color: var(--ft-text);
font-size: 0.95em;
}
pre code {
display: block;
padding: 8px 10px;
white-space: pre-wrap;
}
hr {
margin: 0.8em 0;
border-color: var(--ft-border);
}
img {
max-width: 100%;
}
}
// Řádek suroviny receptu — název se roztáhne, číselná pole mají pevnou šířku
.recipe-ingredient-row {
align-items: center;
// Množství s výběrem jednotky
.recipe-ingredient-amount {
width: 160px;
flex: 0 0 auto;
.form-control {
min-width: 0;
}
.form-select {
flex: 0 0 82px;
padding-left: 8px;
}
}
// Přepočet na gramy u jiné jednotky
.recipe-ingredient-weight {
width: 90px;
flex: 0 0 auto;
}
.recipe-ingredient-rate {
width: 100px;
flex: 0 0 auto;
}
.recipe-ingredient-calories {
width: 90px;
flex: 0 0 auto;
font-weight: 600;
font-size: 0.87rem;
color: var(--ft-warning);
white-space: nowrap;
}
.recipe-ingredient-price {
width: 110px;
flex: 0 0 auto;
}
@media (max-width: 640px) {
flex-wrap: wrap;
.recipe-ingredient-amount,
.recipe-ingredient-weight,
.recipe-ingredient-rate,
.recipe-ingredient-calories,
.recipe-ingredient-price {
width: auto;
flex: 1;
}
}
}
.recipe-summary {
margin-top: 8px;
font-size: 0.87rem;
font-weight: 600;
color: var(--ft-text-secondary);
.recipe-summary-portion {
color: var(--ft-primary);
}
}
// Vazby receptu na jiné recepty — ve formuláři výběr, na kartě odkazy
.recipe-links {
display: flex;
flex-direction: column;
gap: 4px;
margin-top: 10px;
font-size: 0.87rem;
.recipe-links-row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
}
.recipe-links-label {
color: var(--ft-text-muted);
font-weight: 600;
}
}
.recipe-link {
border: none;
background: var(--ft-primary-light);
color: var(--ft-primary);
border-radius: 999px;
padding: 2px 10px;
font-size: 0.8rem;
font-weight: 600;
&:is(button):hover {
filter: brightness(0.95);
text-decoration: underline;
}
.recipe-link-remove {
margin-left: 6px;
border: none;
background: none;
color: inherit;
padding: 0;
line-height: 1;
}
}
.recipe-links-input {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
.form-select {
width: auto;
min-width: 180px;
flex: 1 1 180px;
}
}
// Popisek postupu s přepínačem psaní a náhledu
.recipe-note-label {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 0.5rem;
.form-label {
margin-bottom: 0;
}
}
.recipe-note-preview {
min-height: 120px;
padding: 8px 12px;
border: 1px solid var(--ft-border);
border-radius: var(--ft-radius-sm);
background: var(--ft-bg-card);
.recipe-note {
margin: 0;
padding: 0;
border: none;
}
}
// ============================================
// PLÁNY TRÉNINKŮ
// ============================================
.tag-plan {
background: var(--ft-primary-light);
color: var(--ft-primary);
}
.template-card {
.template-plan-meta {
display: flex;
flex-wrap: wrap;
gap: 14px;
margin-top: 4px;
font-size: 0.8rem;
color: var(--ft-text-muted);
}
.template-plan-day {
margin-top: 12px;
}
// Hlavička dne je podbarvený pruh, cviky pod ní odsazené s linkou — na první
// pohled je vidět, kde den začíná a co k němu patří
.template-plan-day-head {
display: flex;
align-items: baseline;
gap: 8px;
padding: 6px 10px;
border-left: 3px solid var(--ft-primary);
border-radius: var(--ft-radius-sm);
background: var(--ft-primary-light);
font-size: 0.9rem;
}
.template-plan-day-label {
color: var(--ft-primary);
font-weight: 700;
min-width: 20px;
}
.template-plan-day-name {
flex: 1;
font-weight: 700;
color: var(--ft-text);
}
.template-plan-day .template-items {
margin: 2px 0 0 12px;
padding-left: 12px;
border-left: 2px solid var(--ft-border);
li:first-child {
border-top: none;
}
}
// Den volna není záznam, jen připomínka konce cyklu
.template-plan-rest {
padding: 6px 10px;
border: 1px dashed var(--ft-border);
border-radius: var(--ft-radius-sm);
font-size: 0.85rem;
color: var(--ft-text-muted);
font-style: italic;
}
}
.template-form {
.template-form-head {
display: flex;
flex-wrap: wrap;
gap: 12px;
> * {
flex: 1 1 180px;
}
.template-form-name {
flex: 3 1 260px;
}
}
.input-with-unit {
display: flex;
align-items: center;
gap: 8px;
span {
color: var(--ft-text-secondary);
font-size: 0.88rem;
}
}
}
.workout-items-actions {
display: flex;
gap: 8px;
}
.plan-day-editor {
margin-bottom: 14px;
padding: 12px;
border: 1px solid var(--ft-border);
border-radius: var(--ft-radius);
.plan-day-head {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
}
.plan-day-weekday {
width: 140px;
flex: 0 0 auto;
}
.plan-day-order {
font-weight: 700;
color: var(--ft-text-secondary);
min-width: 22px;
}
.plan-day-calories {
color: var(--ft-warning);
font-weight: 600;
font-size: 0.85rem;
white-space: nowrap;
}
}
.plan-rest-day {
margin-bottom: 14px;
padding: 10px 12px;
border: 1px dashed var(--ft-border);
border-radius: var(--ft-radius);
font-size: 0.87rem;
color: var(--ft-text-muted);
}