@import "./reset.css"; @import "./tokens.css"; /* ============================================================ База ============================================================ */ html, body { height: 100%; } body { font-family: var(--font-sans); font-size: var(--text-base); line-height: var(--leading-normal); font-weight: var(--fw-regular); color: var(--c-text); background-color: var(--c-bg); overflow: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* атрибут hidden должен перебивать display: grid у .screen */ [hidden] { display: none !important; } /* ============================================================ Экраны ============================================================ */ .screen { min-height: 100vh; display: grid; } /* --- Сплэш --- */ .splashscreen { place-items: center; } .splash-label { color: var(--c-text-muted); font-size: var(--text-sm); letter-spacing: var(--tracking-wide); text-transform: uppercase; } /* --- Подключение датчиков --- */ #connect { grid-template-rows: auto 1fr auto; gap: var(--space-4); padding: var(--space-4); width: 100%; max-width: var(--container-max); margin-inline: auto; } .screen-header { display: grid; gap: var(--space-1); } .title { font-size: var(--text-2xl); font-weight: var(--fw-semibold); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); } .subtitle { color: var(--c-text-muted); font-size: var(--text-sm); } /* --- Сетка групп датчиков --- */ .devices { display: grid; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: var(--space-4); align-content: start; } .device-group { display: grid; gap: var(--space-3); align-content: start; padding: var(--space-4); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-md); } .device-group__title { font-size: var(--text-xs); font-weight: var(--fw-medium); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--c-text-muted); } .device-list { display: grid; gap: var(--space-2); } /* --- Карточка датчика --- */ .device { display: grid; gap: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--c-surface-2); border-radius: var(--radius-sm); } .device__head { display: flex; align-items: center; gap: var(--space-2); } .device__name { font-size: var(--text-sm); font-weight: var(--fw-medium); } .device__rssi { margin-left: auto; font-family: var(--font-mono); font-size: var(--text-xs); color: var(--c-text-muted); } .device__meta { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--c-text-faint); } .device__connect { padding: var(--space-1) var(--space-3); border: 1px solid var(--c-border-strong); border-radius: var(--radius-sm); font-size: var(--text-xs); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--c-text); cursor: pointer; transition: background var(--duration-fast) var(--ease); } .device__connect:hover { background: var(--c-surface); } .device__connect:disabled { cursor: default; opacity: 0.6; } .device__connect--done { border-color: var(--c-text); } .device--empty { justify-items: center; padding: var(--space-3); color: var(--c-text-faint); font-size: var(--text-sm); background: transparent; border: 1px dashed var(--c-border); } /* --- Батарея --- */ .battery { display: inline-flex; align-items: center; } .battery__icon { width: 22px; height: 11px; display: block; } .battery__body { fill: none; stroke: var(--c-text); stroke-width: 1; } .battery__terminal { fill: var(--c-text); } .battery__fill { fill: var(--c-text); } .battery--low .battery__fill { fill: none; } .battery__warn { fill: var(--c-text); font-size: 8px; font-weight: var(--fw-bold); } /* --- Кнопки --- */ .btn { font-family: var(--font-sans); font-size: var(--text-base); font-weight: var(--fw-medium); letter-spacing: var(--tracking-wide); text-transform: uppercase; padding: var(--space-3) var(--space-6); border-radius: var(--radius-full); cursor: pointer; transition: opacity var(--duration-fast) var(--ease); } .btn:disabled { cursor: default; opacity: 0.35; } .btn--primary { color: var(--c-accent-contrast); background: var(--c-accent); } .btn--primary:hover:not(:disabled) { opacity: 0.85; } .btn--ghost { color: var(--c-text); border: 1px solid var(--c-border-strong); } .btn--ghost:hover { background: var(--c-surface); } #connect .btn { justify-self: center; align-self: end; } /* ============================================================ Экран упражнения ============================================================ */ #workout { grid-template-rows: auto 1fr auto; gap: var(--space-4); padding: var(--space-4); width: 100%; max-width: var(--container-max); margin-inline: auto; } .workout-header { display: flex; align-items: center; justify-content: space-between; } .timer { font-size: var(--text-3xl); font-weight: var(--fw-semibold); line-height: 1; letter-spacing: var(--tracking-tight); font-variant-numeric: tabular-nums; } /* --- Метрики --- */ .metrics { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); align-content: center; } .metric { display: grid; justify-items: center; align-content: center; gap: var(--space-1); padding: var(--space-3); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius-lg); } .metric--power { grid-column: 1 / -1; } .metric__label { font-size: var(--text-xs); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--c-text-muted); } .metric__value { font-size: var(--text-3xl); font-weight: var(--fw-semibold); line-height: 1; font-variant-numeric: tabular-nums; } .metric--cadence .metric__value, .metric--hr .metric__value { font-size: var(--text-xl); } .metric__unit { font-size: var(--text-sm); color: var(--c-text-muted); } /* --- Управление --- */ .controls { display: grid; grid-template-columns: 1fr 1fr auto; gap: var(--space-4); align-items: end; } .field { display: grid; gap: var(--space-2); } .field__label { font-size: var(--text-xs); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--c-text-muted); } .field__input { font-family: var(--font-sans); font-size: var(--text-base); padding: var(--space-2) var(--space-3); color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-border-strong); border-radius: var(--radius-sm); font-variant-numeric: tabular-nums; } .field__input:focus { border-color: var(--c-text); }