From e9d4392b8c5dd3f89e388a1f5ea616c2b21cca0f Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Sat, 27 Jun 2026 13:14:13 -0700 Subject: [PATCH] privacy/terms/support/docs --- config.py | 2 +- routes/public.py | 12 +- static/css/style.css | 198 +++++++++++++++++++++++ templates/base.html | 6 +- templates/privacy.html | 115 ++++++++++++++ templates/support.html | 351 +++++++++++++++++++++++++++++++++++++++++ templates/terms.html | 104 ++++++++++++ 7 files changed, 783 insertions(+), 5 deletions(-) create mode 100644 templates/privacy.html create mode 100644 templates/support.html create mode 100644 templates/terms.html diff --git a/config.py b/config.py index 420cd80..fa31513 100644 --- a/config.py +++ b/config.py @@ -9,7 +9,7 @@ DATA_PATH = BASE_DIR / "data" / "entries.csv" DEFAULT_DATABASE_URL = f"sqlite:///{BASE_DIR / 'data' / 'boker-dev.sqlite3'}" ELIGIBLE_MIN_SESSIONS = 3 -APP_VERSION = "2.5.16" +APP_VERSION = "2.5.17" def load_local_env(env_path: Path) -> None: diff --git a/routes/public.py b/routes/public.py index c2371be..90ef5f8 100644 --- a/routes/public.py +++ b/routes/public.py @@ -25,7 +25,17 @@ def home(): @public_bp.get("/help") def help(): - return render_template("docs.html") + return render_template("support.html") + + +@public_bp.get("/privacy") +def privacy(): + return render_template("privacy.html") + + +@public_bp.get("/terms") +def terms(): + return render_template("terms.html") @public_bp.get("/explore") diff --git a/static/css/style.css b/static/css/style.css index f548e68..8310268 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -5824,3 +5824,201 @@ select.control { cursor: pointer; } background: rgba(10,9,18,.9); padding: 11px 16px; } + +/* ================================================================ + LEGAL DOCUMENT PAGES (privacy, terms) + ================================================================ */ +.legal-doc { + max-width: 740px; + margin: 0 auto; + padding: clamp(40px, 5vw, 72px) 0 clamp(48px, 6vw, 80px); +} +.legal-doc__header { + margin-bottom: clamp(32px, 4vw, 52px); + padding-bottom: clamp(24px, 3vw, 36px); + border-bottom: 1px solid var(--divider); +} +.legal-doc__title { + font-size: clamp(26px, 3.5vw, 40px); + font-weight: 800; + color: var(--text-strong); + letter-spacing: -.04em; + line-height: 1.1; + margin: 10px 0 12px; +} +.legal-doc__meta { + font-size: .8125rem; + color: var(--text-muted); + margin: 0; +} +.legal-doc__meta strong { color: var(--faint-2); font-weight: 500; } +.legal-doc__body { font-size: .9375rem; line-height: 1.8; color: var(--text-2); } +.legal-doc__body h2 { + font-size: 1rem; + font-weight: 700; + color: var(--text-strong); + letter-spacing: -.015em; + margin: clamp(32px, 4vw, 48px) 0 12px; + padding-bottom: 8px; + border-bottom: 1px solid var(--divider); +} +.legal-doc__body h3 { + font-size: .875rem; + font-weight: 600; + color: var(--text); + margin: 20px 0 8px; +} +.legal-doc__body p { margin: 0 0 14px; } +.legal-doc__body ul { + margin: 0 0 14px; + padding-left: 20px; + display: grid; + gap: 6px; +} +.legal-doc__body ul li { color: var(--text-2); } +.legal-doc__body a { + color: var(--accent); + text-decoration: none; + transition: opacity .13s; +} +.legal-doc__body a:hover { opacity: .75; } +.legal-doc__body code { + font-family: var(--font-mono); + font-size: .8125rem; + background: var(--surface-raised); + border: 1px solid var(--border); + border-radius: 4px; + padding: 1px 6px; + color: var(--text); +} +.legal-doc__body em { color: var(--text); font-style: italic; } +.legal-doc__body strong { color: var(--text-strong); font-weight: 600; } + +/* ================================================================ + SUPPORT / HELP PAGE + ================================================================ */ +.support-pg { + max-width: 820px; + margin: 0 auto; + padding: clamp(40px, 5vw, 72px) 0 0; +} +.support-pg__header { + margin-bottom: clamp(36px, 5vw, 60px); +} +.support-pg__title { + font-size: clamp(26px, 3.5vw, 40px); + font-weight: 800; + color: var(--text-strong); + letter-spacing: -.04em; + line-height: 1.1; + margin: 10px 0 12px; +} +.support-pg__sub { + font-size: .9375rem; + color: var(--text-muted); + margin: 0; + max-width: 540px; +} +.support-pg__body { display: grid; gap: clamp(28px, 4vw, 48px); } + +/* FAQ section grouping */ +.faq-section {} +.faq-section__title { + font-size: .6875rem; + font-family: var(--font-mono); + letter-spacing: .13em; + text-transform: uppercase; + color: var(--accent); + margin: 0 0 14px; + padding-bottom: 10px; + border-bottom: 1px solid var(--divider); +} + +/* FAQ accordion item */ +.faq-item { + border-bottom: 1px solid var(--divider); +} +.faq-item__q { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 14px 0; + font-size: .9375rem; + font-weight: 600; + color: var(--text); + cursor: pointer; + list-style: none; + user-select: none; + transition: color .13s; +} +.faq-item__q::-webkit-details-marker { display: none; } +.faq-item__q::after { + content: "+"; + font-size: 1.125rem; + font-weight: 400; + color: var(--text-muted); + flex-shrink: 0; + transition: transform .2s, color .13s; +} +.faq-item[open] > .faq-item__q { color: var(--text-strong); } +.faq-item[open] > .faq-item__q::after { + content: "−"; + color: var(--accent); +} +.faq-item__q:hover { color: var(--text-strong); } +.faq-item__a { + padding: 0 0 18px; + font-size: .9rem; + line-height: 1.78; + color: var(--text-2); +} +.faq-item__a p { margin: 0 0 10px; } +.faq-item__a p:last-child { margin-bottom: 0; } +.faq-item__a ul { + margin: 8px 0 10px; + padding-left: 20px; + display: grid; + gap: 5px; +} +.faq-item__a a { + color: var(--accent); + text-decoration: none; + transition: opacity .13s; +} +.faq-item__a a:hover { opacity: .75; } +.faq-item__a strong { color: var(--text-strong); font-weight: 600; } +.faq-item__a em { font-style: italic; color: var(--text); } + +/* Contact section */ +.support-contact { + margin-top: clamp(48px, 6vw, 80px); + border-top: 1px solid var(--divider); + padding: clamp(36px, 5vw, 60px) 0 clamp(48px, 6vw, 72px); +} +.support-contact__inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 32px; + flex-wrap: wrap; +} +.support-contact__title { + font-size: clamp(18px, 2.2vw, 26px); + font-weight: 800; + color: var(--text-strong); + letter-spacing: -.03em; + margin: 0 0 8px; +} +.support-contact__body { + font-size: .875rem; + color: var(--text-muted); + line-height: 1.65; + margin: 0; + max-width: 480px; +} +.support-contact__btn { flex-shrink: 0; } +@media (max-width: 580px) { + .support-contact__inner { flex-direction: column; align-items: flex-start; } + .support-contact__btn { width: 100%; text-align: center; } +} diff --git a/templates/base.html b/templates/base.html index 3fd23af..52e4214 100644 --- a/templates/base.html +++ b/templates/base.html @@ -74,9 +74,9 @@