:root { --bg0: #0f1412; --bg1: #18201c; --bg2: #223028; --line: #2f3f36; --text: #eef3ef; --muted: #9aada2; --accent: #c4f04d; --accent-dim: #8fb82f; --danger: #ff6b5a; --ok: #7dffb3; --radius: 14px; --font: "Segoe UI", "Manrope", system-ui, sans-serif; color: var(--text); background: radial-gradient(1200px 600px at 10% -10%, #1d3324 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #24361f 0%, transparent 50%), linear-gradient(180deg, #101612, #0c100e); font-family: var(--font); line-height: 1.4; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } * { box-sizing: border-box; } html, body, #root { margin: 0; height: 100%; overflow: hidden; } body { min-width: 320px; overflow: hidden; } button, input { font: inherit; } a { color: inherit; } .app-shell { height: 100dvh; max-height: 100dvh; max-width: 480px; margin: 0 auto; padding-top: max(28px, env(safe-area-inset-top, 0px)); overflow: hidden; display: flex; flex-direction: column; background: #0f1412; } .page { flex: 1; min-height: 0; overflow-x: hidden; overflow-y: auto; padding: 16px 16px calc(24px + env(safe-area-inset-bottom, 0px)); display: flex; flex-direction: column; gap: 16px; } .settings-page { min-height: 100%; } .settings-foot { margin-top: auto; display: flex; flex-direction: column; gap: 12px; } .brand { margin: 0; font-size: 1.35rem; font-weight: 750; letter-spacing: -0.02em; } .brand-block { padding: 12px 4px 4px; } .muted { color: var(--muted); margin: 4px 0 0; } .hint { display: block; color: var(--muted); font-size: 0.85rem; margin-top: 6px; } .error { color: var(--danger); margin: 0; } .ok { color: var(--ok); } .topbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .topbar-actions { margin-left: auto; display: flex; gap: 8px; } .card-form, .phase-banner, .active-set, .prompt-box, .settings-list { background: color-mix(in srgb, var(--bg1) 88%, black); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; } .card-form, .settings-list, .prompt-box, .active-set, .phase-banner { display: flex; flex-direction: column; gap: 12px; } label { display: flex; flex-direction: column; gap: 6px; font-size: 0.92rem; } input[type="number"], input[type="password"], input[type="date"], input[type="text"] { width: 100%; border: 1px solid var(--line); background: var(--bg0); color: var(--text); border-radius: 10px; padding: 12px 12px; } fieldset { border: 0; padding: 0; margin: 0; } legend { margin-bottom: 8px; } .btn { border: 1px solid var(--line); background: var(--bg2); color: var(--text); border-radius: 12px; padding: 12px 14px; cursor: pointer; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn.primary { background: linear-gradient(180deg, var(--accent), var(--accent-dim)); color: #10140f; border-color: transparent; font-weight: 700; } .btn.ghost { background: transparent; } .btn.danger { background: color-mix(in srgb, var(--danger) 20%, var(--bg2)); border-color: color-mix(in srgb, var(--danger) 50%, var(--line)); color: #ffd2cc; } .btn.wide { width: 100%; padding: 16px; font-size: 1.05rem; } .day-grid, .row { display: flex; flex-wrap: wrap; gap: 8px; } .chip { border: 1px solid var(--line); background: var(--bg0); color: var(--text); border-radius: 999px; padding: 10px 12px; cursor: pointer; } .chip.on { background: color-mix(in srgb, var(--accent) 25%, var(--bg0)); border-color: var(--accent-dim); } .week-strip h2, .calendar h2, .exercise-list h2 { margin: 0 0 10px; font-size: 1rem; } .strip-row { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(92px, 1fr); gap: 8px; overflow-x: auto; padding-bottom: 4px; } .strip-card { border: 1px solid var(--line); background: var(--bg1); color: var(--text); border-radius: 12px; padding: 12px 10px; display: flex; flex-direction: column; gap: 4px; text-align: left; cursor: pointer; } .strip-card.today { outline: 2px solid var(--accent); } .strip-card.done { border-color: color-mix(in srgb, var(--ok) 40%, var(--line)); } .strip-card.active { border-color: var(--accent-dim); } .strip-day { font-size: 0.8rem; color: var(--muted); } .strip-date { font-size: 1.3rem; font-weight: 700; } .strip-meta { font-size: 0.75rem; color: var(--muted); } .cal-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; } .cal-nav h2 { margin: 0; text-transform: capitalize; font-size: 1.05rem; } .cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; } .cal-grid.head { margin-bottom: 4px; color: var(--muted); font-size: 0.78rem; text-align: center; } .cal-cell { aspect-ratio: 1; border: 1px solid transparent; background: transparent; color: var(--text); border-radius: 10px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 0; } .cal-cell:disabled { opacity: 0.55; } .cal-cell.planned, .cal-cell.done, .cal-cell.active, .cal-cell.missed { background: var(--bg1); border-color: var(--line); cursor: pointer; } .cal-cell.today { box-shadow: inset 0 0 0 1px var(--accent); } .cal-cell .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); } .cal-cell.done .dot { background: var(--ok); } .cal-cell.picked { box-shadow: inset 0 0 0 2px var(--accent); } .cal-grid:not(.head) { touch-action: none; } .cal-cell.drop { box-shadow: inset 0 0 0 2px #3d7ea6; } .cal-cell.dragging { opacity: 0.45; } .drag-ghost { position: fixed; z-index: 30; width: 44px; height: 44px; margin-left: -22px; margin-top: -46px; border-radius: 10px; display: grid; place-items: center; pointer-events: none; background: var(--bg2); border: 2px solid #3d7ea6; font-weight: 700; } .workout-page { min-height: 100%; } .workout-foot { margin-top: auto; display: flex; flex-direction: column; gap: 12px; } .btn.move { background: #3d7ea6; border-color: transparent; color: #f4fbff; font-weight: 700; } .rest-until { display: flex; flex-direction: column; gap: 2px; } .rest-title { margin: 0; font-size: 1.15rem; font-weight: 750; } .rest-until p { margin: 0; } .move-prompt { margin: 0; font-size: 1.05rem; font-weight: 700; } .move-calendar { margin-top: 4px; } .status-line { font-variant-numeric: tabular-nums; } .active-set .ex-name { margin: 0; font-size: 1.2rem; font-weight: 700; } .set-label { margin: 0; color: var(--muted); } .big-numbers { display: flex; justify-content: space-around; gap: 12px; padding: 10px 0 4px; } .big-numbers .num { font-size: 2.4rem; font-weight: 800; letter-spacing: -0.03em; } .big-numbers .unit { display: block; color: var(--muted); font-size: 0.85rem; text-align: center; } .exercise-list { display: flex; flex-direction: column; gap: 10px; } .ex-block { background: color-mix(in srgb, var(--bg1) 88%, black); border: 1px solid var(--line); border-radius: var(--radius); padding: 0; overflow: hidden; } .ex-block.current { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); } .ex-block.finished:not(.current) { opacity: 0.78; } .ex-head { display: flex; align-items: center; } .ex-toggle { flex: 1; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 10px; border: 0; background: transparent; color: var(--text); padding: 14px 8px 14px 16px; cursor: pointer; text-align: left; } .icon-btn { width: 44px; height: 44px; padding: 0; display: grid; place-items: center; border: 1px solid var(--line); border-radius: 12px; background: transparent; color: var(--text); cursor: pointer; } .ex-edit { flex-shrink: 0; width: 36px; height: 36px; margin-right: 10px; padding: 0; display: grid; place-items: center; border: 1px solid var(--line); border-radius: 10px; background: transparent; color: var(--muted); cursor: pointer; } .ex-edit.on { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); } .ex-toggle-main { display: flex; align-items: center; gap: 8px; min-width: 0; } .ex-toggle-main strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ex-toggle-meta { flex-shrink: 0; font-size: 0.85rem; } .chevron { color: var(--muted); width: 1rem; } .badge-now, .badge-done { font-size: 0.72rem; font-weight: 700; border-radius: 999px; padding: 2px 8px; flex-shrink: 0; } .badge-now { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); } .badge-done { background: color-mix(in srgb, var(--ok) 18%, transparent); color: var(--ok); } .ex-body { padding: 14px 16px 14px; border-top: 1px solid var(--line); } .ex-body .active-set.nested, .ex-body .prompt-box.nested { margin: 0 0 12px; border-radius: 12px; } .ex-body ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; } .ex-body li { color: var(--muted); font-size: 1.05rem; line-height: 1.4; min-height: 40px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; } .set-adjust { display: flex; align-items: center; gap: 4px; flex-shrink: 0; } .set-step { width: 32px; height: 32px; padding: 0; border: 1px solid var(--line); border-radius: 8px; background: var(--bg2); color: var(--text); font-size: 1.05rem; line-height: 1; cursor: pointer; } .set-step:disabled { opacity: 0.45; } .set-step-label { min-width: 2.4rem; text-align: center; font-size: 0.75rem; color: var(--muted); } .ex-body li.done { color: var(--ok); } .weight-stepper { display: flex; flex-direction: column; gap: 8px; } .weight-stepper-label { font-size: 0.92rem; } .weight-stepper-row { display: grid; grid-template-columns: 44px 1fr 44px; gap: 8px; align-items: center; } .weight-stepper .rm-btn { height: 40px; font-size: 1.25rem; } .weight-stepper-value { display: flex; flex-direction: column; align-items: center; gap: 0; padding: 2px 8px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg0); } .weight-stepper-value .num { font-size: 1.25rem; font-weight: 800; line-height: 1.1; } .weight-stepper-value .unit { font-size: 0.72rem; } .weight-stepper.compact .weight-stepper-row { display: flex; justify-content: flex-start; } .weight-stepper.compact .weight-stepper-value { width: 76px; flex: 0 0 76px; padding: 0 4px; } .weight-stepper.compact .rm-btn { width: 40px; flex: 0 0 40px; } .check-btn { width: 40px; height: 40px; flex: 0 0 40px; border-radius: 10px; background: var(--accent); border-color: transparent; color: #10140f; } .check-btn:disabled { opacity: 0.45; } .auth-page { min-height: 100%; justify-content: center; } .stepper { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .step-dot { border: 1px solid var(--line); background: var(--bg1); color: var(--muted); border-radius: 999px; padding: 8px 10px; font-size: 0.85rem; cursor: pointer; } .step-dot.on { color: #10140f; background: var(--accent); border-color: transparent; font-weight: 700; } .step-dot.done { border-color: var(--accent-dim); color: var(--text); } .onboard-step h1 { margin: 0; font-size: 1.35rem; } .rm-picker { display: grid; grid-template-columns: 64px 1fr 64px; gap: 10px; align-items: center; margin: 8px 0 4px; } .rm-btn { height: 64px; font-size: 1.8rem; font-weight: 700; padding: 0; } .rm-value { display: flex; flex-direction: column; align-items: center; gap: 4px; } .rm-value input { text-align: center; font-size: 2rem; font-weight: 800; padding: 14px 10px; } .rm-value span { color: var(--muted); font-size: 0.9rem; } .day-grid-lg { display: grid; grid-template-columns: 1fr; gap: 8px; } .chip-lg { display: flex; justify-content: space-between; align-items: center; border-radius: 12px; padding: 14px 16px; font-size: 1.05rem; text-align: left; } .chip-check { color: var(--accent); font-weight: 700; } .summary-box { background: var(--bg0); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; } .summary-box p { margin: 0 0 6px; } .summary-box p:last-child { margin: 0; } @media (min-width: 480px) { .app-shell { border-left: 1px solid var(--line); border-right: 1px solid var(--line); } }