diff options
Diffstat (limited to 'static/css/hito.css')
| -rw-r--r-- | static/css/hito.css | 868 |
1 files changed, 868 insertions, 0 deletions
diff --git a/static/css/hito.css b/static/css/hito.css new file mode 100644 index 0000000..1de9869 --- /dev/null +++ b/static/css/hito.css @@ -0,0 +1,868 @@ +/* HITO - Objectivist Aesthetic + Black. Gold. White. No compromise. + Rectilinear. Architectural. Certain. + + "A is A." The design reflects the philosophy: + clarity, purpose, and respect for the rational mind. */ + +/* === VARIABLES === */ + +:root { + --bg: #0A0A0A; + --bg-raised: #111111; + --bg-input: #1A1A1A; + --fg: #F0EDE6; + --fg-dim: #9A958D; + --gold: #C5A24D; + --gold-dim: #8B7235; + --red: #8B0000; + --red-bright: #CC2200; + --green: #4A7A3A; + --mono: 'SF Mono', 'Cascadia Code', 'Fira Code', 'Consolas', monospace; + --serif: Georgia, 'Times New Roman', 'Noto Serif', serif; + --sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; +} + +/* === RESET === */ + +*, *::before, *::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* === BASE === */ + +html { + font-size: 17px; + line-height: 1.65; +} + +body { + background-color: var(--bg); + color: var(--fg); + font-family: var(--serif); + min-height: 100vh; + display: flex; + justify-content: center; + padding: 2rem 1rem; +} + +main { + max-width: 640px; + width: 100%; +} + +/* === TYPOGRAPHY === */ + +h1, h2, h3 { + font-family: var(--serif); + font-weight: normal; + letter-spacing: 0.05em; +} + +h2 { + font-size: 1.6rem; + color: var(--gold); + text-transform: uppercase; + letter-spacing: 0.1em; + margin-bottom: 1.5rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--gold-dim); +} + +h3 { + font-size: 1.1rem; + color: var(--fg); + margin-bottom: 0.5rem; +} + +p { + margin-bottom: 1rem; +} + +strong { + color: var(--gold); + font-weight: normal; + font-style: italic; +} + +a { + color: var(--gold); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* === HEADER === */ + +header { + margin-bottom: 2.5rem; +} + +.logo-link { + text-decoration: none; +} + +.logo-link:hover { + text-decoration: none; +} + +.logo { + font-size: 2.5rem; + letter-spacing: 0.3em; + text-transform: uppercase; + color: var(--gold); + margin-bottom: 0.1rem; + font-weight: normal; +} + +.subtitle { + font-size: 0.75rem; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--fg-dim); + font-family: var(--mono); +} + +/* === FOOTER / QUOTES === */ + +footer { + margin-top: 3rem; + padding-top: 2rem; + border-top: 1px solid var(--bg-raised); +} + +blockquote { + border-left: 2px solid var(--gold-dim); + padding-left: 1.25rem; + margin: 0; + font-style: italic; + color: var(--fg-dim); + font-size: 0.9rem; + line-height: 1.7; +} + +blockquote cite { + display: block; + margin-top: 0.75rem; + font-style: normal; + font-size: 0.8rem; + color: var(--gold-dim); + font-family: var(--mono); +} + +/* === BUTTONS === */ + +.btn-primary { + display: inline-block; + background-color: var(--gold); + color: var(--bg); + font-family: var(--mono); + font-size: 0.85rem; + font-weight: bold; + letter-spacing: 0.15em; + text-transform: uppercase; + padding: 0.9rem 2rem; + border: none; + cursor: pointer; + text-decoration: none; + margin-top: 1.5rem; + transition: background-color 0.15s; +} + +.btn-primary:hover { + background-color: var(--fg); + text-decoration: none; +} + +.btn-warning { + display: inline-block; + background-color: transparent; + color: var(--red-bright); + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 0.7rem 1.5rem; + border: 1px solid var(--red); + cursor: pointer; + text-decoration: none; + margin-top: 1.5rem; + transition: all 0.15s; +} + +.btn-warning:hover { + background-color: var(--red); + color: var(--fg); + text-decoration: none; +} + +.btn-danger { + display: inline-block; + background-color: var(--red); + color: var(--fg); + font-family: var(--mono); + font-size: 0.85rem; + font-weight: bold; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 0.9rem 2rem; + border: none; + cursor: pointer; + text-decoration: none; + margin-top: 1rem; + transition: background-color 0.15s; +} + +.btn-danger:hover { + background-color: var(--red-bright); +} + +.btn-secondary { + display: inline-block; + color: var(--fg-dim); + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 0.7rem 1.5rem; + border: 1px solid var(--fg-dim); + text-decoration: none; + margin-top: 1rem; + margin-left: 1rem; + transition: all 0.15s; +} + +.btn-secondary:hover { + color: var(--fg); + border-color: var(--fg); + text-decoration: none; +} + +/* === FORMS === */ + +fieldset { + border: none; + margin-bottom: 2rem; + padding: 0; +} + +legend { + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--gold); + padding-bottom: 0.75rem; + margin-bottom: 1rem; + border-bottom: 1px solid var(--bg-raised); + width: 100%; + display: block; +} + +label { + display: block; + font-size: 0.95rem; + margin-bottom: 0.25rem; + color: var(--fg); +} + +input[type="number"], +input[type="text"] { + background: var(--bg-input); + border: none; + border-bottom: 2px solid var(--fg-dim); + color: var(--fg); + font-family: var(--mono); + font-size: 1rem; + padding: 0.5rem 0.5rem; + width: 100%; + transition: border-color 0.15s; +} + +input[type="number"]:focus, +input[type="text"]:focus { + outline: none; + border-bottom-color: var(--gold); +} + +input[type="number"]::placeholder { + color: var(--fg-dim); +} + +.form-row { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.75rem; + gap: 1rem; +} + +.form-row label { + flex: 1; + margin-bottom: 0; +} + +.input-group { + display: flex; + align-items: center; + gap: 0.4rem; +} + +.input-group input[type="number"] { + width: 5rem; + text-align: right; +} + +.unit { + font-family: var(--mono); + font-size: 0.75rem; + color: var(--fg-dim); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +/* === INSTRUCTIONS === */ + +.instruction { + font-size: 0.9rem; + line-height: 1.7; + color: var(--fg); + margin-bottom: 1rem; +} + +.instruction.secondary { + color: var(--fg-dim); + font-size: 0.85rem; + margin-bottom: 2rem; +} + +/* === DASHBOARD === */ + +.dashboard .status { + margin-bottom: 2.5rem; +} + +.status.ready h2 { + color: var(--gold); + border-bottom: none; + padding-bottom: 0; + margin-bottom: 0.75rem; +} + +.status.recovering h2 { + color: var(--red-bright); + border-bottom: none; + padding-bottom: 0; + margin-bottom: 1rem; +} + +.next-workout { + font-size: 1.1rem; + margin-bottom: 0.5rem; +} + +.days-remaining { + display: flex; + align-items: baseline; + gap: 0.75rem; + margin-bottom: 1rem; +} + +.big-number { + font-family: var(--mono); + font-size: 3rem; + color: var(--red-bright); + line-height: 1; +} + +.days-remaining .label { + font-family: var(--mono); + font-size: 0.85rem; + color: var(--fg-dim); + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.next-date { + font-size: 0.95rem; + margin-bottom: 0.5rem; +} + +.recovery-reason { + font-size: 0.85rem; + color: var(--fg-dim); + font-style: italic; +} + +/* === SESSION HISTORY === */ + +.history { + margin-top: 2.5rem; + padding-top: 1.5rem; + border-top: 1px solid var(--bg-raised); +} + +.history h3 { + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--fg-dim); + margin-bottom: 1rem; +} + +.history-entry { + display: flex; + align-items: center; + gap: 1rem; + padding: 0.5rem 0; + border-bottom: 1px solid var(--bg-raised); + font-size: 0.9rem; +} + +.history-date { + font-family: var(--mono); + font-size: 0.8rem; + color: var(--fg-dim); + min-width: 6rem; +} + +.history-day { + color: var(--fg); +} + +.history-badge { + font-family: var(--mono); + font-size: 0.65rem; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 0.15rem 0.4rem; +} + +.history-badge.override { + color: var(--red-bright); + border: 1px solid var(--red); +} + +/* === SESSION / WORKOUT === */ + +.session { + margin-bottom: 2rem; +} + +.exercise-group { + margin-bottom: 2rem; + padding: 0; + border: none; +} + +.exercise-group.superset { + border-left: 3px solid var(--gold-dim); + padding-left: 1.25rem; +} + +.group-label { + font-family: var(--mono); + font-size: 0.7rem; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--gold-dim); + padding: 0; + margin-bottom: 1rem; + border: none; + width: auto; +} + +.exercise-entry { + margin-bottom: 1.5rem; +} + +.exercise-name { + font-size: 1.05rem; + color: var(--fg); + margin-bottom: 0.25rem; + font-weight: normal; +} + +.prescription { + font-family: var(--mono); + font-size: 0.8rem; + color: var(--fg-dim); + margin-bottom: 0.75rem; +} + +.prescription strong { + color: var(--gold); + font-style: normal; +} + +.set-row { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 0.5rem; + padding: 0.4rem 0; +} + +.set-label { + font-family: var(--mono); + font-size: 0.75rem; + color: var(--fg-dim); + text-transform: uppercase; + letter-spacing: 0.05em; + min-width: 3rem; +} + +.set-row .input-group input[type="number"] { + width: 4.5rem; +} + +.failure-check { + display: flex; + align-items: center; + gap: 0.3rem; + font-family: var(--mono); + font-size: 0.7rem; + color: var(--fg-dim); + text-transform: uppercase; + letter-spacing: 0.05em; + cursor: pointer; +} + +.failure-check input[type="checkbox"] { + accent-color: var(--gold); + width: 1rem; + height: 1rem; +} + +/* === SESSION COMPLETE === */ + +.session-complete { + margin-bottom: 2rem; +} + +.progression-results { + margin-bottom: 2rem; +} + +.result-entry { + padding: 0.75rem 0; + border-bottom: 1px solid var(--bg-raised); +} + +.result-entry .exercise-name { + display: block; + font-size: 0.9rem; + color: var(--fg); + margin-bottom: 0.25rem; +} + +.result-entry .result-text { + display: block; + font-size: 0.85rem; + color: var(--fg-dim); + font-style: italic; +} + +.result-entry.increase .result-text { + color: var(--gold); +} + +.result-entry.stall .result-text { + color: var(--red-bright); +} + +.summary { + font-family: var(--mono); + font-size: 0.85rem; + letter-spacing: 0.05em; + margin-bottom: 0.5rem; +} + +.summary.increase { + color: var(--gold); +} + +.summary.stall { + color: var(--red-bright); +} + +.recovery-info { + margin-top: 2rem; + padding-top: 1.5rem; + border-top: 1px solid var(--bg-raised); +} + +.recovery-info h3 { + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--fg-dim); + margin-bottom: 0.75rem; +} + +.recovery-info p { + font-size: 0.9rem; +} + +/* === OVERRIDE PAGE === */ + +.override-page { + margin-bottom: 2rem; +} + +.override-page h2 { + color: var(--red-bright); + border-bottom-color: var(--red); +} + +.warning-block { + border-left: 3px solid var(--red); + padding: 1.25rem 1.25rem; + background: var(--bg-raised); + margin: 1.5rem 0; +} + +.warning-text { + font-size: 0.9rem; + line-height: 1.8; + color: var(--fg); + margin-bottom: 0; +} + +.override-info { + margin: 1.5rem 0; + font-size: 0.9rem; +} + +.override-actions { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 0.5rem; +} + +/* === SETUP PAGE === */ + +.setup fieldset { + margin-bottom: 2.5rem; +} + +.setup legend { + font-size: 0.85rem; +} + +/* === RESPONSIVE === */ + +@media (max-width: 480px) { + html { + font-size: 15px; + } + + body { + padding: 1.5rem 0.75rem; + } + + .logo { + font-size: 2rem; + } + + .form-row { + flex-direction: column; + align-items: flex-start; + gap: 0.4rem; + } + + .set-row { + flex-wrap: wrap; + gap: 0.5rem; + } + + .set-row .input-group input[type="number"] { + width: 4rem; + } + + .override-actions { + flex-direction: column; + align-items: stretch; + } + + .btn-secondary { + margin-left: 0; + text-align: center; + } + + .history-entry { + flex-wrap: wrap; + gap: 0.4rem; + } + + .days-remaining { + flex-direction: column; + gap: 0.25rem; + } +} + + + +/* === EXERCISES PAGE === */ + +.exercises-page { + margin-bottom: 2rem; +} + +.exercise-day { + margin-bottom: 2.5rem; +} + +.day-header { + font-family: var(--mono); + font-size: 0.85rem; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--gold); + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--bg-raised); +} + +.exercise-slot { + padding: 0.75rem 0; + border-bottom: 1px solid var(--bg-raised); +} + +.slot-current { + margin-bottom: 0.5rem; +} + +.slot-canonical { + color: var(--fg); + font-size: 0.95rem; +} + +.slot-active { + color: var(--gold); + font-size: 0.9rem; + font-style: italic; + margin-left: 0.5rem; +} + +.swap-form { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.swap-form select { + background: var(--bg-input); + border: none; + border-bottom: 2px solid var(--fg-dim); + color: var(--fg); + font-family: var(--mono); + font-size: 0.8rem; + padding: 0.4rem 0.5rem; + flex: 1; + max-width: 20rem; +} + +.swap-form select:focus { + outline: none; + border-bottom-color: var(--gold); +} + +.btn-swap { + background: transparent; + color: var(--gold-dim); + font-family: var(--mono); + font-size: 0.7rem; + letter-spacing: 0.1em; + text-transform: uppercase; + padding: 0.35rem 0.75rem; + border: 1px solid var(--gold-dim); + cursor: pointer; + transition: all 0.15s; +} + +.btn-swap:hover { + color: var(--gold); + border-color: var(--gold); +} + + + +/* === NAV LINKS === */ + +.nav-links { + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--bg-raised); +} + +.nav-links a { + font-family: var(--mono); + font-size: 0.8rem; + letter-spacing: 0.05em; + color: var(--fg-dim); +} + +.nav-links a:hover { + color: var(--gold); +} + + + +/* === SETUP LEVEL SELECTION === */ + +.level-choices { + display: flex; + flex-direction: column; + gap: 1rem; + margin: 2rem 0; +} + +.level-choice { + cursor: pointer; + display: block; +} + +.level-choice input[type="radio"] { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.choice-card { + border: 2px solid var(--bg-raised); + padding: 1.25rem 1.5rem; + transition: border-color 0.15s, background-color 0.15s; +} + +.level-choice input[type="radio"]:checked + .choice-card { + border-color: var(--gold); + background-color: var(--bg-raised); +} + +.level-choice:hover .choice-card { + border-color: var(--gold-dim); +} + +.choice-title { + display: block; + font-family: var(--mono); + font-size: 0.9rem; + letter-spacing: 0.15em; + color: var(--gold); + margin-bottom: 0.4rem; +} + +.choice-desc { + display: block; + font-size: 0.85rem; + color: var(--fg-dim); + line-height: 1.6; +} |