diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 0d68171..fad2d49 100644 Binary files a/__pycache__/app.cpython-313.pyc and b/__pycache__/app.cpython-313.pyc differ diff --git a/app.py b/app.py index 20f64f6..29b0c62 100644 --- a/app.py +++ b/app.py @@ -88,7 +88,7 @@ def create_app(): response.headers['X-Content-Type-Options'] = 'nosniff' response.headers['X-Frame-Options'] = 'DENY' response.headers['X-XSS-Protection'] = '1; mode=block' - response.headers['Content-Security-Policy'] = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" + response.headers['Content-Security-Policy'] = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; font-src 'self' https://cdnjs.cloudflare.com; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none';" response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains' return response diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index 8e1f132..0d34403 100644 Binary files a/instance/team_tryouts.db and b/instance/team_tryouts.db differ diff --git a/static/css/style.css b/static/css/style.css index 2accf6f..61ddc4c 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -911,8 +911,26 @@ a:hover { color: var(--primary-dark); } display: block; } -.small { - font-size: 0.85rem; +.gamertag-input-row { + margin-bottom: 15px; + padding: 15px; + background: var(--gray-50); + border-radius: var(--radius-sm); +} + +.gamertag-input-row h5 { + margin-top: 0; + margin-bottom: 10px; + color: var(--gray-900); +} + +/* Dark mode styles for gamertag input rows */ +[data-theme="dark"] .gamertag-input-row { + background: var(--bg-tertiary); +} + +[data-theme="dark"] .gamertag-input-row h5 { + color: var(--text-primary); } .header-actions { @@ -922,6 +940,70 @@ a:hover { color: var(--primary-dark); } margin-left: auto; } +/* Disponibility Time Blocks (for player profile edit) */ +.disponibility-grid { + display: flex; + flex-direction: column; + gap: 15px; +} + +.disponibility-day-row { + display: flex; + align-items: center; + margin-bottom: 5px; +} + +.disponibility-day-label { + width: 100px; + font-weight: bold; +} + +.disponibility-time-blocks { + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.disponibility-time-block { + width: 80px; + height: 32px; + border-radius: 4px; + border: 1px solid var(--gray-300); + background: var(--gray-100); + text-align: center; + line-height: 32px; + font-size: 12px; + cursor: pointer; + user-select: none; + transition: all 0.2s; +} + +.disponibility-time-block:hover { + background: var(--gray-200); +} + +.disponibility-time-block.selected { + background: var(--success); + color: white; + border-color: #059669; +} + +[data-theme="dark"] .disponibility-time-block { + background: var(--bg-tertiary); + border-color: var(--border-color); +} + +[data-theme="dark"] .disponibility-time-block:hover { + background: var(--bg-secondary); +} + +/* Keep .selected time blocks green in dark mode - must come after the generic rule */ +[data-theme="dark"] .disponibility-time-block.selected { + background: var(--success) !important; + color: white !important; + border-color: #059669 !important; +} + /* Utilities */ .hidden { display: none !important; } .text-center { text-align: center; } @@ -1171,42 +1253,41 @@ a:hover { color: var(--primary-dark); } color: var(--gray-600); } -/* Dark mode styles for time blocks */ -[data-theme="dark"] .merged-disponibility-time-block.high-availability { - background: #10b981; - color: white; - border-color: #10b981; -} - -[data-theme="dark"] .merged-disponibility-time-block.medium-availability { - background: #f59e0b; - color: white; - border-color: #f59e0b; -} - -[data-theme="dark"] .merged-disponibility-time-block.low-availability { - background: #374151; - color: #9ca3af; - border-color: #4b5563; -} - -[data-theme="dark"] .merged-disponibility-time-block.selected { - background: #10b981; - color: white; - border-color: #10b981; - box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.5); -} - +/* Dark mode styles for time blocks - generic rule first */ [data-theme="dark"] .merged-disponibility-time-block { - background: #374151; - color: #e5e7eb; - border-color: #4b5563; + background: var(--bg-tertiary); + color: var(--text-secondary); + border-color: var(--border-color); } [data-theme="dark"] .merged-disponibility-time-block:hover { - background: #4b5563; - transform: scale(1.05); - box-shadow: var(--shadow-md); + background: var(--bg-secondary); +} + +/* Then specific states override the generic rule */ +[data-theme="dark"] .merged-disponibility-time-block.selected { + background: var(--success) !important; + color: white !important; + border-color: var(--success) !important; + box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.5); +} + +[data-theme="dark"] .merged-disponibility-time-block.high-availability { + background: var(--success); + color: white; + border-color: var(--success); +} + +[data-theme="dark"] .merged-disponibility-time-block.medium-availability { + background: var(--warning); + color: white; + border-color: var(--warning); +} + +[data-theme="dark"] .merged-disponibility-time-block.low-availability { + background: var(--gray-600); + color: var(--gray-300); + border-color: var(--gray-500); } .merged-disponibility-count { @@ -1523,23 +1604,7 @@ a:hover { color: var(--primary-dark); } color: var(--text-primary); } -[data-theme="dark"] .merged-disponibility-time-block { - background: var(--bg-tertiary); - border-color: var(--border-color); - color: var(--text-secondary); -} - -[data-theme="dark"] .merged-disponibility-time-block:hover { - background: var(--bg-secondary); -} - -[data-theme="dark"] .merged-disponibility-selected-display { - background: var(--bg-tertiary); -} - -[data-theme="dark"] .randomize-section { - background: var(--bg-tertiary); -} +/* Note: merged-disponibility-time-block dark styles are defined above with proper ordering */ [data-theme="dark"] .btn-secondary { background: var(--bg-tertiary); diff --git a/templates/pages/edit_profile.html b/templates/pages/edit_profile.html index 83b4e2e..8e29578 100644 --- a/templates/pages/edit_profile.html +++ b/templates/pages/edit_profile.html @@ -50,9 +50,9 @@

Enter your gamertag for each selected game to link to your Tracker Network profile.

{% for game in esport_games %} - {% set gamertag_data = user_gamertags.get(game) %} -